前提条件
- AWS CLIが使える
AWS SAMとは?
AWS SAM(Serverless Application Model)は、サーバーレスアプリケーションの構築とデプロイを容易にするフレームワークです。AWS Lambda、API Gateway、DynamoDB、S3などのリソースを一元的に管理し、簡潔なテンプレートを使ってアプリケーションの定義を行えます。これにより、サーバーレスアプリケーションの開発が効率化され、インフラストラクチャの設定やデプロイにかかる時間を大幅に削減できます。
AWS SAMのインストール
AWS SAMを使用するには、まず開発環境にCLIツールをインストールします。以下の手順で進めましょう。
- Homebrewを使用してインストール(macOS/Linuxの場合):
brew tap aws/tap brew install aws-sam-cli
- Windowsの場合:
Windowsインストーラを公式サイトからダウンロードしてインストールします。
インストールが完了したら、以下のコマンドでインストールが成功しているか確認します。
sam --version
SAM用にディレクトリを作成
今回はsam-tutorialというディレクトリを作成し、そちらに移動しましょう。
初期化コマンドを実行
sam init
初期化コマンドを実行すると対話型のプロンプトがはじまります。
Which template source would you like to use?
1 - AWS Quick Start Templates
2 - Custom Template Location
今回は1を選択します。
Choose an AWS Quick Start application template
1 - Hello World Example
2 - Data processing
3 - Hello World Example with Powertools for AWS Lambda
4 - Multi-step workflow
5 - Scheduled task
6 - Standalone function
7 - Serverless API
8 - Infrastructure event management
9 - Lambda Response Streaming
10 - Serverless Connector Hello World Example
11 - Multi-step workflow with Connectors
12 - GraphQLApi Hello World Example
13 - Full Stack
14 - Lambda EFS example
15 - DynamoDB Example
16 - Machine Learning
今回は1を選択します。
ランタイムは自分で選択します。
Use the most popular runtime and package type? (Python and zip) [y/N]: N
Which runtime would you like to use?
1 - aot.dotnet7 (provided.al2)
2 - dotnet8
3 - dotnet6
4 - go (provided.al2)
5 - go (provided.al2023)
6 - graalvm.java11 (provided.al2)
7 - graalvm.java17 (provided.al2)
8 - java21
9 - java17
10 - java11
11 - java8.al2
12 - nodejs20.x
13 - nodejs18.x
14 - nodejs16.x
15 - python3.9
16 - python3.8
17 - python3.12
18 - python3.11
19 - python3.10
20 - ruby3.3
21 - ruby3.2
22 - rust (provided.al2)
23 - rust (provided.al2023)
Runtime: 12
今回は12を選択します。
パッケージ形式を聞かれます。
What package type would you like to use?
1 - Zip
2 - Image
今回は1を選択します。
X-Ray tracingを有効にするか聞かれます。
Would you like to enable X-Ray tracing on the function(s) in your application? [y/N]: y
X-Ray will incur an additional cost. View https://aws.amazon.com/xray/pricing/ for more details
今回はNoを選択します。
CloudWatch Application Insightsを使うか聞かれます。
Would you like to enable monitoring using CloudWatch Application Insights?
For more info, please view https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/cloudwatch-application-insights.html [y/N]:
今回はNoを選択します。
Lambda 関数に JSON 形式で構造化ログを設定しますか?と聞かれます。
Would you like to set Structured Logging in JSON format on your Lambda functions? [y/N]:
今回はNoを選択します。
最後にプロジェクト名が聞かれます。
Project name [sam-app]: sam-app-tutorial
今回はsam-app-tutorialとしています。

このようにsam-app-tutorialが作成されていたら成功なので、sam-app-tutorialに移動しましょう。
SAMでアプリケーションをビルド
テンプレートが用意できたら、次はアプリケーションのビルドです。ビルドプロセスでは、SAMがテンプレートに基づいて必要な依存関係を解決し、デプロイ可能なパッケージを生成します。
sam build
ビルドが成功すると、.aws-sam/build
ディレクトリにパッケージが作成されます。
AWSにデプロイ
ローカルでのテストが完了したら、いよいよ本番環境にデプロイします。AWS SAMでは、sam deploy
コマンドを使用して簡単にデプロイできます。
プロファイルを指定しない場合はデフォルトのプロファイルのaws環境にデプロイされます。下記のコマンドでプロファイルを確認してください。
cat ~/.aws/credentials
デプロイ先を確認後、以下のコマンドでデプロイしてください。--guidedオプションは初回だけでOKです。
sam deploy --guided
このコマンドを初めて実行すると、デプロイ時の設定を対話形式で入力するよう促されます。
Configuring SAM deploy
======================
Looking for config file [samconfig.toml] : Found
Reading default arguments : Success
Setting default arguments for 'sam deploy'
=========================================
Stack Name [sam-app-tutorial]:
AWS Region [ap-northeast-1]:
#Shows you resources changes to be deployed and require a 'Y' to initiate deploy
Confirm changes before deploy [Y/n]: y
#SAM needs permission to be able to create roles to connect to the resources in your template
Allow SAM CLI IAM role creation [Y/n]: y
#Preserves the state of previously provisioned resources when an operation fails
Disable rollback [y/N]: y
HelloWorldFunction has no authentication. Is this okay? [y/N]: y
Save arguments to configuration file [Y/n]: y
SAM configuration file [samconfig.toml]:
SAM configuration environment [default]:
基本的には上記の形で良いと思います。
S3が作成されずにエラーになることがあるのでその場合は、S3を作成後に、samconfig.tomlのs3_bucketで明示的にS3を指定してください。
※resolve_s3はfalseに変更してください。
[default.deploy.parameters]
capabilities = "CAPABILITY_IAM"
confirm_changeset = true
resolve_s3 = false
s3_bucket = "your-existing-bucket-name"
s3_prefix = "sam-app-tutorial"
region = "ap-northeast-1"
disable_rollback = true
image_repositories = []
s3_bucketの項目を編集後に再度デプロイしてみてください。
sam deploy
設定が完了すると、アプリケーションが指定したAWSアカウントのリソースとして作成されます。
デプロイの確認
デプロイが完了すると、AWSコンソールからデプロイされたリソースを確認できます。また、デプロイ時に表示されるURLを使ってアプリケーションの動作を直接確認することも可能です。
まとめ
AWS SAMは、サーバーレスアプリケーションを効率的に開発・デプロイするための強力なツールです。CLIの操作に慣れておくと、アプリケーションの管理やデプロイが非常にスムーズになります。これからサーバーレスアーキテクチャに取り組む方は、このフレームワークを活用してみてください。また今回のひな形をもとにいろいろ試してみると理解が深まると思いますので、ぜひ、試してみてください。