Slide 1

Slide 1 text

© 2020, Amazon Web Services, Inc. or its affiliates. All rights reserved. Serverless Services Update Kensuke Shimokawa R e : C a p S e s s i o n Serverless Specialist Solutions Architect Amazon Web Services Japan K.K. @_kensh

Slide 2

Slide 2 text

自己紹介 Name Kensuke Shimokawa Company Amazon Web Services Japan K.K. Role Serverless Specialist Solutions Architect @_kensh

Slide 3

Slide 3 text

Agenda AWS Lambda Update Amazon API Gateway Update AWS StepFunctions Update And yet other updates!! @_kensh

Slide 4

Slide 4 text

AWS Lambda Update

Slide 5

Slide 5 text

© 2020, Amazon Web Services, Inc. or its affiliates. All rights reserved. SQL

Slide 6

Slide 6 text

© 2020, Amazon Web Services, Inc. or its affiliates. All rights reserved.

Slide 7

Slide 7 text

クライアント RDSとの接続性 (ブロッカー) RDS

Slide 8

Slide 8 text

クライアント RDSとの接続性 (ブロッカー) 大量のDB接続リクエスト が発生 RDS 側のリソースが パンクする

Slide 9

Slide 9 text

これまでの AWS Lambdaでの対策 同時リクエスト数を制御 or 入り口でスロットリングする 1 DB接続数を制御する 2 Amazon DynamoDB 分散型のDBを使う 3

Slide 10

Slide 10 text

これまでの AWS Lambdaでの対策 同時リクエスト数を制御 or 入り口でスロットリングする 1 DB接続数を制御する 2 Amazon DynamoDB 分散型のDBを使う 3

Slide 11

Slide 11 text

Using Amazon RDS Proxy with AWS Lambda (Public Preview) • RDS Proxy の発表 • コネクションプールの管理を行い、データベースへのコネクション要求が過剰に発生した場合にも、 クライアントの接続を待機させたり、既存のコネクションを効率的に再利用させることができる • RDS MySQL 5.6 / 5.7、Aurora MySQL にて利用可能 • 東京、バージニア北部、オハイオ、オレゴン、アイルランドの 5 リージョンでプレビュー利用開始 • AWS Lambda と RDS Proxy の統合 • RDS Proxy を利用することで、これまでの AWS Lambda と RDS との間で発生しやすかった、コネク ションの過剰使用を抑止することができる • AWS Lambda のコンソールから RDS Proxy を作成でき、シームレスな統合を実現 • RDS Proxy を配置する VPC と、AWS Lambda を接続する必要あり ... ☓ ... wait fail

Slide 12

Slide 12 text

Using Amazon RDS Proxy with AWS Lambda (Public Preview) 利用方法 AWS Lambda のコンソールより Add database proxy をクリック 接続先の RDS インスタンスを選択し、RDS インスタン スへ接続するための認証情報を格納する Secrets Manager のシークレット ARN を指定する。 IAM ロールには、Secrets Manager のシークレットに対 する読み取り権限を持ったロールを指定する。 AWS Lambda からの接続には、Secrets Manager から取 得した認証情報を利⽤することが推奨されるが、関数 にハードコードしたものや Lambda 関数の環境変数に 格納した認証情報を利⽤して接続することも可能。

Slide 13

Slide 13 text

Using Amazon RDS Proxy with AWS Lambda (Public Preview) 利用方法 AWS Lambda のコンソールより Add database proxy をクリック 接続先の RDS インスタンスを選択し、RDS インスタン スへ接続するための認証情報を格納する Secrets Manager のシークレット ARN を指定する。 IAM ロールには、Secrets Manager のシークレットに対 する読み取り権限を持ったロールを指定する。 AWS Lambda からの接続には、Secrets Manager から取 得した認証情報を利⽤することが推奨されるが、関数 にハードコードしたものや Lambda 関数の環境変数に 格納した認証情報を利⽤して接続することも可能。

Slide 14

Slide 14 text

Using Amazon RDS Proxy with AWS Lambda (Public Preview) (再掲) • RDS Proxy の発表 • コネクションプールの管理を行い、データベースへのコネクション要求が過剰に発生した場合にも、クライ 接続を待機させたり、既存のコネクションを効率的に再利用させることができる • RDS MySQL 5.6 / 5.7、Aurora MySQL にて利用可能 • 東京、バージニア北部、オハイオ、オレゴン、アイルランドの 5 リージョンでプレビュー利用開始 • AWS Lambda と RDS Proxy の統合 • RDS Proxy を利用することで、これまでの AWS Lambda と RDS との間で発生しやすかった、コネクション 用を抑止することができる • RDS Proxy を配置する VPC とAWS Lambda を接続する必要あり ... ☓ ... wait fail

Slide 15

Slide 15 text

© 2020, Amazon Web Services, Inc. or its affiliates. All rights reserved.

Slide 16

Slide 16 text

© 2020, Amazon Web Services, Inc. or its affiliates. All rights reserved.

Slide 17

Slide 17 text

AWS Lambda VPC接続の改善 ( 2019 fall )

Slide 18

Slide 18 text

AWS Lambda VPC接続の改善 ( 2019 fall )

Slide 19

Slide 19 text

© 2020, Amazon Web Services, Inc. or its affiliates. All rights reserved.

Slide 20

Slide 20 text

クライアント スパイキーなアクセス(ブロッカー) リクエストが急増 Lambda関数がColdStart

Slide 21

Slide 21 text

