はじめに
AWSのサーバーレスアプリケーションを管理・デプロイする際に利用する 「AWS SAM」 について、CloudFormationとの違いに焦点を当てながら、わかりやすく説明していきます。
「AWS SAMって何ができるの?」 「CloudFormationと何が違うの?」 という疑問をお持ちの方に役立つ内容です。
AWS SAMとは?
AWS SAM(Serverless Application Model)
は、サーバーレスアプリケーションを管理・デプロイするためのAWS提供のフレームワークです。
サーバーレス環境では、複数のAWSリソース(例えば、Lambda、API Gateway、DynamoDBなど)を使ってアプリケーションを構築しますが、これを手動で設定するのは大変です。
AWS SAMは、これらの設定を1つのテンプレートにまとめ、簡単に管理できるようにします。
SAMは、基本的にはAWSの CloudFormation に依存しており、SAMテンプレートを使用して作成されたリソースは、最終的にはCloudFormationを通じてデプロイされます。
しかし、SAMはサーバーレスに特化しているため、CloudFormationよりもシンプルにリソースを定義することができます。
SAMの特徴
まずは、AWS SAMの主な特徴を紹介します。
- テンプレートの簡素化
通常のCloudFormationテンプレートでは、リソースを詳細に定義する必要がありますが、SAMを使うとテンプレートの記述が簡略化されます。
例えば、Lambda関数を定義する際、SAMではわずか数行でリソースを作成できます。
例:Lambda関数の定義
- CloudFormationの例:
{
"Resources": {
"MyServerlessFunctionLogicalID": {
"Type": "AWS::Lambda::Function",
"Properties": {
"Handler": "index.handler",
"Code": {
"S3Bucket": "amzn-s3-demo-bucket",
"S3Key": "MySourceCode.zip"
},
"Role": {
"Fn::GetAtt": ["FunctionNameRole", "Arn"]
},
"Runtime": "nodejs20.x"
}
},
"FunctionNameRole": {
"Type": "AWS::IAM::Role",
"Properties": {
"ManagedPolicyArns": ["arn:aws:iam::aws:policy/service-role/AWSLambdaBasicExecutionRole"],
"AssumeRolePolicyDocument": {
"Version": "2012-10-17",
"Statement": [{
"Action": ["sts:AssumeRole"],
"Effect": "Allow",
"Principal": {
"Service": ["lambda.amazonaws.com"]
}
}]
}
}
}
}
}
- SAMの例:
Transform: AWS::Serverless-2016-10-31
Resources:
MyServerlessFunctionLogicalID:
Type: AWS::Serverless::Function
Properties:
Handler: index.handler
Runtime: nodejs20.x
CodeUri: 's3://amzn-s3-demo-bucket/MySourceCode.zip'
SAMでは、CloudFormationよりも少ない記述量で同じリソースを定義でき、開発の負担が軽減されます。
- 統合されたサーバーレスリソースのサポート
SAMは、LambdaやAPI Gateway、DynamoDBといったサーバーレスアーキテクチャに必要なリソースを簡単に連携させるために最適化されています。
API GatewayとLambdaの連携もシンプルに記述できます。 - ローカルでの開発とデバッグ
SAM CLIを使用することで、Lambda関数やAPI Gatewayのローカルエミュレーションが可能です。
これにより、AWSにデプロイする前にローカルでテストやデバッグができ、開発サイクルを効率化できます。 - デプロイの簡素化
SAMを使うと、sam deploy コマンドを使って簡単にリソースをデプロイできます。
手動でS3にコードをアップロードしたり、複雑なCloudFormationコマンドを実行する必要がありません。
CloudFormationとの違い
SAMとCloudFormationの違いを整理すると、次のような点が挙げられます。
- テンプレートのシンプルさ
CloudFormationはすべてのAWSリソースを詳細に定義する必要がありますが、SAMはサーバーレスリソースに特化しているため、より簡潔にテンプレートが書けます。
複数のリソースを連携させる際も、SAMでは自動的に関連付けが行われるため、設定ミスのリスクも減少します。 - ローカルデバッグのサポート
SAMは、サーバーレスアプリケーションのローカルテストやデバッグ機能を提供していますが、CloudFormation自体にはこのようなローカルテスト機能がありません。
ローカルでのテストが必要な場合、SAMを使用することで効率的な開発が可能です。 - デプロイの効率性
SAMでは、リソースのビルド、パッケージング、デプロイが統合されており、ワンコマンドで簡単に行えます。
CloudFormationでは、これらのステップを手動で管理する必要があります。
AWS資格試験対策としてのSAM
AWSの資格試験では、サーバーレスアーキテクチャに関する問題が出題されることが多くあります。
その際、AWS SAMの概念や使い方を理解していると、サーバーレスリソースの管理方法やデプロイの流れがスムーズに理解できるでしょう。
特に、API GatewayとLambdaの統合やデプロイ手順を押さえておくことが重要です。
まとめ
AWS SAMは、サーバーレスアプリケーションのデプロイをシンプルにし、開発の効率を高める強力なツールです。
CloudFormationとの違いを理解することで、より効果的にAWSのサーバーレスリソースを管理できるようになります。
資格試験対策としても、SAMを実際に使ってみることで、サーバーレスアプリケーションに関する出題にも対応しやすくなるでしょう。
参考
AWSのドキュメントやブログ記事を参考にしつつ、私自身が勉強した内容をもとにこのまとめを作成しました。より詳細な情報を知りたい方は、以下のリンクもご参考ください。
|