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

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

Step Functionsを使ってみた

# Step Functions使ってみた
仕事でStep Functionsを利用することになり、既に別サービスが稼働しているため私用パソコン・個人AWSアカウントを用いて動作の確認をしてみました。

## ソースコード一式
私のGitHubの下記リポジトリに保存しております。
設定や事前準備は`src/README.md`を確認してください。
(AWS認証情報などは消しております)
[aws-step_functions](https://github.com/k-genki0913/aws-step_functions)

作成したStep Functionsのワークフローは以下になります。

### Step Functionsに関して調べたこと
※全体のソースコードはリポジトリを見て下さい。

#### ▪️sam te

元記事を表示

【AWS】Lambdaで「StartQuery へのリクエスト中にエラーが発生しました」と表示された場合

# 概要

AWS LambdaをCloudformationで作成した際、
「StartQuery へのリクエスト中にエラーが発生しました」
というエラーに遭遇しました。

原因と解決法を紹介します。

# エラー概要

以下でCF実行。

“`yaml
LambdaRole:
Type: AWS::IAM::Role
Properties:
AssumeRolePolicyDocument:
Version: ‘2012-10-17’
Statement:

Effect: Allow
Principal:
Service:
– sns.amazonaws.com
– lambda.amazonaws.com
Action:
– sts:AssumeRole
Path: “/”
R

元記事を表示

ローカルのAWS Lambda開発環境を整える(hot reload)

ローカルでLambdaの開発をやるために環境を整備したのでやったことを残しておきます。

zenn にも全く同じ内容を書いています。

https://zenn.dev/imishinist/articles/8ff24429f0eb41

今回作成したサンプルの全体コードはこちらのリポジトリです。

https://github.com/imishinist/lambda-sample

## できること
1. ローカルに立ち上げたDockerでAWS Lambdaを動かす
2. 手元からcurlでLambdaを呼び出す
3. ビルド時に自動でLambdaを更新する(hot-reload)

### 動かし方

Goのコード(Lambdaのハンドラ)をビルドしたいときは以下の `make` を実行する。

“`bash
make build-lambda
“`

Lambdaを立ち上げたいときは `docker-compose` で起動する。

“`bash
docker compose up -d –build
“`

## 仕組み

### AWS Lambda を

元記事を表示

S3書き込みするLambda関数のDockerイメージを作成しEventBridgeで定刻実行させる「サーバレスバッチ」をTerraformで自動構築する

忙しくてなかなか時間取れない( ; ; )

掲題のようなニーズってよくありそうなので公開しておきます。

# 概要

https://github.com/yagrush/serverless-scheduled-batch-by-terraform

terraformで以下を自動構築するための一式。

* tfstate管理をS3, tfstate_lock管理をDynamoDBに任せる(のに必要な環境を作成する)
* S3バケットを作る(こちらは業務処理用途のバケット)
* ECRにlambdaのdockerイメージを登録する
* S3にオブジェクトを書き込むlambda関数をdockerイメージから作成する
* EventBridgeで毎分lambda関数を実行するようスケジューリングする

ちなみにlambda関数の中身は `lambda/foo` 以下にpythonプログラム一式があります。
そちらをいじる場合は `lambda/foo` をワークディレクトリとしてVSCodeなどで開いて作業して下さい。

# 自分が試した環境(&必要なソフトウェア、設定)
* M2,

元記事を表示

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

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

元記事を表示

OTHERカテゴリの最新記事