AWS SAM CLI で Python アプリをビルド・デプロイする環境を構築する

AWS SAM CLI で Python アプリをビルド・デプロイする環境を構築する

2026.03.10

はじめに

こんにちは、山本 翔大です。
現在、研修課題で Python を使った開発を行っています。
要件の一つとして AWS SAM を使用してデプロイする必要があるため、今回は AWS SAM CLI を使用してビルド・デプロイするための環境構築の手順をまとめました。

なお、本記事は以下の環境・条件を前提としています。

  • macOS を使用していること
  • Homebrew がインストール済みであること
  • AWS アカウントおよびアクセスキー・シークレットキーを取得済みであること

Homebrew のインストール方法については本記事では割愛します。
また、今回は以下の内容で構築していきます。

  • pyenv 2.6.23
  • Python 3.12.12
  • AWS CLI 2.32.0
  • SAM CLI 1.154.0

Python のインストール手順から記載しているため、すでにインストール済みの場合は該当のセクションを飛ばしてください。

1. AWS SAM とは

まず、SAM について簡単に説明します。
SAM(Serverless Application Model)は、AWS が提供しているサーバーレスアプリケーションを構築するためのフレームワークです。
CloudFormation をベースとしており、AWS 上に Lambda、API Gateway などを効率的に構築・デプロイすることができます。

SAM CLI は SAM アプリケーションのビルド・デプロイを行うためのコマンドラインツールです。
SAM テンプレートを使って簡単に AWS へデプロイすることができます。

2. Python のインストール

まずは、Python をインストールするために pyenv のインストールを行います。
ターミナルを開き、以下のコマンドを入力してください。(% の入力は不要です)

% brew install pyenv

インストール終了後に以下のコマンドを入力してバージョンが表示されればインストール完了です。

% pyenv --version
pyenv 2.6.23

バージョンが表示されることを確認したら以下のコマンドを実行してパスを通します。

% echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.zshrc
% echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.zshrc
% echo 'eval "$(pyenv init -)"' >> ~/.zshrc

上記のコマンドで pyenv のパスを .zshrc に追記しました。
追記した設定を現在のターミナルに反映させるために以下のコマンドを実行してください。

% source ~/.zshrc

次に、インストールした pyenv を使用して Python のインストールを行います。
以下のコマンドでインストール可能なバージョン一覧を取得できます。

% pyenv install --list
  2.1.3
  2.2.3
  2.3.7
  2.4.0
  2.4.1
  2.4.2
  ...

非常に多いですが今回は3.12.12をインストールします。
以下のコマンドでインストールできます。また、デフォルトとして今回インストールしたバージョンを使用するように指定します。

% pyenv install 3.12.12
% pyenv global 3.12.12

インストールが完了したら以下のコマンドでインストールできているか、バージョンが正しいかを確認してください。

% python --version
Python 3.12.12

3. AWS CLI のインストール

次に、SAM が AWS 上にデプロイするために AWS CLI をインストールします。
以下のコマンドを入力してインストールし、バージョンを確認してください。

# インストール
% brew install awscli

# バージョン確認
% aws --version
aws-cli/2.32.0 Python/3.13.12 Darwin/25.2.0 source/arm64

aws-cli/2.32.xと表示されたら成功です。

インストールが完了したら認証設定を行います。aws configure を実行するとシークレットキーなどの入力が求められるため、それぞれ入力してください。
入力した認証情報でデプロイが行われます。

% aws configure

AWS Access Key ID     : AKIAxxxxxxxxxxxxxxxx
AWS Secret Access Key : xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Default region name   : ap-northeast-1
Default output format : json

以下のコマンドを実行し、設定した認証情報が表示されていれば成功です。

% aws sts get-caller-identity

なお、今回は直接アクセスキーを入力する方法を使用していますが、入力した認証情報はローカルに平文で保存されるため注意が必要です。
セキュリティの観点から、可能であれば IAM Identity Center(AWS SSO)による認証や、短期的な認証情報の利用が推奨されています。詳しくは AWS CLI の認証設定に関する公式ドキュメント をご参照ください。

また、認証に MFA が有効な環境では、別途認証情報の取得が必要になる場合があります。適宜ご確認ください。

4. SAM CLI のインストール

次に、SAM CLI のインストールを行います。
AWS CLI のインストールを行ったときと同じように以下のコマンドでインストールします。

# インストール
% brew install aws-sam-cli

# インストール確認
% sam --version
SAM CLI, version 1.154.x

