- 1. Slack API の url_verification に Lambda + Python で応える
- 2. API GatewayでLambdaと接続したREST APIを作成する(Bedrockの呼び出し結果の取得)
- 3. AWS Lambdaがデプロイ後必ず一回失敗する原因がわかったけど解決できなかった
- 4. Lambda Web Adapterでplumberを動かす
- 5. 【aws-cdk-examples】API GatewayからLambda経由でDynamoDBを参照/更新する
- 6. 【AWS】APIGatewayでLambdaのアプリ側で発生した例外処理を500エラーで返したい。
- 7. サーバーレスアーキテクチャで翻訳 Web API を構築
- 8. Slackで独自カスタマイズしたAIと会話してみた〜Lambda(AWS)とPython使用編〜
- 9. 【Python】Spotifyのプレイリスト作成をAWS Lambdaで自動化する
- 10. Lamdaレイヤーを作成する(python3.8)
- 11. Lambda ってなんですか〜SkillBuildersってのがある話
- 12. 拡張子がmjsとjsのファイルの違いについて
- 13. StepFunctionsでいろいろ詰まったこともあったのでまとめておく
- 14. API Gatewayを単一Lambda関数と統合する際のハンドラーのルーティング方法
- 15. Docker イメージからの Lambda 関数の「Runtime.InvalidEntrypoint」エラー
- 16. AWS Lambda + Honoで外部REST APIサーバ用のプロキシサーバを書く
- 17. BedrockのナレッジベースでRAGを実装し、資料を元にした回答をClaude 3にLambda経由でしてもらった(ベクトルストアはAurora)
- 18. momentoを利用してサーバレスキャッシングしてみた
- 19. もう二度とlambda layer作成をミスりたくない!!【terraform】
- 20. AWS Lambda でカスタムレイヤーを追加する方法
Slack API の url_verification に Lambda + Python で応える
URL Verification Challenge の値を返せばOK
“`python
import jsondef 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ファイル内のディレクトリ構造が正しく
AWS Lambda でカスタムレイヤーを追加する方法
# 概要
– Lambdaで何かしらの処理を行いたい時、デフォルトだとインストールされていないパッケージを使う場合は、レイヤーをアタッチする必要がある
– Lambdaを使うとき、基本的に必要になる作業なので、自分のやり方を備忘として残す# 手順
## 1. ローカルで必要なパッケージをまとめる
– レイヤーに含めたいパッケージを仮想環境にインストール
“`shell-session
python3 -m venv venv
source venv/bin/activate
pip install package-name
“`– 「__pythonという名前__」のディレクトリにパッケージを詰めてzipファイルにする
– __pythonという名前である必要がある__(任意ではないことに注意)
– 仮想環境の具体的なpathはそのときのローカルの状況次第
“`shell-session
mkdir -p layer/python
cp -r venv/lib/python3.10/site-packages/* layer/python/
cd laye