- 1. サーバごとかつ日ごとに不定の時刻でEC2インスタンスを自動起動停止するLambda関数
- 2. LINEメッセージをAWS Lambdaで送受信してみたお話
- 3. Slack連携による生産性向上の施策(その1)〜Workflow Builder編〜
- 4. AWS Lambda LayersでError importing numpy: you should not try to import numpy from its source directory
- 5. GitHub Actions + SQS + Lambda で main ブランチへ merge してから15分後に cloudfront キャッシュを削除する
- 6. Slack API の url_verification に Lambda + Python で応える
- 7. API GatewayでLambdaと接続したREST APIを作成する(Bedrockの呼び出し結果の取得)
- 8. AWS Lambdaがデプロイ後必ず一回失敗する原因がわかったけど解決できなかった
- 9. Lambda Web Adapterでplumberを動かす
- 10. 【aws-cdk-examples】API GatewayからLambda経由でDynamoDBを参照/更新する
- 11. 【AWS】APIGatewayでLambdaのアプリ側で発生した例外処理を500エラーで返したい。
- 12. サーバーレスアーキテクチャで翻訳 Web API を構築
- 13. Slackで独自カスタマイズしたAIと会話してみた〜Lambda(AWS)とPython使用編〜
- 14. 【Python】Spotifyのプレイリスト作成をAWS Lambdaで自動化する
- 15. Lamdaレイヤーを作成する(python3.8)
- 16. Lambda ってなんですか〜SkillBuildersってのがある話
- 17. 拡張子がmjsとjsのファイルの違いについて
- 18. StepFunctionsでいろいろ詰まったこともあったのでまとめておく
- 19. API Gatewayを単一Lambda関数と統合する際のハンドラーのルーティング方法
- 20. Docker イメージからの Lambda 関数の「Runtime.InvalidEntrypoint」エラー
サーバごとかつ日ごとに不定の時刻でEC2インスタンスを自動起動停止するLambda関数
# 作成経緯
まず筆者が下記のLambda関数を作成するに至った経緯を記す。対象となっているサーバはベンダーが作業時に使う踏み台サーバである。
踏み台用のAWSアカウントを切り出し、SSMセッションマネージャーのポートフォワードで
ベンダーには踏み台サーバへアクセスしてもらっている。この踏み台サーバの稼働時間は、ベンダーの作業によって変わるため一定ではない。
そのため、EventBridgeでサーバごとにルールを作成し、都度実行時間を更新するのは
手間がかかりすぎるため、EC2インスタンスの起動停止時間を可変にする仕組みを考えた。
折角作ったので備忘としてここに残す。(正直EC2インスタンスに起動用タグ・停止用タグを付与し、
タグを対象に月〜金の9時〜18時といった固定時間でEventBridgeルールを作成。
ベンダーにはこの運用ルールを伝え、人間をルールに合わせて作業させればいいと思う。
これができるなら本記事を読む必要はない)# 概要
EC2インスタンスの起動停止を行うLambda関数を作成し、
この関数をEventBridgeで毎日毎時実行する。
対象とな
LINEメッセージをAWS Lambdaで送受信してみたお話
## はじめに
業務にてLINE MessagingAPIを利用したLINEでのコミュニケーションツールを作成したので、技術共有と自分の備忘録もかねて書いていきます。
流れとしては、[公式LINEアカウントへのログイン処理をAWS Lambda経由で実装してみた](https://qiita.com/inacyc_k/items/8337489e3e148db1f9e5)の続きの実装になります。あわせてぜひ読んでいただければと思います。## LINE MessagingAPI ってなに
みなさん、LINEの公式アカウント利用していますか?(私はよく佐川急便とかUNIQLOの公式アカウントをよく利用しています)LINEの公式アカウントをユーザーに友だち登録いただくことでメッセージが届いたり、チャット上で会話形式の質問に回答したりとWebサイトやメルマガよりも気軽に情報発信することができます。このようにMessagingAPIは、
・さまざまなメッセージをユーザーへ送信
・ユーザーが送ったメッセージを受信
そして
・ユーザープロフィールの取得(アイコン画像やユーザー名)
・アカウ
Slack連携による生産性向上の施策(その1)〜Workflow Builder編〜
# はじめに
こちらの記事は三部構成になっております。
– Slack連携による生産性向上の施策(その1)〜Workflow Builder編〜
– Slack連携による生産性向上の施策(その2)〜Slack App編〜
– Slack連携による生産性向上の施策(その3)〜AWS Lambda編〜また、全ての記事の内容を含んだ動画も用意しております。
動画で確認したい方は[コチラ](https://www.youtube.com/watch?v=JE7ZVJ9yE9Q)まで。
※動画開始50分頃からの内容になります。# 事の経緯
![スクリーンショット 2024-04-04 16.45.41.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3763114/66db9017-f5c8-4045-9040-0dd90bebbb12.png)
![スクリーンショット 2024-04-04 16.47.23.png](https://qiita-image-store.s3.ap-northeast-1.
AWS Lambda LayersでError importing numpy: you should not try to import numpy from its source directory
# AWS Lambda LayersでError importing numpy
AWS Lambda Layersでlangchainを使おうとして以下のエラーが発生しました。“`
[ERROR] Runtime.ImportModuleError: Unable to import module ‘lambda_function’: Error importing numpy: you should not try to import numpy from
its source directory; please exit the numpy source tree, and relaunch
your python interpreter from there.
Traceback (most recent call last):
“`Keith’s Layers (Klayers) のnumpyをレイヤーに追加して解決する。
## numpyのARNを確認
### Klayersへ遷移
https://github.com/k
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 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した最新のイメージを選択していなかったことが原因でした。。。また