CircleCI+ecspressoでECSにデプロイする
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用のタスク定義.json(Railsならbundle exec rails db:migrate
コマンドになってるようなやつ)を用意しておいて、それを実行することでmigrateを済ませてからdeployする流れになってます
あ、ところでCircleCI上で実行する際はAWS_ACCESS_KEY_ID
とAWS_SECRET_ACCESS_KEY
の環境変数を設定するのをお忘れなく
感想
CircleCI+ecspressoで簡単にデプロイできちゃったので気持ちよかったですし、すごくシンプルでわかりやすくて使いやすかったです
まだローリングデプロイとか試してないので、今後はその辺を使ってみたいところ
もちろんCI上ではなく、手元でECSゴニョゴニョしたいときに使うコマンドとしてもかなり使いやすくていいなと思いました
自分はECS操作はecspressoメインでもいいなって思いました
以上、なにかの参考になれば幸いです
Author And Source
この問題について(CircleCI+ecspressoでECSにデプロイする), 我々は、より多くの情報をここで見つけました https://qiita.com/ken11_/items/08c439e2a6a064afe0cf著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .