APIのテストとデプロイ
AWS でのアプリケーション開発
Ricardo Sueiras
Principal Technologist
開発者のためのInfrastructure-as-Code
- クラウドネイティブアプリはInfrastructure-as-Code(IaC)でデプロイします。
- クラウドリソースを設定ファイルで定義します。
- AWS Management Consoleでの手動操作(clickops)を回避できます。
AWS CloudFormation
- AWSの基盤となるIaCサービスです。
- YAMLまたはJSONテンプレートでAWSリソースを定義します。
AWS Cloud Development Kit(CDK)
- CDKはコードでIaCを定義します。
- YAMLやJSONの代わりに、Python、TypeScript、またはJavaで記述できます。
- デプロイ時にアプリをCloudFormationテンプレートに変換します。
AWS Serverless Application Model(SAM)
- CloudFormationを拡張します。
- サーバーレスリソースとAPIに特化したシンプルな構文を提供します。
- 変換レイヤーとして機能します。
- SAM構文を完全なCloudFormationテンプレートに変換します。
SAMの機能
- 最小権限のIAMロールを自動生成し、細かい調整も可能です。
- デプロイパイプラインを設定として定義します。
sam buildとsam deployでパッケージ化とデプロイを行います。
sam validateでテンプレートのエラーを早期に検出します。
sam local start-lambdaでLambdaをローカルでエミュレートします。
SAMを使ったテスト
- デプロイ前にサーバーレスアプリをローカルでビルド、実行、テストします。
- Lambda関数とAPI Gatewayの統合をテストします。
sam local invokeで関数をローカルから実行します。
sam local start-apiでAPI Gatewayをエミュレートします。
ユニットテスト
- SAMとユニットテストを組み合わせてLambdaの動作を検証します。
- ローカルテストにより開発サイクルを短縮できます。
pytest、JUnit、Jestなどのフレームワークと組み合わせて使います。
テストワークフロー
sam local generate-eventでテストイベントを生成します。
- JSONイベントファイルとして出力されます。
sam local invoke FunctionName -e event.jsonでローカルから実行します。
- デプロイ前にフレームワークのアサーションでレスポンスを検証します。
AWSサービスのモック
motoなどのモックライブラリとローカルテストを組み合わせます。
- シミュレートされたAWSサービスを使い、実際の呼び出しは行いません。
- テスト速度が向上します。
- テストコストを削減できます。
- スロットリングや障害などのエラーシナリオを検証できます。
継続的インテグレーションと継続的デプロイ(CI/CD)
- SAMアプリは通常、CI/CDパイプライン経由でデプロイします。
- ビルド、テスト、パッケージ化、デプロイを自動化します。
- AWS CodeCommitにコードとSAMテンプレートを保存します。
- AWS CodeBuildでテストと
sam buildを実行します。
- AWS CodePipelineでワークフローを統合管理します。
CI/CDワークフロー
- ソースコードとSAMテンプレートをリポジトリにコミットします。
- 自動テストとバリデーションを実行します。
sam buildでアプリをパッケージ化します。
sam deployでリソースをデプロイします。
- デプロイ後はCloudWatchで監視します。
デプロイのトラブルシューティング
- トラブルシューティングは重要な運用スキルです。
- よくあるデプロイ失敗の原因:
- IAM権限の問題。
- SAMまたはCloudFormationテンプレートの誤り。
- Lambdaパッケージングの失敗や依存関係の欠落。
- API Gatewayの設定ミス。
デプロイのトラブルシューティング
- SAMのデプロイは内部的にCloudFormation上で実行されます。
- スタックイベントと自動ロールバックを提供します。
- デプロイ失敗の原因特定に役立ちます。
- ロールバックにより以前の環境状態に復元します。
デプロイのトラブルシューティング
- 以下のツールを使って問題を調査します:
- CloudWatch Logs。
- API Gatewayの実行ログ。
- Lambdaのログ。
- CloudWatchメトリクス。
練習しましょう!
AWS でのアプリケーション開発
Preparing Video For Download...