5. ビルドとデプロイのテスト

全てのインストールが終わったらビルドとデプロイのテストを行います。

プロジェクトの初期化

プロジェクトフォルダに移動し、以下のコマンドを実行してください。

# プロジェクトで使用するバージョンを設定
% pyenv local 3.12.12

# SAM プロジェクトを初期化
% sam init

初期化を行うと以下のように選択項目が出ます。内容に応じて選択してください。
今回は例として私が選んだ内容も記載しておきます。

# 公式が用意したテンプレートを使用するか?
Which template source would you like to use?
        1 - AWS Quick Start Templates
        2 - Custom Template Location
Choice: 1 # 公式が用意したテンプレートを使用

# どのテンプレートを使用するか
Choose an AWS Quick Start application template
        1 - Hello World Example
        2 - Data processing
        ...
Template: 1

# デフォルトのランタイムを使用するか
Use the most popular runtime and package type? (python3.14 and zip) [y/N]: n # バージョンを指定したいため「n」を選択

# どの言語環境にするか
Which runtime would you like to use?
        1 - dotnet10
        2 - dotnet8
        ...
Runtime: 19 # インストールした Python バージョンに合わせて選択。今回は3.12

# Lambda 関数の展開方式
What package type would you like to use?
        1 - Zip
        2 - Image
Package type: 1  # コードをZip形式でパッケージ化

# X-Ray tracing を有効にするか
Would you like to enable X-Ray tracing on the function(s) in your application?  [y/N]: n

# 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]: n

# ログを JSON 方式にするか
Would you like to set Structured Logging in JSON format on your Lambda functions?  [y/N]: n

# プロジェクト名
Project name [sam-app]: python-project

すべての選択が終わると、以下のようなフォルダ構成でプロジェクトが生成されます。(選択したテンプレートによって構成は異なります)

プロジェクト名/
├── template.yaml       
├── samconfig.toml      
├── hello_world/
│   ├── app.py          
│   └── requirements.txt 
├── tests/
└── README.md

ビルドとデプロイ

初期化が終わったら以下のようにしてビルドとデプロイを行えます。

# ビルド
% sam build

# デプロイ(初回)
% sam deploy --guided

# デプロイ(2回目以降)
% sam deploy

初回のデプロイだけ以下の項目を入力してください。

Stack Name              : 任意のスタック名
AWS Region              : ap-northeast-1 # 使用するリージョン
Confirm changes         : y # デプロイ前に変更内容の確認をするか
Allow IAM role creation : y # ロールを自動作成するか
Disable rollback        : N # エラーが発生したときにロールバックを無効にするか
Save to samconfig.toml  : y # 上記の内容を保存するか

デプロイができているか AWS マネジメントコンソールで確認してみましょう。
うまくデプロイができていれば設定した名前のスタックが作成されていることがわかります。
スクリーンショット 2026-03-04 17.19.09

最後にリソースの削除方法です。
以下のコマンドで削除できます。選択肢が出てくるのでどちらも「y」を入力してください。

% sam delete --stack-name (スタック名)
 Are you sure you want to delete the stack (スタック名) in the region ap-northeast-1 ? [y/N]: y
     Do you want to delete the template file xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.template in S3? [y/N]: y

おわりに

以上で終了です。
今回は SAM を使ってデプロイできる環境を構築する手順を紹介しました。
今回は紹介しませんでしたが、Docker を使用して Lambda 関数をローカル環境でテストすることもできます。ぜひ試してみてください。

この記事が少しでも参考になれば幸いです。
最後まで読んでいただきありがとうございました。

参考資料

https://github.com/pyenv/pyenv?tab=readme-ov-file#b-set-up-your-shell-environment-for-pyenv
https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/what-is-sam.html
https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html

クラスメソッドオペレーションズ株式会社について

クラスメソッドグループのオペレーション企業です。

運用・保守開発・サポート・情シス・バックオフィスの専門チームが、IT・AIをフル活用した「しくみ」を通じて、お客様の業務代行から課題解決や高付加価値サービスまでを提供するエキスパート集団です。

当社は様々な職種でメンバーを募集しています。

「オペレーション・エクセレンス」と「らしく働く、らしく生きる」を共に実現するカルチャー・しくみ・働き方にご興味がある方は、クラスメソッドオペレーションズ株式会社 コーポレートサイト をぜひご覧ください。※2026年1月 アノテーション㈱から社名変更しました

この記事をシェアする

FacebookHatena blogX

関連記事