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

Serverless Well-Architected Framework

kensh
March 16, 2021

Serverless Well-Architected Framework

動画はこちら
https://play.vidyard.com/b1bgfnuMNPB7PXE7CpXwLe

サーバーレス の開発はとてもとっつきやすく、ちょっと試して見るだけであれば数分でAPIが構築できてしまいますし、すでに実践されている方も多いと思います。しかし巷では構築、運用のプラクティスが知りたいという声をよく耳にします。このセッションではサーバーレス のホワイトペーパーに沿って、今日から始める実践的なプラクティスをご紹介します。

kensh

March 16, 2021
Tweet

More Decks by kensh

Other Decks in Technology

Transcript

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

    rights reserved. In Partnership with 今日から始める、サーバーレス Well-Architected Framework Kensuke Shimokawa Snr. Serverless Specialist Solutions Architect Amazon Web Services Japan K.K A - 1 @_kensh 2 0 . 1 0 . 2 0 2 0
  2. © 2020, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. In Partnership with 自己紹介 Name Kensuke Shimokawa Company Amazon Web Services Japan K.K. Role Serverless Specialist Solutions Architect @_kensh
  3. © 2020, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. In Partnership with Related breakouts 10/20 (火曜日) B-4: 分散システムにおけるSagaパターンのAWS StepFunctionsによる実装 14:15-14:45 | Track B 10/20 (火曜日) B-5 : Deep Dive on DevOps for Serverless Applications 14:55-15:25 | Track B 10/20 (火曜日) C-7 :AWS AppSync Advanced Design Pattern 16:15-16:45 | Track C
  4. © 2020, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. In Partnership with Agenda • Serverless Application Lens について • 運用の優秀性 • セキュリティ • 信頼性 • パフォーマンス効率 • コストの最適化 • まとめ
  5. © 2020, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. In Partnership with
  6. © 2020, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. In Partnership with AWS Well-Architected Framework(W-A)とは? 2015年 AWS re:Invent にて発表
  7. © 2020, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. In Partnership with AWS Well-Architected Frameworkホワイトペーパー 設計原則と(質問と回答形式)のベストプラクティス集 コストの 最適化 セキュリティ 信頼性 パフォーマンス 効率 運⽤の 優秀性
  8. © 2020, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. In Partnership with 毎年アップデート Serverless Lens : 2017年 AWS re:Invent にて発表
  9. © 2020, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. In Partnership with Kindle版も無料でダウンロードできます
  10. © 2020, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. In Partnership with AWS Well-Architected Tool https://aws.amazon.com/jp/blogs/news/new-serverless-lens-in-aws-well-architected-tool/
  11. © 2020, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. In Partnership with AWS Serverless Application Lens
  12. © 2020, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. In Partnership with 運用の優秀性
  13. © 2020, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. In Partnership with
  14. © 2020, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. In Partnership with 運用の優秀性 ✔ 面倒な設定なしで与えられるメトリクスを理解し、分析し、アラートを出す ✔ 分散トレースを使用し、コードにはコンテキストが追加されている ✔ 構造化および一元化されたログ記録 ✔ アプリケーション、ビジネス、オペレーションメトリクスの使用
  15. © 2020, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. In Partnership with 運用の優秀性 ✔ 面倒な設定なしで与えられるメトリクスを理解し、分析し、アラートを出す ✔ 分散トレースを使用し、コードにはコンテキストが追加されている ✔ 構造化および一元化されたログ記録 ✔ アプリケーション、ビジネス、オペレーションメトリクスの使用
  16. © 2020, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. In Partnership with AWS Lambda Powertools https://awslabs.github.io/aws-lambda-powertools-python/
  17. © 2020, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. In Partnership with 対応しているランタイム aws-samples / aws-lambda-powertools-python aws-samples / aws-lambda-powertools-java
  18. © 2020, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. In Partnership with 構造化ログ { … "lambda_function_name":.., "lambda_function_memory_size": 128, "lambda_function_arn": ”…", "lambda_request_id": "52fd..", "message": ”Aha", "cold_start": true } Result デコレータで関数Context情報も出力可能
  19. © 2020, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. In Partnership with コールドスタートログのみを抽出 (CloudWatch Logs Insights)
  20. © 2020, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. In Partnership with 運用の優秀性 ✔ 面倒な設定なしで与えられるメトリクスを理解し、分析し、アラートを出す ✔ 分散トレースを使用し、コードにはコンテキストが追加されている ✔ 構造化および一元化されたログ記録 ✔ アプリケーション、ビジネス、オペレーションメトリクスの使用
  21. © 2020, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. In Partnership with 分散トレースを使用 (AWS X-Ray) X-Ray を使用すると、フロントエンド API からバックエンドのストレージとデータベ ースまで、アプリケーション内のリソース を横断する際にリクエストをトレースでき ます
  22. © 2020, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. In Partnership with トレース / サービスマップ デコレータでサブセグメントも定義
  23. © 2020, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. In Partnership with トレース / サービスマップ Result 関数セグメントを拡張して、そのサブセグメントを表示
  24. © 2020, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. In Partnership with 運用の優秀性 ✔ 面倒な設定なしで与えられるメトリクスを理解し、分析し、アラートを出す ✔ 分散トレースを使用し、コードにはコンテキストが追加されている ✔ 構造化および一元化されたログ記録 ✔ アプリケーション、ビジネス、オペレーションメトリクスの使用
  25. © 2020, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. In Partnership with Embedded Metric Format でのメトリクスの記録 Embedded Metric Format(JSON)でCloudWatch Logsにログデータを送るとカスタムメトリクスが 発行されグラフ化される Embedded Metric Format
  26. © 2020, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. In Partnership with カスタムメトリックの出力 Result ビジネスKPIを可視化!
  27. © 2020, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. In Partnership with 運用の優秀性 ✔ 面倒な設定なしで与えられるメトリクスを理解し、分析し、アラートを出す ✔ 分散トレースを使用し、コードにはコンテキストが追加されている ✔ 構造化および一元化されたログ記録 ✔ アプリケーション、ビジネス、オペレーションメトリクスの使用
  28. © 2020, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. In Partnership with AWS Lambda Extensions – In preview Lambda Extensionsは、Lambdaをお気に入りの監視、セキュリティツール およびガバナンスツールと簡単に統合する新しい方法です
  29. © 2020, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. In Partnership with Lambda Insights Performance monitoring Lambda Insights
  30. © 2020, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. In Partnership with Lambda Concurrency Hunt でスパイクを発見 過去7日間のMetricsに対して 同時実行数が最も高い期間を 見つけ、そのSpikeの前の6 分間の情報を出力する。 • 関数の呼び出し回数 • 平均処理時間 • 同時実行数 $ curl https://raw.githubusercontent.com/aws-samples/aws-lambda-concurrency-hunt/master/lambda-con-hunt.py -o lambda-con-hunt.py $ python3 lambda-con-hunt.py ※ Lambdaの1 分間隔Metricsにおいて、15 日間は 1 分の分解能を持つ。以降も使用可能だが、5 分に 集約された分解能となる https://aws.amazon.com/jp/cloudwatch/faqs/ Concurrency Hunt
  31. © 2020, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. In Partnership with
  32. © 2020, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. In Partnership with 運用の優秀性 ✔ 別々の環境に分離されたコードおよびステージとしてインフラストラクチャを使用する ✔ 一時的な環境を使用し、新機能の原型を作る ✔ ロールアウトデプロイメカニズムを使用する ✔ 構成管理を使用する ✔ 関数ランタイムの廃止ポリシーを確認する
  33. © 2020, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. In Partnership with Lambdaのトラフィックシフト機能 AWS Lambda Alias: prod 新 機 能 Lambda エイリアスに 2 つの関数バージョ ンを指定して、各バージョンにルーティン グされるトラフィックの割合を設定できる
  34. © 2020, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. In Partnership with Lambdaのトラフィックシフト機能 AWS SAM を使用してLambda関数を更新する場合、CodeDeploy が組み込 まれているため、Lambda関数を線形にデプロイ可能 https://docs.aws.amazon.com/ja_jp/serverless-application-model/latest/developerguide/automating-updates-to-serverless-apps.html HelloFunction: Type: AWS::Serverless::Function Properties: Runtime: python3.8 Handler: index.handler AutoPublishAlias: !Ref Stage DeploymentPreference: Enabled: true Type: Linear10PercentEvery1Minute
  35. © 2020, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. In Partnership with API Gatewayのカナリアリリース リクエスト 新 機 能 Amazon API Gateway ステージに対して「Canary」を定義する と、APIの「デプロイ」操作でそのステー ジを指定した際に一旦Canary に対しての みデプロイされるようになる(メインの内 容は変わらない) • Canaryに対して以下の操作が可能: • 昇格 • Canaryのデプロイ内容をメインの ステージに反映 • 削除 • Canaryを削除して、メインステー ジのみの構成に戻す
  36. © 2020, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. In Partnership with API Gatewayのカナリアリリース AWS SAM を使用してAPI Gateway REST APIを更新デプロイする場合は、 カナリアの設定を組込めるため、ステージに安全にデプロイ可能 https://docs.aws.amazon.com/ja_jp/apigateway/latest/developerguide/canary-release.html HelloWorldApi: Type: AWS::Serverless::Api Properties: StageName: !Ref StageName CanarySetting: PercentTraffic: 10 UseStageCache: false
  37. © 2020, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. In Partnership with 運用の優秀性 ✔ 別々の環境に分離されたコードおよびステージとしてインフラストラクチャを使用する ✔ 一時的な環境を使用し、新機能の原型を作る ✔ ロールアウトデプロイメカニズムを使用する ✔ 構成管理を使用する ✔ 関数ランタイムの廃止ポリシーを確認する
  38. © 2020, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. In Partnership with AWS AppConfig によるロジックと設定の分離 デプロイ戦略 • ベータ環境や本番環境などの論理的な デプロイグループを管理可能 • 論理環境ごとに Amazon CloudWatch アラームを設 定し AppConfig によってモニタリングすることが可 能で、デプロイ中にアラームが発生するとロール バックをトリガー (設定値のValidationも可能) • アプリケーションからは AppConfig の GetConfiguration APIでパラメータを取得できるた め、 関数インスタンスごとにユニークなClientIDを 振っておけば自動的に戦略に沿ったカナリアが実現 • 設定用と関数本体用にCICDパイプラインを分離し2 つ用意する • ここでの設定とはLambda サービスの設定では なく、アプリケーション内のロジックにおける 設定のこと (例. フィーチャーフラグ on/off) AWS AppConfig https://aws.amazon.com/jp/blogs/news/safe-deployment-of-application-configuration-settings-with-aws-appconfig/ AWS Lambda 新 設 定 初期化時に取得し TTL付きキャッシュ しておく Pull Pull 初期化時に取得し TTL付きキャッシュ しておく Parameter Storeなど Parameter Storeなど
  39. © 2020, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. In Partnership with セキュリティ
  40. © 2020, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. In Partnership with
  41. © 2020, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. In Partnership with セキュリティ ✔ 適切なエンドポイントタイプとメカニズムを使用して、API へのアクセスを保護する ✔ 認証および承認のメカニズムを使用する ✔ ID のメタデータに基づいてアクセスの範囲を設定する
  42. © 2020, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. In Partnership with Amazon API Gatewayのエンドポイントタイプ • エッジロケーションにルーティング(Amazon CloudFrontディストリビューション) • リージョンに直接ルーティング • 同⼀リージョンの場合レイテンシ削減 • インターネットからのアクセスはできず、 VPC内からVPCエンドポイント(PrivateLink)経 由でのみアクセス可能 • REST APIの場合3種類のエンドポイ ントタイプを指定可能 • これらのタイプによってクライアン トからのアクセス特性を決定する エッジ最適化 リージョン プライベート インターネット公開 インターネット非公開 インターネット公開
  43. © 2020, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. In Partnership with プライベートAPI API Gateway AWS Lambda DynamoDB AWS Cloud VPC Amazon EC2 Internet エンドポイントタイプ • プライベート VPC Amazon EC2 VPC Endpoints
  44. © 2020, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. In Partnership with オンプレミスからのアクセス(DX or VPN) API Gateway AWS Lambda DynamoDB AWS Cloud VPC Internet VPC Endpoints エンドポイントタイプ • プライベート Corporate data center 企業内 サーバー AWS Direct Connect Or VPN
  45. © 2020, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. In Partnership with セキュリティ ✔ 適切なエンドポイントタイプとメカニズムを使用して、API へのアクセスを保護する ✔ 認証および承認のメカニズムを使用する ✔ ID のメタデータに基づいてアクセスの範囲を設定する
  46. © 2020, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. In Partnership with API GatewayのMutual TLS (mTLS) 認証 企業Aシステム (のAPIクライアント) リクエスト X.509証明書つき (クライアント証明書) リクエスト X.509証明書つき (クライアント証明書) IoTデバイス 事前にクライアント証明書を導⼊したデ バイスからのアクセスのみに制限したい 事前にビジネス上合意した企業システム からのアクセスのみに制限したい ユースケース例︓IoTデバイス⇔API Gateway通信 ユースケース例︓B2B API通信 API Gateway API Gateway
  47. © 2020, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. In Partnership with
  48. © 2020, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. In Partnership with セキュリティ ✔ リソースポリシーの評価と定義 ✔ リソースとコンポーネント間で一時的な認証情報を使用する ✔ すべてのレイヤーでネットワークトラフィックを制御する ✔ コンパクトなデザイン、単一用途の関数
  49. © 2020, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. In Partnership with リソースポリシーの 評価と定義 API Gateway AWS Lambda AWS Cloud { "Version": "2012-10-17", "Id": "default", "Statement": [{ "Sid": ”123456c7-a198-4b2d-b5fc-57fb5fefa0e8", "Effect": "Allow", "Principal": {"Service": "apigateway.amazonaws.com"}, "Action": "lambda:InvokeFunction", "Resource": ”LambdaFunctionARN", "Condition": { "ArnLike": { "AWS:SourceArn": ”sourceServiceARN" } } }] } { "Version": "2012-10-17", "Statement": [{ "Effect": "Allow", "Principal": "*", "Action": "execute-api:Invoke", "Resource": "execute-api:/*/*/*" },{ "Effect": "Deny", "Principal": "*", "Action": "execute-api:Invoke", "Resource": "execute-api:/*/*/*", "Condition": { "NotIpAddress": {"aws:SourceIp": ["sourceIpOrCIDRBlock”]} } }] }
  50. © 2020, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. In Partnership with セキュリティ ✔ リソースポリシーの評価と定義 ✔ リソースとコンポーネント間で一時的な認証情報を使用する ✔ すべてのレイヤーでネットワークトラフィックを制御する ✔ コンパクトなデザイン、単一用途の関数
  51. © 2020, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. In Partnership with VPC Lambdaについて VPCリソースへのアクセスに、Lambda関数をVPC接続設定する必要がある VPC Lambdaはデフォルトでインターネットアクセスがない •インターネットアクセスするためには •Public SubnetにNAT Gatewayを設置 •Internet GatewayをVPCに設置 •Route Tableでインターネットへの経路を追加 VPC Lambdaはデフォルトでリージョナルサービスへのアクセスがない •リージョナルサービスへアクセスするには (以下のいずれかが必要) •インターネットへの経路を確保 •サービスごとのVPC Endpointを利用 今回、着目するのはこの性質
  52. © 2020, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. In Partnership with ネットワークトラフィックを制御する Private subnet Customer VPC AWS Cloud AWS Lambda Service VPC AWS Lambda 実行環境 リージョナルサービス Amazon DynamoDB Amazon SNS Hyperplane NAT ENI Security Group Amazon SQS VPC Endpoint ENI VPC Endpoint Gateway Route table PrivateLink VPC Endpoint ENI インターネットへのアクセスなし
  53. © 2020, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. In Partnership with VPC Lambda利用方法の発想を変えてみる VPC リソースにアクセスするから、VPC Lambdaとして設定する VPC LambdaとVPCエンドポイントの利用でインターネットから分離 VPC リソースにアクセスしなくても、VPC Lambdaとして設定する
  54. © 2020, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. In Partnership with VPC接続を強制し、他VPCにも接続不可とする制御 { "Version": "2012-10-17", "Statement": [ { "Sid": "Stmt159186333251", "Action": [ "lambda:CreateFunction", "lambda:UpdateFunctionConfiguration" ], "Effect": "Deny", "Resource": "*", "Condition": { "ForAllValues:StringNotEquals": { "lambda:VpcIds": [ "vpc-0eebf3d0fe63a2db1" ] } } } ] } IAM User AWS Lambda CreateFunction or UpdateFunctionConfiguration Private subnet VPC ( vpc-X) ENI VPCに未接続、または指定 したVPC以外に接続しよう とするとエラーとなる
  55. © 2020, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. In Partnership with
  56. © 2020, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. In Partnership with セキュリティ ✔ セキュリティ意識向上ドキュメントを頻繁に確認する ✔ コードで使用される機密情報を安全に保管する ✔ ランタイム保護を実装して、悪意のあるコードの実行を防止する ✔ ワークロードコードの依存関係/ライブラリを自動的に確認する ✔ インバウンドイベントを検証する
  57. © 2020, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. In Partnership with VPC Private subnet AWS Secrets Manager AWS Lambda シークレット ローテーション Amazon Aurora AWS Key Management Service Role 暗号化用の KMS鍵 Resource Policy シークレット情報取得 シークレット情報を取得 可能なVPCを制限 シークレット情報を取得 可能なIAM Role from aws_lambda_powertools.utilities import parameters def handler(event, context): # Retrieve a single secret value = parameters.get_secret("my-secret") コードで使用される機密情報を安全に保管する コード内のハードコードされた認証情報 (パスワードを含む) を Secrets Manager への API コールで置き換えて、プログラ ムでシークレットを安全に利用すること ができます
  58. © 2020, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. In Partnership with セキュリティ ✔ セキュリティ意識向上ドキュメントを頻繁に確認する ✔ コードで使用される機密情報を安全に保管する ✔ ランタイム保護を実装して、悪意のあるコードの実行を防止する ✔ ワークロードコードの依存関係/ライブラリを自動的に確認する ✔ インバウンドイベントを検証する
  59. © 2020, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. In Partnership with API Gateway REST API のリクエスト検証 リクエスト Amazon API Gateway モデル モデル モデル { "$schema": "http://json-schema.org/draft-04/schema#", "title": "User", "type": "object", "properties": { "UserID": { "type": "string" }, "Name": { "type": "string" }, "Age": { "description": "Age in years", "type": "integer", "minimum": 18 } }, "required": ["UserID", "Name"] } application/json { "UserID": "U0001", "Name": "Jhon", "Age": 23 } HTTP Body 検証 • リクエストボディはコンテンツタイプと モデルのセットで検証可能。 • JSON形式のボディであれば、 application/jsonを設定し、モデルにつ いてはJSON Schema draft4形式で各 JSONのプロパティに対して検証実施 JSON Schema draft4
  60. © 2020, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. In Partnership with 信頼性
  61. © 2020, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. In Partnership with
  62. © 2020, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. In Partnership with 信頼性 ✔ スロットリングを使用してインバウンドリクエスト率を制御する ✔ API クォータを使用、分析、適用する ✔ スケーラブルではないリソースを保護するメカニズムを利用する
  63. © 2020, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. In Partnership with API Gatewayによるスロットリング制御 • 閾値を超えるとHTTPステータスコード429(Too Many Requests)エラー • リトライ実装はAPIクライアント開発者の責務 • Rate/Burstによるスロットリング設定が可能 • 使用量プランを使うと • Quota(呼び出し回数制限)の設定が可能 • (日/週/月あたりのリクエスト回数)
  64. © 2020, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. In Partnership with API Gatewayによるスロットリング制御 EC2上の エンドポイント AWS Lambda AWSサービス インターネット リソース API Gateway 使用量プランThrottling設定 (任意) サーバー側Throttling設定 メソッド x RESTリソース API x ステージ アカウント x リージョン API x ステージ (default) Rate: 10000rps Burst 5000req Rate: ( ) rps Burst ( ) req 緩和可能 Rate: ( ) rps Burst ( ) req Rate: ( ) rps Burst ( ) req 使用量プランを 設定したリクエスト 使用量プランを 設定していないリクエスト Quota 呼び出し回数制限 ※ThrottlingとQuota制限は、使用プランのすべての API ステージ について集約される個々の API キーのリクエストに適用されます x-api-key: A x-api-key: B x-api-key: C
  65. © 2020, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. In Partnership with 信頼性 ✔ スロットリングを使用してインバウンドリクエスト率を制御する ✔ API クォータを使用、分析、適用する ✔ スケーラブルではないリソースを保護するメカニズムを利用する
  66. © 2020, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. In Partnership with スケーラブルではないリソースを保護 オンプレミスサーバーや永続層などサーバーレス に対応するスケーラビリティが見込まれないダウン ストリームへのアクセスについては、直接行うのではなく、キューやストリーム等のバッファリング によって受け取るトランザクションの数を抑制することでコンポーネントスループットを調整 AWS Lambda Amazon API Gateway Amazon Simple Queue Service Lambdaの同時実行数を 小さくしておく Corporate data center オンプレミス サーバー ダウンストリームで 処理可能な量を処理
  67. © 2020, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. In Partnership with
  68. © 2020, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. In Partnership with 信頼性 ✔ トランザクション障害、部分的な障害、断続的な障害に対処する ✔ 重複した不要なイベントに対処する ✔ 長時間実行のトランザクションを調整する ✔ バーストレートにおけるパターンのスケーリングを検討する
  69. © 2020, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. In Partnership with Lambda非同期実行によるエラー対処 • Lambdaの非同期実行は、Lambdaサービス内にキューを持つ • 非同期実行のLambdaにはDestinationを設定可能、エラーデータを退避しておく 補償処理 Retry2回を超えたメッセージは メイン処理 非同期実行 (Internal Queue) retry=2 SQS
  70. © 2020, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. In Partnership with 信頼性 ✔ トランザクション障害、部分的な障害、断続的な障害に対処する ✔ 重複した不要なイベントに対処する ✔ 長時間実行のトランザクションを調整する ✔ バーストレートにおけるパターンのスケーリングを検討する
  71. © 2020, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. In Partnership with Lambda関数内でワークフローを独自実装 1 .. 10 a or b Exception HTTP GET Retry 3 外部リソース AWS Lambda • 長時間実行のトランザクションは複数の関数にまた がって処理されます • 複数の同期的な依存性の強い呼び出しチェーンは、 単一コンポーネントのアプリケーションコード内で 処理せず、ステートマシンの利用を検討
  72. © 2020, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. In Partnership with ワークフローをStepFunctionsで実装 • ステートマシンを使用して分散トランザクションを可視化し、 オーケストレーションロジックからビジネスロジックを分離 • AWS Step Functions を使用すると、ステートマシンを介して 複数の AWS のサービスをサーバーレスワークフローとして、 統合可能 • Step Functions では、宣言型言語を使用して、再試行、バック オフレート、最大試行、間隔、タイムアウトをステートマシン のすべてのステップに個別に設定可能
  73. © 2020, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. In Partnership with パフォーマンス効率
  74. © 2020, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. In Partnership with
  75. © 2020, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. In Partnership with パフォーマンス効率 ✔ 最適なキャパシティー単位を測定、評価、選択する ✔ 関数の起動時間を測定して最適化する ✔ 非同期およびストリームベースの関数呼び出しによる同時実行性を活用する ✔ アクセスパターンを最適化し、必要に応じてキャッシュを適用する ✔ 可能な場合は関数を介してマネージドサービスと直接統合する
  76. © 2020, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. In Partnership with 最適なキャパシティーを選択する 適切なメモリ量を割り当てるのが課題 AWS Lambda 作成する関数には、設定したメモリに比例 する CPU が割り当てられます
  77. © 2020, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. In Partnership with AWS Lambda Power Tuning によるチューニング AWS Lambda Power Tuningは、AWS Step Functionsを 利用したステートマシンであり、Lambda関数のコスト やパフォーマンスを最適化するのに役立ちます。 { "lambdaARN": "function-arn", "powerValues": [128, 256, 512, 1024], "num": 50, "payload": {} } OUTPUT 128 256 512 1024 https://github.com/alexcasalboni/aws-lambda-power-tuning
  78. © 2020, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. In Partnership with CPUバウンドなワークロード def lambda_handler(event, context): heavy_CPU_job() return { 'statusCode': 200, 'body': json.dumps(‘CPU worked'), } ίετ (#ඵ YϦΫΤετ݅਺
  79. © 2020, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. In Partnership with 外部APIコールによる処理時間増大 def lambda_handler(event, context): external_API_call() return { 'statusCode': 200, 'body': json.dumps(‘CPU worked'), } ίετ (#ඵ YϦΫΤετ݅਺
  80. © 2020, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. In Partnership with パフォーマンス効率 ✔ 最適なキャパシティー単位を測定、評価、選択する ✔ 関数の起動時間を測定して最適化する ✔ 非同期およびストリームベースの関数呼び出しによる同時実行性を活用する ✔ アクセスパターンを最適化し、必要に応じてキャッシュを適用する ✔ 可能な場合は関数を介してマネージドサービスと直接統合する
  81. © 2020, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. In Partnership with 必要に応じてキャッシュを適用する Webブラウザ モバイルアプリ API Gateway REST API Amazon S3 API キャッシュ コンテンツ キャッシュ css, js, html, image Amazon CloudFront AWS Lambda Amazon DynamoDB Amazon DynamoDB accelerator (DAX) Amazon ElastiCache • REST API の場合、APIキャッシュを使用してバックエンドの 呼び出し回数を減らし、API へのリクエストのレイテンシー を改善可能 • 地理的に分散したクライアントの場合、Amazon CloudFront によりエッジで結果をキャッシュすることができ、ネット ワークの往復のレイテンシーをさらに削減可能 セッション キャッシュ アイテム キャッシュ 整合性が高い読み込みを必要とせず、即 時使用を主眼に置いたユースケース向け に、DynamoDB Accelerator (DAX) を使用 したキャッシュの有効化が可能 Authorizer キャッシュ Lambda Authorizer ブラウザ キャッシュ アプリ キャッシュ グローバル オブジェクト 静的 コンテンツ DynamoDB アイテム
  82. © 2020, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. In Partnership with コスト最適化
  83. © 2020, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. In Partnership with
  84. © 2020, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. In Partnership with コスト最適化 ✔ 外部呼び出しと関数コードの初期化を最小限に抑える ✔ ログ出力とその保持を最適化する ✔ 関数設定を最適化してコストを削減する ✔ コストを意識した使用パターンをコードで使用する
  85. © 2020, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. In Partnership with ログ出力とその保持を最適化する Resources: HelloFunc: Type: AWS::Serverless::Function Properties: FunctionName: hello-func CodeUri: src Handler: app.handler Runtime: python3.8 AutoPublishAlias: prod Timeout: 10 MemorySize: 128 HelloFuncLogGroup: Type: AWS::Logs::LogGroup Properties: LogGroupName: !Sub /aws/lambda/${HelloFunc} RetentionInDays: 7 • Lambda関数の定義と同時に AWS::Logs::LogGroup に よってLog Groupを作成する • RetentionInDays にログ保持期間を設定する
  86. © 2020, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. In Partnership with コスト最適化 ✔ 外部呼び出しと関数コードの初期化を最小限に抑える ✔ ログ出力とその保持を最適化する ✔ 関数設定を最適化してコストを削減する ✔ コストを意識した使用パターンをコードで使用する
  87. © 2020, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. In Partnership with Amazon API Gateway HTTP API の利用 REST APIと比較し、多くのお客様で API呼び出し料金が安価に (およそ70%低下も) HTTP API REST API
  88. © 2020, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. In Partnership with AWS Lambda の Compute Savings Plans • Compute Savings Plans は、1 年または 3 年の期間の使用量 を契約すれば、EC2、Lambda、 Fargate の低額の使用料金が提 供される柔軟な料金モデルで す • Savings Plan にサインアップ すると、契約量までの使用料 金は割引された Savings Plans 料金で課金されます
  89. © 2020, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. In Partnership with CPUバウンドなワークロード def lambda_handler(event, context): heavy_CPU_job() return { 'statusCode': 200, 'body': json.dumps(‘CPU worked'), } ίετ (#ඵ YϦΫΤετ݅਺
  90. © 2020, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. In Partnership with
  91. © 2020, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. In Partnership with まとめ 設計原則と(質問と回答形式)のベストプラクティス集 コストの 最適化 セキュリティ 信頼性 パフォーマンス 効率 運⽤の 優秀性 AWS Well-Architected Framework(W-A)とは?
  92. © 2020, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. In Partnership with まとめ 1度だけではなく 定期的な⾒直し (KAIZEN)が重要 • システム設計・運用のベストプラクティス集 • 情報に基づいた意思決定を行い、その意思決定が持つ影 響を理解する(ためのツール) • リスクを「把握できていること」が重要。リスクに対処 するかは、ビジネス的な判断次第 AWS Well-Architected Framework(W-A)とは?
  93. © 2020, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. In Partnership with まとめ AWSのSAに相談することも出来る 毎週”W-A個別技術相談会”を実施中 AWSのソリューションアーキテクト(SA)に 対策などを相談することも可能 申込みはイベント告知サイトから (https://aws.amazon.com/jp/about-aws/events/) で[検索] AWS イベント
  94. Thank you! © 2020, Amazon Web Services, Inc. or its

    affiliates. All rights reserved. In Partnership with Kensuke Shimokawa @_kensh