Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
AWS研修 AWS Lambda
Search
Recruit
PRO
August 18, 2021
Technology
5.8k
2
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
AWS研修 AWS Lambda
2021年度リクルート エンジニアコース新人研修の講義資料です
Recruit
PRO
August 18, 2021
More Decks by Recruit
See All by Recruit
実体験から学ぶ分析エージェントの開発と運⽤
recruitengineers
PRO
8
2.4k
大規模フロントエンド開発におけるmonorepoという選択肢
recruitengineers
PRO
2
90
自律型 AI をセキュアに実装!Gemini と MIG で作る動的コード実行環境
recruitengineers
PRO
1
280
Google Cloud Next Tokyo 26登壇時のスクリプト
recruitengineers
PRO
0
260
つくって納得、つかって実感! 大規模言語モデルことはじめ ver2.0
recruitengineers
PRO
6
2.7k
ブラウザ研修 2026
recruitengineers
PRO
8
2k
事業価値と Engineering 2026年度版
recruitengineers
PRO
59
30k
トヨタ⽣産⽅式(TPS)⼊⾨
recruitengineers
PRO
3
1.5k
JavaScript 研修 (2026)
recruitengineers
PRO
2
960
Other Decks in Technology
See All in Technology
Code for Security プロジェクト紹介 2026年10月
yu23ki14
0
110
自作バイナリを動かす「入口」8選
puhitaku
2
1.3k
AI時代のPRレビューにどう向き合うか?
kairim0
1
250
20261017福岡devIO 「AIは"良いダッシュボード"を作れるか?
jtakeda
0
200
触りたくないデータに、どう触るか AI時代のRBACアクセスガバナンス
ivry_presentationmaterials
0
290
その Valkey 使いこなしていますか?
onk
PRO
5
1.6k
NDIでApple Vision Proにリアルタイム映像送信
jyouryuusui
0
130
Temporal 最高!でも改めて「日付」について調べたら人類の負債すぎる件
riyaamemiya
0
200
ブラウザとサーバーから考えるAI時代のフロントエンド監視
shogo4131
3
1k
JAWS-UGグッズ職人仕事の流儀
kentapapa
0
120
スキマバイトという雇用形態は存在しないので、雇用期間1日のアルバイト契約を事業者とワーカーが結ぶ手続きを支えるのがタイミーなんです
akitoshiga
0
210
Rust で関数型ドメインモデリング
takonda
0
170
Featured
See All Featured
Have SEOs Ruined the Internet? - User Awareness of SEO in 2025
akashhashmi
0
520
Designing Powerful Visuals for Engaging Learning
tmiket
1
610
DevOps and Value Stream Thinking: Enabling flow, efficiency and business value
helenjbeal
2
410
Agile Leadership in an Agile Organization
kimpetersen
PRO
0
290
10 Git Anti Patterns You Should be Aware of
lemiorhan
PRO
659
62k
Docker and Python
trallard
47
4.2k
Building Applications with DynamoDB
mza
96
7.2k
How to optimise 3,500 product descriptions for ecommerce in one day using ChatGPT
katarinadahlin
PRO
3
3.9k
4 Signs Your Business is Dying
shpigford
187
23k
Dealing with People You Can't Stand - Big Design 2015
cassininazir
367
27k
Keith and Marios Guide to Fast Websites
keithpitt
413
23k
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
194
17k
Transcript
AWS Lambda 株式会社リクルート クラウドアーキテクトグループ
アプリケーション開発者のやりたいこと(やらなきゃいけないこと) ビジネス価値の創出 • ビジネス価値 • 競争優位な機能の提供 or 競合劣位な機能のキャッチアップ 2
アプリケーション開発者の欲しているもの ビジネスロジックの実⾏環境(=サーバーに限らない) 3
解決策としてのサーバーレス(AWSにおけるAWS Lambda) 機能 • アプリケーションコードの実⾏環境を提供 ⾮機能 • ⾼いスケーラビリティ • ⾼い対障害性
• ゼロメンテナンス • 低レイヤー名部分(OSレイヤ以下)はAWS側ですべて対応 • ⾼いコスト効率 • ミリ秒単位での課⾦(最⼩100ミリ秒) 4
他のAWSサービスと⽐較してみる 5 Amazon EC2 Amazon EKS Amazon ECS AWS Fargate
AWS Lambda コンテナサービス ⾃由度 管理の⼿間 スケールの単位 ⾼ 低 ⾼ 低 仮想マシン アプリケーション(≒ コンテナ) 関数
Lambdaの処理モデル イベント駆動のためイベントがあったときのみ、起動して処理を実⾏します 6 イベントソース AWS Lambda Lambda Function 連携先サービス 処理ロジックの記述
• S3バケットにオブジェクトが⽣成された • SNSトピックにメッセージが発⾏された • SQSのキューにメッセージがエンキュー された • DynamoDB Streams or Kinesis Data Streamsからメッセージが 流れてきた 各種AWSサービス def lambda_handler(event, context): // 処理ロジック 指定したハンドラが呼び出されます
EC2とLambdaの違い(⼀部のみ) 7 EC2 Lambda 実⾏形式 常時起動 実⾏形式 イベントからトリガーされて起動 スケーリング AutoScalingと連携
特定のメトリクスに合わせてスケール させる必要がある スケーリング 1リクエスト1コンテナ 同時実⾏リクエストに合わせてスケール ※ 外部連携除き1リクエストが期待した時間内に 処理できれば同時実⾏数の上限までスケールできる 環境構築・運⽤(⼀部) 連携するAWSリソースの準備 実⾏したいコードをパッケージしてデプロイ 各種パッケージ等の導⼊・更新 ミドルウェアの導⼊・更新 OSの脆弱性対応 環境構築・運⽤(⼀部) 連携するAWSリソースの準備 実⾏したいコードをパッケージしてデプロイ やることが多い
Lambda関数の必須要素 ① イベントソース ② 関数 8
Lambda関数について考えないといけないこと ① 実⾏ロール ② 割当メモリ ③ タイムアウト 9
イベントソースとLambda関数の起動パターン イベントソースによって起動パターンが決まる ① Request Responseベース Amazon API Gateway ②
⾮同期イベントベース Amazon S3, Amazon SNS ③ Stream Pollingベース Amazon Kinesis Data Streams, Amazon DynamoDB Streams ④ Queue Pollingベース Amazon SQS 10
Request Responseベース リクエストに対してレスポンスとして処理結果を返す形の実⾏形式 11 API Gateway Client HTTPS/WSS Lambda Function
リクエスト レスポンス 同期呼出 レスポンス API Gatewayがリクエストを受け取ってLambda関数を同期呼出します。 レスポンスを受け取った後、クライアントにレスポンスを返す
⾮同期イベントベース リクエストに対してレスポンスとして処理を受け付けたことを返す (Lambda Function内の処理が成功したか否かはレスポンスに影響しない) 12 Client Amazon S3 Amazon SNS
Client (Publisher) PubObject Publish Subscribers Lambda Function Lambda Function イベント発⽕ ⾮同期呼出 ⾮同期呼出 イベント 発⽕ Amazon S3 Amazon SNS
Stream Pollingベース Streamに対してAWS LambdaがPollingする形 13 Client (Producer) Client (Producer) Amazon
Kinesis Data Streams Amazon DynamoDB Streams AWS Lambda AWS Lambda Lambda Functions Lambda Functions PutRecord PutItem shards shards Amazon Kinesis Data Streams Amazon DynamoDB Streams 同期呼出 同期呼出 Polling Polling
Queue Pollingベース Queueに対してAWS LambdaがLong Pollingする形 14 Client (Producer) Amazon SQS
AWS Lambda Lambda Functions 同期呼出 Long Polling Enqueue Amazon SQS PollingとLong Pollingの違いについては https://ja.javascript.info/long- polling#:~:text=%E3%83%AD%E3%83%B3%E3%82%B0%E3%83%9D%E3%83%BC%E3%83%A A%E3%83%B3%E3%82%B0(Long%20polling)%E3%81%AF,%E3%82%82%E3%81%93%E3%82% 8C%E3%81%A7%E5%8D%81%E5%88%86%E3%81%A7%E3%81%99%E3%80%82 を参照
起動パターンと呼び出しタイプ 15 / / Request Responseベース
) 3 ( ) 3 ( ( ( ) ) 3 ) ) 3 ⾮同期イベントベース )( )( Stream Pollingベース ( ( )( Queue Pollingベース 同期呼び出し Lambda関数から処理結果 を返す ⾮同期呼び出し Lambda関数がトリガーされる ところまで確認。関数そのもの の成否は関知しない レ レ レ レ
⾮機能⾯で考慮しなければいけないこと • リトライ • 同時実⾏数 • コールドスタート 16
リトライ 17 / / Request Responseベース
) 3 ( ) 3 ( ( ( ) ) 3 ) ) 3 ⾮同期イベントベース )( )( Stream Pollingベース ( ( )( Queue Pollingベース • リトライはしない • エラー時はレスポンスヘッダ にエラーを含める • エラー内容によって特定のス テータスコードを返す • 関数から明⽰的に特定のエ ラーを返すことも可能 • ⾃動で2回リトライ (イベント通知そのものが 失敗した場合のみ) • 即時リトライではない • DLQを設定しておくと未処理 イベントをSQSかSNSに移動 可能 • データの有効期限が来れるま でリトライする • 処理に失敗したレコードの有 効期限が切れるか、処理が成 功するまで当該シャードから の新規レコードの読み込みは ブロックされる • 処理に失敗したメッセージは キューに戻る、可視性タイム アウトが経過した後、再度処 理される • 新規メッセージの処理はブ ロックされない 起動パターンに応じてリトライの形は変わります
同時実⾏数 2つの制限が存在します ① AWSアカウント単位の同時実⾏数制限 • リージョン毎に1000まで(上限緩和可能) ② 関数単位の同時実⾏数制限 • 関数ごとに任意の数値を設定可能
②を⼤きくしすぎると他の処理の実⾏を阻害し、スロットリングが発⽣することが あります。 18
スロットリングを回避するための対策 ① 上限緩和申請 アカウント単位の同時実⾏数制限は実績に基づいて緩和が可能です ② ⾮同期呼び出しにする 同期呼び出しと異なり、⾮同期呼び出しは⼀時的にバーストが可能です 19
コールドスタート 新規コンテナが⽴ち上がる際には、以下の処理が実⾏されます (主に初回実⾏や関数がスケールアウトした場合に発⽣) 1. ENI作成 2. コンテナ⽴ち上げ 3. デプロイパッケージの読み込み 4.
デプロイパッケージの展開 5. ランタイム起動・初期化 6. 関数・メソッドの実⾏ 20 コールドスタート時はすべてを実⾏
実装時の注意とポイント • タイムアウト設定 • 永続化データは外部(S3や各種DB)に置くこと • ローカルに置いたデータは原則永続化されません • 設定は環境変数を使って外部化する •
環境差異(ローカル・開発・ステージング・本番)を埋めるための⼿段として利⽤ • Lambda関数に環境変数として指定 • 関数実⾏時にSystems Manager Parameter StoreやSecret Managerから動的に取得 • ハンドラとコアロジックを分離する • ハンドラとコアロジックを別の関数に分けることで単体テストが容易化できます • 冪等性の確保(後述) 21
冪等性の確保 Lambda関数はat least onceで実⾏されます。 イベント1回あたり2回以上関数がトリガーされることがあります (=まれに2回以上呼び出されることがあります) 対策 1. 複数回同じ処理を実⾏しても⼤丈夫なロジックにする(冪等性を担保する) 2.
実⾏済みか否かを判断してスキップするようにする 既に実⾏済みか否かをイベントIDベースでDynamoDBなどに格納しておき判断できるようにする 22