APIのテストとデプロイ

AWS でのアプリケーション開発

Ricardo Sueiras

Principal Technologist

開発者のためのInfrastructure-as-Code

 

iac

  • クラウドネイティブアプリはInfrastructure-as-Code(IaC)でデプロイします。
  • クラウドリソースを設定ファイルで定義します。
  • AWS Management Consoleでの手動操作(clickops)を回避できます。
AWS でのアプリケーション開発

AWS CloudFormation

 

cloudformation

  • AWSの基盤となるIaCサービスです。
  • YAMLまたはJSONテンプレートでAWSリソースを定義します。
AWS でのアプリケーション開発

AWS Cloud Development Kit(CDK)

 

cdk

  • CDKはコードでIaCを定義します。
  • YAMLやJSONの代わりに、Python、TypeScript、またはJavaで記述できます。
  • デプロイ時にアプリをCloudFormationテンプレートに変換します。
AWS でのアプリケーション開発

AWS Serverless Application Model(SAM)

  • CloudFormationを拡張します。
  • サーバーレスリソースとAPIに特化したシンプルな構文を提供します。
  • 変換レイヤーとして機能します。
  • SAM構文を完全なCloudFormationテンプレートに変換します。

 

sam

AWS でのアプリケーション開発

SAMの機能

  • 最小権限のIAMロールを自動生成し、細かい調整も可能です。
  • デプロイパイプラインを設定として定義します。
  • sam buildとsam deployでパッケージ化とデプロイを行います。
  • sam validateでテンプレートのエラーを早期に検出します。
  • sam local start-lambdaでLambdaをローカルでエミュレートします。
    • 永続的なローカルエンドポイントを提供します。

 

sam features

AWS でのアプリケーション開発

SAMを使ったテスト

  • デプロイ前にサーバーレスアプリをローカルでビルド、実行、テストします。
  • Lambda関数とAPI Gatewayの統合をテストします。
  • sam local invokeで関数をローカルから実行します。
    • 単発の実行です。
  • sam local start-apiでAPI Gatewayをエミュレートします。

 

testing with sam

AWS でのアプリケーション開発

ユニットテスト

 

unit tests

  • SAMとユニットテストを組み合わせてLambdaの動作を検証します。
  • ローカルテストにより開発サイクルを短縮できます。
  • pytest、JUnit、Jestなどのフレームワークと組み合わせて使います。
AWS でのアプリケーション開発

テストワークフロー

 

test workflow

  • sam local generate-eventでテストイベントを生成します。
  • JSONイベントファイルとして出力されます。
  • sam local invoke FunctionName -e event.jsonでローカルから実行します。
  • デプロイ前にフレームワークのアサーションでレスポンスを検証します。
AWS でのアプリケーション開発

AWSサービスのモック

 

mocking tests

  • motoなどのモックライブラリとローカルテストを組み合わせます。
  • シミュレートされたAWSサービスを使い、実際の呼び出しは行いません。
  • テスト速度が向上します。
  • テストコストを削減できます。
  • スロットリングや障害などのエラーシナリオを検証できます。
AWS でのアプリケーション開発

継続的インテグレーションと継続的デプロイ(CI/CD)

  • SAMアプリは通常、CI/CDパイプライン経由でデプロイします。
  • ビルド、テスト、パッケージ化、デプロイを自動化します。
  • AWS CodeCommitにコードとSAMテンプレートを保存します。
  • AWS CodeBuildでテストとsam buildを実行します。
  • AWS CodePipelineでワークフローを統合管理します。

 

cicd

AWS でのアプリケーション開発

CI/CDワークフロー

  • ソースコードとSAMテンプレートをリポジトリにコミットします。
  • 自動テストとバリデーションを実行します。
  • sam buildでアプリをパッケージ化します。
  • sam deployでリソースをデプロイします。
  • デプロイ後はCloudWatchで監視します。

 

workflow

AWS でのアプリケーション開発

デプロイのトラブルシューティング

  troubleshooting

  • トラブルシューティングは重要な運用スキルです。
  • よくあるデプロイ失敗の原因:
  • IAM権限の問題。
  • SAMまたはCloudFormationテンプレートの誤り。
  • Lambdaパッケージングの失敗や依存関係の欠落。
  • API Gatewayの設定ミス。
AWS でのアプリケーション開発

デプロイのトラブルシューティング

  troubleshooting

  • SAMのデプロイは内部的にCloudFormation上で実行されます。
  • スタックイベントと自動ロールバックを提供します。
  • デプロイ失敗の原因特定に役立ちます。
  • ロールバックにより以前の環境状態に復元します。
AWS でのアプリケーション開発

デプロイのトラブルシューティング

  troubleshooting

  • 以下のツールを使って問題を調査します:
  • CloudWatch Logs。
  • API Gatewayの実行ログ。
  • Lambdaのログ。
  • CloudWatchメトリクス。
AWS でのアプリケーション開発

練習しましょう!

AWS でのアプリケーション開発

Preparing Video For Download...