Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Serverless Services Update at AWS re:Invent 2019

A49d01c48e10d19feb8e61310bceabab?s=47 kensh
January 22, 2020

Serverless Services Update at AWS re:Invent 2019

Serverless Services Update at AWS re:Invent 2019

A49d01c48e10d19feb8e61310bceabab?s=128

kensh

January 22, 2020
Tweet

Transcript

  1. © 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
  2. 自己紹介 Name Kensuke Shimokawa Company Amazon Web Services Japan K.K.

    Role Serverless Specialist Solutions Architect @_kensh
  3. Agenda AWS Lambda Update Amazon API Gateway Update AWS StepFunctions

    Update And yet other updates!! @_kensh
  4. AWS Lambda Update

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

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

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

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

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

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

    DynamoDB 分散型のDBを使う 3
  11. 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
  12. 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 関数の環境変数に 格納した認証情報を利⽤して接続することも可能。
  13. 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 関数の環境変数に 格納した認証情報を利⽤して接続することも可能。
  14. 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
  15. © 2020, Amazon Web Services, Inc. or its affiliates. All

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

    rights reserved.
  17. AWS Lambda VPC接続の改善 ( 2019 fall )

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

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

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

  21. Provisioned Concurrency for Lambda Functions • Lambda 関数のコールドスタート問題に対応 • 代表例として

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

    関数のエイリアス、もしくはバージョンを選択する。 $LATEST をポイントしているエイリアスや、バージョン未発⾏の Lambda 関数には設定できないので注意。 プロビジョニングする同時実⾏数を⼊⼒する。 100 件分が他の関数の実⾏のため予約されており、⼊⼒可能な最⼤値は東 京リージョンの場合、既定で 900 になる。⾃⾝で同時実⾏数を他に予約し ている場合は、その分も減算される。 Provisioned Concurrency for Lambda Functions
  23. VPC Spike RDS (preview)

  24. SQL 利用に立ちはだかるブロッカー • DB Connection • => RDS Proxyにより改善 (Public

    Preview : フィードバックをお待ちしています!) • VPCとのネットワーク接続性も改善 • スパイクするワークロード • => Provisioned Concurrencyにより改善
  25. © 2020, Amazon Web Services, Inc. or its affiliates. All

    rights reserved.
  26. 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の新機能を活用できる
  27. AWS Lambda Runtime Support Policy https://docs.aws.amazon.com/ja_jp/lambda/latest/dg/runtime-support-policy.html

  28. Amazon API Gateway update

  29. None
  30. 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 (東京リージョン利⽤可)
  31. API 作成の流れ (新規作成) ②:プロトコル 種別とタイプ 選択 ③-a:リソース & メソッド設定 ④:デプロイと

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

    $default https://<api-id>.execute-api.<region-id>.amazonaws.com/… ※$defaultステージは、プロトコルが「HTTP API」(後述)の場合にのみ 利⽤可能な予約されたステージ (URLにステージ名が含まれないなどの特殊性を持つ)
  33. REST メソッド リクエスト 統合 リクエスト メソッド レスポンス 統合 レスポンス キ

    シ 使 ⽤ 量 プ ラ ン リ ソ ス ポ リ シ WAF 連 携 Network Load Balancer HTTP AWS サービス Lambda HTTP Lambda API エ ン ド ポ イ ン ト X-Ray 連 携 REST APIと⽐較し、多くのお客様でAPI呼び出し料⾦が安価に(およそ70%低下も) HTTPS 統 合 バ ク エ ン ド 「Lambda関数 または HTTPサービスへ プロキシ統合型でのシンプルな呼び出し」に特化 機能とのトレードオフの上で、 開発体験向上・コスト削減が可能 HTTP API API エ ン ド ポ イ ン ト HTTPS 統 合 バ ク エ ン ド プロキシ 統合型
  34. 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オーソライザーでのカスタム認証 も利⽤不可であることに注意
  35. 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 連携 - ✓
  36. Amazon API Gateway (REST API)のご使用料金

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

  38. 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
  39. AWS Step Functions update

  40. 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
  41. AWS Step Functions Express Workflows

  42. 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 アクティビティのサポート あり なし
  43. (例) 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 の料金 • 価格はリージョンごとに異なる • リトライは追加の状態遷移として計算
  44. ステートが開始された回数と ワークフロー実行に要したメモリ使用量に応じた課金 ・100 万リクエストあたり 1.00 USD ・GB-秒あたり 0.000004 ~ 0.00001

    USD (実行量に応じて GB-秒 あたりの料金は変動) AWS Step Functions Express Workflows の料金 https://aws.amazon.com/jp/step-functions/pricing
  45. バケット 「レート」=トークンの補充スピード = 「バケットに追加されるトークン数/秒」 (アカウントレベルの初期値 … 6,000 req/秒) リクエスト 処理されるリクエスト

    1つのリクエストは 1つのトークンを消費 「バースト(バースト上限)」= バケット内のトークンの初期値 兼 バケット最⼤サイズ (アカウントレベルの初期値 … 6,000) トークン トークンバケットアルゴリズム
  46. AWS Step Functions Express Workflows: High Performance & Low Cost

    ステートマシンを定義する際に、Standard か Express のいずれかのタイプを選択できる。 (あとから Standard と Express を切り替えることは不可) 利⽤⽅法
  47. © 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
  48. 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
  49. © 2020, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. AWS Lambda ⾮同期呼び出しの最⼤イベント経過時間 と最⼤再試⾏回数をサポート
  50. AWS Lambda のトリガーの種類について (おさらい) 1/2 q 同期呼び出しのトリガー : イベントソースが Lambda

    を呼び出すタイプの トリガー。呼び出しとともに Lambda が実⾏されるため、Lambda 関数の 処理結果は呼び出し元へ返却される。 Amazon API Gateway AWS Lambda q ⾮同期呼び出しのトリガー : イベントソースが Lambda を呼び出すが、イ ベントの情報を Lambda 内部のキューにいったん格納し、あとから実⾏す るタイプ。Lambda 関数の処理結果は呼び出し元に返却されない。 AWS Lambda Amazon Simple Storage Service (S3)
  51. q ポーリングベースのトリガー : Lambda がイベントソースに対して、最新 データがないかポーリングするタイプのトリガー。ストリームベースのもの と、そうでないものに分かれる。 q ストリームベース :

    シャードごとに処理され、同⼀シャード内の新しいメッセー ジに対する処理はブロックされる。 q ストリームベースでない : 新しいメッセージに対する処理はブロックされない。 Amazon Kinesis Data Streams AWS Lambda 待機 AWS Lambda のトリガーの種類について (おさらい) 2/2 Amazon Simple Queue Service Standard Queue AWS Lambda
  52. 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
  53. ⾮同期呼び出しの動作の詳細について (おさらい) q ⾮同期のトリガーの場合、発⽣したイベントの情報が Lambda のシステム内のキュー に格納される q Lambda 関数の同時実⾏数

    (東京リージョンの場合は既定で 1000) が不⾜している場 合や Lambda ⾃体の⼀時的なシステムエラーにより実⾏できなかった場合、最⼤ 6 時 間のあいだリトライされる。リトライ間隔は、1 秒から 5 分まで指数関数的に増加す る。 q Lambda 関数で実装した処理のなかでエラーが発⽣した場合、2 回リトライし、それ でも失敗する場合は配信不能キュー (DLQ) に移動させる AWS Lambda Amazon Simple Storage Service (S3) 2 回のリトライ 6 時間の リトライ ・・・・・
  54. 【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 実⾏の負荷やコスト軽減のため、エラー発⽣時は⼀切のリトライをしたくない場合など に有効。
  55. 【AWS Lambda】⾮同期呼び出しの最⼤イベント経過時間 と最⼤再試⾏回数をサポート 設定した最⼤イベント経過時間、もしくは最⼤再 試⾏回数を超えた場合、配信不能キュー (DLQ) にイベントの情報を送信できる。 Dead Letter Queue

    AWS Lambda Amazon Simple Storage Service (S3) 0 回 ~ 2 回のリトライ 60 秒 ~ 6 時間の リトライ ・・・・・ 最⼤イベント経過時間 として設定可能 最⼤再試⾏回数 として設定可能
  56. 【AWS Lambda】⾮同期呼び出しの最⼤イベント経過時間 と最⼤再試⾏回数をサポート コンソールから指定可能。 最⼤イベント経過時間 (Maximum age of event) は既定で

    6 時間、最⼤再試⾏回数 (Retry attempts) は既定で 2 回となって いる。 Dead-letter queue service に、実⾏に失 敗したイベントデータの送信先を指定。 SNS もしくは SQS いずれかが選択可能。 「なし」を選択した場合は、イベントデー タは破棄される。 q 設定⽅法
  57. © 2020, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. AWS Lambda
  58. 【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
  59. { "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 関 数や実⾏の成否など
  60. { "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 時間の リトライ ・・・・・
  61. AWS Lambda のコンソールから指定可能。 Add destination をクリック。 成功時 (On success) もしくは失敗時

    (On failure) を選択し、送信先サービスの ARN (Amazon Resource Name) を⼊⼒ する。 q 設定⽅法 【AWS Lambda】⾮同期呼び出しの宛先指定をサポート
  62. © 2020, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. AWS Lambda
  63. これまでのストリームベースのトリガーに対するエラー処理 q ストリームベースのトリガーである Amazon Kinesis Data Streams と Amazon DynamoDB

    では、あるデータを処理する際に Lambda 関数の実⾏ にエラーが発⽣すると、そのデータの有効期限がくるまでリトライされ続け、 後続のデータを処理することができなかった。 q Amazon Kinesis Data Streams および Amazon DynamoDB のデータの有 効期限は、既定で 24 時間。この時間を経過すると、イベントデータは消失し ていた。 Amazon Kinesis Data Streams AWS Lambda 待機 リトライ エラー
  64. 【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 回 のリトライ 最⼤再試⾏回数 として設定可能
  65. 【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 回 のリトライ
  66. { "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 イベントソースの障害処理 機能
  67. 【AWS Lambda】Amazon Kinesis Data Streams お よび Amazon DynamoDB イベントソースの障害処理

    機能 q 関数エラーの⼆等分 (Split batch on error) q Lambda 関数がデータを処理するあいだにエラーが発⽣した場合、エ ラーが含まれるバッチを 2 等分して処理を継続する機能 Amazon Kinesis Data Streams エラーを発⽣させる メッセージ 0 ~ 10000 回 のリトライ エラー エラー エラー エラー
  68. トリガーを追加する際にコンソールから指 定可能。 既定では、最⼤再試⾏回数 (Retry attempts) は 10000 回、レコードの最⼤ 有効期間 (Maximum

    age of record) は 7 ⽇、関数エラーの⼆等分 (Split batch on error) と失敗時の送信先 (On-failure destination) は未設定となっている。 q 設定⽅法 【AWS Lambda】Amazon Kinesis Data Streams および Amazon DynamoDB イベントソースの障害処理機能
  69. © 2020, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. AWS Lambda
  70. ストリームベースのトリガーと Lambda 関数の同時実⾏数 (おさらい) q これまで q Kinesis もしくは DynamoDB

    Streams のシャード数と、Lambda の同時 実⾏数は 1 : 1 で固定 q Kinesis のシャード数の最⼤値は 200 (東京リージョン) q DynamoDB Streams のシャード数はパーティション数に⽐例する Amazon Kinesis Data Streams AWS Lambda の場合 シャードと同数である 2 件の Lambda 関数が 並列実⾏される
  71. 【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 関数が並列実⾏される
  72. 【AWS Lambda】Amazon Kinesis Data Streams および Amazon DynamoDB イベントソースで並列化係数をサポート q

    設定⽅法 q Lambda 関数に Kinesis もしくは DynamoDB トリガーを追加する際に、 Concurrent batches per shard へ 1 から 10 までの値を⼊⼒
  73. © 2020, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. AWS Lambda イベントソースとして Amazon SQS FIFO をサポート
  74. 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
  75. Amazon SQS FIFO キューの重要な概念 (おさらい) q インフライトメッセージ – バックエンド (コンシューマー)

    が SQS から受 信中の状態にあるメッセージのこと。 q メッセージグループ – SQS FIFO キューは、先⼊れ先出しの形でメッセー ジの順序を保証するが、順番保証はメッセージグループという単位で⾏わ れる。属するメッセージグループが異なるメッセージどうしでは、順番は 保証されない。 q メッセージグループ ID – メッセージをキューへ送信する際に⽂字列で任意 に指定する。同じメッセージグループ ID を持つメッセージは、同⼀のメッ セージグループへ格納される。 q メッセージ重複削除 ID – メッセージをキューへ送信する際に⽂字列で任意 に指定する。同じメッセージ重複削除 ID を持つメッセージは、最初のメッ セージが到達したあとにもう⼀度送信されたとしても、削除される。 (既定で 5 分以内の重複メッセージが対象となる)
  76. 【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
  77. q 注意点 q Exactly Once で AWS Lambda がトリガーされるものではなく、Standard キューと同様に

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

    rights reserved. AWS Lambda
  79. パーセンタイルとは︖ 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 平均値とあわせ、⼀部の特異値に左右されないよう、統計データを確認する ために使われる。
  80. 【AWS Lambda】Amazon CloudWatch メトリクスで パーセンタイルのサポートを追加 q AWS Lambda の各メトリクスについて、任意のパーセンタイル値を表⽰で きるようになった。

    AWS Lambda のメトリクスを選 択し、「統計」をクリック p ではじまるものがパーセンタイルによる統計。 p99 は 99 パーセンタイルを表す。 また、「カスタムパーセンタイル」をクリックして、 任意のパーセンタイル値を表⽰することもできる。
  81. © 2020, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. AWS Serverless Application Model
  82. 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 ステップ
  83. 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 からのデプロイがより簡単に
  84. 【AWS Serverless Application Model】AWS SAM CLI からのデプロイがより簡単に q sam deploy

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

    --guided コマンドによるデプロイで影響を受けるリソースや、 リソースの作成経過は、CLI 上の表⽰で確認できる。 CloudFormation 変更 セットの内容 CloudFormation スタック のイベント発⽣履歴
  86. © 2020, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. AWS Simple Queue Service
  87. 【AWS Simple Queue Service】1 分間隔の CloudWatch メトリクスをサポート q SQS が提供するメトリクスについて

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

    キューに蓄積したメッ セージ数に応じて AutoScaling を構成する場合など、より柔軟にリソースを 増減させることが可能になる。 5 分間隔のグラフ 1 分間隔のグラフ 表⽰している対象も 時間範囲も同じだが、 5 分間隔と 1 分間隔 で、グラフの波形は ⼤きく変わる
  89. © 2020, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. Amazon EventBridge Schema Registry & Schema Discovery (Preview)
  90. 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 サービスと連携することで、価値 を⽣まない処理連携のプログラミングを排除
  91. 対応する SaaS 提供パートナー (2020年1⽉22⽇時点)

  92. プロパティの⼀覧とそれぞれ の型 (String や独⾃の型など) 独⾃の型の定義も 確認できる 【Amazon EventBridge】Schema Registry &

    Schema Discovery (Preview) q Schema Registry - EventBridge (CloudWatch Events) でやり取りされ る様々なデータのスキーマを、コンソールからまとめて公開 q (例) EC2 インスタンスの状態変化通知のスキーマ
  93. 【Amazon EventBridge】Schema Registry & Schema Discovery (Preview) q Schema Discovery

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

    – スキーマ定義を⾔語ごとにダウンロード可能 q 2019 年 12 ⽉時点で Java 8、Python 3.6、TypeScript 3 の 3 種類に対応 q アプリケーション開発の際に、ダウンロードしたスキーマ定義をインポートして おくことで、コード補完やコンパイル時のエラー検出に役⽴てることができる
  95. まとめ • AWS LambdaでRDSに対する接続性が向上 • AWS LambdaでSpikeに対するPre-Warmingが可能に • Amazon API

    Gatewayで簡易にHTTPSのエンドポイント作成可能に • AWS Step FunctionsのExpressが登場、より高スループットに From re:Invent and pre:Invent @_kensh
  96. Thank you! © 2020, Amazon Web Services, Inc. or its

    affiliates. All rights reserved. Kensuke Shimokawa @_kensh