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
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
iret.kumoben
July 25, 2024
Technology
180
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
第140回 雲勉 今度こそ AWS CDK で構築してみたくなるようなCDK活用集
iret.kumoben
July 25, 2024
More Decks by iret.kumoben
See All by iret.kumoben
第182回 雲勉 【Gemini 3.0 Pro】AI ベンチマーク徹底比較!他モデルに比べ優れている点まとめ
iret
0
120
第181回 雲勉 WEB制作者のちょっとした面倒をAWSで解決!Amazon S3とAWS Lambda活用術
iret
0
100
第180回 雲勉 Abuse report の調査・確認方法について
iret
0
120
第179回 雲勉 AI を活用したサポートデスク業務の改善
iret
0
160
第178回 雲勉 Amazon EKSをオンプレで! Amazon EKS Anywhere 実践構築ガイド
iret
1
140
第177回 雲勉 IdP 移行を楽に!Amazon Cognito でアプリへの影響をゼロにするアイデア
iret
0
130
第176回 雲勉 VPC 間サービス接続を考える!Private Service Connect 入門
iret
0
120
第175回 雲勉 Amazon ECS入門:コンテナ実行の基本を学ぶ
iret
0
170
第174回 雲勉 Google Agentspace × ADK Vertex AI Agent Engineにデプロイしたエージェントを呼び出す
iret
0
190
Other Decks in Technology
See All in Technology
【CEDEC2026】コードレビュー支援ツール開発から学ぶ:LLMを用いた業務システムの実践的な運用設計と誤出力対策
cygames
PRO
0
530
Goでデータパイプラインを作ろう
sansantech
PRO
0
240
ブラウザ研修 2026
recruitengineers
PRO
3
480
取引先から届く 「セキュリティチェックシート」の読み解き方
kamadamakoto
0
110
[しろおび夏祭り2026] チャットするAIから、作業するAIへ - 使われ方の変化と、その裏側で起きていること
kk0n
0
1.6k
Pavlokで始める電撃駆動開発
sgrsn
0
170
Master Dataグループ紹介資料
sansan33
PRO
1
4.8k
Forza Horizon 6 のテレメトリ機能で 自動運転に使えそうな学習データを集める話
henjin0
0
120
今こそ聞きたいソフトウェア設計 ドメイン駆動設計再入門
masuda220
PRO
16
5.7k
Webアクセシビリティ入門 2026
recruitengineers
PRO
1
280
Amazon Bedrock Managed Knowledge BaseDive Deep
ren8k
0
400
ラジオの科学
frievea
0
210
Featured
See All Featured
Typedesign – Prime Four
hannesfritz
42
3.1k
Darren the Foodie - Storyboard
khoart
PRO
3
3.5k
The innovator’s Mindset - Leading Through an Era of Exponential Change - McGill University 2025
jdejongh
PRO
1
230
The SEO Collaboration Effect
kristinabergwall1
1
510
Tips & Tricks on How to Get Your First Job In Tech
honzajavorek
1
660
Mobile First: as difficult as doing things right
swwweet
225
10k
エンジニアに許された特別な時間の終わり
watany
108
250k
How to train your dragon (web standard)
notwaldorf
97
6.7k
The Anti-SEO Checklist Checklist. Pubcon Cyber Week
ryanjones
0
200
AI Search: Implications for SEO and How to Move Forward - #ShenzhenSEOConference
aleyda
1
1.3k
Breaking role norms: Why Content Design is so much more than writing copy - Taylor Woolridge
uxyall
0
360
Neural Spatial Audio Processing for Sound Field Analysis and Control
skoyamalab
0
390
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