Provisioned Concurrency for Lambda Functions • Lambda 関数のコールドスタート問題に対応 • 代表例として Java ランタイムを利用するケースなど、関数の初回起動時に大きく時間を要する場合、 この機能を使うことで、事前にウォームアップした状態から関数を実行開始することが可能となる • Lambda 関数のバーストに備えることが可能 • AWS Lambda では、関数の実行が一度に大量に行われた (バーストした) 場合、仮に Lambda 関数の 同時実行数を上限緩和していても、初期同時実行数のバースト制限 (東京リージョンの場合は 1000) までしか一度に実行できず、以降は 1 分ごとに 500 ずつ同時実行可能な数が増加する • この機能により、あらかじめ同時実行数をプロビジョニングしておくことが可能となるため、関数の 実行数のバーストにあらかじめ備えておくことが可能となる (※) ... ... ...

Slide 22

Slide 22 text

利用方法 同時実⾏数のメニューから プロビジョニングされた 同時実⾏ より、追加もしくは Add Configuration を クリック Lambda 関数のエイリアス、もしくはバージョンを選択する。 $LATEST をポイントしているエイリアスや、バージョン未発⾏の Lambda 関数には設定できないので注意。 プロビジョニングする同時実⾏数を⼊⼒する。 100 件分が他の関数の実⾏のため予約されており、⼊⼒可能な最⼤値は東 京リージョンの場合、既定で 900 になる。⾃⾝で同時実⾏数を他に予約し ている場合は、その分も減算される。 Provisioned Concurrency for Lambda Functions

Slide 23

Slide 23 text

VPC Spike RDS (preview)

Slide 24

Slide 24 text

SQL 利用に立ちはだかるブロッカー • DB Connection • => RDS Proxyにより改善 (Public Preview : フィードバックをお待ちしています!) • VPCとのネットワーク接続性も改善 • スパイクするワークロード • => Provisioned Concurrencyにより改善

Slide 25

Slide 25 text

© 2020, Amazon Web Services, Inc. or its affiliates. All rights reserved.

Slide 26

Slide 26 text

AWS Lambda now supports Node.js 12, Java 11, and Python 3.8 • 各言語の新バージョンをサポート • いずれもAmazon Linux 2で動作する • Node.js 12 • 最新のLTSリリース、2020年4月までセキュリ ティ・バグ修正が継続される • Java 11 • 実行環境はAmazon Corretto 11が利用される • Python 3.8 • 「Assignment expressions」や「positional- only arguments」「typing improvements」な どのPython 3.8の新機能を活用できる

Slide 27

Slide 27 text

AWS Lambda Runtime Support Policy https://docs.aws.amazon.com/ja_jp/lambda/latest/dg/runtime-support-policy.html

Slide 28

Slide 28 text

Amazon API Gateway update

Slide 29

Slide 29 text

No content

Slide 30

Slide 30 text

API Gateway が扱うAPI • 単⼀HTTPメッセージで1つの操作に関する情報を(理想では)含む • HTTPメソッド(PUT, GET, POST, DELETE, …)の表現で操作 REST • クライアントとサーバー間の双⽅向通信を実現するための通信仕様 • ⼀つのコネクションで継続的なデータ送受信が可能 • URIスキームは セキュアWebSocket⽤の「wss://~」を利⽤ WebSocket API Gateway “ステートレス” “ステートフル” • 主にLambda関数をバックエンドとするシンプルな外部向けAPI化 (RESTより安価) HTTP API(beta) “ステートレス” 2019/12/04 beta (東京リージョン利⽤可)

Slide 31

Slide 31 text

API 作成の流れ (新規作成) ②:プロトコル 種別とタイプ 選択 ③-a:リソース & メソッド設定 ④:デプロイと ステージ設定 ③-c:ルート設定 • API仕様に基づき REST or WebSocketを選択 • RESTの場合はエン ドポイントタイプ を選択 ü リージョン ü エッジ最適化 ü プライベート • プロトコル種別に 応じたAPIの設定を 実施 • 設定後、APIとして のテスト呼び出し が可能 (公開前の状態にお けるテスト) • デプロイ操作(API 単位)によりクライ アントから呼び出 し可能な状態へ • デプロイ先ステー ジを新規または既 存から選択し、ス テージの設定と接 続テスト ①:APIの設計 (仕様の確認) • 作成するAPIの要 求・仕様を確認 • 以降の作業で⾏う 設定項⽬を検討 ③-b:ルート & メソッド設定 REST WebSocket HTTP API(beta)

Slide 32

Slide 32 text

ステージ: staging ステージ: dev https://.execute-api..amazonaws.com/prod/… https://.execute-api..amazonaws.com/staging/… https://.execute-api..amazonaws.com/dev/… ステージ: prod ステージ: $default https://.execute-api..amazonaws.com/… ※$defaultステージは、プロトコルが「HTTP API」(後述)の場合にのみ 利⽤可能な予約されたステージ (URLにステージ名が含まれないなどの特殊性を持つ)

Slide 33

Slide 33 text

REST メソッド リクエスト 統合 リクエスト メソッド レスポンス 統合 レスポンス キ シ 使 ⽤ 量 プ ラ ン リ ソ ス ポ リ シ WAF 連 携 Network Load Balancer HTTP AWS サービス Lambda HTTP Lambda API エ ン ド ポ イ ン ト X-Ray 連 携 REST APIと⽐較し、多くのお客様でAPI呼び出し料⾦が安価に(およそ70%低下も) HTTPS 統 合 バ ク エ ン ド 「Lambda関数 または HTTPサービスへ プロキシ統合型でのシンプルな呼び出し」に特化 機能とのトレードオフの上で、 開発体験向上・コスト削減が可能 HTTP API API エ ン ド ポ イ ン ト HTTPS 統 合 バ ク エ ン ド プロキシ 統合型

