ブログ

AWS SAM 実践 - CI/CD パイプライン | CodePipeline でサーバーレスを自動デプロイ!

はじめに

エンジニアの横田です。

以前の SAM 入門記事 [*1] を読んでいただいた方、ありがとうございます。SAM でサーバーレスアプリケーションをデプロイできるようになったものの、こんな悩みはありませんか?

「毎回 sam build して sam deploy するの、面倒くさい...」
「本番環境へのデプロイ、手動だとミスが怖い...」

わかります。手動デプロイは手間がかかるうえに、ヒューマンエラーのリスクも伴いますよね。。

そこで本ブログでは、AWS SAM と CI/CD パイプラインを組み合わせて、コードをプッシュするだけで自動的にビルド・テスト・デプロイが走る仕組みを構築します。CodePipeline を使って、開発から本番環境まで一貫した自動デプロイフローを実現しましょう。

一度パイプラインを組んでしまえば、あとはコードを書くことに集中できます。インフラ周りの作業から解放される快適さをぜひ体験してください!

それでは、レッツ CI/CD !!

※ 本ブログの情報は 2026/01/13 時点の情報です。

AWS SAM 実践 - CI/CD パイプライン|CI/CD パイプラインとは?

サーバーレスアプリケーションを開発していると、「手動でデプロイするの、そろそろ面倒になってきたな。。」と感じる瞬間がありますよね。そんなときに威力を発揮するのが CI/CD パイプラインです!

CI/CD って何?

CI(継続的インテグレーション) は、コードの変更を頻繁にマージして、自動でビルド・テストを実行する仕組みです。CD(継続的デリバリー/デプロイ) は、その先のステップで、テスト済みのコードを自動的に本番環境へデプロイします。

つまり CI/CD を導入すると、「コードを push したら、あとは自動でテストからデプロイまで完了する」という夢のような開発フローが実現できるんですね!

SAM は CI/CD 構築を強力にサポート

AWS SAM は CI/CD パイプラインの構築を簡素化する機能を豊富に提供しています。

  • ビルドコンテナイメージ: 各ランタイム向けに最適化されたイメージを提供
  • パイプラインテンプレート: 主要な CI/CD システム向けのスターターテンプレートを自動生成

対応している CI/CD システムは以下の通りです。本ブログでは AWS 純正構成を中心に解説します。

システム特徴
AWS CodePipeline + CodeCommit + CodeBuildAWS 純正で IAM 統合がシームレス、外部依存なし
GitHub ActionsGitHub リポジトリとの親和性が高い(OIDC 認証が必要)
GitLab CI/CDGitLab ユーザー向け(OIDC 認証が必要)
Jenkinsオンプレミス環境でも利用可能
Bitbucket PipelinesAtlassian エコシステムとの連携

AWS 純正構成のメリットは何といっても IAM による統合認証 です。外部 CI/CD サービスのように OIDC 認証の設定が不要で、AWS 内で完結するためセキュリティ管理がシンプルになります。また、EventBridge との連携でイベント駆動型のパイプライン制御も可能です。

本ブログで紹介するアプローチ

本ブログでは、sam pipeline コマンドを使ってスターターパイプラインを生成し、AWS CodePipeline で CI/CD 環境を構築する方法を紹介します。

CodePipeline は AWS のマネージドサービスなので、IAM ロールとの連携や他の AWS サービスとの統合がスムーズに行えるのがポイントですね!

AWS SAM 実践 - CI/CD パイプライン | sam pipeline init でパイプライン構築

AWS SAM には CI/CD パイプラインを簡単に構築するための専用コマンドが用意されています。
ここでは sam pipeline bootstrap と sam pipeline init の 2 つのコマンドについて解説します。

sam pipeline bootstrap - インフラストラクチャの準備

sam pipeline bootstrap は、CI/CD システムが AWS と連携するために必要なインフラストラクチャリソースを作成するコマンドです。
このコマンドを実行すると、以下のリソースが自動生成されます。

  • Pipeline 実行 IAM ロール - CI/CD パイプラインが AWS 操作を行うための権限
  • CloudFormation 実行 IAM ロール - スタックのデプロイに必要な権限
  • Amazon S3 バケット - ビルドアーティファクトの保存先
  • Amazon ECR リポジトリ(オプション) - コンテナイメージベースの Lambda 関数を使用する場合

