AWSロゴ

AWS CodeCommit → Lambda → EC2 自動デプロイ構成

1. はじめに

WebアプリやWordPressの更新時、いちいちEC2にSSHでログインして git pull するのは面倒ですよね。
人間がやる以上、コマンド打ち間違いやブランチ間違いなどのヒューマンエラーも発生します。

そこで今回は、AWSサービスを組み合わせて完全自動デプロイを構築しました。
これにより、CodeCommitへpushするだけでEC2に自動反映され、さらにSNS通知まで飛ぶようになります。

2. システム構成図

AWS CodeCommit → Lambda → EC2 自動デプロイ構成
AWS CodeCommit → Lambda → EC2 自動デプロイ構成
  • Client(開発PC) → Git Push
  • CodeCommit(ソース管理) → pushイベント発火
  • Lambda(デプロイスクリプト実行) → SSM経由でEC2接続
  • EC2git pull
  • SNS(結果通知)

3. 各サービスの役割

サービス役割
CodeCommitGitリポジトリとしてソース管理
Lambdapushイベントをトリガーに実行、SSMを使ってEC2へコマンド送信
SSM(Session Manager)Lambdaから安全にEC2へ接続(鍵不要)
EC2実際のWebアプリ/WordPress稼働環境。git pullで最新化
SNSデプロイ完了通知をメール等で送信

4. 実装手順

4.1 CodeCommitリポジトリ作成

  1. AWSマネジメントコンソール → CodeCommit → 「リポジトリの作成」
  2. IAMユーザーでGit認証情報を設定

4.2 Lambda関数作成&Layer登録

Lambdaトリガー設定
Lambdaトリガー設定
Lambda環境変数
Lambda環境変数
Lambda実行ロール
Lambda実行ロール
  1. ランタイム:Python 3.12
  2. 環境変数に BRANCHDEPLOY_PATH を設定

4.3 IAMロール設定

Lambdaロールに以下を付与

  • AmazonEC2RoleforSSM 相当のポリシー
  • SNS:Publish の権限(通知する場合)
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "Statement1",
            "Effect": "Allow",
            "Action": [
                "ssm:SendCommand",
                "ssm:GetCommandInvocation"
            ],
            "Resource": "*"
        }
    ]
}

 

4.4 LambdaからEC2へgit pull実行

import boto3
import os

ssm = boto3.client('ssm')
instance_id = os.environ['INSTANCE_ID']

commands = [
    f"cd {os.environ['DEPLOY_PATH']}",
    f"git fetch origin {os.environ['BRANCH']}",
    f"git reset --hard origin/{os.environ['BRANCH']}"
]

ssm.send_command(
    InstanceIds=[instance_id],
    DocumentName="AWS-RunShellScript",
    Parameters={'commands': commands}
)

4.5 動作確認

  1. ローカルで git push origin master
  2. CloudWatch Logs で Lambda 実行ログを確認
  3. SNS通知が届くか確認
SNSメール通知
SNSメール通知

こんなメールが届き、成否がわかります。

5. ポイント&注意点

  • 最小権限の原則
    Lambda → EC2 への権限は必要最小限に
  • ブランチ運用
    main / master / develop 等、目的に応じたデプロイのみを対象にすると安全
  • ログ監視
    CloudWatch Logs でLambdaの実行結果を常にチェック

6. まとめ

今回の構成により、CodeCommitへのpushだけでEC2環境が自動更新され、手動デプロイの手間とミスを大幅に削減できます。
同じ構成はステージング・本番環境にも容易に展開可能ですが、ホットデプロイには向いていませんので、そういった用途の場合、AWS CodeDeployを利用した方が良いと思います。
この方法はあくまでも「簡易的な自動デプロイ」と考えています。

図解 Amazon Web Servicesの仕組みとサービスがたった1日でよくわかる
図解 Amazon Web Servicesの仕組みとサービスがたった1日でよくわかる
Amazonで今すぐ購入
AWSの基本・仕組み・重要用語が全部わかる教科書 (見るだけ図解)
AWSの基本・仕組み・重要用語が全部わかる教科書 (見るだけ図解)
Amazonで今すぐ購入
Home » コンピューター » AWS CodeCommit → Lambda → EC2 自動デプロイ構成