Slide 34

Slide 34 text

HTTP APIとREST APIの提供機能の違い オーソライザー HTTP API REST API Lambdaオーソライザー - ✓ IAMアクセス権限 - ✓ Cognitoオーソライザー - ✓ JWTオーソライザー (※Cognitoにも利用可) ✓ - バックエンド統合 HTTP API REST API HTTP プロキシ統合 ✓ ✓ Lambda プロキシ統合 ✓ ✓ HTTP - ✓ Lambda - ✓ AWSサービス - ✓ VPCリンク(Private統合) - ✓ Mock - ✓ HTTP APIは「プロキシ統合」のみ • Velocity Template Languageを⽤いたテンプ レート機能などは持たない HTTP APIは「JWTオーソライザー」のみ対応 • Lambdaオーソライザーでのカスタム認証 も利⽤不可であることに注意

Slide 35

Slide 35 text

HTTP APIはシンプルなPublic APIエンドポイント機能を提供 (「リージョン」のみ指定可能であることに注意) HTTP APIとREST APIの提供機能の違い 各種機能 HTTP API REST API 使用量プラン - ✓ APIキー - ✓ キャッシュ - ✓ 要求/応答検証 - ✓ テスト呼び出し - ✓ CORS設定 ✓ - 自動デプロイ ✓ - デフォルトステージ ✓ - デフォルトルート ✓ - APIタイプ HTTP API REST API リージョン ✓ ✓ エッジ最適化 - ✓ プライベート - ✓ AWSサービスとの統合 HTTP API REST API X-Ray連携 - ✓ セキュリティ系機能 HTTP API REST API リソースポリシー - ✓ クライアント証明書 - ✓ AWS WAF 連携 - ✓

Slide 36

Slide 36 text

Amazon API Gateway (REST API)のご使用料金

Slide 37

Slide 37 text

Amazon API Gateway (HTTP API)のご使用料金

Slide 38

Slide 38 text

HTTP API for Amazon API Gateway (beta)のまとめ • 低コスト 最初の 3 億回リクエストまで $1/million それ以降は $0.9/million + データ転送料 • 低レイテンシー • 統合 Lambda, HTTP プロキシ統合のみ • 認証 JWT オーソライザ • ステージへのオートデプロイ • CORS 設定の簡素化 • プロトコルは HTTPS Amazon API Gateway HTTP Endpoint AWS Lambda function

Slide 39

Slide 39 text

AWS Step Functions update

Slide 40

Slide 40 text

AWS Step Functions adds Amazon EMR service integration • Step Functions で EMR ステップがサポートされました。 • 条件付きのロジックと分岐を含む高度な処理ステップを構築でき、 ビッグデータ処理のワークフローを少しのコード追加で実現可能に。 • サンプル • https://docs.aws.amazon.com/ja_jp/ step-functions/latest/dg/sample-emr-job.html

Slide 41

Slide 41 text

AWS Step Functions Express Workflows

Slide 42

Slide 42 text

AWS Step Functions Express Workflows: High Performance & Low Cost • これまでの Step Functions (Standard Workflows) に加え、実行時間が短く大量に実行されるステートマシンに適 した Express Workflows がすべてのリージョンで提供開始 • API Gateway や CloudWatch Events など、Standard と同様のイベントソースをサポート • Standard と同様に ASL (Amazon States Language) でワークフローを定義 Standard Express ステートマシンの最大実行時間 1 年 5 分 ステートマシンの開始レート (上限緩和可能) Bucket Size : 800 Refill Rate per Second : 150 Bucket Size : 6000 Refill Rate per Second : 6000 ステート変化レート (上限緩和可能) Bucket Size : 800 Refill Rate per Second : 500 ほぼ無制限 料金 ステートが変化した回数に応じた課金 ・4000 回まで無料 ・以降は 1000 回あたり 0.025USD ステートが開始された回数とワークフロー実行に要した メモリ使用量に応じた課金 ・100 万リクエストあたり 1.00 USD ・GB-秒あたり 0.000004 ~ 0.00001 USD (実行量に応じて GB-秒 あたりの料金は変動) 実行履歴 API およびコンソールから確認可能 CloudWatch Logs から確認 API およびコンソールからは確認不可 実行セマンティクス Exactly-once At-least-once アクティビティのサポート あり なし

Slide 43

Slide 43 text

(例) 1 ヶ⽉の状態遷移の合計数: 3 回の状態遷移 x 10 万回の実⾏ = 30 万回の状態遷移 1 ヶ⽉の料⾦: (300,000 – 4,000 回の無料枠) x 状態遷移 1 回あたり 0.000025 USD = 7.40 USD 状態遷移=4回 ・Select image converter ・RAW to Tiff ・Load in Database ・End 状態遷移=3回 ・Select image converter ・Unsupported Image Type ・End • 状態遷移 1,000 回あたり $0.025 (Tokyo Region) • 状態遷移 1 回あたり $0.000025 • 毎⽉ 4,000 回までの状態遷移は無料 AWS Step Functions Standard Workflows の料金 • 価格はリージョンごとに異なる • リトライは追加の状態遷移として計算

Slide 44

Slide 44 text

ステートが開始された回数と ワークフロー実行に要したメモリ使用量に応じた課金 ・100 万リクエストあたり 1.00 USD ・GB-秒あたり 0.000004 ~ 0.00001 USD (実行量に応じて GB-秒 あたりの料金は変動) AWS Step Functions Express Workflows の料金 https://aws.amazon.com/jp/step-functions/pricing

Slide 45

Slide 45 text

