やーまんぶろぐ

気が向いた時にだけ書くブログ

AWS Well-Architected Lens – Serverless Applications まとめ 運用編

アーキテクチャを検討する上で、とても役に立つフレームワークであるAWS Well Archtected Framework。
サーバーレス版が公開されたのでベストプラクティスについてまとめておきます。
https://d1.awsstatic.com/whitepapers/architecture/AWS-Serverless-Applications-Lens.pdf

運用編セキュリティ編信頼性編パフォーマンス編コスト編の5回に分けてメモしていきます。

解釈が間違っているかもしれないので、ご注意ください。

SERVOPS 1:サーバレスアプリケーションの異常をどのように監視し、対応していますか?

  • サーバーレス・アーキテクチャーの性質上、分散トレースを行うことは基本。
  • サーバーレスアプリケーションを変更すると、展開、変更、およびリリース管理が必要。
  • AWS X-Rayの分散トレース機能を使用することで、可視化されたサービスマップから迅速にトラブルシューティング行う。X-Rayは、パフォーマンスの低下を特定し、レイテンシ分布を含む異常を迅速に理解できる。
  • 個別レベルと集約レベルのアラームの設定が必要。
    • 個別レベルには以下のメトリクスが含まれる。
      • Lambda: Duration
      • API Gateway: IntegrationLatency
    • 集約レベルには以下のメトリクスが含まれる。
      • Lambda: Throttling, Errors
      • Step Functions: ActivitiesTimedOut, ActivitiesFailed, ActivitiesHeartbeatTimedOut
      • API Gateway: 5XXError, 4XXError
  • ビジネスとアプリケーションの洞察を捕捉するために、CloudWatchのカスタムメトリクスを使用する。

SERVOPS 2:変更の影響を最小限に抑えながら、サーバーレスアプリケーションをどのように進化させていますか?

  • API Gateway ステージ変数は、リリースするときに変更の数を最小限に抑えるのに役立つ。たとえば、ステージ変数は$ LATESTではなくLambdaのエイリアス名を参照できる。
  • AWS SAMを使用して、サーバレスアプリケーションをパッケージ化、デプロイ、モデリングする。また、SAM Localを使用すると、Lambda関数をローカルに開発する際のデバッグサイクルを高速化できる。
  • Lambda環境変数は、ソースコードと設定を分離するのに役立つ。たとえば、Lambda関数内で呼び出されたリソース名を変更する場合は、コードではなく環境変数のみを変更する。
  • 複数サーバーにまたがって共有している構成や鍵を制御する場合、環境変数に対してAmazon EC2システムマネージャ(SSM)のパラメータストア機能を検討する。パラメータストアで追加の遅延が発生する可能性があるため、SSMパラメータストアまたは環境変数の使用を決定する際にベンチマークを実行する必要がある。
  • 注: A/Bテストは、LambdaのTraffic Shifting機能で実現できる。変更時の停止時間をゼロにすることを推奨。
  • SAM Localは、パフォーマンスの目安としては使用しない。AWS環境では、計算リソースとネットワークレイテンシーが大きく異なるため、別途テストが必要。
  • API Gatewayステージ変数とLambdaエイリアス/バージョンは、ステージを分けるために使用してはいけない。これは、デプロイ単位のモニタリングの可視性を低下し、ツールの複雑さが増す。(ここ自信なし)
  • X-Rayは、AWS Lambdaの初期化や使用されているサービスの絞り込みなど、サービスメトリクスの詳細を提供している。CloudWatchのメトリクスだけでなく、X-Rayも使用する。これは、異常を特定して対応する際に役立つ。