重要なポイントとして、このコマンドは各ステージ(dev、prd など)ごとに実行する必要があります。ステージごとに異なる AWS アカウントやリージョンを使用する場合は、それぞれの環境で bootstrap を実行してください。

sam pipeline init - パイプライン設定ファイルの生成

sam pipeline init は、選択した CI/CD システム用のパイプライン設定ファイルを生成するコマンドです。GitHub Actions であれば .github/workflows/ 配下に、AWS CodePipeline であれば codepipeline.yaml といった形式でファイルが作成されます。

前提条件として、対象となる各ステージのリソースが sam pipeline bootstrap で作成済みである必要があります。

コマンドの実行方法

# ステップ 1: 各ステージ用のリソースを作成
sam pipeline bootstrap

# ステップ 2: パイプライン設定ファイルを生成
sam pipeline init

# または、一括で実行する場合
sam pipeline init --bootstrap
$ sam pipeline bootstrap --stage dev

sam pipeline bootstrap generates the required AWS infrastructure resources to connect
to your CI/CD system. This step must be run for each deployment stage in your pipeline,
prior to running the sam pipeline init command.

We will ask for [2] stage definition, [4] account details, and
[5] references to existing resources in order to bootstrap these pipeline resources.

[2] Stage definition
Stage name [dev]: dev

[4] Account details
The following AWS credential sources are available to use.
To learn more about the credential sources, visit:
https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-files.html
1 - Environment variables
2 - default (named profile)
q - quit
Select a credential source to associate with this stage: 2
Select a region: ap-northeast-1

[5] Reference application build resources
Enter the pipeline IAM user ARN if you have previously created one, or we will create one for you []:

[6] Summary
Below is the summary of the answers:
1 - Account: 123456789101
2 - Stage: dev
3 - Region: ap-northeast-1
4 - Pipeline user: [to be created]
5 - Pipeline execution role: [to be created]
6 - CloudFormation execution role: [to be created]
7 - Artifacts bucket: [to be created]
8 - ECR image repository: [skipped]

Press enter to confirm the values above, or select an item to edit the value:

This will create the following required resources for the 'dev' environment:
- Pipeline IAM user
- Pipeline execution role
- CloudFormation execution role
- Artifact bucket

Should we proceed with the creation? [y/N]: y

Creating the required resources...
Successfully created!

The following resources were created in your account:
- Pipeline IAM user
- Pipeline execution role
- CloudFormation execution role
- Artifact bucket

Pipeline IAM user credential:
AWS_ACCESS_KEY_ID: AAAAAAAAAAAAAAA
AWS_SECRET_ACCESS_KEY: ****************************************

View the summary of your pipeline resources at: .aws-sam/pipeline/pipelineconfig.toml

対話形式での設定

コマンド実行時には、対話形式で以下の項目を設定します。

  1. パイプラインテンプレートの選択 - AWS CodePipeline、GitHub Actions、GitLab CI/CD など
  2. ステージ名の指定 - dev、staging、prd などの環境名
  3. AWS アカウント情報 - アカウント ID とリージョン
  4. IAM ロール ARN - bootstrap で作成されたロールの ARN

対話形式なのでコマンドを覚える必要がなく、ガイドに従って進めるだけでパイプライン構築に必要な設定が完了します。

AWS SAM 実践 - CI/CD パイプライン | CodePipeline でマルチステージデプロイ

sam pipeline init を実行すると、codepipeline.yaml という CloudFormation テンプレートが生成されます。このテンプレートには、Source → Build → Deploy という基本的なステージ構成が定義されています。

パイプラインのステージ構成

生成されるパイプラインは、以下の流れで動作します。

  1. Source ステージ: CodeCommit からソースコードを取得
  2. Build ステージ: CodeBuild で sam build と sam package を実行
  3. Deploy ステージ: 各環境へ sam deploy を実行

CodeCommit リポジトリの準備

AWS 純正構成では、CodeCommit をソースリポジトリとして使用します。CodeCommit は AWS 内で完結するため、IAM ユーザーの認証情報だけでセキュアにアクセスできるのが魅力ですね!