バケット 「レート」=トークンの補充スピード = 「バケットに追加されるトークン数/秒」 (アカウントレベルの初期値 … 6,000 req/秒) リクエスト 処理されるリクエスト 1つのリクエストは 1つのトークンを消費 「バースト(バースト上限)」= バケット内のトークンの初期値 兼 バケット最⼤サイズ (アカウントレベルの初期値 … 6,000) トークン トークンバケットアルゴリズム

Slide 46

Slide 46 text

AWS Step Functions Express Workflows: High Performance & Low Cost ステートマシンを定義する際に、Standard か Express のいずれかのタイプを選択できる。 (あとから Standard と Express を切り替えることは不可) 利⽤⽅法

Slide 47

Slide 47 text

© 2020, Amazon Web Services, Inc. or its affiliates. All rights reserved. Yet other updates – 9 Updates!!! Kensuke Shimokawa Serverless Specialist Solutions Architect Amazon Web Services Japan K.K. @_kensh

Slide 48

Slide 48 text

Yet other updates::Agenda – 9 Updates!!! AWS Lambda q ⾮同期呼び出しの最⼤イベント経過時間と最⼤再試⾏回数をサポート q ⾮同期呼び出しの宛先指定をサポート q Amazon Kinesis Data Streams および Amazon DynamoDB イベントソースの 障害処理機能 q Amazon Kinesis Data Streams および Amazon DynamoDB イベントソースで 並列化係数をサポート q イベントソースとして Amazon SQS FIFO をサポート q Amazon CloudWatch メトリクスでパーセンタイルのサポートを追加 AWS Serverless Application Model q AWS SAM CLI からのデプロイがより簡単に AWS Simple Queue Service q 1 分間隔の CloudWatch メトリクスをサポート Amazon EventBridge q Schema Registry & Schema Discovery (Preview) @_kensh

Slide 49

Slide 49 text

© 2020, Amazon Web Services, Inc. or its affiliates. All rights reserved. AWS Lambda ⾮同期呼び出しの最⼤イベント経過時間 と最⼤再試⾏回数をサポート

Slide 50

Slide 50 text

AWS Lambda のトリガーの種類について (おさらい) 1/2 q 同期呼び出しのトリガー : イベントソースが Lambda を呼び出すタイプの トリガー。呼び出しとともに Lambda が実⾏されるため、Lambda 関数の 処理結果は呼び出し元へ返却される。 Amazon API Gateway AWS Lambda q ⾮同期呼び出しのトリガー : イベントソースが Lambda を呼び出すが、イ ベントの情報を Lambda 内部のキューにいったん格納し、あとから実⾏す るタイプ。Lambda 関数の処理結果は呼び出し元に返却されない。 AWS Lambda Amazon Simple Storage Service (S3)

Slide 51

Slide 51 text

q ポーリングベースのトリガー : Lambda がイベントソースに対して、最新 データがないかポーリングするタイプのトリガー。ストリームベースのもの と、そうでないものに分かれる。 q ストリームベース : シャードごとに処理され、同⼀シャード内の新しいメッセー ジに対する処理はブロックされる。 q ストリームベースでない : 新しいメッセージに対する処理はブロックされない。 Amazon Kinesis Data Streams AWS Lambda 待機 AWS Lambda のトリガーの種類について (おさらい) 2/2 Amazon Simple Queue Service Standard Queue AWS Lambda

Slide 52

Slide 52 text

AWS Lambda と統合されている AWS サービス イベントソース タイプ Amazon Elastic Load Balancing (Application Load Balancer) 同期 Amazon Cognito 同期 Amazon Alexa 同期 Amazon Lex 同期 Amazon API Gateway 同期 Amazon CloudFront (Lambda@Edge) 同期 Amazon Kinesis Data Firehose 同期 AWS Step Functions 同期 イベントソース タイプ ストリームベース Amazon S3 ⾮同期 Amazon Simple Notification Service ⾮同期 Amazon Simple Email Service ⾮同期 Amazon EventBridge (Amazon CloudWatch Events) ⾮同期 AWS CodeCommit ⾮同期 AWS Config ⾮同期 AWS IoT Events ⾮同期 AWS CloudFormation ⾮同期 Amazon CloudWatch Logs ⾮同期 Amazon API Gateway (明⽰的に⾮同期を指定した場合) ⾮同期 Amazon DynamoDB ポーリング ○ Amazon Kinesis Data Streams ポーリング ○ Amazon Simple Queue Service ポーリング X

Slide 53

Slide 53 text

⾮同期呼び出しの動作の詳細について (おさらい) q ⾮同期のトリガーの場合、発⽣したイベントの情報が Lambda のシステム内のキュー に格納される q Lambda 関数の同時実⾏数 (東京リージョンの場合は既定で 1000) が不⾜している場 合や Lambda ⾃体の⼀時的なシステムエラーにより実⾏できなかった場合、最⼤ 6 時 間のあいだリトライされる。リトライ間隔は、1 秒から 5 分まで指数関数的に増加す る。 q Lambda 関数で実装した処理のなかでエラーが発⽣した場合、2 回リトライし、それ でも失敗する場合は配信不能キュー (DLQ) に移動させる AWS Lambda Amazon Simple Storage Service (S3) 2 回のリトライ 6 時間の リトライ ・・・・・

Slide 54

Slide 54 text

