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
第140回 雲勉 今度こそ AWS CDK で構築してみたくなるようなCDK活用集
Search
iret.kumoben
July 25, 2024
Technology
0
120
第140回 雲勉 今度こそ AWS CDK で構築してみたくなるようなCDK活用集
iret.kumoben
July 25, 2024
Tweet
Share
More Decks by iret.kumoben
See All by iret.kumoben
第174回 雲勉 Google Agentspace × ADK Vertex AI Agent Engineにデプロイしたエージェントを呼び出す
iret
0
21
第173回 雲勉 ノーコードで生成 AI アプリを構築!Google Cloud AI Applications(旧 Vertex AI Agent Builder)入門
iret
0
48
第170回 雲勉 Lyria が切り拓く音楽制作の未来
iret
1
27
第169回 雲勉 AWS WAF 構築 RTA
iret
0
35
第168回 雲勉 JITNAの使い方とハマったポイントについて語る回
iret
0
39
第167回 雲勉 エージェント開発を加速する Agent Development Kit 入門
iret
1
52
第166回 雲勉 コードを読んで理解する AWS Amplify Gen2 Backend
iret
0
45
第165回 雲勉 Google Agentspace について
iret
0
65
第164回 雲勉 Agent Development Kit と MCP Toolbox for Databases で MCP 連携してみた
iret
1
130
Other Decks in Technology
See All in Technology
これでもう迷わない!Jetpack Composeの書き方実践ガイド
zozotech
PRO
0
310
CDK CLIで使ってたあの機能、CDK Toolkit Libraryではどうやるの?
smt7174
4
120
企業の生成AIガバナンスにおけるエージェントとセキュリティ
lycorptech_jp
PRO
2
160
DevIO2025_継続的なサービス開発のための技術的意思決定のポイント / how-to-tech-decision-makaing-devio2025
nologyance
1
370
実践!カスタムインストラクション&スラッシュコマンド
puku0x
0
340
「全員プロダクトマネージャー」を実現する、Cursorによる仕様検討の自動運転
applism118
19
9.2k
人工衛星のファームウェアをRustで書く理由
koba789
13
7.2k
Evolución del razonamiento matemático de GPT-4.1 a GPT-5 - Data Aventura Summit 2025 & VSCode DevDays
lauchacarro
0
160
現場で効くClaude Code ─ 最新動向と企業導入
takaakikakei
1
220
「どこから読む?」コードとカルチャーに最速で馴染むための実践ガイド
zozotech
PRO
0
290
AI開発ツールCreateがAnythingになったよ
tendasato
0
120
LLMを搭載したプロダクトの品質保証の模索と学び
qa
0
1k
Featured
See All Featured
BBQ
matthewcrist
89
9.8k
Chrome DevTools: State of the Union 2024 - Debugging React & Beyond
addyosmani
7
840
Dealing with People You Can't Stand - Big Design 2015
cassininazir
367
27k
Visualizing Your Data: Incorporating Mongo into Loggly Infrastructure
mongodb
48
9.7k
The Art of Delivering Value - GDevCon NA Keynote
reverentgeek
15
1.6k
Fantastic passwords and where to find them - at NoRuKo
philnash
52
3.4k
How GitHub (no longer) Works
holman
315
140k
Embracing the Ebb and Flow
colly
87
4.8k
Why Our Code Smells
bkeepers
PRO
339
57k
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
194
16k
The World Runs on Bad Software
bkeepers
PRO
70
11k
How To Stay Up To Date on Web Technology
chriscoyier
790
250k
Transcript
第140回 雲勉 今度こそ AWS CDK で 構築してみたくなるようなCDK活⽤集
講師⾃⼰紹介 2 ▪ 名前 佐藤 淳 • (所属) クラウドインテグレーション事業部 構築第4セクション
• (経歴) 2021年 アイレット 中途⼊社 • (アイレット歴) もうすぐ3年 • (趣味) 最近は、キャンプと登⼭
アジェンダ 3 ⾃⼰紹介 1. はじめに 2. AWS CDKとは 3. 実践①
CDKで環境構築 4. 実践② CDKでテスト実装 5. 実践③ cdk migrateコマンドで CDKプロジェクトに移⾏してみる 6. 終わりに
1. はじめに 4
この資料の対象者 5 この資料では以下のような⽅が対象となります。 • AWS CDK で環境構築を実践したい⽅ • 複数環境をCDKで運営したい⽅ •
作成したリソースのテストについてお悩みの⽅ • 既にCloudFormationでリソースを構築しているが、AWS CDK への移 ⾏を検討されている⽅
2. AWS CDK とは 6
2. AWS CDK とは 7 AWS CDKとは ▪ AWS CDK(Cloud
Development Kit)とは、AWSが提供するAWSリソースをプロビジョ ニングするためのIaCツール。 ▪ TypeScriptやPythonなどの⾔語を利⽤して、プロビジョニングすることができる。 (この発表では全てTypeScriptで構築) ▪ CDKライブラリでは豊富なメソッド、クラスなどが利⽤可能。 ▪ コンストラクトを使⽤し、少ないコード量でリソースを作成することができる。 L1コンストラクト … CloudFormationのように1:1でリソースを定義 L2コンストラクト … 複数の関連するリソースを1:nでリソースを定義 L3コンストラクト … L2コンストラクトをより抽象化したもの
2. AWS CDK とは 8 Resource Resource App Stack Stack
Resource ▪ Application … CDK Appを呼び出し 複数Stackを定義可能 ▪ Stack … CloudFormation上でのデプロイ単位 ▪ Resource … AWSリソースを定義 CDKの構成
2. AWS CDK とは 9 CloudFormation , Terraform, AWS CDK
⽐較 CloudFormation ▪ スタックでの安全なリソース管理 ▪ AWS公式による参考⽂献が多い ▪ AWSのリソースに限定 Terraform ▪ マルチプロバイダー(NewRelic, CloudFlare, etc.. ) ▪ HashiCorp CloudなどHashiCorp社のサー ビスを利⽤可能 AWS CDK ▪ コードライクに複雑な条件分岐など を定義可能 ▪ L2, L3コンストラクトによる抽象化 ▪ マルチプロバイダー(CDK for Terraform)も可能
2. AWS CDK とは 10 もっと CDK を学ばれたい⽅向けへ ▪ CDK
ワークショップ … CDK 初学者向け。CDK についてハンズオン形式で学べる。 https://cdkworkshop.com/ja/ ▪ baseline-environment-on-aws(BLEA) … AWS公式が提唱するセキュアなベースラインを提供するCDK テンプレート集。テンプレートの書き⽅を学習されたい⽅向け。 https://github.com/aws-samples/baseline-environment-on-aws ▪ 外部コンストラクト … AWSコミュニティやサードパーティ製のコンストラクト などを利⽤したい⽅向け。 https://constructs.dev/ cdk-nagとか
3.実践① CDKで環境構築 11
3. 実践① CDKで環境構築 12 シナリオ ▪ 以下のような複数アカウントでリソースを管理するケース。 ▪ 環境差分はリソース名やインスタンスタイプなど。 本番環境
VPC Public subnet Public subnet Private subnet Private subnet example.com ACM マルチAZ ALB テスト環境 VPC Public subnet Public subnet Private subnet Private subnet testexample.com ACM シングルAZ ALB t3.micro インスタンスタイプ t3.medium db.t3.micro インスタンスタイプ db.t3.medium CDK 1台構成
3. 実践① CDKで環境構築 13 環境ごとに変数を定義 例) リソース名を本番環境は「prd」、テスト環境は「test」と定義 インスタンスタイプなどを環境ごとで定義したい 1. コンテキスト値を編集して環境ごとの値を定義する。
./cdk.json または./cdk.context.json 内のcontex句に 環境ごとの変数をにそれぞれ定義する(右記参照)
3. 実践① CDKで環境構築 14 環境ごとに変数を定義 2. ./lib/stack.ts にてスタックを実⾏するクラスにて contextで定義した変数を渡す。 右のようにStackPropsを継承したインターフェース型を定義。
if⽂などの条件分岐も、慣れ親しんだコードで記載可能。 → 複雑な条件分岐やマッピングなど、 CloudFormationでは難しい表現も可能。
3. 実践① CDKで環境構築 15 環境ごとに変数を定義 3. ./bin/stack.ts にてtryGetContext句を追加し、 環境変数を明⽰的に定義してスタックに変数を代⼊。 CDKデプロイコマンドにて
--contextフラグを オプションとして指定して実⾏することで、 指定した環境ごとにデプロイできる。 [実⾏コマンド] $ cdk deploy -- --context env_name=prd
4. 実践② CDKでテスト実装 16
4.実践② CDKでテスト実装 17 CDKのテストとは︖ CDK のテストでは、以下の2つの⽅法があります。 1. スナップショットテスト CloudFormation テンプレートに対して以前実⾏したテンプレートとの差分を照合してテストします。
TypescriptではJest、Pythonではpytestなど各コードでのフレームワークでテストを実施。 2. アサーションテスト CDKによって⽣成されたCloudFormationスタック上のリソースのプロパティが、特定の値であるかをテ ストします。 単体テストに相当する内容。 CDK ライブラリである aws-cdk-lib.assertions を使⽤してテスト。 他にも統合テスト⽤のモジュール「integ-tests」 もありますが、2024/07時点ではアルファ版であるため、今回は割愛。
4.実践② CDKでテスト実装 18 スナップショットテスト CloudFormation テンプレートに対して以前実⾏したテンプレートとの差分を照合してテストします。 Jestフレームワーク内のJestマッチャーである「toMatchSnapshot」ファイルを利⽤します。 テストファイルは./test/<テストファイル名>.test.ts として、以下のような内容を⼊⼒して保存します。 コマンドはnpm
testコマンドを実⾏ [実⾏コマンド] $ npm test
4.実践② CDKでテスト実装 19 補⾜ どのようにテストを実施しているのか テスト⽤のフレームワークはJestを使⽤する。 Jestの仕様により初回のテスト時、 ./test配下に __snapshot__フォルダが作成される。 .snapファイルの内容を確認すると、スタックの定義が出⼒。
.snapと.tsファイルで出⼒されるスタックとの差分を ⽐較しテストする。 AWS::EC2::Instanceの出力
4.実践② CDKでテスト実装 20 スナップショットテスト 結果 PASSと出⼒され、スナップショットとの差分なし。
4.実践② CDKでテスト実装 21 スナップショットテスト 結果 失敗ケース。Failと出⼒され、スナップショットとの差分が発⽣していることを確認。 スタックの更新でも発⽣するため、更新の際は $ npm test
-- -u でスナップショットを更新することで差 分を解消することができる。
4.実践② CDKでテスト実装 22 アサーションテスト CDKによって⽣成されたCloudFormationスタック上 のリソースのプロパティが、特定の値であるかを テストします。 テストファイルは ./test/<テストファイル名>.test.ts として、
以下のような内容を⼊⼒して保存します。
4.実践② CDKでテスト実装 23 アサーションテスト 結果 PASSと出⼒され、全てのケースで特定の値であったことを確認。
4.実践② CDKでテスト実装 24 アサーションテスト 結果 失敗ケース。Failと出⼒され、 失敗の原因が出⼒。
4.実践② CDKでテスト実装 25 Tips どのようにアサーションテストケースを作成するのか __snapshot__の内容を⾒て、テストケースを作成する。
4.実践② CDKでテスト実装 26 まとめ ▪ スナップショットテストで全てのリソースが直前のスタックからの変更はないかを確認できる。 ▪ アサーションテストを実施して対象のリソースのパラメータが該当する値に設定されていることを確認で きる。 ▪
簡単なスナップショットテストから初めてみる。
5. 実践③ cdk migrateコマンドで CDKプロジェクトに 移⾏してみる 27
5. 実践③ cdk migrateコマンドで CDKプロジェクトに移⾏してみる 28 cdk migrateコマンドで CDKプロジェクトに移⾏してみる ▪
既存のCloudFormationで作成されたプロジェクトを、既存のリソースに影響なくCDKに移⾏したい。 ▪ CloudFormationテンプレートから、CDK に移⾏したい。 ▪ TypeScriptなどのソースコード作成も簡略化したい。 ↓ CDK migrate コマンドによって 既存のスタックや⼿動で作成したリソースをCDKプロジェクトに移⾏
5. 実践③ cdk migrateコマンドで CDKプロジェクトに移⾏してみる 29 Case1. CloudFormationで作成したリソースをCDKプロジェクトに移⾏ ▪ 既存のCloudFormation
スタックからCDKプロジェクトに移⾏する場合(--from-stack) $ cdk migrate --stack-name <<スタック名>> --language typescript --from-stack 上記のコマンドだけで、CDKプロジェクトに移⾏することが可能。
5. 実践③ cdk migrateコマンドで CDKプロジェクトに移⾏してみる 30 Case1. CloudFormationで作成したリソースをCDKプロジェクトに移⾏ 実⾏結果 ▪
Cdk migrate コマンドを実⾏したフォルダに CDKプロジェクトが移⾏できた。 ▪ ソースコードも同様に⽣成されていた。 ▪ cdk deploy で既存Stackを更新できた。
5. 実践③ cdk migrateコマンドで CDKプロジェクトに移⾏してみる 31 Case2. CloudFormationのテンプレートからCDKプロジェクトを作成 ▪ 新しい環境で既存のCloudFormationテンプレートファイル
-> CDKプロジェクトの移⾏(--from-path)。 既にテンプレートファイル template.json がある場合、以下のコマンドを実⾏。 $ cdk migrate --stack-name <<スタック名>> --language typescript --from-path template.json
5. 実践③ cdk migrateコマンドで CDKプロジェクトに移⾏してみる 32 Case2. CloudFormationのテンプレートからCDKプロジェクトを作成 実⾏結果 ▪
Cdk migrate コマンドを実⾏したフォルダに CDKプロジェクトが移⾏できた。 ▪ ソースコードも同様に⽣成されていた。
5. 実践③ cdk migrateコマンドで CDKプロジェクトに移⾏してみる 33 Case3. ⼿動で作成したリソースをCDKプロジェクトに移⾏ ▪ CloudFormationスタック管理外のリソースもcdk
migrate コマンドで移⾏することができる(--from- scan) ▪ --from-scanではCloudFormation上のIaCジェネレータの最新のスキャンを参照してリソースを検索 ▪ Filter句を使⽤することで、特定のタグキー/値 のリソース群をCDKプロジェクトに移⾏することができる $ cdk migrate --stack-name <<スタック名>> --language typescript --from-scan --filter tag- key=<<タグキー>>
5. 実践③ cdk migrateコマンドで CDKプロジェクトに移⾏してみる 34 3. ⼿動で作成したリソースをCDKプロジェクトに移⾏ 実⾏結果 ▪
Cdk migrate コマンドを実⾏したフォルダに CDKプロジェクトが移⾏できた。 ▪ cdk deploy で新規Stackを作成できた。
5. 実践③ cdk migrateコマンドで CDKプロジェクトに移⾏してみる 35 Tips cdk migrate を実⾏する上での注意点
▪ 移⾏によって作成される全てのアプリケーションはL1コンストラクトとして⽣成される。 L2やL3コンストラクトとして出⼒はされない。移⾏後にL2/L3コンストラクトの定義はできる。 ▪ CloudFormationのネストスタックの移⾏はサポートされていない。 cdk import やaws-cdk-lib.NestedStackを駆使して移⾏できるかもしれないが、影響調査が⼤きい。 ▪ --from-scanオプションを付与して移⾏する際は、関連するリソースも含めてcdk migrate コマンドを 実⾏。 以下のようにAWS::EC2::Instanceリソースの場合VPC Idを参照できなくてエラーが発⽣。
36 まとめ ▪ cdk migrate コマンドで、様々なケースでもCDKの移⾏を実施することができることがわかった。 ▪ 最⼩の労⼒でCDKに移⾏することができる。 5. 実践③
cdk migrateコマンドで CDKプロジェクトに移⾏してみる
6. 終わりに 37
6. 終わりに 38 ▪ 複数環境の構築や複雑な条件分岐でも、慣れ親しんだコードで簡単に記載することができる。 ▪ 開発⾔語と同様のテストツールで単体テストを実⾏することができる。 ▪ cdk migration
コマンドを使⽤することで少ない⼯数で移⾏することができた。 ↓ CDKを利⽤して開発・移⾏することの敷居が下がりつつある。
ご清聴ありがとうございました。 39