Lambda関連のことを調べてみた

Lambda関連のことを調べてみた
目次

localstackについて理解する(lambda版)

# ローカルスタックとは
localstcakとは、AWSのクラウドサービスをローカル環境でエミュレートするためのツールです。

例えば,AWSを使用したサービスを開発している際に,AWSを使用したapiなどのテストを行いたい時があります.その時に,実際にAWSのサービスを使用するとコストがかかってしまうため,ローカル環境でAWSのサービスをエミュレートすることで,コストを抑えることができます.

:::note info
mockとやっていることは同じなので,コスト削減以外にもテストを行う際は使うと便利です!!
:::

# ローカルスタックの構成
ローカルスタックは,数多くのAWSサービスをエミュレートすることができます.
今回はlambdaに関してやっていこうと思います.

:::note info
s3のみを使う場合ではminioを使う方が便利かも知れません.
:::

まずはこのドキュメントを参考にして,作っていきます.
環境はdockerを使って構築します.

https://docs.localstack.cloud/user-guide/aws/lambda/

#

元記事を表示

CloudFormationとPyplateを使ってSecurityGroupのIngressに指定したIPアドレスを登録しよう!

## 概要
CloudFormationマクロの一つであるPyplateを使うことでCloudFormationテンプレート(yaml)内にPythonのコードを実行することができます
今回はPyplateを使ってSecurityGroupのIngressに指定したIPアドレスを登録する方法を例に解説します

## 前提
– VPCを作成済み
– 今回はPythonを使用します

## Lambdaを格納するS3バケットの作成
S3内のzipファイルからLambdaを実行するためのS3バケットを作成します
S3内のファイル群は公開したくないのでPublic Accessを全てブロックします

“`lambda-archive-s3.yml
AWSTemplateFormatVersion: 2010-09-09
Description: “S3 Bucket Stack For Account Setup”

# ————————————-
# Metadata
# ———————————–

元記事を表示

S3へアップロードされたことをトリガーに実行されるLambdaをCloudFormationで構築しよう!

## 概要
今回はS3へzipファイルがアップロードされたことをトリガーにzipファイルをLambdaで解凍する時に使用するS3とLambdaをCloudFormationを使って構築していきたいと思います

## 前提
– VPCを作成済み
– 今回はLambda用のPrivate Subnetを使用するのでNATゲートウェイを構築済み

## Lambdaを格納するS3バケットの作成
S3内のzipファイルからLambdaを実行するためのS3バケットを作成します
S3内のファイル群は公開したくないのでPublic Accessを全てブロックします

“`lambda-archive-s3.yml
AWSTemplateFormatVersion: 2010-09-09
Description: “S3 Bucket Stack For Account Setup”

# ————————————-
# Metadata
# ————————————-
Metadata:
AWS::

元記事を表示

AWS LambdaをDocker化する際の注意点と学びの備忘録

## はじめに
AWS Lambdaを使ってデプロイするときに、
Dockerイメージを使って、デプロイしたいケースがありました。

すでに、動いているLambdaをLambda Dockerへ変更する際に、
つまずきポイントがあったので、備忘録として、残しておきます

## Lambdaでコンテナイメージを利用とは?

Lambdaには、通常のLambda(ソースコードのみを記述するタイプ)と
Dockerイメージを利用するパターンが存在する
※Dockerイメージは、ECRから参照し、Lambda上で実行が出来る

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3747609/161d2b17-1359-8461-61be-afac9ba916b7.png)

### なぜDockerイメージを使うのか?
通常のLambdaとLambda Dockerには、仕様の一部に違う部分が存在している

今回、Lambda Dockerを利用したいと考えたのは、
通常のLambdaよりも、大き

元記事を表示

Nuxt3アプリをLambdaにデプロイする方法

– nuxt v3.11
– ServerlessFramework v3.38.0

## はじめに
Nuxt3で作成したアプリは比較的簡単にLambdaにデプロイすることができます。
ここではデプロイする方法の一例を紹介します。

## Nuxt3 ビルド設定

`nuxt.config.ts`にAWS Lambda用のビルド設定を追加します。

“`typescript
export default defineNuxtConfig({
// …
nitro: {
preset: ‘aws-lambda’,
serveStatic: true,
}
})
“`

静的ファイルをS3などに配置する場合は`serveStatic`を`false`にします。

## Serverless Framework
デプロイにはServerlessFrameworkを使用します。

### インストール
“` shell
npm install -g serverless
“`

### AWS IAM ユーザーを設定
serverlessがAWSにアク

元記事を表示

【aws】lambda layerを使ってlambdaにモジュールをインポートする

