Slide 1

Slide 1 text

© 2024, Amazon Web Services, Inc. or its affiliates. © 2024, Amazon Web Services, Inc. or its affiliates. ⼤村 幸敬 ([email protected]) アマゾン ウェブ サービス ジャパン 合同会社 ソリューションアーキテクト CloudFormation IaC generatorを使った 既存AWS環境の管理⽅法 (CloudFormation & CDK) 2024/02/08

Slide 2

Slide 2 text

© 2024, Amazon Web Services, Inc. or its affiliates. AWS環境の管理パターン 2

Slide 3

Slide 3 text

© 2024, Amazon Web Services, Inc. or its affiliates. AWS環境の管理パターン 3 AWSリソース CDK DOC ⼿順書 マネジメントコンソール 作業者 作業者の操作(編集)対象 実際のリソース ⼿作業 CloudFormation利⽤ CDK利⽤ CFnテンプレート CFnスタック CDKコード CDKが内部で⽣成する CFnテンプレート *CFn = CloudForamtion

Slide 4

Slide 4 text

© 2024, Amazon Web Services, Inc. or its affiliates. 既存リソースをCloudFormationで管理する (CloudFormation IaC generator の使い⽅) 4

Slide 5

Slide 5 text

© 2024, Amazon Web Services, Inc. or its affiliates. 既存リソースをCFnで管理する (1/5) 5 AWSリソース DOC ⼿順書 マネジメントコンソール 作業者 作業者の操作(編集)対象 実際のリソース ⼿作業担当者 CloudFormation利⽤者

Slide 6

Slide 6 text

© 2024, Amazon Web Services, Inc. or its affiliates. 既存リソースをCFnで管理する(2/5) 6 AWSリソース 作業者 実際のリソース ⼿作業担当者 CloudFormation利⽤者 CFn IaC generator 実環境全体をスキャン CFn IaC generator スキャン結果

Slide 7

Slide 7 text

© 2024, Amazon Web Services, Inc. or its affiliates. 既存リソースをCFnで管理する(3/5) 7 AWSリソース 作業者 実際のリソース ⼿作業担当者 CloudFormation利⽤者 CFn IaC generator スキャン結果から 対象のリソースを指定して CFnテンプレートの⽣成を指⽰ CFn IaC generator スキャン結果 CFnテンプレート

Slide 8

Slide 8 text

© 2024, Amazon Web Services, Inc. or its affiliates. 既存リソースをCFnで管理する(4/5) 8 AWSリソース 作業者 実際のリソース ⼿作業担当者 CloudFormation利⽤者 CFn IaC generator 「スタックにインポート」 ⽣成したCFnテンプレートと実際のAWSリソースを紐付け CFnスタックを⽣成 CFnテンプレート CFnスタック

Slide 9

Slide 9 text

© 2024, Amazon Web Services, Inc. or its affiliates. 既存リソースをCFnで管理する(5/5) 9 AWSリソース 作業者 実際のリソース ⼿作業担当者 CloudFormation利⽤者 CFnスタック CFnテンプレート 以後CFnテンプレートによるAWSリソース管理が可能になる

Slide 10

Slide 10 text

© 2024, Amazon Web Services, Inc. or its affiliates. 既存リソースをCDKで管理する 10

Slide 11

Slide 11 text

© 2024, Amazon Web Services, Inc. or its affiliates. 参考︓既存環境からCDKコードを⽣成する3つの⽅法 11 AWSリソース CDK CDK利⽤者 CFnスタック CDKコード cdk migrate –-from-stackで、 スタックから CDKコードを⽣成 CFnテンプレート CFn IaC generator スキャン結果 cdk migrate –-from-scanで、 CFn IaC generatorのスキャン結果から CDKコードを⽣成 • CFn IaC generatorスキャン結果 • CFn テンプレート • CFn スタック cdk migrate –-from-pathで、 CFnテンプレートから CDKコードを⽣成

Slide 12

Slide 12 text

© 2024, Amazon Web Services, Inc. or its affiliates. 既存リソースをCDKで管理する (1/3) 12 AWSリソース CDK 実際のリソース CDK利⽤者 CFnスタック CDKコード cdk migrate –-from-stackで、 スタックから CDKコードを⽣成 注: このほかに CFn IaC generatorの結果から⽣成する⽅法 CFn テンプレートから⽣成する⽅法 があります ※「既存リソースをCFnで管理する」を 実施した後の⼿順です

Slide 13

Slide 13 text

