LoginSignup
5
4

More than 3 years have passed since last update.

CodeBuildでECR Push&ECS Deploy

Last updated at Posted at 2019-12-13

こんにちわ。Patheeの廣瀬です

ECSのデプロイ、CodePipeline+CodeBuildのパターンはよく見るのですが、
コネヒトさんのCodeBuildを使ったECSへのコンテナデプロイで、
ecs-deployを使えばCodeBuildだけで完結できるのが良さげだなと思って取り入れてみました

環境

  • Github
  • AWS
    • ECS (Fargate)
    • ECR
    • CodeBuild

CodeBuild設定

  • イメージ: aws/codebuild/amazonlinux2-x86_64-standard:1.0
  • ウェブフックイベント: PUSH
    • 条件: タグ (^refs/tags/releaseなど)

buildspec.yml

version: 0.2

phases:
  install:
    runtime-versions:
      docker: 18
    commands:
      ## ecs-deployのインストール
      - yum install -y jq which
      - curl -OL https://raw.githubusercontent.com/silinternational/ecs-deploy/master/ecs-deploy
      - chmod +x ecs-deploy
      - COMMIT_HASH=$(echo $CODEBUILD_RESOLVED_SOURCE_VERSION | cut -c 1-7)
      - IMAGE_TAG=${COMMIT_HASH:=latest}

  pre_build:
    commands:
      ## ECRにログイン
      - $(aws ecr get-login --no-include-email --region $AWS_DEFAULT_REGION)

  build:
    commands:
      ## Dockerイメージのビルド
      - docker build -t $IMAGE_REPOSITORY_NAME:latest .
      - docker tag $IMAGE_REPOSITORY_NAME:latest $IMAGE_REPOSITORY_NAME:$IMAGE_TAG

      ## DockerイメージのECRへのプッシュ
      - docker push $IMAGE_REPOSITORY_NAME:latest
      - docker push $IMAGE_REPOSITORY_NAME:$IMAGE_TAG

      ## ECSへのデプロイ
      - ./ecs-deploy -n $ESC_SERVICE_NAME -c $ESC_CLUSTER_NAME -i $IMAGE_REPOSITORY_NAME:latest -r $AWS_DEFAULT_REGION -t 1200

ポイント

  • 環境変数として以下を設定
    • ESC_SERVICE_NAME
    • ESC_CLUSTER_NAME
    • IMAGE_REPOSITORY_NAME
  • ecs-deployを動かすのにjqwhichが必要なのでyumでインストール
    ※イメージがubuntuだったりすると微妙に違ってくるかも
  • ecs-deployのタイムアウトを長めに
    イメージサイズだったり設定で変わってくると思いますが

Pros/Cons

元の記事でCodeBuildの良さに触れられていますが、その他の部分での良し悪しをあげてみました

Pros

  • CodeBuildだけで完結する
    • 簡単
      • メンテが1箇所だけなので見通しが良い
      • タグ名をCodePiplineに渡すところでアーティファクトでつまずいたり、、、
    • CodePiplineの料金がかからない
      • 一つにつき固定で1$

Cons

  • ECSデプロイ部分に時間がかかる場合、高頻度に実施するとCodePipline使うよりも高くなるかも
    https://aws.amazon.com/jp/codebuild/pricing/
  • AWSコマンドで全部書けそう
    • とはいえ1行で済む簡便さ

あと書き

既存プロジェクトはサクッとデプロイできるようになりましたが、
一方、新規に作る場合はGithubActionで済ませれば、CodeBuildはいらないかもです、、、
GitHub ActionsからサクッとFargateにデプロイしてみた

5
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
4