【AWS Lambda】⾮同期呼び出しの最⼤イベント経過時間 と最⼤再試⾏回数をサポート q 最⼤イベント経過時間 (Maximum age of event) q 同時実⾏数不⾜やシステムエラー時のリトライを⾏う時間。 q 60 秒から 6 時間までのあいだで指定できる。 q たとえば 60 秒を指定すると、エラー発⽣時に 1 秒、2 秒、4 秒、と指数関数的に間隔 を増やしてリトライされ、データがキューに格納されてから 60 秒が経過するとイベン トデータを削除、もしくは配信不能キュー (DLQ) へ移動するといった動作になる。 q ⼀部のイベントソースからの実⾏要求が⼤量に発⽣し、他の Lambda 関数の実⾏を妨げ てしまっている場合などに有効。 q 最⼤再試⾏回数 (Retry attempts) q Lambda 関数で実装した処理のなかでエラーが発⽣した際のリトライを⾏う回数。 q 0 回から 2 回までのあいだで指定できる。 q 0 回を指定すると、関数の処理の中でエラーが発⽣してもリトライを⾏わず、イベント データを削除、もしくは配信不能キュー (DLQ) へ移動するといった動作になる。 q 実⾏の負荷やコスト軽減のため、エラー発⽣時は⼀切のリトライをしたくない場合など に有効。

Slide 55

Slide 55 text

【AWS Lambda】⾮同期呼び出しの最⼤イベント経過時間 と最⼤再試⾏回数をサポート 設定した最⼤イベント経過時間、もしくは最⼤再 試⾏回数を超えた場合、配信不能キュー (DLQ) にイベントの情報を送信できる。 Dead Letter Queue AWS Lambda Amazon Simple Storage Service (S3) 0 回 ~ 2 回のリトライ 60 秒 ~ 6 時間の リトライ ・・・・・ 最⼤イベント経過時間 として設定可能 最⼤再試⾏回数 として設定可能

Slide 56

Slide 56 text

【AWS Lambda】⾮同期呼び出しの最⼤イベント経過時間 と最⼤再試⾏回数をサポート コンソールから指定可能。 最⼤イベント経過時間 (Maximum age of event) は既定で 6 時間、最⼤再試⾏回数 (Retry attempts) は既定で 2 回となって いる。 Dead-letter queue service に、実⾏に失 敗したイベントデータの送信先を指定。 SNS もしくは SQS いずれかが選択可能。 「なし」を選択した場合は、イベントデー タは破棄される。 q 設定⽅法

Slide 57

Slide 57 text

© 2020, Amazon Web Services, Inc. or its affiliates. All rights reserved. AWS Lambda

Slide 58

Slide 58 text

【AWS Lambda】⾮同期呼び出しの宛先指定をサポート q ⾮同期でトリガーされる Lambda 関数の実⾏結果を他の AWS サービスへ配 信できるようになった。 q SQS キュー(標準キューのみ)、SNS トピック、Lambda 関数、EventBridge イベ ントバスのいずれかに対して、実⾏結果を送信できる。 q Lambda 関数の処理成功時、および処理失敗時に、結果を送信する宛先となる AWS サービスをひとつずつ設定可能 。 AWS Lambda Amazon Simple Storage Service (S3) 結果を送信 Amazon Simple Queue Service AWS Lambda Amazon EventBridge Amazon Simple Notification Service

Slide 59

Slide 59 text

{ "version": "1.0", "timestamp": "2019-12-16T05:59:06.266Z", "requestContext": { "requestId": "8bbb8c86-a9ac-4f19-bc94-14151ca2b9ed", "functionArn": "arn:aws:lambda:ap-northeast- 1:123456789012:function:MyLambda:$LATEST", "condition": "Success", "approximateInvokeCount": 1 }, "requestPayload": { "someKey": "some data" }, "responseContext": { "statusCode": 200, "executedVersion": "$LATEST" }, "responsePayload": { "statusCode": 200, "body": "\"Hello from Lambda!\"" } } 【AWS Lambda】⾮同期呼び出しの宛先指定をサポート 呼び出し時にリクエスト された内容 宛先サービスに 送信される内容 Lambda 関数から返却さ れた内容 実⾏された Lambda 関 数や実⾏の成否など

Slide 60

Slide 60 text

{ "version": "1.0", "timestamp": "2019-12-17T18:17:25.968Z", "requestContext": { "requestId": "ef1a47a2-830d-4715-adb0- d8c8a1bc6ca8", "functionArn": "arn:aws:lambda:ap-northeast- 1:123456789012:function:MyLambda:$LATEST", "condition": "RetriesExhausted", "approximateInvokeCount": 3 }, "requestPayload": { "someKey": "some data" }, "responseContext": { "statusCode": 200, "executedVersion": "$LATEST", "functionError": "Unhandled" }, "responsePayload": { "errorType": "Exception", "stackTrace": [ " File \"/var/task/lambda_function.py\", line 4, in lambda_handler\n raise Exception\n" ] } } 【AWS Lambda】⾮同期呼び出しの宛先指定をサポート リトライしても エラーの場合 q 処理失敗時の宛先を指定しておくことで、DLQ を 利⽤する場合よりも詳細なイベントデータが、よ り幅広いサービスに対して送信できる。 エラー時に宛先へ 送信される内容 AWS Lambda 0 回 ~ 2 回のリトライ 60 秒 ~ 6 時間の リトライ ・・・・・

Slide 61

Slide 61 text

AWS Lambda のコンソールから指定可能。 Add destination をクリック。 成功時 (On success) もしくは失敗時 (On failure) を選択し、送信先サービスの ARN (Amazon Resource Name) を⼊⼒ する。 q 設定⽅法 【AWS Lambda】⾮同期呼び出しの宛先指定をサポート

Slide 62

Slide 62 text

© 2020, Amazon Web Services, Inc. or its affiliates. All rights reserved. AWS Lambda

Slide 63

Slide 63 text

