ecspressoがもたらしたものとエスプレスタック
TIME rest time current/total
TopicsPlaceHolder

ecspressoがもたらしたものとエスプレスタック

JAWS-UG コンテナ支部 #24 ecspresso MeetUp

Aug 8th, 2023

Profile

songmu

Profile

songmu

ghq handbook

handbook文化

miyagawaさん由来! (?)

宣伝

代表的なOSS

おもしろ命名OSS

tagpr (去年の新作)

ecspresso

私のecspresso導入

https://songmu.jp/riji/entry/2020-03-18-ecspresso.html

私と作者のfujiwaraさん

fujiwaraさんの作るものは信用している

イネーブルメント力

fujiwaraさんは最強のSREイネイブラー

SREのチームトポロジー

フルサイクル開発志向と哲学

IaCとアプリケーションの責任分界点

コンテナイメージを作るところまでがアプリケーション側の責務か?

(モノレポとかのケースもあると思うが便宜上)

ecs-deployに感じていた課題

"You build it, you run it", "Operate What You Build"

コンテナイメージをビルドするだけでは、運用に関する設定がおこなえない。

自分で作ったものを動作させて運用するということ

ecspressoが見事だった点

ecspressoへの私の貢献

--no-wait オプションの追加

--no-wait オプションの説明

ECS サービスの状態が安定するのを待たずに、ECS サービスの状態を変更する操作を実行したら即終了したい場合に備えて、各コマンドには --no-wait オプションが実装されています。CI/CD 環境などで自動デプロイを行う場合など、ワークフローの実行を長時間ブロックさせたくないという要求に対応したものです。

--no-wait で実行した後に、別途 ECS サービスが安定状態になるまで待機するために ecspresso wait コマンドが用意されています。

-- https://zenn.dev/fujiwara/articles/ecspresso-20201209

--latest-task-definition オプションの追加

--latest-task-definition オプションの使い所

ecspresso deploy の前段で ecspresso run で別の処理を実行したい場合等に効果的。例えば、アプリデプロイ前にDB migrationを実行したい場合、ecspresso runにやらせるのは一つのパターン。

ecspresso run --overrides '{"ContainerOverrides":[{"Name":"app","Command":["migraion"]}]}'
ecspresso deploy --lates-task-definition

--latest-task-definition を使うことでタスク定義のバージョンが上がりすぎることを防ぎ、ロールバックが適切に動くようにする。

意を汲み取った使い方の例: ECS(Fargate)でDBマイグレーションを行う- やんばるテック

[bugfix] support rollback for DAEMON

デーモンセットでロールバックが完全に動いていなかった。作者が使っていないユースケースでうまく動かないのOSSあるある。

ecscheduleとエスプレスタック

ecschedule

以下のような1枚のYAMLでscheduled taskを一元管理。YAMLは ecschedule dump でダンプしてこられる。

region: us-east-1
cluster: clusterName
- name: taskName1
  description: task 1
  scheduledExpression: cron(30 15 ? * * *)
  taskDefinition: taskDefName
  containerOverrides:
  - name: containerName
    command: [subcommand1, arg]
    environment:
      HOGE: foo
      FUGA: {{ must_env `APP_FUGA` }}
- name: taskName2
  description: task2
  scheduledExpression: cron(30 16 ? * * *)
  taskDefinition: taskDefName2
  containerOverrides:
  - name: containerName2
    command: [subcommand2, arg]

ecschedule apply で反映。

構想

望まれていた

課題

バッチスキー

実は私はバッチ処理が好き。バッチにまつわるOSSをそこそこ出してきた。

着手 (2019年9月)

アナウンス (2020年11月)

https://songmu.jp/riji/entry/2020-11-16-ecschedule.html

難産だった。新規サービス開発でバッチの本数が大幅に増えることが想定されたため完成させた。

tfstate対応は当初なかった。(後日contributeいただいた。ありがとうございます!)

ご利用いただいている方々

https://d.hatena.ne.jp/keyword/ecschedule

ブログなどを拾った感じ、ウェルスナビ、トラストバンク、コネヒト、はてな、カヤック、クラシコム、リブセンス などにお使いいただいてる(いた)ようです。

125 stars (2023年8月8日現在)

ありがとうございます!

エスプレスタック命名

ecspressoとコンセプトが異なる点

github.com/goccy/go-yaml

現状の課題など

以上

エスプレスタックご利用ください。

宣伝

宣伝2

OSS活動を支援してくれると嬉しいです。