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
650
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
My First Impression Of Kiro / 20250801-kumoben-lt
kwada
0
79
(全日本人)待望のS3トリガーのLambda無限ループ対応について / chibaraki-1
kwada
0
140
AWS Lambdaに出会って人生が変わった1人の10年間 /awslambda10th
kwada
0
97
GPSデバイスを使った簡易位置案内システムの構築をしてみた話。/jawsfesta2024
kwada
0
800
とある航空会社の飛行機の乗り方をお教えします。/20240913-lt
kwada
3
310
Building a Simple Navigation Guide Service Using GPS Devices/jaws-pankration2024
kwada
0
120
IaCジェネレーターを使って、昔に作ったLambda関数をCDK管理下においてみた / jaws-ug-josys-30
kwada
0
140
SORACOM UG Explorer 2023ハンズオンの裏側サービスを紹介 / soracom-ug-online-17
kwada
0
320
(2023.08.17 Update)Detecting and stopping recursive loops in AWS Lambda functionsでAWS Lambdaの無限ループを防ぐ! / jaws-ug-shizuoka
kwada
0
250
Other Decks in Technology
See All in Technology
Webアプリケーションにオブザーバビリティを実装するRust入門ガイド
nwiizo
7
830
20250910_障害注入から効率的復旧へ_カオスエンジニアリング_生成AIで考えるAWS障害対応.pdf
sh_fk2
3
260
新アイテムをどう使っていくか?みんなであーだこーだ言ってみよう / 20250911-rpi-jam-tokyo
akkiesoft
0
280
AIエージェント開発用SDKとローカルLLMをLINE Botと組み合わせてみた / LINEを使ったLT大会 #14
you
PRO
0
120
Webブラウザ向け動画配信プレイヤーの 大規模リプレイスから得た知見と学び
yud0uhu
0
230
💡Ruby 川辺で灯すPicoRubyからの光
bash0c7
0
120
react-callを使ってダイヤログをいろんなとこで再利用しよう!
shinaps
1
240
2つのフロントエンドと状態管理
mixi_engineers
PRO
3
110
MCPで変わる Amebaデザインシステム「Spindle」の開発
spindle
PRO
3
3.3k
「何となくテストする」を卒業するためにプロダクトが動く仕組みを理解しよう
kawabeaver
0
410
まずはマネコンでちゃちゃっと作ってから、それをCDKにしてみよか。
yamada_r
2
110
職種の壁を溶かして開発サイクルを高速に回す~情報透明性と職種越境から考えるAIフレンドリーな職種間連携~
daitasu
0
170
Featured
See All Featured
How to Ace a Technical Interview
jacobian
279
23k
Site-Speed That Sticks
csswizardry
10
820
Navigating Team Friction
lara
189
15k
Creating an realtime collaboration tool: Agile Flush - .NET Oxford
marcduiker
31
2.2k
Build The Right Thing And Hit Your Dates
maggiecrowley
37
2.9k
Imperfection Machines: The Place of Print at Facebook
scottboms
268
13k
Fashionably flexible responsive web design (full day workshop)
malarkey
407
66k
Practical Orchestrator
shlominoach
190
11k
Why Our Code Smells
bkeepers
PRO
339
57k
jQuery: Nuts, Bolts and Bling
dougneiner
64
7.9k
Optimizing for Happiness
mojombo
379
70k
No one is an island. Learnings from fostering a developers community.
thoeni
21
3.4k
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τϦΨʔͰϐλΰϥεΠονͯ͠Έͨ ご静聴 ありがとう ございました