まず、CodeCommit リポジトリを作成しましょう。

# CodeCommit リポジトリの作成
aws codecommit create-repository \
--repository-name sam-app \
--repository-description "SAM アプリケーション用リポジトリ"

リポジトリをクローンする際は、HTTPS または SSH を選択できます。

# HTTPS でクローン(Git 認証情報が必要)
git clone https://git-codecommit.ap-northeast-1.amazonaws.com/v1/repos/sam-app

# SSH でクローン(SSH キーの設定が必要)
git clone ssh://git-codecommit.ap-northeast-1.amazonaws.com/v1/repos/sam-app

ちなみに、HTTPS の場合は IAM ユーザーの「Git 認証情報」を事前に生成しておく必要があります。
IAM コンソールの「セキュリティ認証情報」タブから「AWS CodeCommit の HTTPS Git 認証情報」を作成してくださいね。

dev → prd のマルチステージ構成

開発環境と本番環境を分離するために、Deploy ステージを複数定義できます。codepipeline.yaml では、まず dev 環境へデプロイし、その後 prd 環境へデプロイする構成がテンプレートとして用意されています。

ここで一つポイントがあります。本番環境へのデプロイ前には、Manual Approval(手動承認) アクションを挟むことを強くおすすめします。これにより、意図しない変更が本番環境に反映されることを防げます。

- Name: ApprovalStage
  Actions:
  - Name: ManualApproval
    ActionTypeId:
      Category: Approval
      Owner: AWS
      Provider: Manual
      Version: "1"
    Configuration:
      CustomData: "本番環境へデプロイしてよろしいですか?"

パイプラインのデプロイ

パイプライン自体のデプロイは、以下のコマンドで実行します。

sam deploy -t codepipeline.yaml \
--stack-name sam-app-pipeline \
--capabilities CAPABILITY_IAM \
--region ap-northeast-1
$ sam deploy -t codepipeline.yaml --stack-name sam-cicd-pipeline --capabilities CAPABILITY_IAM --region ap-northeast-1

Managed S3 bucket: aws-sam-cli-managed-default-samclisourcebucket-xxxxx
A]different default S3 bucket can be set in samconfig.toml

Deploying with following values
===============================
Stack name                   : sam-cicd-pipeline
Region                       : ap-northeast-1
Confirm changeset            : False
Disable rollback             : False
Deployment s3 bucket         : aws-sam-cli-managed-default-samclisourcebucket-xxxxx
Capabilities                 : ["CAPABILITY_IAM"]
Parameter overrides          : {}
Signing Profiles             : {}

Initiating deployment
=====================
Waiting for changeset to be created..

CloudFormation stack changeset
-----------------------------------------------------------------------------------------------------------------------------
Operation                     LogicalResourceId                    ResourceType                        Replacement
-----------------------------------------------------------------------------------------------------------------------------
+ Add                         CodeBuildProjectBuildAndPackage      AWS::CodeBuild::Project             N/A
+ Add                         CodeBuildProjectDeploy               AWS::CodeBuild::Project             N/A
+ Add                         CodeBuildServiceRole                 AWS::IAM::Role                      N/A
+ Add                         CodePipelineExecutionRole            AWS::IAM::Role                      N/A
+ Add                         CodeStarConnection                   AWS::CodeStarConnections::Connection N/A
+ Add                         Pipeline                             AWS::CodePipeline::Pipeline         N/A
+ Add                         PipelineStackCloudFormationRole      AWS::IAM::Role                      N/A
-----------------------------------------------------------------------------------------------------------------------------
Changeset created successfully. arn:aws:cloudformation:ap-northeast-1:123456789101:changeSet/samcli-deploy-xxxxx

2026-01-13 13:XX:XX - Waiting for stack create/update to complete

