SlideShare a Scribd company logo
1 of 21
© 2021, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
Amazon Web Services Japan
Solutions Architect 大村幸敬
2021/03/20
Infrastructure as Code に疲れたので
なんとかできないかCDKで色々やってみる
JAWS DAYS 2021 AWS社員による怒涛のLTチャレンジ!
© 2021, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
大村 幸敬 (おおむら ゆきたか)
Twitter: yktko@
ソリューションアーキテクト
• これからクラウドを使いはじめる
エンタープライズ企業をサポート
• 運用系サービス & DevOps系サービス
好きなAWSのサービス: AWS CLI, AWS CDK
© 2021, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
発端:村主さんのJAWS DAYS 2019/2020の発表
「Infrastructure as Codeに疲れた」でググってください
とても共感しました
https://jawsdays2019.jaws-ug.jp/session/1119/
Mediumへのリンク
© 2021, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
「僕たちが本来やりたかったこと」を改めて考えてみる
• やりたいことはビジネス
• やらなければいけなかったのは…
• 無→IAMユーザ作成→基本のセキュリティ設定
→NW作成→APサーバ作成→DB作成
→監視作成→部分的な変更→部分的な変更→.....
• この一連の変更作業を速く正確に行いたい
• why遅い> 変更にかかる事前確認の時間が長い+作業自体が遅い
• why確認> 変更して壊れるのが怖い
• why怖い> 変更の影響がわからない
• why影響> 設定の詳細がわからない+設定をテストできない
• whyテストできない> 同じ環境を速く正確に作れない
• 加えて
• 速く、にはドキュメントやコードを書く時間も含む
• 自分以外の人でも早く、速くやれるようにしたい
© 2021, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
「僕たちが本来やりたかったこと」のために
• Working Backwards
• ツールやプラクティスに固執しない
• 実現したいことから考える
• そのために適切な時に適切な手段を都度選択して使う
• 「実現したいこと」は状況によって変わるので注意
• たとえば :
デフォルトではなくベストプラクティスな設計を、
速く、正確に展開したい。
かつその構成情報を他の人が理解できるように
© 2021, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
どんな手段があるか
• 特性に合わせて選択
• 状態を 記述&実行する CDK / CFn / Terraform....
• 手順を 記述&実行する CLI / API(SDK) / 手順書...
• 記述…できるだけ少なくシンプルに
• コードも文章も書けば書くほど理解しにくくなる
• 条件によって動きが変わるコードは
構成情報の把握を難しくする(構成と1:1のほうがよい)
• 自社固有の考え方は部外者への説明が大変
社外で一般的に使われている情報でできるだけ済ます
© 2021, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
CDKでなんとかできないか
© 2021, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
開発を高速に
• リファレンスの参照回数と試行錯誤が格段に少なくなる
• 型定義(TypeScript)とエディタによるサジェスト
• リソース間の依存関係把握が楽(オブジェクト指向)
• CDK diffとテストによるチェック
• 記述の絶対量が小さい
• 最低限のパラメータ指定でリソースを作れる
• つまり他人のコードを読むのも楽
• 一括タグ付けとかの便利機能
• 開発者を集めやすい
• アプリ開発者もとっつきやすい
© 2021, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
S3バケットのコード
サジェスト:
必須プロパティ(?なし)
オプションプロパティ(?あり)
サジェスト:
型がわかる
文字列でなくEnumsで指定
L2 Constructは
少ないプロパティで
複数のリソースを
まとめて構成可能
VPC作成のコード
複雑なものは
コンストラクタでなく
メソッドで追加する
© 2021, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
CDKで作成したリソース全てに決まったタグをつけるコード
(CFnで対応しているもののみ)
たとえばこの環境では93個の
リソースに"Environment"
タグを一括セットできた
© 2021, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
小ネタ: AWS SSOでログインして CDKをデプロイ
$ aws sso login --profile=sso-ct-dev1
Attempting to automatically open the SSO authorization page in your default browser.
If the browser does not open or you wish to use a different device to authorize this request, open the following URL:
https://device.sso.us-east-1.amazonaws.com/
Then enter the code:
XXXX-XXXX
(ここで下記の手順をブラウザで操作)
Successully logged into Start URL: https://d-XXXXXXXXX.awsapps.com/start#/
$ cdk bootstrap -c environment=dev --profile ct-dev1
⏳ Bootstrapping environment aws://xxxxxxxxx/ap-northeast-1...
✅ Environment aws://xxxxxxxx/ap-northeast-1 bootstrapped (no changes).
参考(https://chariosan.com/2021/03/14/aws-sso_aws2-wrap_cdk/)
• アクセスキー/シークレットキーを手元に保存しなくてよい
• AWS CLIv2とaws2-wrapを使う
© 2021, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
記述をわかりやすく
• 設定値と使う場所の見通しをよくする
• Constructの定義とパラメータ値を離さない、過度にコンフィグ化しない、条件分岐し
ない
• 本当に同じもの以外はコードを使いまわさない
• 独自コードの再利用は必ずしも善ではない
• 開発と本番で「全く同じでなければいけない」場合のみ同じインスタンスにする
• 今は同じだが変わる可能性があるならコピペでもいいじゃない
• 抽象化、条件分岐、ループは極力使わない
• コードが実装をそのまま表現しているようにする
• 「CDKコードをみてWell-Architectedレビューできるか?」
• 実装の詳細は生成したCFnテンプレートで確認
• CDKは「CFnテンプレートを、少ない記述でエディタサポートをフルに使って実装する
ためのツール」と割り切る
© 2021, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
Contextを指定して環境ごとに違う
パラメータを渡す例(やりすぎ注意)
-c でContextを指定
cdk.json
参照のしかた
デプロイのしかた
SecretsManagerにパスワード
を生成しつつRDSに設定
Aurora PostgreSQLを作るコード
デプロイ後も動的に変化させたいものは
ParameterStore/SecretsManagerを使う
© 2021, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
手で触ってしまってもいい
• CDK/CFn管理対象リソースを触ったら
1. CFn Drift Detectionで検出
2. パラメータをCDKに反映(サジェスト使えば楽)
3. cdk diffで差分を確認⇨適用
• 手で作ったリソースはどうするか
• Former2でテンプレート生成
https://former2.com/
• CfnInclude or CDKコード書き起こしてリソース再作成
(既存リソースをインポートするより確実で結果的に楽)
https://aws.amazon.com/jp/blogs/news/migrating-cloudformation-templates-to-the-aws-cloud-development-kit/
• CDKで書く方が大変なものもある
• StepFunctionsとか
• マネコンで作ってJSONそのまま持ってくるでもいいじゃない
© 2021, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
CDKにこだわらない
• CDK L2(ハイレベル)ライブラリで無理に頑張らない
• grant() は便利だけど、スタックまたいでると依存関係が更新されないとか
• 普通にポリシーを指定でもいいじゃない。ARN参照でもいいじゃない。
• 無理にオブジェクト指向っぽく汎用的に作らなくていい。再利用性よりわかりやすさ。
• CDK L1(ローレベル)ライブラリの利用を躊躇しない
• CFnと同じ設定が必要だが、それでも型定義やエディタサジェストがあるのは強力
• 構成ではなく手続きが必要ならCDKの一発構築は諦めてCLI+手順書でもいい
• バックアップ取得作業とかデプロイ作業とかってCDKでやるもんじゃないし
• マネコンのほうが楽なら手動操作でもいい
• 手順書を作ればいい。せいぜい2-3クリック。
• SecurityHubやSSM QuickSetupをOrganizations全体に適用する場合など
• DNS設定とかACMの証明書。開発と本番でどうせ違うし、世の中に1個しか作れない。
• 手で作ったものをCDKのfromLookup()メソッドで引っ張れば普通に使える
© 2021, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
L1(CFn)リソースをCDKで作る例
CFnと同様全てのプロパティの
指定が必要
サジェストに必須パラメータが
出てくる
© 2021, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
使えるのはCFnだけじゃない
• cdktf
• Define infrastructure resources using programming
constructs and provision them using HashiCorp
Terraform.
• cdk8s
• Define Kubernetes native apps and abstractions using
object-oriented programming.
© 2021, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
まとめ:CDKでなんとかなりそうなこと
• 開発を高速に
• 記述をわかりやすく
• 手で触ってもフィードバックしやすい
• CDKにこだわらない
• CFnだけじゃない
© 2021, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
まだ疲れることはあるけどね
• AWSサービスの知識とCFnの理解は結局必要
• 新しくプログラミング言語覚えるの大変
• リファレンス英語だけ…
• OSレイヤの管理は結局Ansible?
© 2021, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
IaCに疲れても
Happy coding with CDK!
© 2021, Amazon Web Services, Inc. or its Affiliates. All rights reserved.

More Related Content

More from Amazon Web Services Japan

202202 AWS Black Belt Online Seminar AWS Managed Rules for AWS WAF の活用
202202 AWS Black Belt Online Seminar AWS Managed Rules for AWS WAF の活用202202 AWS Black Belt Online Seminar AWS Managed Rules for AWS WAF の活用
202202 AWS Black Belt Online Seminar AWS Managed Rules for AWS WAF の活用Amazon Web Services Japan
 
202203 AWS Black Belt Online Seminar Amazon Connect Tasks.pdf
202203 AWS Black Belt Online Seminar Amazon Connect Tasks.pdf202203 AWS Black Belt Online Seminar Amazon Connect Tasks.pdf
202203 AWS Black Belt Online Seminar Amazon Connect Tasks.pdfAmazon Web Services Japan
 
SaaS テナント毎のコストを把握するための「AWS Application Cost Profiler」のご紹介
SaaS テナント毎のコストを把握するための「AWS Application Cost Profiler」のご紹介SaaS テナント毎のコストを把握するための「AWS Application Cost Profiler」のご紹介
SaaS テナント毎のコストを把握するための「AWS Application Cost Profiler」のご紹介Amazon Web Services Japan
 
Amazon QuickSight の組み込み方法をちょっぴりDD
Amazon QuickSight の組み込み方法をちょっぴりDDAmazon QuickSight の組み込み方法をちょっぴりDD
Amazon QuickSight の組み込み方法をちょっぴりDDAmazon Web Services Japan
 
マルチテナント化で知っておきたいデータベースのこと
マルチテナント化で知っておきたいデータベースのことマルチテナント化で知っておきたいデータベースのこと
マルチテナント化で知っておきたいデータベースのことAmazon Web Services Japan
 
機密データとSaaSは共存しうるのか!?セキュリティー重視のユーザー層を取り込む為のネットワーク通信のアプローチ
機密データとSaaSは共存しうるのか!?セキュリティー重視のユーザー層を取り込む為のネットワーク通信のアプローチ機密データとSaaSは共存しうるのか!?セキュリティー重視のユーザー層を取り込む為のネットワーク通信のアプローチ
機密データとSaaSは共存しうるのか!?セキュリティー重視のユーザー層を取り込む為のネットワーク通信のアプローチAmazon Web Services Japan
 
パッケージソフトウェアを簡単にSaaS化!?既存の資産を使ったSaaS化手法のご紹介
パッケージソフトウェアを簡単にSaaS化!?既存の資産を使ったSaaS化手法のご紹介パッケージソフトウェアを簡単にSaaS化!?既存の資産を使ったSaaS化手法のご紹介
パッケージソフトウェアを簡単にSaaS化!?既存の資産を使ったSaaS化手法のご紹介Amazon Web Services Japan
 
202202 AWS Black Belt Online Seminar Amazon Connect Customer Profiles
202202 AWS Black Belt Online Seminar Amazon Connect Customer Profiles202202 AWS Black Belt Online Seminar Amazon Connect Customer Profiles
202202 AWS Black Belt Online Seminar Amazon Connect Customer ProfilesAmazon Web Services Japan
 
Amazon Game Tech Night #24 KPIダッシュボードを最速で用意するために
Amazon Game Tech Night #24 KPIダッシュボードを最速で用意するためにAmazon Game Tech Night #24 KPIダッシュボードを最速で用意するために
Amazon Game Tech Night #24 KPIダッシュボードを最速で用意するためにAmazon Web Services Japan
 
202202 AWS Black Belt Online Seminar AWS SaaS Boost で始めるSaaS開発⼊⾨
202202 AWS Black Belt Online Seminar AWS SaaS Boost で始めるSaaS開発⼊⾨202202 AWS Black Belt Online Seminar AWS SaaS Boost で始めるSaaS開発⼊⾨
202202 AWS Black Belt Online Seminar AWS SaaS Boost で始めるSaaS開発⼊⾨Amazon Web Services Japan
 
[20220126] JAWS-UG 2022初頭までに葬ったAWSアンチパターン大紹介
[20220126] JAWS-UG 2022初頭までに葬ったAWSアンチパターン大紹介[20220126] JAWS-UG 2022初頭までに葬ったAWSアンチパターン大紹介
[20220126] JAWS-UG 2022初頭までに葬ったAWSアンチパターン大紹介Amazon Web Services Japan
 
202111 AWS Black Belt Online Seminar AWSで構築するSmart Mirrorのご紹介
202111 AWS Black Belt Online Seminar AWSで構築するSmart Mirrorのご紹介202111 AWS Black Belt Online Seminar AWSで構築するSmart Mirrorのご紹介
202111 AWS Black Belt Online Seminar AWSで構築するSmart Mirrorのご紹介Amazon Web Services Japan
 
202201 AWS Black Belt Online Seminar Apache Spark Performnace Tuning for AWS ...
202201 AWS Black Belt Online Seminar Apache Spark Performnace Tuning for AWS ...202201 AWS Black Belt Online Seminar Apache Spark Performnace Tuning for AWS ...
202201 AWS Black Belt Online Seminar Apache Spark Performnace Tuning for AWS ...Amazon Web Services Japan
 
202112 AWS Black Belt Online Seminar 店内の「今」をお届けする小売業向けリアルタイム配信基盤のレシピ
202112 AWS Black Belt Online Seminar 店内の「今」をお届けする小売業向けリアルタイム配信基盤のレシピ202112 AWS Black Belt Online Seminar 店内の「今」をお届けする小売業向けリアルタイム配信基盤のレシピ
202112 AWS Black Belt Online Seminar 店内の「今」をお届けする小売業向けリアルタイム配信基盤のレシピAmazon Web Services Japan
 
20211209 Ops-JAWS Re invent2021re-cap-cloud operations
20211209 Ops-JAWS Re invent2021re-cap-cloud operations20211209 Ops-JAWS Re invent2021re-cap-cloud operations
20211209 Ops-JAWS Re invent2021re-cap-cloud operationsAmazon Web Services Japan
 
20211203 AWS Black Belt Online Seminar AWS re:Invent 2021アップデート速報
20211203 AWS Black Belt Online Seminar AWS re:Invent 2021アップデート速報20211203 AWS Black Belt Online Seminar AWS re:Invent 2021アップデート速報
20211203 AWS Black Belt Online Seminar AWS re:Invent 2021アップデート速報Amazon Web Services Japan
 
[AWS EXpert Online for JAWS-UG 18] 見せてやるよ、Step Functions の本気ってやつをな
[AWS EXpert Online for JAWS-UG 18] 見せてやるよ、Step Functions の本気ってやつをな[AWS EXpert Online for JAWS-UG 18] 見せてやるよ、Step Functions の本気ってやつをな
[AWS EXpert Online for JAWS-UG 18] 見せてやるよ、Step Functions の本気ってやつをなAmazon Web Services Japan
 
202110 AWS Black Belt Online Seminar AWS Site-to-Site VPN
202110 AWS Black Belt Online Seminar AWS Site-to-Site VPN202110 AWS Black Belt Online Seminar AWS Site-to-Site VPN
202110 AWS Black Belt Online Seminar AWS Site-to-Site VPNAmazon Web Services Japan
 

More from Amazon Web Services Japan (20)

202202 AWS Black Belt Online Seminar AWS Managed Rules for AWS WAF の活用
202202 AWS Black Belt Online Seminar AWS Managed Rules for AWS WAF の活用202202 AWS Black Belt Online Seminar AWS Managed Rules for AWS WAF の活用
202202 AWS Black Belt Online Seminar AWS Managed Rules for AWS WAF の活用
 
202203 AWS Black Belt Online Seminar Amazon Connect Tasks.pdf
202203 AWS Black Belt Online Seminar Amazon Connect Tasks.pdf202203 AWS Black Belt Online Seminar Amazon Connect Tasks.pdf
202203 AWS Black Belt Online Seminar Amazon Connect Tasks.pdf
 
SaaS テナント毎のコストを把握するための「AWS Application Cost Profiler」のご紹介
SaaS テナント毎のコストを把握するための「AWS Application Cost Profiler」のご紹介SaaS テナント毎のコストを把握するための「AWS Application Cost Profiler」のご紹介
SaaS テナント毎のコストを把握するための「AWS Application Cost Profiler」のご紹介
 
Amazon QuickSight の組み込み方法をちょっぴりDD
Amazon QuickSight の組み込み方法をちょっぴりDDAmazon QuickSight の組み込み方法をちょっぴりDD
Amazon QuickSight の組み込み方法をちょっぴりDD
 
マルチテナント化で知っておきたいデータベースのこと
マルチテナント化で知っておきたいデータベースのことマルチテナント化で知っておきたいデータベースのこと
マルチテナント化で知っておきたいデータベースのこと
 
機密データとSaaSは共存しうるのか!?セキュリティー重視のユーザー層を取り込む為のネットワーク通信のアプローチ
機密データとSaaSは共存しうるのか!?セキュリティー重視のユーザー層を取り込む為のネットワーク通信のアプローチ機密データとSaaSは共存しうるのか!?セキュリティー重視のユーザー層を取り込む為のネットワーク通信のアプローチ
機密データとSaaSは共存しうるのか!?セキュリティー重視のユーザー層を取り込む為のネットワーク通信のアプローチ
 
パッケージソフトウェアを簡単にSaaS化!?既存の資産を使ったSaaS化手法のご紹介
パッケージソフトウェアを簡単にSaaS化!?既存の資産を使ったSaaS化手法のご紹介パッケージソフトウェアを簡単にSaaS化!?既存の資産を使ったSaaS化手法のご紹介
パッケージソフトウェアを簡単にSaaS化!?既存の資産を使ったSaaS化手法のご紹介
 
202202 AWS Black Belt Online Seminar Amazon Connect Customer Profiles
202202 AWS Black Belt Online Seminar Amazon Connect Customer Profiles202202 AWS Black Belt Online Seminar Amazon Connect Customer Profiles
202202 AWS Black Belt Online Seminar Amazon Connect Customer Profiles
 
Amazon Game Tech Night #24 KPIダッシュボードを最速で用意するために
Amazon Game Tech Night #24 KPIダッシュボードを最速で用意するためにAmazon Game Tech Night #24 KPIダッシュボードを最速で用意するために
Amazon Game Tech Night #24 KPIダッシュボードを最速で用意するために
 
202202 AWS Black Belt Online Seminar AWS SaaS Boost で始めるSaaS開発⼊⾨
202202 AWS Black Belt Online Seminar AWS SaaS Boost で始めるSaaS開発⼊⾨202202 AWS Black Belt Online Seminar AWS SaaS Boost で始めるSaaS開発⼊⾨
202202 AWS Black Belt Online Seminar AWS SaaS Boost で始めるSaaS開発⼊⾨
 
[20220126] JAWS-UG 2022初頭までに葬ったAWSアンチパターン大紹介
[20220126] JAWS-UG 2022初頭までに葬ったAWSアンチパターン大紹介[20220126] JAWS-UG 2022初頭までに葬ったAWSアンチパターン大紹介
[20220126] JAWS-UG 2022初頭までに葬ったAWSアンチパターン大紹介
 
202111 AWS Black Belt Online Seminar AWSで構築するSmart Mirrorのご紹介
202111 AWS Black Belt Online Seminar AWSで構築するSmart Mirrorのご紹介202111 AWS Black Belt Online Seminar AWSで構築するSmart Mirrorのご紹介
202111 AWS Black Belt Online Seminar AWSで構築するSmart Mirrorのご紹介
 
202201 AWS Black Belt Online Seminar Apache Spark Performnace Tuning for AWS ...
202201 AWS Black Belt Online Seminar Apache Spark Performnace Tuning for AWS ...202201 AWS Black Belt Online Seminar Apache Spark Performnace Tuning for AWS ...
202201 AWS Black Belt Online Seminar Apache Spark Performnace Tuning for AWS ...
 
202112 AWS Black Belt Online Seminar 店内の「今」をお届けする小売業向けリアルタイム配信基盤のレシピ
202112 AWS Black Belt Online Seminar 店内の「今」をお届けする小売業向けリアルタイム配信基盤のレシピ202112 AWS Black Belt Online Seminar 店内の「今」をお届けする小売業向けリアルタイム配信基盤のレシピ
202112 AWS Black Belt Online Seminar 店内の「今」をお届けする小売業向けリアルタイム配信基盤のレシピ
 
20211209 Ops-JAWS Re invent2021re-cap-cloud operations
20211209 Ops-JAWS Re invent2021re-cap-cloud operations20211209 Ops-JAWS Re invent2021re-cap-cloud operations
20211209 Ops-JAWS Re invent2021re-cap-cloud operations
 
20211203 AWS Black Belt Online Seminar AWS re:Invent 2021アップデート速報
20211203 AWS Black Belt Online Seminar AWS re:Invent 2021アップデート速報20211203 AWS Black Belt Online Seminar AWS re:Invent 2021アップデート速報
20211203 AWS Black Belt Online Seminar AWS re:Invent 2021アップデート速報
 
[AWS EXpert Online for JAWS-UG 18] 見せてやるよ、Step Functions の本気ってやつをな
[AWS EXpert Online for JAWS-UG 18] 見せてやるよ、Step Functions の本気ってやつをな[AWS EXpert Online for JAWS-UG 18] 見せてやるよ、Step Functions の本気ってやつをな
[AWS EXpert Online for JAWS-UG 18] 見せてやるよ、Step Functions の本気ってやつをな
 
20211109 JAWS-UG SRE keynotes
20211109 JAWS-UG SRE keynotes20211109 JAWS-UG SRE keynotes
20211109 JAWS-UG SRE keynotes
 
20211109 bleaの使い方(基本編)
20211109 bleaの使い方(基本編)20211109 bleaの使い方(基本編)
20211109 bleaの使い方(基本編)
 
202110 AWS Black Belt Online Seminar AWS Site-to-Site VPN
202110 AWS Black Belt Online Seminar AWS Site-to-Site VPN202110 AWS Black Belt Online Seminar AWS Site-to-Site VPN
202110 AWS Black Belt Online Seminar AWS Site-to-Site VPN
 

AWS社員による怒涛のLTチャレンジ! Infrastructure as Codeに疲れたのでなんとかできないかCDKで色々やってみる

  • 1. © 2021, Amazon Web Services, Inc. or its Affiliates. All rights reserved. Amazon Web Services Japan Solutions Architect 大村幸敬 2021/03/20 Infrastructure as Code に疲れたので なんとかできないかCDKで色々やってみる JAWS DAYS 2021 AWS社員による怒涛のLTチャレンジ!
  • 2. © 2021, Amazon Web Services, Inc. or its Affiliates. All rights reserved. 大村 幸敬 (おおむら ゆきたか) Twitter: yktko@ ソリューションアーキテクト • これからクラウドを使いはじめる エンタープライズ企業をサポート • 運用系サービス & DevOps系サービス 好きなAWSのサービス: AWS CLI, AWS CDK
  • 3. © 2021, Amazon Web Services, Inc. or its Affiliates. All rights reserved. 発端:村主さんのJAWS DAYS 2019/2020の発表 「Infrastructure as Codeに疲れた」でググってください とても共感しました https://jawsdays2019.jaws-ug.jp/session/1119/ Mediumへのリンク
  • 4. © 2021, Amazon Web Services, Inc. or its Affiliates. All rights reserved. 「僕たちが本来やりたかったこと」を改めて考えてみる • やりたいことはビジネス • やらなければいけなかったのは… • 無→IAMユーザ作成→基本のセキュリティ設定 →NW作成→APサーバ作成→DB作成 →監視作成→部分的な変更→部分的な変更→..... • この一連の変更作業を速く正確に行いたい • why遅い> 変更にかかる事前確認の時間が長い+作業自体が遅い • why確認> 変更して壊れるのが怖い • why怖い> 変更の影響がわからない • why影響> 設定の詳細がわからない+設定をテストできない • whyテストできない> 同じ環境を速く正確に作れない • 加えて • 速く、にはドキュメントやコードを書く時間も含む • 自分以外の人でも早く、速くやれるようにしたい
  • 5. © 2021, Amazon Web Services, Inc. or its Affiliates. All rights reserved. 「僕たちが本来やりたかったこと」のために • Working Backwards • ツールやプラクティスに固執しない • 実現したいことから考える • そのために適切な時に適切な手段を都度選択して使う • 「実現したいこと」は状況によって変わるので注意 • たとえば : デフォルトではなくベストプラクティスな設計を、 速く、正確に展開したい。 かつその構成情報を他の人が理解できるように
  • 6. © 2021, Amazon Web Services, Inc. or its Affiliates. All rights reserved. どんな手段があるか • 特性に合わせて選択 • 状態を 記述&実行する CDK / CFn / Terraform.... • 手順を 記述&実行する CLI / API(SDK) / 手順書... • 記述…できるだけ少なくシンプルに • コードも文章も書けば書くほど理解しにくくなる • 条件によって動きが変わるコードは 構成情報の把握を難しくする(構成と1:1のほうがよい) • 自社固有の考え方は部外者への説明が大変 社外で一般的に使われている情報でできるだけ済ます
  • 7. © 2021, Amazon Web Services, Inc. or its Affiliates. All rights reserved. CDKでなんとかできないか
  • 8. © 2021, Amazon Web Services, Inc. or its Affiliates. All rights reserved. 開発を高速に • リファレンスの参照回数と試行錯誤が格段に少なくなる • 型定義(TypeScript)とエディタによるサジェスト • リソース間の依存関係把握が楽(オブジェクト指向) • CDK diffとテストによるチェック • 記述の絶対量が小さい • 最低限のパラメータ指定でリソースを作れる • つまり他人のコードを読むのも楽 • 一括タグ付けとかの便利機能 • 開発者を集めやすい • アプリ開発者もとっつきやすい
  • 9. © 2021, Amazon Web Services, Inc. or its Affiliates. All rights reserved. S3バケットのコード サジェスト: 必須プロパティ(?なし) オプションプロパティ(?あり) サジェスト: 型がわかる 文字列でなくEnumsで指定 L2 Constructは 少ないプロパティで 複数のリソースを まとめて構成可能 VPC作成のコード 複雑なものは コンストラクタでなく メソッドで追加する
  • 10. © 2021, Amazon Web Services, Inc. or its Affiliates. All rights reserved. CDKで作成したリソース全てに決まったタグをつけるコード (CFnで対応しているもののみ) たとえばこの環境では93個の リソースに"Environment" タグを一括セットできた
  • 11. © 2021, Amazon Web Services, Inc. or its Affiliates. All rights reserved. 小ネタ: AWS SSOでログインして CDKをデプロイ $ aws sso login --profile=sso-ct-dev1 Attempting to automatically open the SSO authorization page in your default browser. If the browser does not open or you wish to use a different device to authorize this request, open the following URL: https://device.sso.us-east-1.amazonaws.com/ Then enter the code: XXXX-XXXX (ここで下記の手順をブラウザで操作) Successully logged into Start URL: https://d-XXXXXXXXX.awsapps.com/start#/ $ cdk bootstrap -c environment=dev --profile ct-dev1 ⏳ Bootstrapping environment aws://xxxxxxxxx/ap-northeast-1... ✅ Environment aws://xxxxxxxx/ap-northeast-1 bootstrapped (no changes). 参考(https://chariosan.com/2021/03/14/aws-sso_aws2-wrap_cdk/) • アクセスキー/シークレットキーを手元に保存しなくてよい • AWS CLIv2とaws2-wrapを使う
  • 12. © 2021, Amazon Web Services, Inc. or its Affiliates. All rights reserved. 記述をわかりやすく • 設定値と使う場所の見通しをよくする • Constructの定義とパラメータ値を離さない、過度にコンフィグ化しない、条件分岐し ない • 本当に同じもの以外はコードを使いまわさない • 独自コードの再利用は必ずしも善ではない • 開発と本番で「全く同じでなければいけない」場合のみ同じインスタンスにする • 今は同じだが変わる可能性があるならコピペでもいいじゃない • 抽象化、条件分岐、ループは極力使わない • コードが実装をそのまま表現しているようにする • 「CDKコードをみてWell-Architectedレビューできるか?」 • 実装の詳細は生成したCFnテンプレートで確認 • CDKは「CFnテンプレートを、少ない記述でエディタサポートをフルに使って実装する ためのツール」と割り切る
  • 13. © 2021, Amazon Web Services, Inc. or its Affiliates. All rights reserved. Contextを指定して環境ごとに違う パラメータを渡す例(やりすぎ注意) -c でContextを指定 cdk.json 参照のしかた デプロイのしかた SecretsManagerにパスワード を生成しつつRDSに設定 Aurora PostgreSQLを作るコード デプロイ後も動的に変化させたいものは ParameterStore/SecretsManagerを使う
  • 14. © 2021, Amazon Web Services, Inc. or its Affiliates. All rights reserved. 手で触ってしまってもいい • CDK/CFn管理対象リソースを触ったら 1. CFn Drift Detectionで検出 2. パラメータをCDKに反映(サジェスト使えば楽) 3. cdk diffで差分を確認⇨適用 • 手で作ったリソースはどうするか • Former2でテンプレート生成 https://former2.com/ • CfnInclude or CDKコード書き起こしてリソース再作成 (既存リソースをインポートするより確実で結果的に楽) https://aws.amazon.com/jp/blogs/news/migrating-cloudformation-templates-to-the-aws-cloud-development-kit/ • CDKで書く方が大変なものもある • StepFunctionsとか • マネコンで作ってJSONそのまま持ってくるでもいいじゃない
  • 15. © 2021, Amazon Web Services, Inc. or its Affiliates. All rights reserved. CDKにこだわらない • CDK L2(ハイレベル)ライブラリで無理に頑張らない • grant() は便利だけど、スタックまたいでると依存関係が更新されないとか • 普通にポリシーを指定でもいいじゃない。ARN参照でもいいじゃない。 • 無理にオブジェクト指向っぽく汎用的に作らなくていい。再利用性よりわかりやすさ。 • CDK L1(ローレベル)ライブラリの利用を躊躇しない • CFnと同じ設定が必要だが、それでも型定義やエディタサジェストがあるのは強力 • 構成ではなく手続きが必要ならCDKの一発構築は諦めてCLI+手順書でもいい • バックアップ取得作業とかデプロイ作業とかってCDKでやるもんじゃないし • マネコンのほうが楽なら手動操作でもいい • 手順書を作ればいい。せいぜい2-3クリック。 • SecurityHubやSSM QuickSetupをOrganizations全体に適用する場合など • DNS設定とかACMの証明書。開発と本番でどうせ違うし、世の中に1個しか作れない。 • 手で作ったものをCDKのfromLookup()メソッドで引っ張れば普通に使える
  • 16. © 2021, Amazon Web Services, Inc. or its Affiliates. All rights reserved. L1(CFn)リソースをCDKで作る例 CFnと同様全てのプロパティの 指定が必要 サジェストに必須パラメータが 出てくる
  • 17. © 2021, Amazon Web Services, Inc. or its Affiliates. All rights reserved. 使えるのはCFnだけじゃない • cdktf • Define infrastructure resources using programming constructs and provision them using HashiCorp Terraform. • cdk8s • Define Kubernetes native apps and abstractions using object-oriented programming.
  • 18. © 2021, Amazon Web Services, Inc. or its Affiliates. All rights reserved. まとめ:CDKでなんとかなりそうなこと • 開発を高速に • 記述をわかりやすく • 手で触ってもフィードバックしやすい • CDKにこだわらない • CFnだけじゃない
  • 19. © 2021, Amazon Web Services, Inc. or its Affiliates. All rights reserved. まだ疲れることはあるけどね • AWSサービスの知識とCFnの理解は結局必要 • 新しくプログラミング言語覚えるの大変 • リファレンス英語だけ… • OSレイヤの管理は結局Ansible?
  • 20. © 2021, Amazon Web Services, Inc. or its Affiliates. All rights reserved. IaCに疲れても Happy coding with CDK!
  • 21. © 2021, Amazon Web Services, Inc. or its Affiliates. All rights reserved.