Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Lambdaトリガーでピタゴラスイッチしてみた / jawsug_bgnr46lt
Search
Kenichiro Wada
February 22, 2022
Technology
0
610
Lambdaトリガーでピタゴラスイッチしてみた / jawsug_bgnr46lt
2022.02.22 JAWS-UG 初心者支部#46 AWS Builders Online Series recap4 LT資料です。
Kenichiro Wada
February 22, 2022
Tweet
Share
More Decks by Kenichiro Wada
See All by Kenichiro Wada
(全日本人)待望のS3トリガーのLambda無限ループ対応について / chibaraki-1
kwada
0
80
AWS Lambdaに出会って人生が変わった1人の10年間 /awslambda10th
kwada
0
56
GPSデバイスを使った簡易位置案内システムの構築をしてみた話。/jawsfesta2024
kwada
0
490
とある航空会社の飛行機の乗り方をお教えします。/20240913-lt
kwada
3
260
Building a Simple Navigation Guide Service Using GPS Devices/jaws-pankration2024
kwada
0
76
IaCジェネレーターを使って、昔に作ったLambda関数をCDK管理下においてみた / jaws-ug-josys-30
kwada
0
95
SORACOM UG Explorer 2023ハンズオンの裏側サービスを紹介 / soracom-ug-online-17
kwada
0
180
(2023.08.17 Update)Detecting and stopping recursive loops in AWS Lambda functionsでAWS Lambdaの無限ループを防ぐ! / jaws-ug-shizuoka
kwada
0
220
三国志好きの自分が一番最初に出会った三国志のゲームを令和になってやってみた / retrogstudy-8
kwada
0
120
Other Decks in Technology
See All in Technology
Amazon S3 Tablesと外部分析基盤連携について / Amazon S3 Tables and External Data Analytics Platform
nttcom
0
150
生成 AI プロダクトを育てる技術 〜データ品質向上による継続的な価値創出の実践〜
icoxfog417
PRO
5
1.8k
Cloud Spanner 導入で実現した快適な開発と運用について
colopl
1
880
なぜ私は自分が使わないサービスを作るのか? / Why would I create a service that I would not use?
aiandrox
0
850
エンジニアが加速させるプロダクトディスカバリー 〜最速で価値ある機能を見つける方法〜 / product discovery accelerated by engineers
rince
4
490
抽象化をするということ - 具体と抽象の往復を身につける / Abstraction and concretization
soudai
27
13k
NFV基盤のOpenStack更新 ~9世代バージョンアップへの挑戦~
vtj
0
140
ホワイトボードチャレンジ 説明&実行資料
ichimichi
0
130
2.5Dモデルのすべて
yu4u
2
930
システム・ML活用を広げるdbtのデータモデリング / Expanding System & ML Use with dbt Modeling
i125
0
230
表現を育てる
kiyou77
1
220
N=1から解き明かすAWS ソリューションアーキテクトの魅力
kiiwami
0
140
Featured
See All Featured
Sharpening the Axe: The Primacy of Toolmaking
bcantrill
40
2k
Building Flexible Design Systems
yeseniaperezcruz
328
38k
Writing Fast Ruby
sferik
628
61k
Building an army of robots
kneath
303
45k
Why Our Code Smells
bkeepers
PRO
336
57k
What's in a price? How to price your products and services
michaelherold
244
12k
Fantastic passwords and where to find them - at NoRuKo
philnash
51
3k
Learning to Love Humans: Emotional Interface Design
aarron
273
40k
Git: the NoSQL Database
bkeepers
PRO
427
64k
Let's Do A Bunch of Simple Stuff to Make Websites Faster
chriscoyier
507
140k
The Myth of the Modular Monolith - Day 2 Keynote - Rails World 2024
eileencodes
21
2.5k
[RailsConf 2023 Opening Keynote] The Magic of Rails
eileencodes
28
9.3k
Transcript
-BNCEBτϦΨʔͰ ϐλΰϥεΠονͯ͠Έͨ BXT KBXTVH KBXTVH@CHOS 2022.02.22 JAWS-UG 初⼼者⽀部#46 AWS Builders
Online Series recap4 和⽥健⼀郎@Keni_W
ࠓ͢͜ͱ KBXTVHDIJCB KBXTVH@CHOS • ⾃⼰紹介 • きっかけ • Lambdaのトリガー •
ピタゴラスイッチしてみた • トリガーのEventなど解説 • 終わり -BNCEBτϦΨʔͰϐλΰϥεΠονͯ͠Έͨ
⾃⼰紹介 ⽒名:和⽥ 健⼀郎 所属:アイレット株式会社 エンジニア JAWS-UG 千葉 運営メンバー SORACOM UG
東京 運営メンバー Twitter: @Keni_W Facebook : kenichiro.wada.3 好きなAWSサービス : AWS Lambda 2021 APN AWS Top Engineers 2020年共著でサーバーレスの本書きました
͖͔͚ͬ KBXTVHDIJCB KBXTVH@CHOS -BNCEBτϦΨʔͰϐλΰϥεΠονͯ͠Έͨ • この話は元ネタは、運営の織⽥さんとのこんな やりとりから始まりました。
-BNCEBͷτϦΨʔ KBXTVHDIJCB KBXTVH@CHOS -BNCEBτϦΨʔͰϐλΰϥεΠονͯ͠Έͨ • AWS Lambdaは現状、FaaS(Function as a Service)
の代表格とも⾔える AWSのコンピューティングサービス です。 • マネージメントコンソールやAPIを利⽤して、コードの アップロードするだけで、実⾏することができます。 • つまり、開発者はサーバーの構築、管理は⼀切不要で、 コードの実装のみに集中することができます。 • また、リクエストに応じて、⾃動的にスケーリングを ⾏ってくれます。 • リクエスト毎の課⾦となるため、関数が実⾏されない時 には、⼀切料⾦が発⽣しません。そのため、Amazon EC2を利⽤した場合に⽐べて⼤幅に料⾦が下がるケース もあります。 (基礎から学ぶサーバーレス開発 SECTION-004より)
-BNCEBͷτϦΨʔ KBXTVHDIJCB KBXTVH@CHOS -BNCEBτϦΨʔͰϐλΰϥεΠονͯ͠Έͨ サーバーのことを考えずに コードを実⾏する
-BNCEBͷτϦΨʔ KBXTVHDIJCB KBXTVH@CHOS Lambdaのコンソールで、関数左側にあるのが、 トリガーですね。 -BNCEBτϦΨʔͰϐλΰϥεΠονͯ͠Έͨ
-BNCEBͷτϦΨʔ KBXTVHDIJCB KBXTVH@CHOS ⼀⽅、右に出てくるのが、Destinationsです。 ごめんなさい。こっち使うの忘れました。 -BNCEBτϦΨʔͰϐλΰϥεΠονͯ͠Έͨ
-BNCEBͷτϦΨʔ KBXTVHDIJCB KBXTVH@CHOS -BNCEBτϦΨʔͰϐλΰϥεΠονͯ͠Έͨ スーパー猫の⽇現在、 トリガーの種類はこんな感じ。
-BNCEBͷτϦΨʔ KBXTVHDIJCB KBXTVH@CHOS -BNCEBτϦΨʔͰϐλΰϥεΠονͯ͠Έͨ トリガー⾃体は、以下の2つ。 ・同期呼び出し この呼び出し⽅法では、Lambdaは関数を実⾏し、レスポンスを待ちます。 関数の実⾏が完了したら、呼び出し元にそのレスポンスを返却します。 関数内でエラーになった、タイムアウト時間に達した場合などで関数からエラーが返った場合、 エラーのレスポンスを確認し、呼び出し元で、再度処理を⾏うかを判断するようにします。
・⾮同期呼び出し この呼び出し⽅法では、Lambdaは⼀旦イベントを内部のキューに送信し、別のプロセスがそのキューから、 イベントを読み込み、関数が実⾏されます。 呼び出し元では、キューに追加の可否のみ受け取ることができます。 この呼び出し⽅法で注意が必要なのは、 ⾮同期実⾏の場合、最低 1回は実⾏されることが保証されますが、1回しか実⾏することを保証していませ ん。つまり、1回以上実⾏されることあるということです。 そのため、1回実⾏でも、複数回実⾏でも結果を同⼀になるような考慮をしておく必要があります、これを べき等性の確保と⾔います。 また、同期実⾏と異なり、関数内でエラーになった場合、Lambdaは関数を標準では2回リトライします。 合計 3回のリトライで失敗した場合は、Amazon SQSのキューやAmazon SNSのトピックにイベントを送 信することで、エラー状況を知ることが可能です。 (基礎から学ぶサーバーレス開発 SECTION-004より)
-BNCEBͷτϦΨʔ KBXTVHDIJCB KBXTVH@CHOS 突然ですが、ここでアンケートです。 以下のURLにアクセスするか、 QRコードを読み取ってください。 https://bit.ly/3sWy9Eo もしくは 「Mentimeter」 (https://www.menti.com/)に
アクセスし、以下のコードを⼊⼒ 7844 7371 -BNCEBτϦΨʔͰϐλΰϥεΠονͯ͠Έͨ すみません。 現在はアンケート募集してません
-BNCEBͷτϦΨʔ KBXTVHDIJCB KBXTVH@CHOS Lambdaトリガー利⽤したことあるものを選んで Submitをクリックしてください。 ------- https://bit.ly/3sWy9Eo もしくは 「Mentimeter」 (https://www.menti.com/)に
アクセスし、以下のコードを⼊⼒ 7844 7371 -BNCEBτϦΨʔͰϐλΰϥεΠονͯ͠Έͨ すみません。 現在はアンケート募集してません
ϐλΰϥεΠονͯ͠Έͨ KBXTVHDIJCB KBXTVH@CHOS -BNCEBτϦΨʔͰϐλΰϥεΠονͯ͠Έͨ アンケート結果 〜アンケート結果〜
ϐλΰϥεΠονͯ͠Έͨ KBXTVHDIJCB KBXTVH@CHOS -BNCEBτϦΨʔͰϐλΰϥεΠονͯ͠Έͨ 〜アンケート結果〜 1. API Gateway 1. S3
3. EventBridge 4. SQS 5. Cloudwatch Logs 5. DynamoDB
ϐλΰϥεΠονͯ͠Έͨ KBXTVHDIJCB KBXTVH@CHOS -BNCEBτϦΨʔͰϐλΰϥεΠονͯ͠Έͨ よく使われるであろうトリガーを使って、こんな 感じのピタゴラスイッチ的にLambdaを数珠つな ぎに実⾏してみました。
ϐλΰϥεΠονͯ͠Έͨ KBXTVHDIJCB KBXTVH@CHOS -BNCEBτϦΨʔͰϐλΰϥεΠονͯ͠Έͨ なお、今回も最近よく使っているAWS CDK v2に て構築しています。 トリガーを設定するには、 aws_lambda_event_sourcesに
いくつか⽤意されているので、 結構簡単に設定可能です。
ϐλΰϥεΠονͯ͠Έͨ KBXTVHDIJCB KBXTVH@CHOS -BNCEBτϦΨʔͰϐλΰϥεΠονͯ͠Έͨ
ϐλΰϥεΠονͯ͠Έͨ KBXTVHDIJCB KBXTVH@CHOS -BNCEBτϦΨʔͰϐλΰϥεΠονͯ͠Έͨ 今回、Lambdaのコードで次のトリガーとなる サービスを呼んでいるので、ちゃんと権限与えな いとダメですが、それもCDKなら簡単ですね。
ϐλΰϥεΠονͯ͠Έͨ KBXTVHDIJCB KBXTVH@CHOS -BNCEBτϦΨʔͰϐλΰϥεΠονͯ͠Έͨ 今回、注意すべきは、S3トリガーで起動する Lambda関数をS3に保存するLambda関数に絶対 にしないこと。
ϐλΰϥεΠονͯ͠Έͨ KBXTVHDIJCB KBXTVH@CHOS -BNCEBτϦΨʔͰϐλΰϥεΠονͯ͠Έͨ 多重実⾏で 死にます。
ϐλΰϥεΠονͯ͠Έͨ KBXTVHDIJCB KBXTVH@CHOS -BNCEBτϦΨʔͰϐλΰϥεΠονͯ͠Έͨ S3トリガーを設定しようとすると、以下の案内が あるので、⾒直すとともに、チェックを忘れずに (チェックしないと登録できないですが。)
τϦΨʔͷ&WFOUͳͲղઆ KBXTVHDIJCB KBXTVH@CHOS -BNCEBτϦΨʔͰϐλΰϥεΠονͯ͠Έͨ EventBridge
τϦΨʔͷ&WFOUͳͲղઆ KBXTVHDIJCB KBXTVH@CHOS -BNCEBτϦΨʔͰϐλΰϥεΠονͯ͠Έͨ S3
τϦΨʔͷ&WFOUͳͲղઆ KBXTVHDIJCB KBXTVH@CHOS -BNCEBτϦΨʔͰϐλΰϥεΠονͯ͠Έͨ SQS
τϦΨʔͷ&WFOUͳͲղઆ KBXTVHDIJCB KBXTVH@CHOS -BNCEBτϦΨʔͰϐλΰϥεΠονͯ͠Έͨ SNS
τϦΨʔͷ&WFOUͳͲղઆ KBXTVHDIJCB KBXTVH@CHOS -BNCEBτϦΨʔͰϐλΰϥεΠονͯ͠Έͨ DynamoDB
τϦΨʔͷ&WFOUͳͲղઆ KBXTVHDIJCB KBXTVH@CHOS -BNCEBτϦΨʔͰϐλΰϥεΠονͯ͠Έͨ 他に⾊々とありますが、 詳しくは、 「他のサービスで AWS Lambda を使⽤する」
(https://docs.aws.amazon.com/ja_jp/lambda/latest/dg/lambda-services.html) もしくは、 Lambdaのテストイベントのテンプレート にも⽤意されているので、 そちらも参考にしてください。
ऴΘΓ KBXTVHDIJCB KBXTVH@CHOS -BNCEBτϦΨʔͰϐλΰϥεΠονͯ͠Έͨ • Lambdaトリガーは便利 • API Gatewayからの呼び出しも同期呼び出しと いうことで、トリガー分類される
• ⾮同期呼び出しの場合、1回以上実⾏されるの が保証されているので、冪等性の確保を忘れず に • S3トリガーが発砲されなかったという話を聞き ますが、⾃分は遭遇したことがない。 • 今度はDestinationsも使ってあげたい
ऴΘΓ KBXTVHDIJCB KBXTVH@CHOS -BNCEBτϦΨʔͰϐλΰϥεΠονͯ͠Έͨ https://jawsug-chiba.connpass.com/event/239655/ JAWS-UG千葉⽀部オンライン#15 re:Invent Tech Re:Cap &
ハンズオン 開催します!
ऴΘΓ KBXTVHDIJCB KBXTVH@CHOS -BNCEBτϦΨʔͰϐλΰϥεΠονͯ͠Έͨ ご静聴 ありがとう ございました