これまでのストリームベースのトリガーに対するエラー処理 q ストリームベースのトリガーである Amazon Kinesis Data Streams と Amazon DynamoDB では、あるデータを処理する際に Lambda 関数の実⾏ にエラーが発⽣すると、そのデータの有効期限がくるまでリトライされ続け、 後続のデータを処理することができなかった。 q Amazon Kinesis Data Streams および Amazon DynamoDB のデータの有 効期限は、既定で 24 時間。この時間を経過すると、イベントデータは消失し ていた。 Amazon Kinesis Data Streams AWS Lambda 待機 リトライ エラー

Slide 64

Slide 64 text

【AWS Lambda】Amazon Kinesis Data Streams および Amazon DynamoDB イベントソースの障害処理機能 q レコードの最⼤有効期間 (Maximum age of record) q イベントソースのデータを処理する期間を指定。 q 60 秒 ~ 604800 秒 (7 ⽇) まで設定可能。 q 最⼤再試⾏回数 (Retry attempts) q エラー時に AWS Lambda の実⾏を何回リトライするか指定。 q 0 ~ 10000 まで設定可能。 Amazon Kinesis Data Streams AWS Lambda 待機 エラー 60 秒 ~ 7 ⽇ の有効期間 レコードの最⼤有効期 間として設定可能 0 ~ 10000 回 のリトライ 最⼤再試⾏回数 として設定可能

Slide 65

Slide 65 text

【AWS Lambda】Amazon Kinesis Data Streams およ び Amazon DynamoDB イベントソースの障害処理機能 q 失敗時の送信先 (On-failure destination) q 最⼤再試⾏回数、もしくはレコードの最⼤有効期間のうち、どちらかを超 過した場合に、エラー情報をおくる送信先を指定する。 q SQS キュー(標準キューのみ)、もしくは SNS トピックへ送信できる。 いずれかに 失敗 Amazon Kinesis Data Streams AWS Lambda 待機 エラー 60 秒 ~ 7 ⽇ の有効期間 0 ~ 10000 回 のリトライ

Slide 66

Slide 66 text

{ "requestContext": { "requestId": "1b0ae072-6bbc-4607-964d-ea0dbdbb7cdb", "functionArn": "arn:aws:lambda:ap-northeast- 1:123456789012:function:MyLambda", "condition": "RetryAttemptsExhausted", "approximateInvokeCount": 1 }, "responseContext": { "statusCode": 200, "executedVersion": "$LATEST", "functionError": "Unhandled" }, "version": "1.0", "timestamp": "2019-12-17T20:22:33.918Z", "KinesisBatchInfo": { "shardId": "shardId-000000000000", "startSequenceNumber": "49600905504088798572324636921150351932990796644038475778", "endSequenceNumber": "49600905504088798572324636921150351932990796644038475778", "approximateArrivalOfFirstRecord": "2019-12-17T20:22:32.045Z", "approximateArrivalOfLastRecord": "2019-12-17T20:22:32.045Z", "batchSize": 1, "streamArn": "arn:aws:kinesis:ap-northeast- 1:123456789012:stream/MyStream" } } リクエストおよびレスポンス のコンテキストデータ 失敗時に送信 される内容 エラーが発⽣したシーケンス番号 (実際に処理したデータは含まれな いため、シーケンス番号をもとに 読み出す必要がある) 【AWS Lambda】Amazon Kinesis Data Streams お よび Amazon DynamoDB イベントソースの障害処理 機能

Slide 67

Slide 67 text

【AWS Lambda】Amazon Kinesis Data Streams お よび Amazon DynamoDB イベントソースの障害処理 機能 q 関数エラーの⼆等分 (Split batch on error) q Lambda 関数がデータを処理するあいだにエラーが発⽣した場合、エ ラーが含まれるバッチを 2 等分して処理を継続する機能 Amazon Kinesis Data Streams エラーを発⽣させる メッセージ 0 ~ 10000 回 のリトライ エラー エラー エラー エラー

Slide 68

Slide 68 text

トリガーを追加する際にコンソールから指 定可能。 既定では、最⼤再試⾏回数 (Retry attempts) は 10000 回、レコードの最⼤ 有効期間 (Maximum age of record) は 7 ⽇、関数エラーの⼆等分 (Split batch on error) と失敗時の送信先 (On-failure destination) は未設定となっている。 q 設定⽅法 【AWS Lambda】Amazon Kinesis Data Streams および Amazon DynamoDB イベントソースの障害処理機能

Slide 69

Slide 69 text

© 2020, Amazon Web Services, Inc. or its affiliates. All rights reserved. AWS Lambda

Slide 70

Slide 70 text

ストリームベースのトリガーと Lambda 関数の同時実⾏数 (おさらい) q これまで q Kinesis もしくは DynamoDB Streams のシャード数と、Lambda の同時 実⾏数は 1 : 1 で固定 q Kinesis のシャード数の最⼤値は 200 (東京リージョン) q DynamoDB Streams のシャード数はパーティション数に⽐例する Amazon Kinesis Data Streams AWS Lambda の場合 シャードと同数である 2 件の Lambda 関数が 並列実⾏される

Slide 71

Slide 71 text

【AWS Lambda】Amazon Kinesis Data Streams および Amazon DynamoDB イベントソースで並列化係数をサポート q 並列化係数 q シャード数と Lambda の同時実⾏数の対応を 1 : N (N は⾃然数、最⼤値 は 10 まで) に設定できるようになった q 例えば並列化係数を 3 と設定すると、1 シャードあたり 3 つの Lambda 関数が同時実⾏可能に。 並列化係数 = 3 の場合 Amazon Kinesis Data Streams AWS Lambda 最⼤ 6 件の Lambda 関数が並列実⾏される