© 2024, Amazon Web Services, Inc. or its affiliates. 既存リソースをCDKで管理する (2/3) 13 AWSリソース CDK 作業者 実際のリソース CDK利⽤者 CFnスタック CDKコード cdk diff を使って差分の有無を確認 (対象スタック名を既存のスタック名と⼀致させること) 必要に応じてコードを微調整する ・多くはCDK管理⽤のメタデータリソースの追加のみ (そのままで問題ない) ・migrateしたCDKコードはRemovalPolicyの設定がないが インポートしたCFnスタック上のリソースは RemovalPolicy=Retainとなっているため 必要に合わせてCDKも修正(設定⽅法は後述) Drift detection CDKが内部で⽣成する CFnテンプレート diff cdk diff

Slide 14

Slide 14 text

© 2024, Amazon Web Services, Inc. or its affiliates. 既存リソースをCDKで管理する (3/3) 14 AWSリソース CDK 作業者 実際のリソース CDK利⽤者 CFnスタック CDKコード cdk deployしてCDK側の設定を反映 インポートしたリソースから作ったコードであれば 通常実際のリソースに影響はない 以後CDKによる管理が可能に CDKが内部で⽣成する CFnテンプレート cdk deploy

Slide 15

Slide 15 text

© 2024, Amazon Web Services, Inc. or its affiliates. 参考︓ リソースに⼀括でRemovalPolicy=Retainを設定するコード 15

Slide 16

Slide 16 text

© 2024, Amazon Web Services, Inc. or its affiliates. 既存リソースをCFn/CDKで管理するまでの 作業イメージ 16

Slide 17

Slide 17 text

© 2024, Amazon Web Services, Inc. or its affiliates. 01. CFn IaC generator 画⾯(スキャン実⾏済み) 17

Slide 18

Slide 18 text

© 2024, Amazon Web Services, Inc. or its affiliates. 02. テンプレートの作成 (1) 18

Slide 19

Slide 19 text

© 2024, Amazon Web Services, Inc. or its affiliates. 03. テンプレートの作成 (2) リソースの指定 19

Slide 20

Slide 20 text

© 2024, Amazon Web Services, Inc. or its affiliates. 04. テンプレートの作成 (3) 関連リソースの検出と追加 20

Slide 21

Slide 21 text

© 2024, Amazon Web Services, Inc. or its affiliates. 05. テンプレートの作成 (4) 21

Slide 22

Slide 22 text

© 2024, Amazon Web Services, Inc. or its affiliates. 06. テンプレートの作成 完了 22

Slide 23

Slide 23 text

© 2024, Amazon Web Services, Inc. or its affiliates. 07. リソースをインポート (1) 23

Slide 24

Slide 24 text

© 2024, Amazon Web Services, Inc. or its affiliates. 08. リソースをインポート (2) 24

Slide 25

Slide 25 text

© 2024, Amazon Web Services, Inc. or its affiliates. 09. リソースをインポート (3) 25

Slide 26

Slide 26 text

© 2024, Amazon Web Services, Inc. or its affiliates. 10. スタックインポートの進⾏ 26

Slide 27

Slide 27 text

© 2024, Amazon Web Services, Inc. or its affiliates. 11. スタックインポートの完了 27

Slide 28

Slide 28 text

© 2024, Amazon Web Services, Inc. or its affiliates. 12. CDKコードの⽣成(スタックから⽣成した場合の例) 28 ⽣成されたCDKコード migrate.json コード上の定義と、実体リソースとの紐付けを定義している cdk migrate が⽣成する

Slide 29

Slide 29 text

© 2024, Amazon Web Services, Inc. or its affiliates. 13. 実環境との差分確認 29 CDKに関する Metadata等の差分 (デプロイ上の問題はない) インポートしたリソースはRemovalPolicyがRetainだが cdk migrateで⽣成したコードでは特に指定がないため差分が出る 定義上タグの順番が変わったことによる差分 (デプロイ上の問題はない)

Slide 30

Slide 30 text

© 2024, Amazon Web Services, Inc. or its affiliates. 14. RemovalPolicyを実体に合わせてRetainへ変更 30 再度diffをとって確認→問題なし

Slide 31

Slide 31 text

© 2024, Amazon Web Services, Inc. or its affiliates. 15. CDKをデプロイ(メタデータのみ上書き) 31 変更されるのはメタデータのみ CFn上もメタデータのみ更新

Slide 32

Slide 32 text

© 2024, Amazon Web Services, Inc. or its affiliates. 参考: スタックだけを削除する 32 実体を削除したくない場合は、削除前に対象リソースが Retain になっていることを必ず確認してください︕ CDKが設定したメタデータ等は削除されるが、リソース削除はスキップされている スタックを分割したかったり、 インポート対象を変えたい場合、 実体は残してCFnスタックだけを削除したくなる インポートしたリソースはデフォルトでRetainなので スタックを削除しても 実体は DELETE_SKIPPEDとなる(右図)

Slide 33

Slide 33 text

© 2024, Amazon Web Services, Inc. or its affiliates. © 2024, Amazon Web Services, Inc. or its affiliates. Thank you!