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
76
AWS Lambdaに出会って人生が変わった1人の10年間 /awslambda10th
kwada
0
55
GPSデバイスを使った簡易位置案内システムの構築をしてみた話。/jawsfesta2024
kwada
0
490
とある航空会社の飛行機の乗り方をお教えします。/20240913-lt
kwada
3
250
Building a Simple Navigation Guide Service Using GPS Devices/jaws-pankration2024
kwada
0
76
IaCジェネレーターを使って、昔に作ったLambda関数をCDK管理下においてみた / jaws-ug-josys-30
kwada
0
93
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
速くて安いWebサイトを作る
nishiharatsubasa
10
12k
Classmethod AI Talks(CATs) #16 司会進行スライド(2025.02.12) / classmethod-ai-talks-aka-cats_moderator-slides_vol16_2025-02-12
shinyaa31
0
110
TAMとre:Capセキュリティ編 〜拡張脅威検出デモを添えて〜
fujiihda
2
240
Nekko Cloud、 これまでとこれから ~学生サークルが作る、 小さなクラウド
logica0419
2
960
PHPカンファレンス名古屋-テックリードの経験から学んだ設計の教訓
hayatokudou
2
250
SA Night #2 FinatextのSA思想/SA Night #2 Finatext session
satoshiimai
1
140
抽象化をするということ - 具体と抽象の往復を身につける / Abstraction and concretization
soudai
13
2.6k
エンジニアが加速させるプロダクトディスカバリー 〜最速で価値ある機能を見つける方法〜 / product discovery accelerated by engineers
rince
4
310
スタートアップ1人目QAエンジニアが QAチームを立ち上げ、“個”からチーム、 そして“組織”に成長するまで / How to set up QA team at reiwatravel
mii3king
2
1.5k
人はなぜISUCONに夢中になるのか
kakehashi
PRO
6
1.6k
MC906491 を見据えた Microsoft Entra Connect アップグレード対応
tamaiyutaro
1
540
「海外登壇」という 選択肢を与えるために 〜Gophers EX
logica0419
0
700
Featured
See All Featured
Sharpening the Axe: The Primacy of Toolmaking
bcantrill
40
2k
How GitHub (no longer) Works
holman
314
140k
How to Ace a Technical Interview
jacobian
276
23k
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
33
2.8k
Building Flexible Design Systems
yeseniaperezcruz
328
38k
JavaScript: Past, Present, and Future - NDC Porto 2020
reverentgeek
47
5.2k
RailsConf 2023
tenderlove
29
1k
Code Reviewing Like a Champion
maltzj
521
39k
Navigating Team Friction
lara
183
15k
Principles of Awesome APIs and How to Build Them.
keavy
126
17k
"I'm Feeling Lucky" - Building Great Search Experiences for Today's Users (#IAC19)
danielanewman
226
22k
Build The Right Thing And Hit Your Dates
maggiecrowley
34
2.5k
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τϦΨʔͰϐλΰϥεΠονͯ͠Έͨ ご静聴 ありがとう ございました