GitHub Actions 踏み台サーバからECSへデプロイ
背景
GitHub ActionsのDeploy to Amazon ECSを使ってデプロイしようとしたのだが、管理ポリシーでユーザーにIP制限をかけていたので、ECRへのログインが失敗した。調べていると以下の記事を見つけた。
この参考記事ではタイトルにある通りEC2へデプロイしている。本記事ではEC2を踏み台サーバにし、ECSへデプロイできるか動作検証したものである。
1. 踏み台サーバをたてる
ECRへのログインとECS Fargateのタスク実行権限を許可するロールをアタッチしたEC2を起動する。gitとdockerをインストールしておく。
2. GitHubへのSSH接続用の公開鍵・秘密鍵を生成
こちらの記事を参考にした。
メモ用に以下に記しておく。
$ cd ~/.ssh
$ ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/home/ec2-user/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/ec2-user/.ssh/id_rsa.
Your public key has been saved in /home/ec2-user/.ssh/id_rsa.pub.
$ ls
authorized_keys id_rsa id_rsa.pub
3. 公開鍵をGitHubに登録
id_rsa.pub
を以下のように登録する。
3-1. settingsを選択
3-2. SSH and GPG keysを選択
3-3. New SSH keysを選択
3-4. 公開鍵を貼り付ける
4. Gitリポジトリを作成する
リポジトリはこちらの記事で作成したものを使う。
5. GitHub Actionsのyamlファイルを作成する
冒頭にも書いた通り、こちらの記事で紹介されているyamlファイルをECS用に少し書き換えるだけである。
yamlファイルで使用している変数をまとめた。
AWS_ACCESS_KEY_ID | AWSのアクセスキーID(Secretsに登録) |
AWS_SECRET_ACCESS_KEY | AWSのシークレットキー(Secretsに登録) |
PRIVATE_KEY | EC2ログイン用のSSHキー(Secretsに登録) |
DNS_NAME | EC2のDNS名*1(Secretsに登録) |
account_id | AWSのアカウントID |
git_repository_name | GitHubのリポジトリ名 |
git_user_name | GitHubのユーザー名 |
ecr_repository_name | ECRのリポジトリ名 |
cluster_name | ECSのクラスター名 |
task_difinition_name | ECSのタスク定義の名前 |
subnet_id | サブネットID |
security_group_id | セキュリティグループID |
*1:DNS名と書いてしまったが、ユーザー名も含んでいる。例えば、[email protected]
という値をSecretsに格納する。
name: TestDeploy
on:
push:
branches: [main]
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: test-clone
env:
AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
PRIVATE_KEY: ${{ secrets.PRIVATE_KEY }}
DNS_NAME: ${{ secrets.DNS_NAME }}
run: |
curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"
unzip awscliv2.zip
sudo ./aws/install --update -i /usr/local/aws-cli -b /usr/local/bin
printf "$AWS_ACCESS_KEY_ID\n$AWS_SECRET_ACCESS_KEY\nap-northeast-1\njson\n" | aws configure
aws configure list
echo "$PRIVATE_KEY" > private_key && chmod 600 private_key
sudo ssh -o StrictHostKeyChecking=no -i private_key $DNS_NAME '
ssh -o StrictHostKeyChecking=no -T [email protected]
if [ -d git_repository_name ]; then
rm -rf git_repository_name
fi
git clone [email protected]:git_user_name/git_repository_name.git
cd git_repository_name
aws ecr get-login-password --region ap-northeast-1 | docker login --username AWS --password-stdin account_id.dkr.ecr.ap-northeast-1.amazonaws.com
docker build -t ecr_repository_name .
docker tag ecr_repository_name:latest account_id.dkr.ecr.ap-northeast-1.amazonaws.com/ecr_repository_name:latest
docker push account_id.dkr.ecr.ap-northeast-1.amazonaws.com/ecr_repository_name:latest
aws ecs run-task --cluster cluster_name \
--launch-type FARGATE \
--platform-version 1.4.0 \
--task-definition task_difinition_name \
--network-configuration "awsvpcConfiguration={subnets=[subnet_id],securityGroups=[security_group_id],assignPublicIp=ENABLED}"
'
参考記事
Author And Source
この問題について(GitHub Actions 踏み台サーバからECSへデプロイ), 我々は、より多くの情報をここで見つけました https://qiita.com/quryu/items/781c491f7e3d47c9af5a著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .