Slide 1

Slide 1 text

© Chatwork なんでもかんでもコンテナ化すればいいって もんでもないけど なんでもかんでもコンテナ化したらスッキリ しました Chatwork株式会社

Slide 2

Slide 2 text

自己紹介 2 ● 古屋 啓介 ○ Chatwork株式会社 SRE部 ○ AWS Community Builders (container) ○ JAWS-UG SRE支部運営 ○ ドラム叩きます 3/21(木) 春のAurora祭りやります!

Slide 3

Slide 3 text

(前提) 3 ● Chatworkのインフラ構成 ○ AWSを利用 ○ 大部分のアプリがEKS上で稼働

Slide 4

Slide 4 text

こんなとき、どうしますか? 4 毎日1回、特定のURLを叩きたい

Slide 5

Slide 5 text

んー... 5 EventBridge発火のLambdaかなぁ

Slide 6

Slide 6 text

これでよさそう 6 ● つくった!うごいた!解決! 毎日AM1:00に Lambdaを起動する URLアクセスする (Python / NodeJS)

Slide 7

Slide 7 text

これでよさそう 7 ● つくった!うごいた!解決! 毎日AM1:00に Lambdaを起動する URLアクセスする (Python / NodeJS) 完

Slide 8

Slide 8 text

数年後... 8 バージョンアップしてや (Python / NodeJS)

Slide 9

Slide 9 text

あれ... 9 ● ソースどこやったっけ... ● デプロイって手動だった? ● テストしたいんだけど...

Slide 10

Slide 10 text

なぜなのか 10 ● ソースどこやったっけ... ○ 普段触らないのでどこおいたか覚えてない ● デプロイって手動だった? ○ メインのワークロードとは異なるスタックなのでCI/CDが未整備 ● テストしたいんだけど... ○ 簡単1ショットの仕組みだったのでテストもなし

Slide 11

Slide 11 text

っていうのを何回かやった結果 11 これはもう全部コンテナにして EKSで動かしたほうがいいのでは?

Slide 12

Slide 12 text

つまり 12 ● これを 毎日AM1:00に Lambdaを起動する URLアクセスする (Python / NodeJS)

Slide 13

Slide 13 text

つまり 13 ● こうする 毎日AM1:00に jobを起動する URLアクセスする (Python / NodeJS)

Slide 14

Slide 14 text

なにがうれしいの? 14 ● ソースどこやったっけ... ○ 普段触らないのでどこおいたか覚えてない ○ 普段触っているのと同じところに置くので迷わない ● デプロイって手動だった? ○ メインのワークロードとは異なるスタックなのでCI/CDが未整備 ○ メインのワークロードと同じCI/CDの仕組みに乗れる ● テストしたいんだけど... ○ 簡単1ショットの仕組みだったのでテストもなし ○ 上記が整うことでテスト環境も整えやすい

Slide 15

Slide 15 text

15 (参考)デプロイフロー 15 Manifest (helmfile) EKS Sync 1. Push 3. kubectl apply helmfileから生成された Manifest 2. Sync helmfileのリポジトリに ソースコードとManifest を格納しておく

Slide 16

Slide 16 text

ちょっと本筋と逸れますが 16 ● 移行にあたってPythonをshellにリライト ○ そもそもPythonとかNodeJSとかのEOLつらい ○ たまたま簡単なスクリプトが多かった ● helmfile + shellはいいぞ ○ ConfigMapと.shがあればOK ○ ベースとなるコンテナはシンプルなものでよい ○ shellの黒魔術化には注意... shellスクリプト マウントする

Slide 17

Slide 17 text

補足 17 ● 大事なのは、メインのワークロードと諸々揃えること ○ ECSをご利用の場合でも普段使うCI/CDの仕組みに乗れればOK ■ CDKが最強だったりする...?(CDK詳しい人に教えてほしい) ○ Lambdaが悪いわけではない ■ し、メインがバリバリサーバレスだぜ!の場合はむしろLambdaが適任

Slide 18

Slide 18 text

実際やった事例 18 ● helmfile + shellに書き直したもの ○ Lambda + EventBridge + PythonでOpenSearchを諸々する処理 ● そのままEKSに移したもの ○ EC2 + cron + shellでRDSをデイリーでコピーする処理 ○ EC2 + cron + shellでRDSにqueryする処理 ○ EC2 + cron + shellでChatworkを諸々する処理 ● その他新規で作ったもの ○ 夜間休日に検証環境を落とす処理

Slide 19

Slide 19 text

課題と対処 19 ● 多重起動 ○ EKS更新(Blue/Greenでクラスタが2つある)タイミングで要考慮 多重起動で困るやつは排他処理を別途追加 管理用EKSクラスタ(更新がin-place)ができたので そちらに移行

Slide 20

Slide 20 text

まとめ 20 ● (前提)そりゃなんでもかんでもコンテナ化したらいいわけではない ● (前提)メインのワークロードがコンテナ基盤で動いている ● スケジュール駆動の諸々をコンテナ化すると幸せになるかも? ○ ちょっとした処理をやるLambdaっていっぱいありますよね ○ Lambdaは簡単便利だけど、ちゃんとやろうとすると色々整える必要アリ ○ いつも使うCDの仕組みに乗せることがダイジ

Slide 21

Slide 21 text

働くをもっと楽しく、創造的に