担当するプロジェクトの中で、最近はGitHubで進めるプロジェクトが多くなりました。
以前はECSをAWS CodePipelineを利用してビルドとデプロイを行っていましたが、
GitHubで進めるプロジェクトはAWS CodePipelineより、GitHub Actionsが管理も楽だし値段も安いなと思ったため、CodePipelineからGitHub Actionsへ移行することを決めました。
AWS CodePipeline vs GitHub Actions
CodePipelineとGitHub Actionsの特徴の比較は以下になります。AWS CodePipeline | GitHub Actions | |
---|---|---|
作成コスト | $1 | 無料 |
ソースコード | CodeCommit, GitHub, Bitbucketなどなど | GitHub |
ブランチ | 一つのブランチ | 多数のブランチ |
コード管理 | CDKとbuildspec.yml | yml(workflow) |
無料利用枠 | 100分/月 (CodeBuildの無料枠) アクティブなパイプラインを 1 か月あたり 1 つ無料 (CodePipeline無料枠) | Free – 2,000分/月 Pro – 3,000分/月 Team – 3,000分/月 |
料金 | $0.010/分 (CodeBuildインスタンス – general1.medium) | $0.008/分 (Linux virtual machines) |
デプロイ | AWSのみ | どこでも |
CodePipeline Pricing:https://aws.amazon.com/jp/codepipeline/pricing/
GitHub Actions Pricing:https://docs.github.com/ja/billing/managing-billing-for-github-actions/about-billing-for-github-actions
About GitHub-hosted runners:https://docs.github.com/ja/actions/using-github-hosted-runners/about-github-hosted-runners
変更前 – AWS CodePipelineでECSのビルドとデプロイを行う
既存のプロジェクトではBitbucketを使うケースが多くありました。そのため、以下の順でビルドとデプロイを行っていました。
- BitbucketのコードをAWS CodeCommitへミラーリングする
- 特定のブランチへのプッシュをトリガーにCodeBuildが走ってECR用のイメージ作成
- イメージ作成後、ECSへデプロイする
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
# buildspec.yml version: 0.2 phases: install: runtime-versions: docker: 18 pre_build: commands: - echo Logging in to Amazon ECR... - $(aws ecr get-login --no-include-email --region $AWS_DEFAULT_REGION) - REPOSITORY_URI=${AWS_ACCOUNT_ID}.dkr.ecr.${AWS_DEFAULT_REGION}.amazonaws.com/${IMAGE_NAME} - IMAGE_TAG=$(echo $CODEBUILD_RESOLVED_SOURCE_VERSION | cut -c 1-7) build: commands: - echo Build started on `date` - echo Building the Docker image... - docker build --build-arg AWS_ACCOUNT_ID=${AWS_ACCOUNT_ID} -t $REPOSITORY_URI:latest . - docker tag $REPOSITORY_URI:latest $REPOSITORY_URI:$IMAGE_TAG post_build: commands: - echo Build completed on `date` - docker push $REPOSITORY_URI:latest - docker push $REPOSITORY_URI:$IMAGE_TAG |
変更後 – GitHub ActionsでECSのビルドとデプロイを行う
GitHub Actionsでは- 特定のブランチへのプッシュをトリガーにActionsのWorkflowが走る
- イメージビルドとデプロイを行う
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
jobs: build-deploy: name: Build-Delpoy runs-on: ubuntu-latest environment: environmentName steps: - name: Checkout uses: actions/checkout@v3 - 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: ${{ env.AWS_REGION }} - name: Login to Amazon ECR id: login-ecr uses: aws-actions/amazon-ecr-login@v1 - name: Build, tag, and push image to Amazon ECR id: build-image env: ECR_REGISTRY: ${{ steps.login-ecr.outputs.registry }} IMAGE_TAG: ${{ github.sha }} run: | docker build -t $ECR_REGISTRY/$ECR_REPOSITORY:latest . docker tag $ECR_REGISTRY/$ECR_REPOSITORY:latest $ECR_REGISTRY/$ECR_REPOSITORY:$IMAGE_TAG docker push $ECR_REGISTRY/$ECR_REPOSITORY:$IMAGE_TAG docker push $ECR_REGISTRY/$ECR_REPOSITORY:latest aws ecs update-service --cluster $ECS_CLUSTER --service $ECS_SERVICE --force-new-deployment |