やること
特定ブランチにプッシュしたとき、AWS SSM のRun CommandでEC2へアクセスする。EC2内に事前に配置したシェルスクリプトを実行することで自動デプロイを実現する
前提
AWSコンソール画面から指定EC2へAWS SSM Run Commandが実行できることを確認済
手順
IAMユーザー作成
以下ポリシーを付与したIAMユーザーの認証情報を取得する
{
"Version":"2012-10-17",
"Statement":[
{
"Effect":"Allow",
"Action":[
"ssm:SendCommand"
],
"Resource":[
"arn:aws:ec2:*:*:instance/*",
"arn:aws:ssm:*:*:document/*"
]
}
]
}
GitHubの設定
Environment SecretもしくはRepository Secretに以下を登録する
INSTANCE_ID : 対象のEC2インスタンスID
AWS_REGION : 利用しているリージョン
AWS_ACCESS_KEY_ID : 先ほど取得したIAMユーザーのID
AWS_SECRET_ACCESS_KEY : 先ほど取得したIAMユーザーのシークレットキー
EC2内にシェルスクリプト配置
実行したいスクリプトを記述したファイルを配置する
#!/bin/sh
cd `dirname $0`
// Run Commandの実行ユーザーはrootになる
su ec2-user << EOF > deployer.log 2>&1
echo start `date '+%y/%m/%d %H:%M:%S'`
// ここに実行したいコマンドを記述していく
EOF
GitHub Actions作成
name: deploy-EC2
on:
push:
branches: master
jobs:
start:
runs-on: ubuntu-latest
environment:
name: prod ← Environment Secretで設定した場合は必要
steps:
- name: Checkout
uses: actions/checkout@v2
- name: AWS SSM Send-Command
uses: peterkimzz/aws-ssm-send-command@master
id: ssm
with:
aws-region: ${{ secrets.AWS_REGION }}
aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
instance-ids: ${{ secrets.INSTANCE_ID }}
working-directory: /home/ec2-user ← 実行ファイルを配置したpathを記入
command: sh deployer.sh
参考