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
CDK 利用者から見る CDK
Search
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
Hiroyoshi HOUCHI
February 28, 2020
Programming
1.2k
3
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
CDK 利用者から見る CDK
Hiroyoshi HOUCHI
February 28, 2020
More Decks by Hiroyoshi HOUCHI
See All by Hiroyoshi HOUCHI
aws-dev-day-2020-f9-cdk-bestpractice
hixi
0
360
ITS を支える 情報集約基盤 アーキテクチャ / ITS Tech Study #02
hixi
1
870
SIerIoT vol.7
hixi
1
640
AWS IoT を用いた DeNA オートモーティブアーキテクチャ / DeNA Techcon 2018 Houchi Hiroyoshi
hixi
1
35k
sake-game-gcp-5.pdf
hixi
0
160
appengine-ja-night-35.pdf
hixi
0
150
Other Decks in Programming
See All in Programming
Creating Composable Callables in Contemporary C++
rollbear
0
130
AI時代のUIはどこへ行く?その2!
yusukebe
21
7.2k
Developing with AI Agents — Codex, Claude Code & Cowork Practical Guide
x5gtrn
PRO
0
1.3k
Javaの型とAI時代に型が大事な理由 / java types and type in AI era
kishida
2
140
ECSアプリログをFireLensでコスト削減しようとしたけど諦めた話 in Fargate×Node.js
akihisaikeda
2
4.2k
正しくソフトウェアを作る、前提を疑うための認知の視点 / doubt-premise
minodriven
21
6.6k
Vite+ Unified Toolchain for the Web
naokihaba
0
310
Webフレームワークの ベンチマークについて
yusukebe
0
170
Lemonade + Foundry Toolkit でお手軽アプリ開発
seosoft
1
330
Semantic Version 単位で戦略を柔軟に変えて、パッケージアップデートを自動化する
daitasu
1
240
その問い、本当に正しいですか?AI時代のエンジニアに必要な哲学と認知科学 / ai-philosophy-cognitive-science
minodriven
9
5k
セキュリティの専門家じゃなくてもできる。「セキュリティ意識」をアップデートして サプライチェーン攻撃への耐性を高めよう。
tk3fftk
5
760
Featured
See All Featured
エンジニアに許された特別な時間の終わり
watany
107
250k
Let's Do A Bunch of Simple Stuff to Make Websites Faster
chriscoyier
508
140k
Odyssey Design
rkendrick25
PRO
2
700
Jamie Indigo - Trashchat’s Guide to Black Boxes: Technical SEO Tactics for LLMs
techseoconnect
PRO
0
160
SEO Brein meetup: CTRL+C is not how to scale international SEO
lindahogenes
1
2.7k
How Fast Is Fast Enough? [PerfNow 2025]
tammyeverts
3
610
How To Stay Up To Date on Web Technology
chriscoyier
790
250k
How to build a perfect <img>
jonoalderson
1
5.6k
VelocityConf: Rendering Performance Case Studies
addyosmani
333
25k
RailsConf & Balkan Ruby 2019: The Past, Present, and Future of Rails at GitHub
eileencodes
141
35k
Reflections from 52 weeks, 52 projects
jeffersonlam
356
21k
Navigating the moral maze — ethical principles for Al-driven product design
skipperchong
2
390
Transcript
社内 CDK/Cloudformation 勉強会 CDK 利用者からみる CDK 放地宏佳 システム本部技術開発室 株式会社ディー・エヌ・エー
注意事項 • このスライドは社内勉強会で使った資料となります。 • 文章多めになっていますが、参考になれば幸いです。 • 対象者は今から CDK を始める人向けです。 2
自己紹介・IaC 歴 • システム本部技術開発室 所属 • IaC 歴 ◦ 2018
本番リリース済みの一部プロダクト・管理コンポーネントを Cloudformation で構築 ◦ 2018 本番リリース済みの一部管理コンポーネントを DeploymentsManager で構築 ◦ 2019 本番リリース済みのインフラをすべて Cloudformation で構築 ◦ 2020 副業先のインフラを CDK を用いて構築 (CDK 4ヶ月目) ▪ 現状プロダクトが本番リリースをしていないため開発環境まで ◦ Terraform は利用してない 3
目次 4 CDK 検討に際して CDK を使ってみてわかったこと・わかってないこと CDK のメリット・デメリット 1 2
3 CDK My Tips 4
CDK 検討に際して 5 • 懸念点 ◦ Cloudformation(定義)に対してCDK(プログラミング)であるため、IaC が複雑化するので はないか ◦
自由にかける=人それぞれ実装に差が出てしまい読めないコードが量産されるのではない か 懸念点はあるものの、使ってみないとわからないと思い、やってみることに。
CDK を使ってみてわかったこと・わかってないところ • わかったこと ◦ しっかりとレイヤーを分けて、どこで何を書くかのルールを作っておけば複雑にはならない ◦ インフラにおいてそこまで複雑なことを実現したいことがないのと、パフォーマンスを気にした コードを書く必要がないので、直感的なコードになる •
わかってないところ ◦ 複数人でやってないので、実装差異についてはわからない。 ◦ プログラムほどいっぱいのものを量産することはないので、コードレビューなどで結構防げる と思われる 6
CDK のメリット ① • プログラミング言語におけるメリット ◦ 文字列操作 ▪ Cfn では文字列操作をできる関数すら存在しない
▪ もし文字列操作をしたいようであれば Custom Lambda を書く必要があった。 ▪ → CDK では通常のプログラミングが可能となるので、本質的ではない Custom Lambda を書く必要がなくなる。 ◦ 環境ごとの定数宣言 ▪ Cfn では Mapping 構文を用いて定数を宣言しなければいけなかった。 ▪ その書き方にも癖があった。 ▪ → CDK では通常のプログラミングが可能となることで、簡潔にかける ◦ 条件分岐 ▪ Cfn では If 構文を用いる必要があったが、あまり直感的ではなかった。 ▪ → CDK では通常の(以下略 ◦ 繰り返し記述 ▪ コピペもしくはマクロという機能を使う必要があった (マクロは難しい) ▪ → CDK では (以下略 7
CDK のメリット ② • CDK 自体のメリット ◦ Custom Resource (Custom
Lambda) の宣言 ▪ 最新のリソースなど、cdk, cfn でまだ定義されていないリソースであっても、REST API が存在すれば、 Custom Resource を定義することによって、簡単に cdk と統合可能 となっている。 ▪ また、REST API 以上の独自の処理を行いたい際には Custom Lambda を書く必要 があるが、cdk 自体に lambda の asset を管理する機構があるため、簡単に書くこと ができる。 ◦ 導入における楽さ ▪ cloudformation や terraform を作る際には、その元となる定義をどこに置くのかな ど管理のことも一定考える必要があった。 ▪ cdk では cdk bootstrap でそれらの必要なものが作られ、cdk deploy で自動的に 巻かれるので、ここの運用を考える必要がない(かつ独自でみんなバラバラなことをしな い)のが便利 8
CDK のメリット ③ • CDK 自体のメリット ◦ cdk diff ▪
diff コマンドを打つだけで何がどう変更されるのかがわかるのが便利。 ▪ テストコードを書かなくても、リファクタリング後に diff を打つことで、 インフラ構成が変わってないことを確認可能。 9
CDK のデメリット • リソース定義ではなくライブラリであること ◦ リソースが定義ではなくてライブラリ的であるため、バージョンアップにより中身が変わってし まう可能性がある ◦ 最悪なケースとして、そのまま適用できない変更(リソースの置換)がはいり、ダウンタイムが 必要な構成変更がはいったり、そもそも適用できない可能性もある。
• βリリースが多いこと ◦ 上記とかぶるが、まだ安定版のリリースがなく、大きく変更されうる可能性が高い • @aws-cdk/core への依存 ◦ すべてのリソース定義のライブラリは @aws-cdk/core に依存しており、ある一部のリソー スライブラリのみのバージョンアップさせることができない。 ◦ 要するに、1.19 の @aws-cdk/aws-rds を使っている場合、 1.20 の @aws-cdk/aws-s3 を使うことができない。 ◦ 1.20 の @aws-cdk/aws-s3 を使う場合は @aws-cdk/aws-rds のライブラリも 1.20 にし なければならず、上記問題が発生する可能性がある。 10
結論 • Cloudformation よりも便利 • 複雑になりそうと思ったけど、そんなことはない • @aws-cdk のバージョンを固定すれば問題ない •
バージョン上げる作業も diff でどう変更されるのかが明確なので、問題ない → 今後も使っていく予定です 11
CDK My Tips 12 CDK を反復実行するために CDK のディレクトリ階層 CDK の
第2引数 1 2 3 IaC におけるレイヤー定義 4
CDK My Tips 13 CDK を反復実行するために CDK のディレクトリ階層 CDK の
第2引数 1 2 3 IaC におけるレイヤー定義 4
CDK を反復実行するために 初めて CDK を利用するときには • cdk deploy • cdk
destroy を繰り返し使うことになります。 AWS Resource には RemovalPolicy というものがあり、destroy する際にもリソースを削除せず に残すという機能があります。 例えば CW LogGroup, ECR などですが、RemovalPolicy = Retain だと、 destroy を実行して も、リソースが残り続けます。 そうなるとリソースが存在したままになり、次回 deploy が失敗します。 はじめは RemovalPolicy = Destroy としてリソースを作って反復実行するのをおすすめします。 14
CDK My Tips 15 CDK を反復実行するために CDK のディレクトリ階層 CDK の
第2引数 1 2 3 IaC におけるレイヤー定義 4
CDK のディレクトリ階層 • 以下のように construct と stack を分けて定義するのをおすすめします。 • bin
以下にそのまま書くことも可能ですが、長くなるとリソースの関連がわからなくなります。 • プログラミング言語の変数スコープを用いることで、他リソースに依存するリソースなのか、依存 しないリソースなのかが明確になります。 16
CDK のディレクトリ階層 • contruct もわざわざ定義する必要はありませんが、以下のような共通項目を定義できるメリット があります。 ◦ CloudWatchLogs は保持期限を無制限にしたい ◦
S3 は KMS 暗号化をする必要がある • また、ecs では cluster / service / role の設定をする必要がありますが、そういったコンポーネ ントをまとめ上げて、他 Stack で再利用することが可能になります 17
CDK My Tips 18 CDK を反復実行するために CDK のディレクトリ階層 CDK の
第2引数 1 2 3 IaC におけるレイヤー定義 4
CDK の第2引数 https://github.com/hixi-hyi/cdk-sample/tree/master/lib/util のようなものを定義しておくと便利です。 サンプルではただの string で宣言するようになっていますが、階層構造が定義された class を使う こと以下のようなメリットがあります
• StackName を構造化でき、 cdk deploy ServiceDev* など特定の領域以下を deploy するこ とが簡単になります。 • CfnOutput の命名規則もコード規約で制限できるので変な Export を作れなくできます • リソースによって文字種の制限があり、その結果 CamelCase, snake_case を使うケースが出 てきますが、簡単に変換が可能になります 19
CDK My Tips 20 CDK を反復実行するために CDK のディレクトリ階層 CDK の
第2引数 1 2 3 IaC におけるレイヤー定義 4
IaC におけるレイヤー定義 21 例えばになりますが、僕は以下のようなレイヤー構造を考えて、それぞれの Stack を定義するように しています。 どこまでを量産するのか、どこまでを共通として使うのかなどを考えて Stack を作っていくのが良いで
す。 AWS Account Layer AWS Account Stack Environment Layer Environment Stack Service Layer dev.hixi.jp Stacks qa.dev.hixi.jp Stacks route 53 ( dev.hixi.jp ) SNS (chatbot) common stack api 2 stack api 1 stack common stack api 2 stack api 1 stack ACM CDK Stack
IaC におけるレイヤー定義 22 この例でいうと、例えば DNS は Environment Layer 以下で一律。 Common
Stack では Network や RDS を構築するんですが、要するに dev.hixi.jp と qa.dev.hixi.jp は別々の VPC や RDS を使うという感じになります。 AWS Account Layer AWS Account Stack Environment Layer Environment Stack Service Layer dev.hixi.jp Stacks qa.dev.hixi.jp Stacks route 53 ( dev.hixi.jp ) SNS (chatbot) common stack api 2 stack api 1 stack common stack api 2 stack api 1 stack ACM CDK Stack
Tips 適用後 https://github.com/hixi-hyi/cdk-sample 上記で話した Tips を適用したサンプルのレポジトリになります cdk deploy ServiceQa* とやることで
Qa 環境の構築が可能になります。 23
Nested Stack について 24 CDK にも Nested Stack の概念はありますが、Nested Stack
は ChangeSets を作れなくなるな ど、Cloudformation 自身でもあまり使うべきではないものにはなりますので、Stack 名で階層構造 を定義できるといいでしょう。 (e.g. ServiceDevApi / ServiceDevGui) なお、 cdk コマンドではワイルドカードを用いて deploy ができるので、 cdk deploy ServiceDev* とやれば ServiceDev に紐づく deploy が簡単にできます