AWS認定資格 WEB問題集&徹底解説
デベロッパー–アソシエイト
AWSサービスの一つであるAWS Serverless Application Model (AWS SAM)はどんな内容なのでしょうか?また、AWS認定資格のデベロッパー-アソシエイト(DVA)に合格するためには、サービスのどんなポイントを押さえておけばよいのでしょうか?
ここでは、そんなあなたの疑問に回答していきたいと思います
1. サービス概要
AWS SAM(Serverless Application Model)は、サーバーレスアプリケーションを構築・デプロイするためのオープンソースのフレームワークです。CloudFormationを拡張した簡潔な構文(template.yaml)でLambda関数・API Gateway・DynamoDBテーブル等のサーバーレスリソースを定義できます。
SAM CLIを使うことで、ローカルでのテスト・ビルド・デプロイが容易になり、サーバーレスアプリの開発体験を大幅に向上させます。
2. 主な特徴と機能
2.1 SAMテンプレート(template.yaml)
CloudFormationテンプレートの拡張。Transform: AWS::Serverless-2016-10-31を宣言することで、サーバーレス専用の簡潔なリソースタイプが使用可能になります。
- AWS::Serverless::Function: Lambda関数(イベントソース・IAMポリシー・環境変数を簡潔に定義)。
- AWS::Serverless::Api: API Gateway。
- AWS::Serverless::SimpleTable: DynamoDBテーブル。
- AWS::Serverless::StateMachine: Step Functions。
SAMテンプレートはデプロイ時に標準のCloudFormationテンプレートに変換(Transform)されます。
2.2 SAM CLI
- sam init: サンプルプロジェクトの初期化。
- sam build: 依存パッケージを含むデプロイパッケージをビルド。
- sam local invoke / sam local start-api: Dockerを使ってLambda/API Gatewayをローカルで実行・テスト。
- sam deploy: CloudFormation経由でAWSにデプロイ(sam deploy --guidedで対話的設定)。
2.3 安全なデプロイ(CodeDeploy統合)
SAMはLambdaのトラフィックシフト(カナリア/リニア)をCodeDeployと統合して簡単に設定できます。DeploymentPreferenceでCanary10Percent5Minutes等を指定し、CloudWatchアラームと連携した自動ロールバックも可能。
2.4 SAM Accelerate(sam sync)
sam syncでコード変更を高速にクラウドに反映し、開発中のイテレーションを高速化。
3. アーキテクチャおよび技術要素
- template.yamlでサーバーレスリソースを定義。
- sam buildでコードと依存パッケージをビルド。
- sam local invokeでローカルテスト(Dockerコンテナ内でLambdaを実行)。
- sam deployでSAMテンプレートをCloudFormationに変換してデプロイ。
SAMとCloudFormationの関係: SAMはCloudFormationの上に構築された拡張。SAMテンプレートはデプロイ時にCloudFormationが処理(Macroによる変換)し、最終的にCloudFormationスタックとして管理される。
4. セキュリティと認証・認可
- SAMポリシーテンプレート: 一般的なIAM権限(DynamoDBへの読み書き等)をポリシーテンプレートで簡潔に付与。最小権限の実現を容易にする。
- IAMロールの自動生成: Lambda関数のIAM実行ロールをSAMが自動生成。
- CloudFormation IAM: デプロイ時のCloudFormation実行ロールで権限を制御。
5. 料金形態
- SAM/SAM CLI: 無料(オープンソースフレームワーク)。
- デプロイされるリソース(Lambda・API Gateway・DynamoDB・CloudFormation等)の利用料金が発生。
6. よくあるアーキテクチャ・設計パターン
- サーバーレスAPIの構築: template.yamlでLambda + API Gateway + DynamoDBを定義→sam deployで一括プロビジョニング。
- CI/CDパイプライン: CodePipeline → CodeBuild(sam build/sam package)→ CloudFormation(SAMデプロイ)。
- 安全なLambdaデプロイ: DeploymentPreferenceでカナリアデプロイ→CloudWatchアラーム監視→失敗時に自動ロールバック。
7. 設定・デプロイ手順(ハンズオン例)
- SAM CLIをインストール→
sam initでサンプルプロジェクトを作成。 - template.yamlでLambda関数・API Gateway・DynamoDB等を定義。
sam local invokeでローカルテスト(Docker使用)。sam build→sam deploy --guidedでAWSにデプロイ。- デプロイされたCloudFormationスタックを確認して動作テスト。
8. 試験で問われやすいポイント
8.1 SAMの役割
- Q: サーバーレスアプリケーションを簡潔なテンプレートで定義・デプロイするフレームワークは?
A: AWS SAM(Serverless Application Model)。CloudFormationを拡張したtemplate.yamlでLambda/API Gateway/DynamoDB等を簡潔に定義。
8.2 SAMとCloudFormationの関係
- Q: SAMテンプレートはどのように処理されるか?
A: Transform: AWS::Serverless-2016-10-31宣言によりデプロイ時に標準のCloudFormationテンプレートに変換される。最終的にCloudFormationスタックとして管理。
8.3 ローカルテスト
- Q: Lambda関数をローカルでテストするには?
A: SAM CLIの sam local invoke / sam local start-api(Dockerコンテナ内でLambda実行環境を再現)。
8.4 安全なデプロイ
- Q: SAMでLambdaのカナリアデプロイを実現するには?
A: AWS::Serverless::FunctionのDeploymentPreferenceでCanary/Linearを指定(CodeDeployと統合)。CloudWatchアラームで自動ロールバックも設定可能。