Slide 72

Slide 72 text

【AWS Lambda】Amazon Kinesis Data Streams および Amazon DynamoDB イベントソースで並列化係数をサポート q 設定⽅法 q Lambda 関数に Kinesis もしくは DynamoDB トリガーを追加する際に、 Concurrent batches per shard へ 1 から 10 までの値を⼊⼒

Slide 73

Slide 73 text

© 2020, Amazon Web Services, Inc. or its affiliates. All rights reserved. AWS Lambda イベントソースとして Amazon SQS FIFO をサポート

Slide 74

Slide 74 text

q Amazon SQS には、メッセージの順序保証を⾏わないがスループットが⾼ い Standard Queue (標準キュー) と、順序保証を⾏うがスループットが低 い FIFO Queue の 2 種類が存在する。 q AWS Lambda ではこれまで Standard Queue (標準キュー) からのトリ ガーのみをサポートしていたが、新たに FIFO Queue が選択可能となった。 FIFO Queue AWS Lambda 【AWS Lambda】イベントソースとして Amazon SQS FIFO をサポート Amazon Simple Queue Service

Slide 75

Slide 75 text

Amazon SQS FIFO キューの重要な概念 (おさらい) q インフライトメッセージ – バックエンド (コンシューマー) が SQS から受 信中の状態にあるメッセージのこと。 q メッセージグループ – SQS FIFO キューは、先⼊れ先出しの形でメッセー ジの順序を保証するが、順番保証はメッセージグループという単位で⾏わ れる。属するメッセージグループが異なるメッセージどうしでは、順番は 保証されない。 q メッセージグループ ID – メッセージをキューへ送信する際に⽂字列で任意 に指定する。同じメッセージグループ ID を持つメッセージは、同⼀のメッ セージグループへ格納される。 q メッセージ重複削除 ID – メッセージをキューへ送信する際に⽂字列で任意 に指定する。同じメッセージ重複削除 ID を持つメッセージは、最初のメッ セージが到達したあとにもう⼀度送信されたとしても、削除される。 (既定で 5 分以内の重複メッセージが対象となる)

Slide 76

Slide 76 text

【AWS Lambda】イベントソースとして Amazon SQS FIFO をサポート q SQS FIFO キューから Lambda がメッセージを受信する仕組み q Step 1 – インフライトメッセージ (バックエンドが処理中のメッセージ) がない メッセージグループを任意に選択する。 q Step 2 – Step 1 で選択したメッセージグループから、可能な限り多くのメッセー ジを取得し、バッチに格納する。 q Step 3 – Lambda で処理するバッチサイズにまだ余裕がある場合、Step 1 に戻り 他のメッセージグループからメッセージの取得を試⾏する。そのため、ひとつの バッチには複数のメッセージグループの内容を含む可能性がある。 https://aws.amazon.com/jp/blogs/compute/new-for-aws-lambda-sqs-fifo-as-an-event-source/ AWS Lambda メッセージ グループ A メッセージ グループ B バッチ (最⼤ 10 件まで) B3, B2, B1, A3, A2, A1

Slide 77

Slide 77 text

q 注意点 q Exactly Once で AWS Lambda がトリガーされるものではなく、Standard キューと同様に At Least Once での実⾏セマンティクスとなる。 q Exactly Once な処理を⾏いたい場合は、Standard キューと同様に、重複して実⾏ されても良いよう Lambda 関数を冪等な処理にしておく必要がある。 q 前ページに掲載の処理ロジックからも分かるとおり、Lambda 関数がスケール する同時実⾏数は、ユニークなメッセージグループ ID の数以下となる。 q インフライトメッセージが存在するメッセージグループからは、新規のメッセージ の読み出しを⾏わないため。 【AWS Lambda】イベントソースとして Amazon SQS FIFO をサポート

Slide 78

Slide 78 text

© 2020, Amazon Web Services, Inc. or its affiliates. All rights reserved. AWS Lambda

Slide 79

Slide 79 text

パーセンタイルとは︖ q n パーセンタイルとは、測定結果のうち、n % が合格になるような値のこと。 たとえば Web システムの応答に要した秒数 (単位 : ミリ秒) が、 10 回のリクエストのうち、 120, 190, 200, 250, 300, 330, 370, 420, 530, 700 だった場合、90 パーセンタイルは 530 となる。 たとえば、10 回のリクエストのうち、 120, 190, 200, 250, 300, 330, 370, 420, 530, 60000 だった場合、90 パーセンタイルは 530 だが、平均値は 6271 となる。 q 平均値とあわせ、⼀部の特異値に左右されないよう、統計データを確認する ために使われる。

Slide 80

Slide 80 text

【AWS Lambda】Amazon CloudWatch メトリクスで パーセンタイルのサポートを追加 q AWS Lambda の各メトリクスについて、任意のパーセンタイル値を表⽰で きるようになった。 AWS Lambda のメトリクスを選 択し、「統計」をクリック p ではじまるものがパーセンタイルによる統計。 p99 は 99 パーセンタイルを表す。 また、「カスタムパーセンタイル」をクリックして、 任意のパーセンタイル値を表⽰することもできる。

Slide 81

Slide 81 text

© 2020, Amazon Web Services, Inc. or its affiliates. All rights reserved. AWS Serverless Application Model

Slide 82

Slide 82 text

