OSSエコシステムにおける自律・分散・協調 ~ エスプレスタック
TIME rest time current/total
TopicsPlaceHolder

OSSエコシステムにおける自律・分散・協調 ~ エスプレスタック

Fujiwara Tech Conference 2025

Jan 17th, 2025

Profile

songmu

Profile

songmu

ヘンリーから来ました

趣味でOSSをやっている者だ #oss4fun

podcast始めました

https://oss4.fun/

代表的なOSS

ghq handbook

ecspresso handbook

https://zenn.dev/fujiwara/books/ecspresso-handbook-v2

handbook文化

miyagawaさん由来! (?)

今日話すこと

OSSへの貢献についての私の考え

ソフトウェアには思想がある

issueやpull requestの送り方

pull requestを送る前に

実際のコミュニケーションの様子を眺める

ドキュメントからは分からない、生のコミュニケーションや雰囲気がissueやpull requestに残っている。これは非常に助かる。

pull requestを送る前にissueを立てるべきか

これもマナー的に語られることもあるが、一概には言えない。

「筋が悪い」とは?

作者の思想に合わないもの。

事前にissueで提案して欲しい物もあるし、issueで提案されても困るくらい筋が悪いものもある。

→ 結局コミュニケーションルートの使い分けの話

ガイドライン整備は大事だが、整備しきるのは難しい

無機質なドキュメントだけでは分からないことも多いし、暗黙のお約束も存在する

個性豊かなOSSを組み合わせてソフトウェアを作る楽しさ

ecspresso

私のecspresso導入

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

私と作者のfujiwaraさん

fujiwara組 ISUCON 第1回

ISUCON2

ISUCON3

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

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

182 stars (2025年1月17日現在)

僕が作り始めたOSSの中では3番目にスターが多い。ありがとうございます!

エスプレスタック命名

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

github.com/goccy/go-yaml

その他fujiwaraさんとのコラボレーション

AWS::XRay と Devel::KYTProf

kayac/go-katsubushi

https://github.com/kayac/go-katsubushi/pull/40

fujiwaraさんからのpull request

以上

Happy OSS Hacking!

予告: motemen tech conferenceやります!

登壇者(予定)(未承諾)

会場提供してくれるところを探しています!(チラッ

宣伝

宣伝2

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