Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
AWS CDK (TypeScript) を継続的にメンテ可能にするために取り入れているノウハウ集
Search
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
nabeo
December 09, 2022
1.4k
0
Share
AWS CDK (TypeScript) を継続的にメンテ可能にするために取り入れているノウハウ集
Qiita Night~AWS~ - connpass
nabeo
December 09, 2022
More Decks by nabeo
See All by nabeo
組織とプロダクトの変化に合わせたクラウド選択 / Henry Engineer Meetup #5
nabeo
0
51
kotlin-lsp の開発開始に触発されて、Emacs で Kotlin 開発に挑戦した記録 / kotlin‑lsp as a Catalyst: My Journey to Kotlin Development in Emacs
nabeo
3
990
SRE 文化の醸成: stream-aligned チームに Enabling するために実施した事例の解説 / Cloud Operator Days Tokyo 2025
nabeo
0
280
kotlin-lsp を Emacs で使えるようにしてみた / use kotlin-lsp in Emacs
nabeo
0
460
Docker Compose で手軽に手元環境を実現する / Simplifying Local Environments with Docker Compose #CinemaDeLT
nabeo
0
610
OpenTelemetry Collector 自身のモニタリング / Monitoring the OpenTelemetry Collector itself
nabeo
0
600
ヘンリーにおける可観測性獲得への取り組み
nabeo
2
2.3k
AWS Organizations 組織を移動する時に 考えること 100 連発 (AWS Control Tower への組み込みを添えて) / Hatena Engineer Seminar #20
nabeo
2
3.4k
AWS Transit Gateway を使った内部ネットワークの構成変更の話 / AWS Transit Gateway and Me
nabeo
0
770
Featured
See All Featured
Tips & Tricks on How to Get Your First Job In Tech
honzajavorek
1
490
It's Worth the Effort
3n
188
29k
The World Runs on Bad Software
bkeepers
PRO
72
12k
<Decoding/> the Language of Devs - We Love SEO 2024
nikkihalliwell
1
190
Conquering PDFs: document understanding beyond plain text
inesmontani
PRO
4
2.6k
Java REST API Framework Comparison - PWX 2021
mraible
34
9.3k
AI in Enterprises - Java and Open Source to the Rescue
ivargrimstad
0
1.2k
The SEO Collaboration Effect
kristinabergwall1
1
420
Winning Ecommerce Organic Search in an AI Era - #searchnstuff2025
aleyda
1
2k
The Success of Rails: Ensuring Growth for the Next 100 Years
eileencodes
47
8.1k
Build your cross-platform service in a week with App Engine
jlugia
234
18k
Hiding What from Whom? A Critical Review of the History of Programming languages for Music
tomoyanonymous
2
770
Transcript
AWS CDK (TypeScript) を 継続的にメンテ可能にするために 取り入れているノウハウ集 id:nabeop / @nabeop 2022/12/09
Qiita Night 1
自己紹介 • id:nabeop (なべおぴー) • 株式会社 はてな • システムプラット フォームチーム
SRE 2
お品書き • AWS CDK のコードを継続的にメンテ可能に するために ◦ IaC で感じていた課題感 ◦
取り入れている知見 ◦ 得られた恩恵 3
4 IaC における課題感
5 IaC のコードの陳腐化 • IaC のコードはライフサイクルとライブラリ 更新頻度に大きな開きがある ◦ インフラ部分は数ヶ月単位で変化しないこともある ◦
毎週のように使っているライブラリは更新される • 気がついたらコードは更新されず、ライブラ リの更新からも取り残され、メンテ不能な状 態に...
6 IaC コードの運用にアプリ ケーション開発の知見を輸 入する
狙い • ライフサイクルが短いアプリケーション開発でもライブラ リの更新への追従という問題はある • インフラの変更をしない間にライブラリの更新に取り残さ れないようにしたい • AWS CDK
を TypeScript アプリケーションと捉えてみる ◦ アプリケーション開発の知見を取り入れることでライブラリの追従コ ストを抑制できるはず 7
renovate による自動更新 8 • https://github.com/hatena/renovate-co nfig をベースにしている ◦ はてなで使用しているRenovateの設定プリセットを 公開しました
- Hatena Developer Blog ◦ レビュー者をチームメンバーからランダムにアサイン するようにしている ◦ 更新が激しい割に影響が確実にないものはチームメン バーと相談しつつ automerge に変更
9 snapshot テストによる差分確認 • ライブラリの更新を頻繁に取り込むにあたり、取り込まれ る更新内容が環境に影響を与えないことを確認したい • AWS CDK を
CFn テンプレートエンジンと捉える ◦ ライブラリの更新が生成される CFn テンプレートに影響しないこと を確かめたい ◦ snapshot テストで生成される CFn テンプレートの差分を確認したい ◦ ノイズとなる差分は snapshot serializer で無視できるようにしてい る • snapshot テストは実世界と極力合わせておく必要がある
reusable workflow による CI の横展開 • Github Actions の workflow
に落とし込んでいる ◦ だいたい同じ内容の workflow が誕生する • コピペしたくないので reusable workflow を導入し て CI の内容を一元管理するようにした ◦ プロジェクト間の微妙な差異は package.json で吸収できるよ うに責任分界点を設定した ▪ reusable workflow では実行する内容に責任を持つ ▪ 実行時のオプションなどはプロジェクト側の package.json が責任を持 つ 10
11 得られた恩恵 AWS-CDK v2 への追従
12 AWS CDK v2 化で必要だったこと • v2 bootstrap への対応 ◦
(当時) 最新の AWS CDK v1 で対応していたので問題 なし • feature flag や v2 に合わせたコードの修正 ◦ snapshot テストの結果と見比べながら修正
実際はどうだったか? 13 • 主業務の片手間としてコードの書き換えができた ◦ 普段から意識の片隅にあった状態なので勘所があった ◦ 最小限の手間だけですんだ ▪ コードは常に最新の状態を保っていたので
AWS CDK の開発プロ ジェクト側が準備したマイングレーションのレールにすんなり乗 れた ▪ AWS CDK のコードをシンプルな状態に保っていたという側面は ある
14 まとめ
15 IaC コードを継続的にメンテ可能な状態にする • ライブラリの更新は継続できる仕組みを入れ る ◦ アプリケーション開発のノウハウを輸入 • 負荷が少ない形で意識の片隅においておける
環境を作る
Dev トークやっています 16 https://jobs.qiita.com/dev_talks?employer=37