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

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

100本ノックしてみたい中堅エンジニア 【AWS】~Lambdaについて利用シーンをいくつか紹介~ 4/100

# はじめに

本記事ではLambdaをどんな利用シーンで使うか、ケース毎にいくつか紹介します。
※具体的に作ったり、詳細な機能の説明はしませんがご了承ください

Lambdaの機能については、[こちら](https://qiita.com/namasa/items/3a0d703565643f364133)で紹介しています。

# サーバーレスAPIを作りたい

これが一番Lambdaのユースケースとして多いと思っています。
APIのバックエンドとして、EC2やECSも候補にあがると思いますがこれらは常時稼働することになります。

なので、リクエスト数がそこまで多くない場合などは無駄にコストがかかってしまいます。
そこで、利用した時間だけ課金されるLambdaを利用することによって、コスト効率が高まります。
Well-Architected Frameworkの`コスト最適化`ですかね:thinking:

DBの候補として3つ書いてありますが、RDBである必要性やリクエスト数などによって、いずれかを選択することになると思います

![学ぶべきこと-サーバーレスAPI.drawio

元記事を表示

ForwardRef._evaluate() missing 1 required keyword-only argument: ‘recursive_guard’

# 目的
Lambd関数内で以下のlangchain関連のパッケージを使っていたのですが、ある日を境に表題のエラーが発生するようになりました。
“`python
from langchain_aws import ChatBedrock
from langchain_core.messages import HumanMessage
from langchain.prompts import PromptTemplate
“`

エラー内容の全貌

“`terminal
[ERROR] TypeError: ForwardRef._evaluate() missing 1 required keyword-only argument: ‘recursive_guard’
Traceback (most recent call last):
File “/var/lang/lib/python3.12/importlib/__init__.py”, line 90, in import_module
return

元記事を表示

【AWS】AWS SAMが想像以上にバケモノかもしれないことに気づいてしまったかもしれない

どうもこんにちは。

今回は、AWSのセミナー内でお話に出てきた、AWS SAMについて調べたのでまとめてみました。

ちなみに私、感動しております。

# AWS SAMってなに?

**AWS SAM (Serverless Application Model)** は、サーバーレスアプリケーションをローカルで開発、テスト、デプロイするための強力なオープンソースフレームワークです。AWS SAMを使用するには、AWS SAM CLIというものをインストールする必要があります。

ちなみに、AWS SAM自体は無料で使用できます。AWS SAMを使用して作成したAPI GatewayやLambda関数に対してのみ料金が発生します。

https://docs.aws.amazon.com/ja_jp/serverless-application-model/latest/developerguide/what-is-sam.html

# 通常、サーバーレスアプリケーションを作成するにはどうする?

通常では、以下のような構成でサーバーレスアプリケーションを構築すると思います。(最も

元記事を表示

PythonのLambda Layerを作成する方法

# フォルダ直下構成
以下の構成が必要なようです
pythonディレクトリ内に必要なライブラリをインストールする必要があります
![lambda_layer.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1952885/460ae25f-ac39-183b-f78a-1cd5b212ba24.png)

# 実際の作り方
1.任意のディレクトリ内にpythonディレクトリを作成する
2.pythonディレクトリに必要なライブラリをインストールする
“`
pip install boto3 -t python
“`
3.pythonディレクトリをzip化
“`
zip -r layer.zip ./python
“`
4.手順3でzip化したものをlayerとして登録する
[AWS Lambda Layersでライブラリを共通化](https://qiita.com/t_okkan/items/394a15577bd1aad46ec3#layer%E3%81%AE%E8%BF%BD

元記事を表示

【これ検索するの何回目だよ】API Gateway + Lambdaプロキシ統合でもう躓きたくない

# はじめに
フロントエンドからAPI Gatewayを経由してLambdaを実行する時、毎回少しだけ躓きます、、、。
解決はするのですが、何度も同じことを経験しては忘れてを繰り返しているので教訓をまとめます!!!

# 教訓
1. **統合レスポンスをクライアントに返却する際、lambda → API Gatewayのレスポンスは正しい形式である必要がある!**
1. **ライブラリによってPOSTの仕方が異なるので注意するべし!!**
1. **フロントのリクエストボディはparseして利用!!!**

これだけです!あとは簡単!!
lambda統合機能最高!!!

# 動作確認

## 1. **統合レスポンスをクライアントに返却する際、lambda → API Gatewayのレスポンスは正しい形式である必要がある!!**

API Gatewayのメソッドテスト機能で、以下のようなエラーが発生することがあります。

![cap05.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3654730/

元記事を表示

Serverless frameworkで`prisma migrate`を実行する

## この記事を書こうと思った理由
serverless frameworkとPrismaで開発をすることになったのですが、
スキーマを反映させるためのコマンド`prisma migrate`を
lambdaで実行するのにとても苦労したので、自分のした処理をここにまとめます。
本当はもっと良い方法があると思うので、知ってましたら教えてください。

# 実行手順

## 1.Prismaインストール

PrismaとPrisma CLIをインストールします。

“`bash
yarn add prisma @prisma/client
“`

Prisma CLIをインストールしたら、Prismaの設定を初期化します。

“`bash
yarn prisma init
“`

このコマンドにより、prismaディレクトリが作成され、schema.prismaファイルが配置されます。

## 2. データベース接続の設定

.envファイルを開き、使用するデータベースに合わせて接続URLを設定します。
例えば、MySQLを使用する場合は以下のようになります。

“`

元記事を表示

【AWS】EventBridge -> Lambda -> RDSのストプロ -> Slack通知の流れを構築する

# 概要
EventBridge -> Lambda -> RDSのストプロ -> Slack通知の流れを構築しました。

具体的にいうと、
「毎日9時に、プロシージャで実施した結果を、指定のSlackチャンネルに通知する」
という流れがゴールです。

構築手順と注意点を解説します。

# 手順概要
1. ストアドプロシージャを作成する
2. Lambda用のSecurityGroupを作成する
3. Lambda用のIAM Roleを作成する
4. Lambda関数を作成する
5. LambdaをVPCに設定する
6. RDSのSecurity Groupを編集する
7. EventBridgeSchedulerを設定する

# 手順詳細
## 1. ストアドプロシージャを作成する

まず、今回使うSQLを該当のRDSにプロシージャとして保存します。
今回は、sample_tableのcreate_dateカラムが前日のもので、かつ、sample_noカラムに指定の文字列から始まるレコードが何件あるか、というSQLになります。

“`count_number.sql
CREATE

元記事を表示

Lambda関数のスケーラビリティについてまとめてみた

# はじめに
SAA(AWS Certified Solutions Architect – Associate)取得に向けて勉強を進めていく中でLambdaのスケーラビリティについてよくわからなかったため、まとめてみました。
資格取得を目指すだけの方は「Lambdaにはスケーラビリティがある」という認識だけで十分だと考えています。ただ、知識があって損することはないと思うのでそのような方でもできれば最後まで読んでいただけると幸いです。

※Lambdaに関して資格勉強で学習しているだけで実際に触ったことはありません。
## 目次
**1.Lambdaとは**
**2.スケーラビリティとは**
**3.Lambdaのスケーラビリティについて**
 **3-1.同時実行数とは**
 **3-2.同時実行数の上限(クォータ)について**
 **3-3.同時実行数の算出方法について**
 **3-4.同時実行数と1秒あたりのリクエスト数の違いについて**
 **3-5.スケーリングレートについて**
 **3-6.プロビジョニングされた同時実行について**
**4.まとめ**
**5.参考文献

元記事を表示

Python+AWS LambdaでWEBスクレイピングAPIを作成してみた

# Lambdaを使ってAPIを作りたい
![Screenshot 2024-08-30 131834.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/722467/7fe54343-ed11-6453-664a-2bf239577cde.png)

前から気になっていたAWSのサービス、Lambdaを使ってAPIを作成することができました。
APIで取得した内容をstreamlitで実行して表示すると下記のようになります。
https://otaru.gr.jp/fall
*”fall”は季節によって変わります。
小樽の観光サイトのイベントのタイトル、画像、開催時期、終了時期をスクレイピングしてjson形式で返します。

![Screenshot 2024-09-02 150516.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/722467/1a95b829-ffcb-a1cc-efcb-b9744401f9d0.png

元記事を表示

AWS Lambdaを使ってHULFT Squareを実行してみた

# はじめに

こんにちは。すぎもんです:grinning:
以前、「[コマンドを使って外部からHULFT Squareを実行する方法](https://qiita.com/sugimon/items/beeaaa615d448848ff72)」をご紹介しました。
HULFT Squareは他のクラウド製品と合わせて活用することでサーバーを持たずに稼働させることが出来ます。

そこで今回はサーバーレスコンピューティングサービスであるAWS Lambdaを使用して、HULFT Square を実行することが出来るか試してみます。
これにより、AWSや他のサービスから任意のタイミングでHULFT Squareを実行させることが出来ます。

# 今回やること
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/458288/4effa46b-f975-710d-c4c5-80375e9a1e0a.png)
今回は、AWSのLambdaを使用してHULFT Squareを実行してみたいと思います。

元記事を表示

SES+SNS+Lambdaを使ってバウンスメール通知機能を実装しよう!

## 概要
SESを使ってメールを送信した際に存在しないメールアドレスの場合に検知できる機能をSES+SNS+Lambdaを使って実装する方法について解説します

## 前提
– Pythonを使ってLambdaのコードを作成します

## 実装
今回は
– S3
– Lambda
– SNS

の3種類のリソースをCloudFormationを使って構築します

### S3の構築
Lambda用のzipファイルを格納するS3バケットを作成します

“`yaml
AWSTemplateFormatVersion: 2010-09-09
Description: “S3 Bucket Factory Settings Stack”

# ————————————-
# Metadata
# ————————————-
Metadata:
AWS::CloudFormation::Interface:
# パラメータの並び順
ParameterGroups:

元記事を表示

LocalStackにAWS SAMでデプロイしたLambdaにAndroidからアクセスしてみた

## はじめに

– AWS SAM CLI for LocalStack を使ってアプリをLocalStackにデプロイできる
– Dockerでhttpdを起動した端末とスマホが同じネットワークにいれば、スマホのブラウザからWebページを閲覧できる

…ということから、「Dockerで動いているLocalStackにデプロイしたLambda関数へ、同じネットワークのAndroidアプリからアクセスできるのでは?」などと思いつきました。試してみたところ、一応できたのでここに残しておきます
AWSとスマホアプリを連携させるケースを、不具合の混入や費用などの心配なくローカルで好き勝手に試したい、という方の参考になれば幸いです

ちなみに当方はAndroid専門なので、iOSについては言及しておりません。申し訳ありませんが、ご了承ください

### 追記

私のGitHubに以下の3点を含むレポジトリを共有しております。よければご参考ください

– LocalStackコンテナを起動するための docker-compose.yaml
– 簡単なSAMプロジェクト
– Lambda関数を呼び

元記事を表示

ChatGPTに質問しながらLambda関数を作成する

# はじめに
今回、Lambda@Edge で利用する Lambda 関数を用意する必要があったのでそのコードを ChatGPT に書いてもらうことにしました。

https://openai.com/chatgpt/

# 構成イメージ
今回は CloudFront + S3 という一般的な構成をベースに導入します。
また、ベースの構成はすでに用意済みの状態で、そこに Lambda@Edge を追加する内容となります。
![スクリーンショット 2024-08-28 10.16.23.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/82090/f434b3b4-bad4-ff54-7ac2-302db02f0383.png)

# 要件
CloudFront の場合だとデフォルトルートは `index.html` の補完を設定することができますが、
その他のパスでは補完がされません。
> 通常
> ○ https://cloudfronturl/ → https://cloudfronturl/inde

元記事を表示

Amazon Bedrockの新機能「Prompt Flows」Lambdaノードを使ってみた

# はじめに
今回はAmazon Bedrockの新機能「Prompt Flows」のLambdaノードを使って、ユーザーから入力を受け取り、それをLambda関数で処理し、結果を返すシンプルなアプリケーションを作成してみました。
作成してみて分かったことも共有します。

「Prompt Flows」は、ノードを配置して生成AIのワークフローを開発・管理できるサービスです。

https://aws.amazon.com/jp/bedrock/prompt-flows/

# 導入
アプリケーションの全体像は以下の通りです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3806967/b2b1ae34-3da9-a237-c134-3d8933937439.png)

**①文字列の入力**
**②Lambda関数での処理**
**③処理結果の出力**
という流れになっています。

**①文字列の入力**
Flow inputでは、文字列を入力してもらいます。
後ほど記述しますが、今

元記事を表示

100本ノックしてみたい中堅エンジニア 【AWS】~Lambdaについて簡単に機能紹介~ 3/100

# はじめに

本記事では何かと利用することが多いLambdaについて、説明していきます。

# Lambdaとは?

– サーバーをプロビジョニングまたは管理することなくコードを実行できるイベント駆動型サービスです
– AWSでサーバーレスアプリーションを作りたいってなったら、必ずと言ってもいいほど出てきます

:::note info
:x: サーバーレス = `サーバが存在しない`
:o: サーバーレス = `サーバの管理をAWSが行う`
:::

では、Lambdaの各機能について紹介します

# 関数

Lambdaはまず関数を作るところから始まります。
関数は、Lambdaでコードを実行するために呼び出すことが出来る一機能になります。
作成し、任意のAWSサービスや処理から呼び出すことで処理を実行します、

関数は以下の3つから作成します。
– `一から作成`:一からコードを書いてLambda関数を実装する場合に選択します。基本はこちらを選択することになると思います
– `設計図の使用`:AWSが用意したサンプルコードをベースに実装する場合に選択します。Lambdaを初めて

元記事を表示

Lambdaをコンテナイメージとしてデプロイする方法

従来のZIPファイルによるデプロイに代わり、Dockerイメージを使ってLambdaをデプロイする方法をメモ

## ファイル
“`:構成
.
├── Dockerfile
├── app.py
└── requirements.txt
“`

“`docker:Dockerfile
# ベースイメージとして公式のAWS Lambda Python 3.8ランタイムを使用
FROM –platform=linux/amd64 public.ecr.aws/lambda/python:3.8

# Lambda関数コードをコンテナにコピー
COPY app.py ${LAMBDA_TASK_ROOT}

# 必要なパッケージをインストール
COPY requirements.txt ./
RUN pip install -r requirements.txt

# Lambdaハンドラーを指定
CMD [“app.lambda_handler”]

“`

※M1 Mac上でビルドする場合、FROMに「–platform=linux/amd64」を指定してあげないと、

元記事を表示

記事紹介:API に Lambda Monolith (別名:Lambdalith) を使うべきか?

## 序文
バックエンドAPIから非同期処理を切り出したくLambdaで設計した際に、以下のようなディスカッションをした。

*「1つのLambdaに色々な処理を詰め込むモノリスLambdaはアンチパターンと言われているけど、処理ごとに作るのも開発速度が遅くなってしんどそう」*

その際にとても良い記事を見つけることが出来たのでメモ代わり&日本語の検索導線を増やしたい気持ちで紹介記事を起稿。

## 本題

https://rehanvdm.com/blog/should-you-use-a-lambda-monolith-lambdalith-for-the-api

紹介記事冒頭の意訳

*この投稿では、モノリスのLambda API関数(別名Lambdalith)について、APIエンドポイントごとの単一目的のLambda関数と比較して、賛否両論を検討する。
“ベストプラクティス”に挑戦し、APIに関しては多くの場合モノリスLambda関数の方が優れていると主張する。*

*【重要】
この投稿は、APIに面したLambda関数にのみ適用できる。
それ以外のものには、単一目的の関

元記事を表示

CloudFormationを使ってLambdaとSQSを作成しよう!

## 概要
CloudFormationを使って非同期処理でよく使用するLambdaとSQSを作成する方法について解説していきます

## 実装
– Lambdaを格納するS3
– SQS
– SQSのメッセージをトリガーに実行するLambda

の3種類のリソースをCloudFormationで作成します

## Lambdaを格納するS3
Lambdaを格納するS3を作成していきます
バケット内のオブジェクトは非公開にします

“`yaml
AWSTemplateFormatVersion: 2010-09-09
Description: “S3 Bucket For Lambda”

# ————————————-
# Metadata
# ————————————-
Metadata:
AWS::CloudFormation::Interface:
# パラメータの並び順
ParameterGroups:
– Label:
def

元記事を表示

GitHubActionsでLambdaとLambdaレイヤーの構築をしていて躓いた。

# はじめに
今回はGitHubActionsを利用してLambdaとLambdaレイヤーを構築します。
LambdaとLambdaレイヤーを紐づける際に上手くいかなかった箇所や解決方法を備忘録として残していきたいと思います。

# 目次
・つまづいたところ
・解決方法
・事前準備
・LambdaレイヤーのCloudFormation
・LambdaのCloudFormation
・Lambdaレイヤー構築のGithubActions
・Lambda構築のGithubActions
・動作確認
・最後に
・参考

# つまづいたところ
Lambdaレイヤーを複数のLambdaに紐づけることとなり、
GitHubActionsでLambdaレイヤーとLambdaのCFnテンプレートを分けて構築することになりました。
そのため、Lambdaを構築する際にLambdaレイヤーの情報をテンプレート外から取得することになったのですが、Outputsで対応した際にバージョンまで取得することができず、躓いてしまいました。

# 解決方法
デプロイをGitHubActionsを活用していたため、バージ

元記事を表示

Node.jsランタイムでSJISのcsvファイルを出力するLambda

# 一覧データをcsv出力
データベースにはUTF-8で保管されているものの、
「ファイルの文字コードは **Shift-JIS** で(Excelでそのまま開きたいから)」
という要件があったとします。

今回は **AWS Lambda(Node.jsランタイム)** で構築したアプリケーションだったので、その例です。

ポイントは以下2点です。
1. UTF-8からShift-JISへのエンコード
1. Lambdaペイロード制限を考慮してS3署名付きURLを利用

## まずはcsvデータを生成
csv形式へのパースには[Papa Parse](https://www.papaparse.com/)を、エンコードには[encoding.js](https://github.com/polygonplanet/encoding.js)を使うことにしました。
“`npm install“`しておきます。

DBから取得したデータ配列を渡して、csv形式&SJISエンコードした文字列を返す処理です。
“`javascript
const Papa = require(‘papa

元記事を表示

OTHERカテゴリの最新記事