CloudFormation events from stack operations (most recent last)
-----------------------------------------------------------------------------------------------------------------------------
ResourceStatus                ResourceType                  LogicalResourceId                    ResourceStatusReason
-----------------------------------------------------------------------------------------------------------------------------
CREATE_IN_PROGRESS            AWS::IAM::Role                CodeBuildServiceRole                 -
CREATE_IN_PROGRESS            AWS::IAM::Role                CodePipelineExecutionRole            -
CREATE_COMPLETE               AWS::IAM::Role                CodeBuildServiceRole                 -
CREATE_COMPLETE               AWS::IAM::Role                CodePipelineExecutionRole            -
CREATE_IN_PROGRESS            AWS::CodeBuild::Project       CodeBuildProjectBuildAndPackage      -
CREATE_IN_PROGRESS            AWS::CodeBuild::Project       CodeBuildProjectDeploy               -
CREATE_COMPLETE               AWS::CodeBuild::Project       CodeBuildProjectBuildAndPackage      -
CREATE_COMPLETE               AWS::CodeBuild::Project       CodeBuildProjectDeploy               -
CREATE_IN_PROGRESS            AWS::CodePipeline::Pipeline   Pipeline                             -
CREATE_COMPLETE               AWS::CodePipeline::Pipeline   Pipeline                             -
CREATE_COMPLETE               AWS::CloudFormation::Stack    sam-cicd-pipeline                    -
-----------------------------------------------------------------------------------------------------------------------------
Successfully created/updated stack - sam-cicd-pipeline in ap-northeast-1

ベストプラクティス

運用を見据えて、以下の点を考慮しておきましょう。

IAM ロールによるセキュアな権限管理 : AWS 純正構成の最大のメリットは IAM との統合です。CodePipeline、CodeBuild、CodeCommit はすべて IAM ロールで権限管理されるため、外部 CI/CD サービスのように OIDC 認証の設定や長期認証情報の管理が不要です。これにより、セキュリティ管理がシンプルかつ堅牢になります。

最小権限の原則 : sam pipeline bootstrap で作成される IAM ロールは、SAM アプリケーションのデプロイに必要な権限のみを持っています。本番環境ではさらに権限を絞り込むことを検討しましょう。

マルチアカウント構成 : dev と prd を別の AWS アカウントに分離することで、権限管理やコスト管理が明確になります。SAM の CI/CD テンプレートはマルチアカウント構成にも対応しています。

EventBridge との連携 : AWS 純正構成では、EventBridge を使用してイベント駆動型のパイプライン制御が可能です。例えば、特定のブランチへのプッシュのみでパイプラインをトリガーしたり、スケジュール実行を設定したりできます。

samconfig.toml での環境別設定 : 各環境の設定は samconfig.toml に集約しましょう。環境ごとのパラメータを一元管理でき、デプロイ時のミスを防げます。

[dev.deploy.parameters]
stack_name = "sam-app-dev"
[prd.deploy.parameters]
stack_name = "sam-app-prd"

発展的な連携 : AWS 純正構成では、AWS X-Ray との統合でトレーシングを強化したり、Amazon CloudWatch でビルド・デプロイのメトリクス監視を行うこともできます。また、Amazon Q Developer を活用してコード品質の向上を図ることも可能です。

これらの設定を適切に行うことで、安全かつ効率的なデプロイパイプラインを構築できます。

AWS SAM 実践 - CI/CD パイプライン | 実際にパイプラインを動かしてみよう

いよいよ構築したパイプラインを動かしてみましょう!ここでは、コードのプッシュからデプロイ完了まで、一連の流れを確認していきます。

CodeCommit へプッシュしてパイプラインをトリガー

まずはコードを CodeCommit リポジトリにプッシュして、パイプラインを起動させましょう。

# CodeCommit リポジトリにリモートを設定(初回のみ)
git remote add origin https://git-codecommit.ap-northeast-1.amazonaws.com/v1/repos/sam-app

# コードをコミット
git add .
git commit -m "Add CI/CD pipeline configuration"

# CodeCommit へプッシュ
git push origin main

CodeCommit へのプッシュをトリガーに、CodePipeline が自動的に動き始めます。AWS 純正構成なので、CodeCommit と CodePipeline の連携は設定済みの状態で動作しますよ

CodePipeline コンソールでの確認

AWS マネジメントコンソールから CodePipeline を開くと、パイプラインの進行状況をリアルタイムで確認できます。

パイプラインの動作フロー

パイプラインは以下の順序で実行されます。

1.Source: CodeCommit リポジトリからコードを取得