q Step 1 – アプリケーションのひな形を⽣成 sam init q Step 2 – アプリケーションをローカル環境でビルド cd sam-app sam build q Step 3 – S3 バケットを作成 aws s3 mb s3://mybucket q Step 4 – ビルドしたアプリケーションを S3 へアップロード sam package --s3-bucket mybucket --output-template-file packaged.yml q Step 5 – AWS のリソースをデプロイ sam deploy --template-file packaged.yaml --stack-name MySamApp --capabilities CAPABILITY_IAM 旧来の AWS SAM CLI からのデプロイ⼿順 (おさらい) q アプリケーションのデプロイまでには 5 ステップ

Slide 83

Slide 83 text

q 3 ステップでより簡単にサーバーレス開発をスタートできるようになった q Step 1 – アプリケーションのひな形を⽣成 sam init q Step 2 – アプリケーションをローカル環境でビルド cd sam-app sam build q Step 3 – ビルドしたアプリケーションを AWS へデプロイ sam deploy --guided q sam deploy の際に必要な S3 バケットは⾃動⽣成可能に 【AWS Serverless Application Model】AWS SAM CLI からのデプロイがより簡単に

Slide 84

Slide 84 text

【AWS Serverless Application Model】AWS SAM CLI からのデプロイがより簡単に q sam deploy コマンドにガイド付きインタラクティブモードが追加 q 最新の SAM CLI をインストールし、--guided オプションを付与する デプロイ先のリージョンや、AWS Cloud Formation のスタック名を CLI のプロンプトから指定できる

Slide 85

Slide 85 text

【AWS Serverless Application Model】AWS SAM CLI からのデプロイがより簡単に q sam deploy --guided コマンドによるデプロイで影響を受けるリソースや、 リソースの作成経過は、CLI 上の表⽰で確認できる。 CloudFormation 変更 セットの内容 CloudFormation スタック のイベント発⽣履歴

Slide 86

Slide 86 text

© 2020, Amazon Web Services, Inc. or its affiliates. All rights reserved. AWS Simple Queue Service

Slide 87

Slide 87 text

【AWS Simple Queue Service】1 分間隔の CloudWatch メトリクスをサポート q SQS が提供するメトリクスについて 1 分間隔での配信を開始 q 追加のコストや 1 分間隔にするための設定変更は不要 q オハイオ、アイルランド、ストックホルム、東京の 4 リージョンで提供開始 CloudWatch のコンソールか ら、「期間」のプルダウンよ り「1 分」を選ぶ

Slide 88

Slide 88 text

【AWS Simple Queue Service】1 分間隔の CloudWatch メトリクスをサポート q 1 分間隔のメトリクスを利⽤することで、たとえば キューに蓄積したメッ セージ数に応じて AutoScaling を構成する場合など、より柔軟にリソースを 増減させることが可能になる。 5 分間隔のグラフ 1 分間隔のグラフ 表⽰している対象も 時間範囲も同じだが、 5 分間隔と 1 分間隔 で、グラフの波形は ⼤きく変わる

Slide 89

Slide 89 text

© 2020, Amazon Web Services, Inc. or its affiliates. All rights reserved. Amazon EventBridge Schema Registry & Schema Discovery (Preview)

Slide 90

Slide 90 text

Amazon EventBridge q AWS サービスや、対応 SaaS からの イベントをタイムリーに受信し多様な 処理連携を実現 Event source SaaS event bus Custom event bus Default event bus Rules AWS Lambda Amazon Kinesis AWS Step Functions Additional targets q サーバーレスに動作し、イベント受 信のためのサーバーの準備・構成・ 管理が不要 q 簡単に AWS サービスと連携することで、価値 を⽣まない処理連携のプログラミングを排除

Slide 91

Slide 91 text

対応する SaaS 提供パートナー (2020年1⽉22⽇時点)

Slide 92

Slide 92 text

プロパティの⼀覧とそれぞれ の型 (String や独⾃の型など) 独⾃の型の定義も 確認できる 【Amazon EventBridge】Schema Registry & Schema Discovery (Preview) q Schema Registry - EventBridge (CloudWatch Events) でやり取りされ る様々なデータのスキーマを、コンソールからまとめて公開 q (例) EC2 インスタンスの状態変化通知のスキーマ

Slide 93

Slide 93 text

【Amazon EventBridge】Schema Registry & Schema Discovery (Preview) q Schema Discovery - SaaS 提供パートナーから EventBridge へ送信さ れるデータについては、EventBridge へ流⼊するデータからスキーマ情 報を⾃動⽣成可能に q (例) MongoDB Atlas (MongoDB 社にて提供されるマネージドサービス) へデー タの CRUD 処理が⾏われた場合のスキーマ プロパティの⼀覧とそれぞれの型 (String や独⾃の型など) AWS のサービスと全く同じ 形で、パートナーから送信 されるデータのスキーマも 確認できる

Slide 94

Slide 94 text

【Amazon EventBridge】Schema Registry & Schema Discovery (Preview) q Code Bindings – スキーマ定義を⾔語ごとにダウンロード可能 q 2019 年 12 ⽉時点で Java 8、Python 3.6、TypeScript 3 の 3 種類に対応 q アプリケーション開発の際に、ダウンロードしたスキーマ定義をインポートして おくことで、コード補完やコンパイル時のエラー検出に役⽴てることができる

Slide 95

Slide 95 text

まとめ • AWS LambdaでRDSに対する接続性が向上 • AWS LambdaでSpikeに対するPre-Warmingが可能に • Amazon API Gatewayで簡易にHTTPSのエンドポイント作成可能に • AWS Step FunctionsのExpressが登場、より高スループットに From re:Invent and pre:Invent @_kensh

Slide 96

Slide 96 text

Thank you! © 2020, Amazon Web Services, Inc. or its affiliates. All rights reserved. Kensuke Shimokawa @_kensh