概要
どうも、こんにちは。今回は、GithubActions で dockerImage(Nginx) を Amazon ECR へプッシュして、そのイメージを AppRanner へ自動デプロイする方法を書いてきます。
前提
- Github アカウントを作成済み
- AWS アカウント作成済み
やってみる
構成
構成
.
|-- .github -- workflows -- ecr_push.yml
|-- default.conf
|-- Dockerfile
|-- index.html
各ファイルを記述
- Nginx の dockerfile
Dockerfile
FROM nginx:latest
EXPOSE 80
COPY ./default.conf /etc/nginx/conf.d/
COPY ./index.html /var/www/html/
RUN service nginx start
default.conf
server {
listen 80;
server_name docker_nginx;
charset UTF-8;
location / {
root /var/www/html;
index index.html index.htm;
}
}
- HTML はこれだけ
index.html
<h1>Hello World!</h1>
- GithubActions
バージョンtag をGithub へプッシュをトリガーに自動で AmazonECR にイメージを登録する
ecr_push.yml
name: Docker image push to ECR
on:
push:
tags:
- v*
workflow_dispatch:
jobs:
build_and_push:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v2
- name: Configure AWS Credentials
uses: aws-actions/configure-aws-credentials@v1
with:
aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
aws-region: us-west-2
- name: Login to ECR
id: login-ecr
uses: aws-actions/amazon-ecr-login@v1
- name: Build and push image to ECR
uses: docker/build-push-action@v2
with:
context: .
push: true
tags: ${{ steps.login-ecr.outputs.registry }}/${{ secrets.AWS_ECR_REPO }}:latest
IAM ユーザーを設定
Amazon ECR にアクセス出来る権限を持った IAM ユーザーを作成し、Github リポジトリへアクセスキー
と シークレットキー
を登録します。
- IAM ユーザーを作成
アタッチするポリシー
IAM ポリシー
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"ecr:GetAuthorizationToken",
"ecr:BatchGetImage",
"ecr:BatchCheckLayerAvailability",
"ecr:CompleteLayerUpload",
"ecr:GetDownloadUrlForLayer",
"ecr:InitiateLayerUpload",
"ecr:PutImage",
"ecr:UploadLayerPart"
],
"Resource": "*"
}
]
}
- Github リポジトリへ
secret
を登録
対象のリポジトリ -> setting -> secrets -> actions -> New repository secret で登録できます。
ECR リポジトリを作成
ECR リポジトリを作成して、そのリポジトリ情報を Github へ登録
AWS ログイン -> ECR -> Repositories -> リポジトリ作成