导航菜单
首页 >  Why I switched from AWS CodePipeline to GitHub Actions  > AWS CodePipelineをGitHub Actionsへ移行してみた

AWS CodePipelineをGitHub Actionsへ移行してみた

TypeScriptが大好きなエンジニア。基幹システムグループのキムです。

担当するプロジェクトの中で、最近はGitHubで進めるプロジェクトが多くなりました。以前はECSをAWS CodePipelineを利用してビルドとデプロイを行っていましたが、GitHubで進めるプロジェクトはAWS CodePipelineより、GitHub Actionsが管理も楽だし値段も安いなと思ったため、CodePipelineからGitHub Actionsへ移行することを決めました。

AWS CodePipeline vs GitHub ActionsCodePipelineとGitHub Actionsの特徴の比較は以下になります。AWS CodePipelineGitHub Actions作成コスト$1無料ソースコードCodeCommit,GitHub, BitbucketなどなどGitHubブランチ一つのブランチ多数のブランチコード管理CDKとbuildspec.ymlyml(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のみどこでもCodeBuild Pricing:https://aws.amazon.com/jp/codebuild/pricing/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-actionsAbout GitHub-hosted runners:https://docs.github.com/ja/actions/using-github-hosted-runners/about-github-hosted-runners GitHub Actionsが料金も安いし、無料枠の時間も長いためお得な感じですね。あとは、GitHub Actionsはworkflowのymlだけ管理すれば良いため、管理もしやすいイメージです。AWSだけではなく、GCPやAzureなどにもデプロイできるのは大きいメリットだと思います。変更前 – AWS CodePipelineでECSのビルドとデプロイを行う既存のプロジェクトではBitbucketを使うケースが多くありました。そのため、以下の順でビルドとデプロイを行っていました。BitbucketのコードをAWS CodeCommitへミラーリングする特定のブランチへのプッシュをトリガーにCodeBuildが走ってECR用のイメージ作成イメージ作成後、ECSへデプロイする手順だけ見れば簡単にも見えますが、管理をCDKで行い、あとはCodeBuildを利用するためにbuildspec.ymlも作成する必要がありました。123456789101112131415161718192021222324# buildspec.ymlversion: 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_TAGCDKは省略します。変更後 – GitHub ActionsでECSのビルドとデプロイを行うGitHub Actionsでは特定のブランチへのプッシュをトリガーにActionsのWorkflowが走るイメージビルドとデプロイを行うで終わり。簡単ですね。Workflowのymlファイルは1234567891011121314151617181920212223242526272829303132jobs:  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になります。インスタンス内でAWSへログインして、Docker イメージのビルドを行ったあと、AWS CLIでそのイメージをECRへプッシュ、ECSへデプロイする流れになります。管理もこのymlファイル一つで終わるため簡単です。デプロイ後それをSlackに通知するジョブを付ければ完璧ですね。実際に移行して運用してみた感想今後CDKの管理はしなくてもよい点がかなり魅力的ですね。あとは、GitHubでプルリクエストのマージ後、すぐActionの動作を確認できることも楽でした。今後AWS LambdaもCDKで管理する必要なく、GitHubで管理が出来ると思っています。share:Facebook で共有するにはクリックしてください (新しいウィンドウで開きます)クリックして X で共有 (新しいウィンドウで開きます)

相关推荐: