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

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

GitHub Actions + SQS + Lambda で main ブランチへ merge してから15分後に cloudfront キャッシュを削除する

# 処理の概要
1. GiHub Actions から、AWS SQS にメッセージを送信
2. SQS がメッセージ受け取ったら、15分後に Lambda を呼び出す
3. Lambda が aws create-invalidation コマンドを利用し、CloudFront キャッシュ削除を行う

# 何故そんな回りくどい事をするのか?

普通に GitHub Actions から create-invalidation を利用していましたが、AWS ECS を利用しているため古いタスクが終了し新しいタスクに切り替わる前に再度ユーザーがアクセスし、古いタスクのキャッシュが生成されるという状態になっていました

main ブランチへの merge から10分程度で ECS のタスクが切り替わっているので、余裕を持って15分後くらいにはキャッシュを削除させたかった

# 全体図

![AWS.drawio.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/76272/5a8525d9-6137-d502-

元記事を表示

Slack API の url_verification に Lambda + Python で応える

URL Verification Challenge の値を返せばOK

“`python
import json

def lambda_handler(event, context):
# Slack API からのリクエストボディを取得
body = json.loads(event[‘body’])

# URL Verification Challenge か?
if “challenge” in body:
# challenge の値を取得
challenge = body[‘challenge’]

# レスポンスを作成
response = {
“statusCode”: 200,
“body”: json.dumps({“challenge”: challenge})
}

# レスポンスを返す
return response

# レ

元記事を表示

API GatewayでLambdaと接続したREST APIを作成する(Bedrockの呼び出し結果の取得)

[Supership](https://supership.jp/)の名畑です。2024春アニメ開幕の季節がやってきましたが、[うる星やつらの最終クールのPV](https://www.youtube.com/watch?v=4hMO9mkM7Ac)ですでに涙腺が。

## はじめに

以下2つの過去記事では[Lambda](https://qiita.com/nabata/items/36a642597a92f0ece9d8)を経由して[Bedrock](https://aws.amazon.com/jp/bedrock/)の**Claude 3**を叩きました。

– [LambdaでBedrockのClaude 3を呼び出してみた](https://qiita.com/nabata/items/5bcc3beb76182f626040)
– [BedrockのナレッジベースでRAGを実装し、資料を元にした回答をClaude 3にLambda経由でしてもらった(ベクトルストアはAurora)](https://qiita.com/nabata/items/36a642597a92f

元記事を表示

AWS Lambdaがデプロイ後必ず一回失敗する原因がわかったけど解決できなかった

## 背景
趣味で、DiscordだけでTRPGができるbotを作っています。
(元々はslackの内輪向けbotだったのですが)
構成は、AWS Lambda+API Gateway+Dockerコンテナ内Pythonです。
元々はLambdaのPythonのWebテキストエディターで書いていたのですが
色々問題があったら変えて行くうちにDockerで管理するのが一番楽になってしまいました。

そんなLambdaで作ったアプリがデプロイ後、一回だけ失敗する状況に悩まされていたのですが
結局解決できなかった事を記載します。

## 問題の発生
手製のスクリプトでLambdaのコンテナイメージの更新していました。
それまで色々なデプロイパッケージを使っていてlambrollがとても使いやすかったのですが
コンテナ環境になった時に手製のスクリプトに変えました。

“`:sh
aws ecr get-login-password –region ap-northeast-1 | docker login –username AWS –password-stdin ${accound

元記事を表示

Lambda Web Adapterでplumberを動かす

# はじめに
Lambda Web Adapterという、HTTPで動くコンテナに対して仲介してLambdaで動くようにしてくれるツールがあります。

https://aws.amazon.com/jp/builders-flash/202301/lambda-web-adapter/

これを使って、Rのplumberをコンテナにして動かしてみました。

以前Lambdaで、plumberのようなRのREST APIを作りましたが、Lambda Web Adapterを使えば、plumberを使えるのでかなり楽です。

https://qiita.com/a_b_/items/1afde637201fb70592ce

# 概要

– Lambda非サポートのRを、Lambda Web Adapterを用いて実行
– Webアプリを対象としているので、plumberを使用

# 参考

https://zenn.dev/junnuj/articles/c2ba888670bc8e

# やってみた

環境はCloud9のm5.largeを使いました。t3.smallでもできま

元記事を表示

【aws-cdk-examples】API GatewayからLambda経由でDynamoDBを参照/更新する

# これは何をしたくて書いたもの?
私個人として、現在業務でアプリ開発に利用しているReact NativeをAWSと連携させたいと考えているため、そのための学習の一環としてReact Nativeの通信先のREST APIを提供できるAPI Gatewayを構築して、その挙動を確認してみることにしました。
CDKには[aws-cdk-examples](https://github.com/aws-samples/aws-cdk-examples/)というサンプルプロジェクトをまとめたリポジトリがあります。今回はその中の[api-cors-lambda-crud-dynamodb](https://github.com/aws-samples/aws-cdk-examples/tree/main/typescript/api-cors-lambda-crud-dynamodb/)というサンプルを実際にデプロイして動かしてみます。

# 構成
`cdk deploy`で構築できるリソースは、大まかには以下の画像の通りです。構築されるリソースの詳細は、[index.ts](https:/

元記事を表示

【AWS】APIGatewayでLambdaのアプリ側で発生した例外処理を500エラーで返したい。

## 背景

JavaアプリをLambdaでホストしているが、API Gateway経由でビジネスロジック側のエラー処理した際、ステータス上200で返ってきてしまい、困ったので調べた

## TL;DR

Javaだと例外処理の返却値が標準エラーの形式と合ってないので、レスポンス内容にステータスコード(5XX系)を埋め込む
200系のレスポンスマッピングテンプレート側でステータスコードを条件分岐させてマッチすればオーバーライドするように処理させると500エラーにできる。

https://docs.aws.amazon.com/ja_jp/apigateway/latest/developerguide/apigateway-override-request-response-parameters.html#apigateway-override-request-response-parameters-override-response

サンプルコード(Github)

https://github.com/tukapai/simple-lambda-java/tree/main

元記事を表示

サーバーレスアーキテクチャで翻訳 Web API を構築

## 本記事の概要
AWS Lambda、Amazon API Gateway、Amazon DynamoDB のうち、DynamoDB及びAWS Lambdaについて概要を理解したい思いから記事にしました。

参考サイト:

https://pages.awscloud.com/JAPAN-event-OE-Hands-on-for-Beginners-Serverless-1-2022-confirmation_422.html

## 作成する構成
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3518951/6eab7b47-d088-fa68-0c29-270dd24ac8c9.png)
API Gatewayがリクエストを受け付け、Lambdaを呼出し、Lambdaが翻訳機能であるTranslateを呼出してAPI GatewayからResponseを返します。最後にヒストリーテーブルとしてDynamoDBに保存します。

## ハンズオン開始
まずLambdaについて公式

元記事を表示

Slackで独自カスタマイズしたAIと会話してみた〜Lambda(AWS)とPython使用編〜

# はじめに
LLMの進歩著しい昨今、AIを使ってキャラクターとの会話ができるサービスも数多く出てきました。
今回の記事では、Spiral.AI株式会社のTwinRoomというサービスを使い、Slackで独自カスタマイズしたAIと簡単に会話してみます。

この記事で紹介する機能を活用すれば、開発者・企業独自のアプリケーションやサービスに独自カスタマイズしたAIキャラクターを簡単に組み込むことができます。

一例として、今回は自分たちで作ったAIキャラをTwinRoomのAPI経由でSlackに登場させて、会話させてみます。

**記事監修:** [わいけい(@yk_llm_gpt)](https://twitter.com/yk_llm_gpt)

https://zenn.dev/spiralai/articles/8af7cbf526c2e1

# 全体構成
最初に、ユーザーがAIに対するメッセージをSlackに投稿してから最終的にSlack上で返信が返ってくるまでの仕組みについて説明します。

まず、Slackにメッセージが投稿されてからのデータの流れについてです。

今回作

元記事を表示

【Python】Spotifyのプレイリスト作成をAWS Lambdaで自動化する

## TL;DR

– この記事では、PythonからSpotify Web APIを操作できるライブラリである**Spotipy**を使用して、プレイリスト作成を自動化する方法を紹介します。スクリプトの自動実行には**AWS Lambda**を使用します。

– プレイリストに入れるトラックの選定は、Spotify Web APIで提供されているレコメンド機能に基づき行っている(=使用するのみ)ので、推薦アルゴリズムの実装や工夫は特にありません。

– 自分の音楽好みに合わせたプレイリストを効率的に作成したい方や、SpotifyのAPIを使ったプロジェクトに興味がある方の一助となれば幸いです。

– 使用ツール、サービスは、以下の通りです。

– Python
– Python依存パッケージ (pandasなど)
– Spotify Web API (APIキーの発行に必要)
– Spotipy
– AWS Lambda、その他AWSのサービス (無料枠で対応できる範囲だと思います)

全体の処理のイメージは以下の通りです。

![aws-lambda-spoti

元記事を表示

Lamdaレイヤーを作成する(python3.8)

## Lambdaにレイヤーを追加する
Lamdbaでサードパーティライブラリを使用する場合には「レイヤー」を作成して、関数に追加する必要があります。
今回はレイヤーの作成方法をメモ

## Amazon Linux2環境の起動(作成)

LambdaはAmazonLinux環境なので、同一の環境で作成します

“`bash
docker run -it –rm amazonlinux:2 bash
“`

## Python3.8をインストール
“`
yum update -y
yum install -y amazon-linux-extras
amazon-linux-extras enable python3.8
yum install -y python3.8 zip
“`

※Python3.8にしている理由はAmazonLinux2(amazon-linux-extras)でインストール可能なバージョンが3.8だからです。
これ以上のバージョンにするには別な方法でインストールする必要がありますが、今回は割愛(一番簡単な方法のため)

インストール可能なバージョン

元記事を表示

Lambda ってなんですか〜SkillBuildersってのがある話

## はじめに

ちょっと執筆中です LTなどで使ったパワポを記事にしていこうと思います。
アプリケーション(まわりにJava アプリケーションエンジニアがおおかったのもあり、JAVA+Tomcatあたりのアプリケーション書いてる人を前提に進めます)エンジニア向けに書いていきます。

## 経緯

後輩や同僚から、「AWS始めたい」「アプリケーションエンジニアもそろそろサーバレスをしたい」「ラムだって何?」と、いろんなレベル感のメンバから聞かれるので書いたLT資料です。
行間が読めなくなるのでちょこちょこ説明を追記していこうと思います。

目標は「AWS Lambda を使い始める皆様へ」の第一歩目を作る。

## はじまり,はじまり〜

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/8216/d0d8ddee-d8bf-2c83-db94-aef4f40fc978.png)

![image.png](https://qiita-image-store.s3.ap-northeas

元記事を表示

拡張子がmjsとjsのファイルの違いについて

Nodeのバージョン18以上のLambdaでは、デフォルトファイルの拡張子が`mjs`に変更されています。LambdaのNodeのバージョンを更新するにあたり、`mjs`ファイルと`js`ファイルとの違いについて調査しました。結論として、拡張子の違いはJavaScriptのモジュールシステムの違いに由来しています。以下、詳細を解説します。

## 拡張子が.mjsと.jsのファイルの違い
### 前提
JavaScriptには2つの主要なモジュールシステムが存在します。
– CommonJs
– ECMAScript(ES Module, ES2015)

### モジュールシステムと拡張子
– CommonJs: cjs(あまり一般的ではありません)
– ES Module: mjs

拡張子が`js`の場合は、`package.json`内の`type`フィールドで指定されたモジュールシステムに従います。`type`は`”commonjs”`または`”module”`のいずれかを指定できます。指定がない場合、デフォルトはCommonJSとなります。

## 実験
### 拡張子が.

元記事を表示

StepFunctionsでいろいろ詰まったこともあったのでまとめておく

## 前提(困ったこと)
プロダクト開発でAWSのサービスを中心に組み上げていく中で、

・API Gateway
・StepFunctions
・Lambda

の3つを使うことになったが、

API Gateway + StepFunctions

API Gateway + Lambda
で微妙にcontextの内容が違ったので難儀したケースがあった。

## 使用サービス
・Lambda
・StepFunctions
・API Gateway
・Keycloak(AWS外)

## どうしてこうなった
最初はLambda中心に開発しており、StepFunctionsもいつかは使おうと考えてはいつつも後回しにしていた。
ある程度落ち着いたタイミングで、StepFunctionsを使ってこれまで作ったLambdaを組み合わせて実装を進めていたが、想定していた挙動にならない。

具体的にはAPI GatewayのAuthorizerにLambdaを使って、そのLambda内で外部のKeycloakを呼んでcontextのauthorizerに含めるという仕組みにしていたのだが、これ

元記事を表示

API Gatewayを単一Lambda関数と統合する際のハンドラーのルーティング方法

# はじめに

API GatewayとLambdaの統合には様々な実装パターンがあるせいか、下記の状況下でのルーティングの方法の情報が無かったので投稿します。

# 前提

– すべてのメソッドを単一のLambda関数とプロキシ統合する
– プロキシリソース(`{proxy+}`)は使わない(HTTPルーティングはAPI Gatewayで行う)
– [aws-lambda-web-adapter](https://github.com/awslabs/aws-lambda-web-adapter)や[aws-lambda-go-api-proxy](https://github.com/awslabs/aws-lambda-go-api-proxy)などは、使用しない

# 結論

Lambda関数が受け取るeventオブジェクトに含まれる`resource`と`httpMethod`を使用する。
`path`も使えそうですが、実際のパラメータが含まれる値のため、使用しない方が良いでしょう。

“` json:event
{
“resource”: “/todo/{id}”,

元記事を表示

Docker イメージからの Lambda 関数の「Runtime.InvalidEntrypoint」エラー

ローカルで動いていたのに、「Runtime.InvalidEntrypoint」が発生した時のメモ

### 起きたこと
DockerfileをECRにpushし、lambdaでイメージを選択して動かすと、Runtime.InvalidEntrypointとなる
“`
{“errorType”:”Runtime.InvalidEntrypoint”,”errorMessage”:”RequestId: ID Error: fork/exec /lambda-entrypoint.sh: exec format error”}
“`
OS:M2 mac
色々調べてみたがDockerイメージのアーキテクチャがarm64とx86_64で違うらしい。
“`bash
$docker build –platform linux/x86_64 -t docker-image:test .
“`
buildの時にplatformを変更しても、特に改善されない…

### 解決
lambdaのイメージを選択するところでpushした最新のイメージを選択していなかったことが原因でした。。。また

元記事を表示

AWS Lambda + Honoで外部REST APIサーバ用のプロキシサーバを書く

## プロキシサーバをHonoで作ろう

前回、[最近 Hono で外部連携用の AWS Lambda 書いています](https://qiita.com/ssc-ksaitou/items/4a1a1e437d4139b32d19)という記事を書きましたが、記事の中でユースケースとしてあげていた「**他のサービスへのデータ連携のためにAWS Lambda + Honoでプロキシサーバを書く**」という応用例は、そこそこ需要があると個人的に思っているので、今回改めて記事にしました。

https://qiita.com/ssc-ksaitou/items/4a1a1e437d4139b32d19

:::note info
本記事で書くプロキシサーバは [squid](https://www.squid-cache.org/) などの本格的なものではなく、HTTPリクエストを外部サービスに簡単に中継する程度のものです
:::

:::note info
本記事のソースコードは https://gitlab.com/ksaitou/2024-03-28_awslambdahonoprox

元記事を表示

BedrockのナレッジベースでRAGを実装し、資料を元にした回答をClaude 3にLambda経由でしてもらった(ベクトルストアはAurora)

[Supership](https://supership.jp/)の名畑です。たくさんの思い出を生み出してくれた中野のシンボルとも言える中野サンプラザとのお別れイベントである[中野サンプラザプロジェクションマッピング](https://www.city.tokyo-nakano.lg.jp/kanko/city-promotion/0686357420231212172102894.html)、とても素晴らしかったです。別れを惜しみながらも、再会を楽しみに待っております。

## はじめに

前に「[LambdaでBedrockのClaude 3を呼び出してみた](https://qiita.com/nabata/items/5bcc3beb76182f626040)」という記事を書きました。[Anthropic](https://www.anthropic.com/)による**LLM**である[Claude 3](https://www.anthropic.com/news/claude-3-family)を[AWS](https://aws.amazon.com/jp/)の[La

元記事を表示

momentoを利用してサーバレスキャッシングしてみた

## はじめに
最近インメモリキャッシュサービスを格安で利用することができないかと色々調べていました。
(Elasticacheなどのサービスは高いのでなるべく無料のものを利用したい。)

その結果、Momentoというサービスを発見しましたので、今回はそれについて触ってみてLambdaへの実装までを実施しました。

## Momentoとは ?
インメモリキャッシュのSaaSサービスです。正確には[Momento Cache](https://jp.gomomento.com/services/momento-cache/)にてインメモリキャッシュを行うことができます。
AWS上でキャッシュを利用するとなると、ElastiCacheやAppSync(正確にはElasticache)などを利用す

毎月5GBまでのデータの登録は無料で利用することができるため、。
その後は1GBあたり0.50ドル課金されます。
スタンダードプラン以降はCloudWatch メトリクスへエクスポートすることも可能になります。

## Momento設定内容
今回はMomento cache を作成して

元記事を表示

もう二度とlambda layer作成をミスりたくない!!【terraform】

# はじめに
Lambda Layerを何度か作成しているのですが、
毎回zipのディレクトリ構造を間違えて「Cannot find module XXX」エラーに遭遇します。

ディレクトリ構造を間違えないよう、Terraformで良い感じに工夫してみました。

## (参考)Lambda Layerとは
(引用)補助的なコードやデータを含む .zip ファイルアーカイブです。
複数のlambdaで共有したい関数や、
lambdaのデプロイパッケージに入れたくない依存ライブラリなどを別途用意できる機能です。

https://docs.aws.amazon.com/ja_jp/lambda/latest/dg/chapter-layers.html

別途用意されたzipは、Lambda実行環境でlambda関数実行前に解凍されます。
lambda関数は解凍後の関数ソースやライブラリを使用することができます。

## (参考)Lambda Layer作成時の落とし穴
Lambda Layerの作成時にZIPファイルをアップロードできますが、
ZIPファイル内のディレクトリ構造が正しく

元記事を表示

OTHERカテゴリの最新記事