2.Build: CodeBuild で sam build を実行してアプリケーションをビルド

    3.Deploy (dev): 開発環境にデプロイ

    4.Approval: 手動承認を待機(本番デプロイ前のゲート)

    5.Deploy (prd): 承認後、本番環境にデプロイ

    手動承認のステージでは、開発環境での動作確認を行ってから本番にリリースできるため、安心感がありますね。

    デプロイ成功の確認方法

    デプロイが完了したら、以下の方法で動作を確認してみましょう。

    • CloudFormation: スタックのステータスが CREATE_COMPLETE または UPDATE_COMPLETE になっているか
    • Lambda コンソール: 関数が正しく作成・更新されているか
    • API Gateway: エンドポイントにアクセスして期待通りのレスポンスが返るか
    $ curl https://5ey1xgu8n0.execute-api.ap-northeast-1.amazonaws.com/Prod/hello/
      {"message": "hello world"}
    
    $ curl https://n30qguzrq2.execute-api.ap-northeast-1.amazonaws.com/Prod/hello/
      {"message": "hello world"}
    

    トラブルシューティングのヒント

    うまくいかないときも慌てずに!よくあるエラーと対処法を紹介します。

    ビルドエラーの場合

    • CodeBuild のログで具体的なエラーメッセージを確認してみてください
    • requirements.txt や依存関係の記述ミスが原因であることが多いです

    デプロイ失敗の場合

    • CloudFormation のイベントタブでどのリソースで失敗したか確認しましょう
    • IAM 権限不足や、リソース名の重複がよくある原因です

    エラーが出たら、まずはログを読むことが解決への近道です。焦らず一つずつ確認していきましょう!

    AWS SAM 実践(まとめ)

    いかがでしたでしょうか?

    本ブログでは、AWS SAM と AWS 純正サービス(CodeCommit + CodePipeline + CodeBuild)を組み合わせた CI/CD パイプラインの構築方法について解説しました。

    sam pipeline コマンドを使用することで、複雑な CI/CD パイプラインの構築作業を大幅に簡略化できます。対話形式の質問に答えていくだけで、IAM ロール、アーティファクト用 S3 バケット、CodePipeline といった必要なリソースが自動的に構成されます。

    AWS 純正構成を採用することで、以下のようなメリットを享受できます。

    • デプロイの自動化: CodeCommit へのプッシュをトリガーに自動デプロイが実行される

    • IAM 統合によるセキュリティ: 外部サービスへの認証情報管理が不要で、IAM ロールで一元管理

    • AWS 内で完結: 外部依存がなく、すべて AWS マネージドサービスで運用可能

    • 品質の担保: 承認フローを挟むことで、本番環境への意図しないデプロイを防止

    • 運用負荷の軽減: 繰り返し作業の削減により、開発者が本来の業務に集中できる

      今後のステップとして、EventBridge との連携によるイベント駆動型パイプラインや、AWS X-Ray との統合によるトレーシング強化など、AWS 純正サービスの発展的な活用も検討できます。ぜひ、プロジェクトに適した CI/CD パイプラインの構築にチャレンジしてみてください。

      弊社では AWS 環境の構築・運用支援を行っております。「AWS でこんなことできないかな?」「自社サーバーを AWS に引っ越したいな。」等々ございましたら、右上の[お問い合わせ]からお気軽にご相談ください。

      ご参考

      *1「AWS SAM 入門」(弊社記事)
      https://aws.taf-jp.com/blog/127434

      *「AWS SAM CI/CD 概要」
      https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/deploying-cicd-overview.html

      *「sam pipeline コマンドリファレンス」
      https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/sam-cli-command-reference-sam-pipeline-bootstrap.html

      *「AWS CodeCommit ユーザーガイド」
      https://docs.aws.amazon.com/codecommit/latest/userguide/welcome.html

      *「CodeCommit の認証情報設定」
      https://docs.aws.amazon.com/codecommit/latest/userguide/setting-up-gc.html

      【筆者実行環境】
      OS:macOS Tahoe 26.2
      aws cli:aws-cli/2.32.33 Python/3.13.11 Darwin/25.2.0 source/arm64
      SAM CLI:version 1.151.0

      元記事発行日: 2026年02月11日、最終更新日: 2026年01月20日