GitHub Actions からCodeBuildを呼び出してdocker build する
概要
以前にGitHub Actionsでビルドする内容について書きました。そこで今回はビルドの処理をGitHub ActionsからCodeBuildを呼び出して CodeBuildでビルド処理を実行します。
この記事の DockerビルドとECRへのイメージ登録の処理を "GitHub Actions" ではなく、 "CodeBuild" で実行するように変更します。
- github-actions
ビルドするために必要なスペックや料金、既存システムへの接続など要件によって使い分ける事になると思います。 本記事でCodeBuildで処理する内容は上記の記事にも記載していますが、 "Docker build" と "ECRへのイメージ登録" を実行します。
github-actions
利用するgithub-actionsライブラリ
aws-actions/aws-codebuild-run-build github.com
ディレクトリ構成
├── .github │ └── workflows │ ├── codebuild.yaml ├── .gitignore ├── Dockerfile ├── README.md └── buildspec.yaml
.github/workflows/codebuild.yaml
name: Run CodeBuild on: push: branches: - main paths: - ./** - .github/workflows/codebuild.yaml env: REPO_NAME: product-a AWS_REGION: ap-northeast-1 AWS_ACCOUNT: ${{ secrets.AWS_ACCOUNT }} IAM_ROLE_ARN: ${{ secrets.IAM_ROLE_CODEBUILD_ARN }} CODEBUILD_PROJECT: "INPUT_CODEBUILD_PROJECT" permissions: id-token: write contents: read jobs: build: runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 - name: Configure AWS Credentials uses: aws-actions/configure-aws-credentials@v1 with: aws-region: ${{ env.AWS_REGION }} role-to-assume: ${{ env.IAM_ROLE_ARN}} - name: Run CodeBuild uses: aws-actions/aws-codebuild-run-build@v1 with: project-name: ${{ env.CODEBUILD_PROJECT }} buildspec-override: ./buildspec.yaml # path/to/buildspec.yaml env-vars-for-codebuild: | REPO_NAME, AWS_REGION
このCodeBuildを実行するのに必要なIAM権限は以下の通り。
{ "Version": "2012-10-17", "Statement": [ { "Sid": "startCodebuild", "Effect": "Allow", "Action": [ "codebuild:StartBuild", "codebuild:BatchGetBuilds", "logs:GetLogEvents" ], "Resource": "*" } ] }
./buildspec.yaml
version: 0.2 phases: install: runtime-versions: docker: 19 pre_build: commands: - echo Logging in to Amazon ECR - aws --version - $(aws ecr get-login --region $AWS_REGION --no-include-email) - REPOSITORY_URI=`aws sts get-caller-identity --query 'Account' --output text`.dkr.ecr.$AWS_REGION.amazonaws.com/$REPO_NAME - COMMIT_HASH=$(echo $CODEBUILD_RESOLVED_SOURCE_VERSION | cut -c 1-7) - IMAGE_TAG=${COMMIT_HASH:=latest} build: commands: - docker build -t $REPOSITORY_URI:latest . - docker tag $REPOSITORY_URI:latest $REPOSITORY_URI:$IMAGE_TAG post_build: commands: - docker push $REPOSITORY_URI:latest - docker push $REPOSITORY_URI:$IMAGE_TAG
- CodeBuildで必要になるIAM権限 (CodeBuildのBasePolicyは省略)
{ "Version": "2012-10-17", "Statement": [ { "Sid": "ecrPush", "Effect": "Allow", "Action": [ "ecr:GetAuthorizationToken", "ecr:PutImage", "ecr:InitiateLayerUpload", "ecr:UploadLayerPart", "ecr:CompleteLayerUpload", "ecr:BatchCheckLayerAvailability" ], "Resource": "*" } ] }
- github-actionsの実行ログ(抜粋)
→ CodeBuildで実行されていますね!