## はじめに
AWS Lambdaではawsが提供しているもの以外のライブラリを使いたい場合、事前にライブラリをアップロードする必要があります。
(私はそれを知らずに`luxon is not defined`エラーを出しました😅)
今回はその方法を記録したいと思います。

## 事前準備
– npmのインストール
– awsコマンドのインストール([こちらのAWS公式サイト](https://repost.aws/ja/knowledge-center/lambda-import-module-error-nodejs)が参考になりました。)

## layerのアップロード
以下の手順はお使いのPCのCLIで実行してください。
#### 1.nodejsフォルダーを作成
“`shell
$ mkdir nodejs
“`

#### 2.利用したいライブラリをnodejsフォルダーにインストール
“`shell
$ cd nodejs
$ npm init
$ npm install –save ライブラリ名
“`

#### 3.nodejsフォルダを圧縮
“`sh

元記事を表示

【aws】CloudWatchを用いてlambdaのエラーを確認する

## はじめに
私はaws初学者であり、現在awsのlambda, GateWay, DynamoDBを用いてAPIを開発しています。作成したAPIを叩いたとき、`{“message”: “Internal server error”} `というエラーが現れました。このメッセージだけでは、具体的なエラーの原因がわかりません。調べたところ、Lambdaで発生した実行時のエラーはCloudWatchで確認できることがわかりました。今回はその確認方法をまとめて記録します。

## CloudWatchを開く
lambdaの`モニタリング`タブから`CloudWatch ログを表示`を選択し、`CloudWatch/ロググループ/Catfeeder`にアクセスすることができます(手動でCloudWatchを開いてロググループ→Catfeederでアクセスすることもできます)

![1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2984024/c3d85fd8-1102-ea2a-8d8c-afea817c6

元記事を表示

Excelのlambda使って3つ以上のセルの一致を確認するユーザ定義関数作った

Excel触っているとたくさん(3つ以上)のセルが一致しているかどうかを数式で書きたい場面出てこないだろうか、自分はたまにある。まあ5,6個程度ならAND関数を連結してもいいんだけど、もっと数が増えると?ググると解決策は割と簡単に出てくるんだが、どうもExcelの数式はちょっと複雑になるともう何だかよく分からなくなる。

そこでふとそう言えばlambda使ってユーザ定義関数作れないだろうかと思い作ってみた。
作り方の基本はこれもググれば出てくるので割愛。

名前の管理画面で以下のように入れる。使うのはeqの方。

| 名前 | 参照範囲 |
|:-:|:-|
| eqfn | =LAMBDA(x,y, IF(x=y, x, FALSE)) |
| eq | =LAMBDA(cellrange, REDUCE(,cellrange,eqfn) |

テスト。以下のような値が入ってる場合
| A1 | B1 | C1 |
|:-:|:-:|:-:|
| 1 | 2 | 3 |

“`
=eq(A1:C1)
-> FALSE
“`
こちらだと、
| A1 | B1 | C

元記事を表示

AWS Lambdaで、LINE Botにローディングアニメーションを表示

# ローディングアニメーション
Messaging APIに、ローディングアニメーション表示機能が追加されました。

https://developers.line.biz/ja/news/2024/04/17/loading-indicator/

メッセージを送信してから返答が来るまでの間、指定した秒数だけローディングアニメーションが表示されます。また、表示中に返答が来ると自動的に消えます。

loading_animation.gif

# 実装
既にGASで実装した記事は出ているため、今回は、AWS Lambdaで実装しました。
ローディングアニメーションの部分だけ抜き出すと下記のようになります。

UserIDは環境変数から取得しています。

“`lambda.py
# LINE Botの設定
li

元記事を表示

X-RayはpytestとFlameGraphを組み合わせると便利

## この記事を3行で

– AWS X-Rayをpytestで使うと便利
– 関数の通過や例外の発生をassertでテストできる
– X-Rayの可視化にFlameGraphを使えば、各関数の実行時間が分かりやすい

## この記事を書く理由

AWS X-Rayが便利なので、AWS環境へのデプロイの前でも使える使い方を紹介したい。

## 完成後の挙動

この記事で作成する単体テストを、Pytestで実行すると、

![execute.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/233180/f3d309e4-2737-8b2a-f4b3-ff0cbd87fa3b.png)

単体テストが吐き出したX-Rayのデータをもとに、下のようなグラフがローカルのPC上に作成されます。

![flamegraph.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/233180/009b688e-09db-f109-40ee-b4

元記事を表示

インターホンとLINEを連携するためにFlashAirをひっぱりだしてみた

## はじめに

先日、家に私一人の時に部屋で籠って仕事をしていたところ、インターホンが鳴ったことに気づかずAmazonからの荷物を受け取り損ねてしまいました。
私の仕事部屋にはリビングで鳴っているインターホンの音が届かないため、どうにかして仕事部屋に居ながらインターホンに気づくことができないかということで今回の仕組みを作ってみました。

## 使ったもの

– FlashAir W-03
– Amazon API Gateway
– AWS Lambda
– LINE Messaging API
– LINE BOT SDK
– TypeScript

### FlashAirについて

今回の仕組みの要ともいえるデバイスで、無線LAN通信機能を搭載したSDカードというニッチな製品です。
[初代FlashAirは2012年2月にリリース](https://www.global.toshiba/jp/news/corporate/2011/09/pr0101.html)とのこと。TOSHIBA(現在のKIOXIA)からの発売でした。
残念なことに既に生産が終わっているとのことですが、こ

元記事を表示

AWSでLlama3を使えるようにする

# 1. 初めに
誰しもLlama3を使ってAWSでChatbotを作りたいなと三日に一回は思っているはず。
**Llama3**を**Groq API**経由で使えるようにしてみたので備忘録も兼ねて書く。

**Chat GPTでいいやんと思ったそこのあなた**
LLama 3はChatGPTよりも数倍早く返ってくるかつ、Llama3の400bモデルが来た時にすぐ乗り換えられるように備えておくことは大切!なので、やっておいて損はないかなと思います。

# 2. 参考にしたもの
[AWS Lambda(Python)からOpenAIのGPT4のAPIを呼び出してみた](https://qiita.com/nabata/items/903a2ebff8e44516598e)
とりあえず類似なものとして、ChatGPTをAWS Lambdaから呼び出すものを参考にした。感謝!
GroqのAPI Documentを見てもわかるが大体ChatGPT構造と同じなので、参考にしやすいかなと思った。

# 3. レイヤーの設定
まず、AWSのLambdaにgroqのパッケージを入れる必要があるため、

元記事を表示

AWS APIGateway(HTTP API)とCognitoを統合

# やりたいこと
フロントエンド(ここではReactアプリ)から、APIGateway経由でLambda関数を実行するときにCognitoで認証されたユーザーからのリクエストのみをAPIGatewayで受け付けるようにしたい
※備忘録に近い内容です

# 作成手順
###### ①Lambda関数を作成
何でも良いのでLambda関数を作成
とりあえず作成したときに出来上がるHelloLambdaのままとした
(ここでやりたいことはLambdaの中身は関係ないので)
“`
export const handler = async (event) => {
// TODO implement
const response = {
statusCode: 200,
body: JSON.stringify(‘Hello from Lambda!’),
};
return response;
};
“`

###### ②APIGateway作成
・HTTP APIを作成
・Authorization設定
 オーソライザーのタイプ:JWT
 IDソース:$

元記事を表示

インフラエンジニアさんに手引してもらいながらlambdaのIP固定化をやってみたときのメモ(NATゲートウェイ不使用)

## 概要

LambdaのIPをElastic IPを使って固定化した話をメモ的にまとめる

## 前提

下記の記事を参考に、インフラエンジニアさんに手引してもらいながらlambdaのIP固定化をしてみた

https://zenn.dev/nix/articles/7dd29a1e9edc55

## 内容

### lambdaに紐づくネットワークインターフェースを探す

どうやらパブリックなVPCにlambdaが設置されている場合、「ネットワークインターフェイス」が自動的に作られるらしい。下記の手順でネットワークインターフェースを探した。(パブリックなVPCにlambdaが設置されていないとネットワークインターフェイスはつくられないと思う)

1. マネジメントコンソールでEC2を開く
1. サイドバーで「ネットワークインターフェイス」を開く
1. 「lambda」で検索をかける
1. ヒットした内容の「説明」にlambda名が記載されているはずなので見つける
1. lambdaに紐づくネットワークインターフェイスの「ネットワークインターフェイス ID」と「プライベートIPv

元記事を表示

S3へアップロードされたことをトリガーにzipファイルをLambdaを使って解凍しよう!

## 概要
S3へzipファイルがアップロードされたことをトリガーにzipファイルを解凍するLambdaを作成する方法について解説していきたいと思います

## 前提
– Pythonで解凍処理を作成します

## Lambdaの作成
zipファイルを解凍するLambdaを新規作成します
![スクリーンショット 2024-04-22 15.45.02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/625980/79bf32d3-5dd4-6a2e-9427-396037764f1e.png)

今回は基本的なLambdaアクセス権限で新しいロールを作成します
![スクリーンショット 2024-05-10 13.46.47.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/625980/0a239a10-2092-415c-06d0-a55d9687c233.png)

## zipファイルを解凍する処理の作成
まず、S3へz

元記事を表示

Lambdaのセッション管理、ElastiCacheとDynamoDBの比較

# ElastiCacheを使用したセッション管理
## ユースケース
・高速なデータアクセスが必要な場合。
・データが頻繁に変更されるが、一時的なもので永続性が必要ない場合。
・キャッシュのようにデータをキャッシュする場合。

## メリット:
・インメモリデータストアであるため、高速なデータアクセスが可能。
・データが永続的に保存されるため、再起動後もデータが保持される。
・キャッシュとしての利用が容易で、既存のアプリケーションに簡単に統合できる。

## デメリット
・インメモリデータストアであるため、データがメモリにのみ保存され、データのサイズに制限がある。
・コストが高くなる可能性があり、大量のデータを保存する場合は注意が必要。

# DynamoDBを使用したセッション管理
## ユースケース
・データの永続性が必要な場合。
・データの大規模な保存が必要な場合。
・セッションデータを他のデータと一緒に格納したい場合。

## メリット
・データが永続的に保存され、大規模なデータを扱うことができる。
・スケーラビリティが高く、大量のリクエストを処理できる。
・サーバーレスアプ

元記事を表示

Lambda関数の古いバージョンを一括削除するスクリプト

# 背景
 AWSのSAMテンプレートを利用しており、AutoPublishAliasプロパティを使い、Lambda関数にエイリアスとバージョンを設定しています。この場合、関数を更新するたびに新しいバージョンが作られるため、これを何度も繰り返した場合、気づかないうちにLambdaのストレージの制限である75GBを超えてしまう恐れがあります。
 現状、SAMのプロパティに古いバージョンのLambdaを削除するような設定は無く、[Issues](https://github.com/aws/serverless-application-model/issues/2719)を見る限り今後も実装されなさそうであるため、独自で古いバージョンのLambdaの削除を行う必要があります。
 今回は、問題が発生した場合にすぐに戻せるよう、最新から数バージョンは残しておきつつ、それ以前の古いバージョンは削除するようなスクリプトを作成しました。

# スクリプト

“`bash:delete-lambda-old-version.sh
#! /bin/bash
# 古いバージョンのLambdaを削除

元記事を表示

Lambdaを使うときのセッション管理方法

# LambdaはStatelessアーキテクチャ
Lambda関数は通常、ステートレスなアーキテクチャで実装されます。これは、各リクエストが独立しており、Lambda関数間で状態を共有しないことを意味します。この場合、セッション管理はクライアント側で行われることが一般的です。クライアントは、認証トークンやセッションIDを使用して状態を管理し、必要に応じてそれらをリクエストに含めます。

# 外部のセッション管理サービスを使用する
外部のセッション管理サービス(例えば、Amazon CognitoやAuth0など)を使用して、ユーザーの認証とセッション管理を行うことができます。これらのサービスは、ユーザーの認証情報やセッション情報を安全に管理し、Lambda関数からそれらの情報にアクセスすることができます。

# ステートフルなLambda関数
一部のユースケースでは、ステートフルなLambda関数が必要な場合があります。この場合、Lambda関数内でセッション状態を保持する必要があります。例えば、DynamoDBやElastiCacheなどのデータストアを使用して、セッション情報を保

元記事を表示

CloudWatch アラームを Redmine のチケットに起票する

# やりたいこと

CloudWatch アラームが ALARM 状態になったら Redmine のチケットに起票したい。

なお、Redmine チケットは次のようにしたい。

– プロジェクト: **test_project**
– トラッカー: **Alarm**
– チケットの優先度
– CloudWatch アラーム名に Critical が含まれる場合は、優先度 **Urgent** とする
– CloudWatch アラーム名に Error が含まれる場合は、優先度 **High** とする

# どうやるか?

Redmine API が提供されているので、これを参考に行う。

https://www.redmine.org/projects/redmine/wiki/Rest_api

# 構成図

実際は、CloudWatch metrics のアクションとして、Lambda を指定しますが、今回は Lamda からテストイベントを作成し実行させるので、CloudWatch metrics の作成は手順から省いています。
![redmine.png](h

元記事を表示

AWS Cloud9(Django)+S3+SQS+Lambda+SNS環境構築_目次

こんにちは。
株式会社クラスアクト インフラストラクチャ事業部の大塚です。

この記事は自分が連載(?)している『AWS Cloud9(Django)+S3+SQS+Lambda+SNS環境を作ってS3にアップロードされた時、メール通知をする』という記事をまとめた記事となります。

# 構築する環境

以下の環境を右から順番に連携させていきます。

![aws-django01-ページ6.drawio.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3219385/426843a2-5d28-7283-96dc-22fb1cbe3e34.png)

最終的にCloud9に構築した以下のWebアプリからS3にデータをアップロードすることを可能にし、その際に自動でメール通知が飛んでくるような環境を作っていきます。

![2024050811.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3219385/42fe1f99-36d

元記事を表示

OTHERカテゴリの最新記事