Slide 1

Slide 1 text

AWS CDK (TypeScript) を 継続的にメンテ可能にするために 取り入れているノウハウ集 id:nabeop / @nabeop 2022/12/09 Qiita Night 1

Slide 2

Slide 2 text

自己紹介 ● id:nabeop (なべおぴー) ● 株式会社 はてな ● システムプラット フォームチーム SRE 2

Slide 3

Slide 3 text

お品書き ● AWS CDK のコードを継続的にメンテ可能に するために ○ IaC で感じていた課題感 ○ 取り入れている知見 ○ 得られた恩恵 3

Slide 4

Slide 4 text

4 IaC における課題感

Slide 5

Slide 5 text

5 IaC のコードの陳腐化 ● IaC のコードはライフサイクルとライブラリ 更新頻度に大きな開きがある ○ インフラ部分は数ヶ月単位で変化しないこともある ○ 毎週のように使っているライブラリは更新される ● 気がついたらコードは更新されず、ライブラ リの更新からも取り残され、メンテ不能な状 態に...

Slide 6

Slide 6 text

6 IaC コードの運用にアプリ ケーション開発の知見を輸 入する

Slide 7

Slide 7 text

狙い ● ライフサイクルが短いアプリケーション開発でもライブラ リの更新への追従という問題はある ● インフラの変更をしない間にライブラリの更新に取り残さ れないようにしたい ● AWS CDK を TypeScript アプリケーションと捉えてみる ○ アプリケーション開発の知見を取り入れることでライブラリの追従コ ストを抑制できるはず 7

Slide 8

Slide 8 text

renovate による自動更新 8 ● https://github.com/hatena/renovate-co nfig をベースにしている ○ はてなで使用しているRenovateの設定プリセットを 公開しました - Hatena Developer Blog ○ レビュー者をチームメンバーからランダムにアサイン するようにしている ○ 更新が激しい割に影響が確実にないものはチームメン バーと相談しつつ automerge に変更

Slide 9

Slide 9 text

9 snapshot テストによる差分確認 ● ライブラリの更新を頻繁に取り込むにあたり、取り込まれ る更新内容が環境に影響を与えないことを確認したい ● AWS CDK を CFn テンプレートエンジンと捉える ○ ライブラリの更新が生成される CFn テンプレートに影響しないこと を確かめたい ○ snapshot テストで生成される CFn テンプレートの差分を確認したい ○ ノイズとなる差分は snapshot serializer で無視できるようにしてい る ● snapshot テストは実世界と極力合わせておく必要がある

Slide 10

Slide 10 text

reusable workflow による CI の横展開 ● Github Actions の workflow に落とし込んでいる ○ だいたい同じ内容の workflow が誕生する ● コピペしたくないので reusable workflow を導入し て CI の内容を一元管理するようにした ○ プロジェクト間の微妙な差異は package.json で吸収できるよ うに責任分界点を設定した ■ reusable workflow では実行する内容に責任を持つ ■ 実行時のオプションなどはプロジェクト側の package.json が責任を持 つ 10

Slide 11

Slide 11 text

11 得られた恩恵 AWS-CDK v2 への追従

Slide 12

Slide 12 text

12 AWS CDK v2 化で必要だったこと ● v2 bootstrap への対応 ○ (当時) 最新の AWS CDK v1 で対応していたので問題 なし ● feature flag や v2 に合わせたコードの修正 ○ snapshot テストの結果と見比べながら修正

Slide 13

Slide 13 text

実際はどうだったか? 13 ● 主業務の片手間としてコードの書き換えができた ○ 普段から意識の片隅にあった状態なので勘所があった ○ 最小限の手間だけですんだ ■ コードは常に最新の状態を保っていたので AWS CDK の開発プロ ジェクト側が準備したマイングレーションのレールにすんなり乗 れた ■ AWS CDK のコードをシンプルな状態に保っていたという側面は ある

Slide 14

Slide 14 text

14 まとめ

Slide 15

Slide 15 text

15 IaC コードを継続的にメンテ可能な状態にする ● ライブラリの更新は継続できる仕組みを入れ る ○ アプリケーション開発のノウハウを輸入 ● 負荷が少ない形で意識の片隅においておける 環境を作る

Slide 16

Slide 16 text

Dev トークやっています 16 https://jobs.qiita.com/dev_talks?employer=37