1. はじめに
WebアプリやWordPressの更新時、いちいちEC2にSSHでログインして git pull
するのは面倒ですよね。
人間がやる以上、コマンド打ち間違いやブランチ間違いなどのヒューマンエラーも発生します。
そこで今回は、AWSサービスを組み合わせて完全自動デプロイを構築しました。
これにより、CodeCommitへpushするだけでEC2に自動反映され、さらにSNS通知まで飛ぶようになります。
2. システム構成図

- Client(開発PC) → Git Push
- CodeCommit(ソース管理) → pushイベント発火
- Lambda(デプロイスクリプト実行) → SSM経由でEC2接続
- EC2(
git pull
) - SNS(結果通知)
3. 各サービスの役割
サービス | 役割 |
---|---|
CodeCommit | Gitリポジトリとしてソース管理 |
Lambda | pushイベントをトリガーに実行、SSMを使ってEC2へコマンド送信 |
SSM(Session Manager) | Lambdaから安全にEC2へ接続(鍵不要) |
EC2 | 実際のWebアプリ/WordPress稼働環境。git pull で最新化 |
SNS | デプロイ完了通知をメール等で送信 |
4. 実装手順
4.1 CodeCommitリポジトリ作成
- AWSマネジメントコンソール → CodeCommit → 「リポジトリの作成」
- IAMユーザーでGit認証情報を設定
4.2 Lambda関数作成&Layer登録



- ランタイム:Python 3.12
- 環境変数に
BRANCH
やDEPLOY_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 動作確認
- ローカルで
git push origin master
- CloudWatch Logs で Lambda 実行ログを確認
- SNS通知が届くか確認

こんなメールが届き、成否がわかります。
5. ポイント&注意点
- 最小権限の原則
Lambda → EC2 への権限は必要最小限に - ブランチ運用
main
/master
/develop
等、目的に応じたデプロイのみを対象にすると安全 - ログ監視
CloudWatch Logs でLambdaの実行結果を常にチェック
6. まとめ
今回の構成により、CodeCommitへのpushだけでEC2環境が自動更新され、手動デプロイの手間とミスを大幅に削減できます。
同じ構成はステージング・本番環境にも容易に展開可能ですが、ホットデプロイには向いていませんので、そういった用途の場合、AWS CodeDeployを利用した方が良いと思います。
この方法はあくまでも「簡易的な自動デプロイ」と考えています。

図解 Amazon Web Servicesの仕組みとサービスがたった1日でよくわかる

AWSの基本・仕組み・重要用語が全部わかる教科書 (見るだけ図解)
安達棒とアンバサダーで色々釣りたいおじさん。
Macでプログラムを書いて暮らしています。 趣味はルアーフィッシング、ギター、アクアリウムとストリートファイター(格ゲー) 。
宮崎県在住。