CircleCI+ecspresso로 ECS에 배포

6710 단어 CircleCIecspressoECS

ECS 배포



최근 몇 년 동안 기본적으로 ECS를 사용하고 있지만 배포를 어떻게 수행하는지 항상 망설입니다.
GitHub에서 배포 브랜치 (예 : production 브랜치)에 병합되면 배포를 수행하고 싶다면 여러 가지 방법이 있다고 생각합니다.
내가 지금까지 왔다면,
AWS CodePipeline을 사용하여 이미지 빌드 => 작업 업데이트 => 서비스 업데이트
그렇다면
CircleCI Orb(aws-ecr/aws-ecs)를 사용하여 배포
토카

모두 그렇게 큰 불만은 없습니다.
처음에는 설정을 이해하기가 어렵습니다.

그러나 「더 알기 쉬운 것이 있는가 아닌가」정도의 기분으로 보고 있으면, 우연히 ecspresso를 발견했으므로 이번 시험해 보기로 했습니다

ecspresso



재미있는 법인 카약 씨가 만든 도구라고합니다.
Golang으로 작성된 점을 개인적으로 좋아합니다.

사용법도 매우 간단하고, 미리 .aws 디렉토리에 config적인, aws와 소통할 수 있는 상태로 한 다음에
$ ecspresso init --region ap-northeast-1 --cluster クラスタ名 --service サービス名 --config hogehoge.yaml

그리고 init 명령을 두드리면 지정한 클러스터/서비스 설정을 끌어옵니다.hogehoge.yaml 이런 느낌
region: ap-northeast-1
cluster: クラスタ名
service: サービス名
service_definition: ecs-service-def.json
task_definition: ecs-task-def.json
timeout: 10m0s
hogehoge.yaml 와 함께 내려오는 ecs-service-def.json 가 서비스 정의, ecs-task-def.json 가 태스크 정의가 되므로, 변경하고 싶을 때는 이 변을 적절히 바꾸어 주면 좋다고 치수입니다

배포할 때
$ ecspresso deploy --config hogehoge.yaml

그리고 deploy 명령을 실행하면됩니다!
간단! 이해하기 쉽다! 좋아! !

CircleCI에서 실행합시다.



계획



과연, 이것만 간단하다면 나머지는 이것을 CircleCI로 실행해 줄 뿐입니다
제대로 Orb가있었습니다.

흐름으로는
GitHubで対象ブランチにマージされる
↓
CircleCIでテスト実行
↓
CircleCIでイメージビルド&ECRにpush
↓
CircleCIでecspresso使ってdeploy

이것으로 가자.

이미지 빌드에 관해서는 aws-ecr Orb를 사용하는 것이 빠르기 때문에 그렇습니다.
그런 다음 위의 ecspresso Orb를 사용하여 deploy를 실행합시다.

.circleci/config.yml



완성된 config는 이런 느낌
version: 2.1

orbs:
  aws-ecr: circleci/[email protected]
  ecspresso: fujiwara/[email protected]

executors:
  docker_build:
    machine:
      docker_layer_caching: true

  general:
    docker:
      - image: cimg/base:stable

workflows:
  main:
    jobs:
      - test

      - aws-ecr/build-and-push-image:
          name: push app image
          executor: docker_build # DLCオプション付けたexecutorつくっておく
          requires:
            - test
          dockerfile: Dockerfile
          repo: "hogehoge"
          tag: "fuga"

      - deploy:
          requires:
            - push app image

jobs:
  test:
    # 今回の本題と関係ないので省略

  deploy:
    executor: general # 軽いイメージのexecutor用意しておく
    steps:
      - checkout
      - ecspresso/install # Orbはecspressoを簡単にinstallをしてくれる
      - run:
          command: |
            # deployの前にmigrateしたいんや
            ecspresso run --config hogehoge.yaml --task-def=ecs-task-def-migrate.json
            ecspresso deploy --config hogehoge.yaml


확실히 migrate하고 있는 것이 포인트←
ecspresso는 run 명령을 사용하면 조금 task 흘리고 싶은 것 같은 것도 간단하게 할 수 있습니다
이번에는 migrate용의 태스크 정의.

오, 그런데 CircleCI에서 실행할 때 bundle exec rails db:migrateAWS_ACCESS_KEY_ID의 환경 변수를 설정하는 것을 잊지 마십시오.

감상



CircleCI + ecspresso로 쉽게 배포 할 수 있었기 때문에 기분이 좋았고 매우 간단하고 이해하기 쉽고 사용하기 쉬웠습니다.
아직 롤링 배포라든지 시도하지 않았으므로 앞으로는 그 근처를 사용해보고 싶은 곳
물론 CI상이 아니라, 수중에서 ECS고뇨고뇨하고 싶을 때에 사용하는 커멘드로서도 꽤 사용하기 쉽고 좋다고 생각했습니다
자신은 ECS 조작은 ecspresso 메인에서도 좋다고 생각했습니다

이상, 뭔가 도움이되면 다행입니다

좋은 웹페이지 즐겨찾기