Upgrade to Pro — share decks privately, control downloads, hide ads and more …

IaC Generator を使って既存リソースの IaC 管理をしよう

Avatar for Hiroya Morikawa Hiroya Morikawa
May 22, 2024
870

IaC Generator を使って既存リソースの IaC 管理をしよう

Avatar for Hiroya Morikawa

Hiroya Morikawa

May 22, 2024
Tweet

Transcript

  1. © 2024, Amazon Web Services, Inc. or its affiliates. ©

    2024, Amazon Web Services, Inc. or its affiliates. IaC Generator を使って既存リソースの IaC 管理をしよう 森川 寛也 アマゾンウェブサービスジャパン ソリューションアーキテクト J A W S - U G C D K 支 部 # 1 4
  2. © 2024, Amazon Web Services, Inc. or its affiliates. ⾃⼰紹介

    • 所属/氏名:Solution Architect/ 森川 寛也(mwhiroya@) • 略歴 § 前職での担当業務 – API基盤システムの開発・維持保守 – API開発・API利用に対する導入支援 • 最近やっている事:ゲーム、ゴルフ • 好きなAWSサービス:Amazon DynamoDB、Amazon ECS、AWS CDK
  3. © 2024, Amazon Web Services, Inc. or its affiliates. IaC

    Generator を使って既存リソースの IaC 管理をしよう ゴール • IaC Generator を利⽤して既存リソースを CloudFormation や CDK で 管理できるようになること 想定聴講者 • IaC を導⼊したい開発者 • IaC 化されていないリソースをエンハンスしていく開発者 3
  4. © 2024, Amazon Web Services, Inc. or its affiliates. IaC

    Generator を使って既存リソースの IaC 管理をしよう 1. IaC Generator とは 2. IaC ⽣成のワークフロー (CloudFormation) 3. CDK での IaC Generator の活⽤⽅法 4. より効率的な IaC 化に向けて 4
  5. © 2024, Amazon Web Services, Inc. or its affiliates. ©

    2024, Amazon Web Services, Inc. or its affiliates. IaC Generator とは 5
  6. © 2024, Amazon Web Services, Inc. or its affiliates. AWS

    環境のリソース管理 6 AWSリソース CDK DOC 手順書 マネジメントコンソール or API 開発者 作業者の操作(編集)対象 実際のリソース 手作業 CloudFormation利用 CDK利用 CFnテンプレート CFnスタック CDKコード CDKが内部で生成する CFnテンプレート AWSリソース CFnスタック AWSリソース ※Cfn = CloudFormation
  7. © 2024, Amazon Web Services, Inc. or its affiliates. ⼿動作業から

    IaC でのリソース管理に切り替えるためには 7 AWSリソース CFn スタック Props of Resources Copy of Template CFn Template ・・・ Define Resources 1. リソース情報をメモ 💦 • デプロイ済みのリソースを CloudFormationにインポート • IaCで定義し、新規リソースとして構築 AWSリソース CFn スタック Props of Resources Copy of Template CFn Template ・・・ Define Resources 1.作成 💦 • ユースケース • デプロイごとに新規のバージョンのリソースを構築している場合に有効 • 考慮点 • 今までのリソースの設定値と IaC での定義が⼀致しているか確認が必要 • ユースケース • ステートフルリソースで⼿動管理しているリソースの IaC 管理など、既 存の AWS リソースに影響を与えたくない場合に有効 • 考慮点 • リソース毎に適切な物理名の指定が必要 • 現在のリソース状態と⼀致しない場合もimportが成功するため、ドリ フト検出の確認は必要 2.構築 2. 作成 3. 紐付け
  8. © 2024, Amazon Web Services, Inc. or its affiliates. IaC

    Generator の概要 • 対象アカウントでプロビジョニング されているリソースをスキャンし、 スキャン結果を元に CloudFormation Templateを⽣成 • ⽣成したテンプレートを元にスタッ クインポートすることで 既存リソー スを IaC で管理することが可能 8 AWSリソース CFn スタック Props of Resources Copy of Template CFn Template ・・・ Define Resources IaC Generator スキャン結果 2.⾃動⽣成 IaC Generator のワークフロー 1. 2. 3.の操作をそれぞれリクエスト 1.スキャン 3. 紐付け
  9. © 2024, Amazon Web Services, Inc. or its affiliates. ©

    2024, Amazon Web Services, Inc. or its affiliates. IaC ⽣成のワークフロー (CloudFormation) 9
  10. © 2024, Amazon Web Services, Inc. or its affiliates. IaC

    の⽣成から 実際に利⽤できるまでの流れ 既存リソースの スキャン 対象リソースの 選択 関連リソースの 選択 テンプレート ⽣成 スタックの インポート 10 • アカウントにプロビジョニングされている リソースとそのリソースタイプをスキャン • 1 回で最⼤ 100,000 リソースをスキャン • スキャン結果は 30 ⽇間有効
  11. © 2024, Amazon Web Services, Inc. or its affiliates. IaC

    の⽣成から 実際に利⽤できるまでの流れ 11 • CloudFormation で管理したいリソースを選択 • リソースタイプ、リソース識別⼦、タグの key-value で絞り込み可能 既存リソースの スキャン 対象リソースの 選択 関連リソースの 選択 テンプレート ⽣成 スタックの インポート
  12. © 2024, Amazon Web Services, Inc. or its affiliates. IaC

    の⽣成から 実際に利⽤できるまでの流れ 12 • 選択したリソースに関係のあるリソース が関連リソースとして追加を提案 • 基本関連リソースは全て選択することを推奨 既存リソースの スキャン 対象リソースの 選択 関連リソースの 選択 テンプレート ⽣成 スタックの インポート
  13. © 2024, Amazon Web Services, Inc. or its affiliates. IaC

    の⽣成から 実際に利⽤できるまでの流れ 13 • 選択されたリソースを元に CloudFormation の templateが⽣成 • template は json, yamlで表⽰され、 ダウンロードやコピーにてローカル保存が可能 既存リソースの スキャン 対象リソースの 選択 関連リソースの 選択 テンプレート ⽣成 スタックの インポート
  14. © 2024, Amazon Web Services, Inc. or its affiliates. IaC

    の⽣成から 実際に利⽤できるまでの流れ 14 • スタックのインポート名とインポートする 物理名のプロパティを⼊⼒ • 物理名はプリセットされており基本デフォルト で実⾏ 既存リソースの スキャン 対象リソースの 選択 関連リソースの 選択 テンプレート ⽣成 スタックの インポート
  15. © 2024, Amazon Web Services, Inc. or its affiliates. (補⾜)IaC

    の⽣成から 実際に利⽤できるまでの流れ 15 • 既存リソースのスキャン時に, 各リソース に対してリソースのタイプ,物理名,論理ID, CFn の管理有無の定義を作成 • スタックのインポート時に既存リソース との紐付けで利⽤ { "Resources": [ { "ResourceType": "AWS::EKS::Cluster", "ResourceIdentifier": { "ClusterName": "exampleResourceCluster" } }, "ManagedByStack": false list-resource-scan-resources の出⼒結果 既存リソースの スキャン 対象リソースの 選択 関連リソースの 選択 テンプレート ⽣成 スタックの インポート
  16. © 2024, Amazon Web Services, Inc. or its affiliates. (補⾜)write-only

    properties の対応 • CloudFormationのプロパティでは、書き込み専⽤のプロパティが 存在し、⼀部プロパティの読み込みができない § Example: RDSのMasterUserPassword、lambdaのCode/{S3Bucket, ZipFIle} などのプロパティ • どのプロパティが書き込み専⽤であるかは、テンプレート⽣成時の 警告事項で確認が必要 § cdk migrate の README.mdにも警告プロパティが記載される 16 AWSリソース AWS CloudFormation
  17. © 2024, Amazon Web Services, Inc. or its affiliates. (補⾜)write-only

    propertiesの対応 17 1. ⽣成されたテンプレートの 警告を確認 3. 編集したテンプレートをインポート からテンプレートを更新 2. テンプレートをダウンロードし 警告プロパティを修正
  18. © 2024, Amazon Web Services, Inc. or its affiliates. ©

    2024, Amazon Web Services, Inc. or its affiliates. CDK での IaC Generator の 活⽤⽅法 18
  19. © 2024, Amazon Web Services, Inc. or its affiliates. AWS

    CDK と AWS CloudFormation の関わり 19 AWS Cloud Topic Table 現実世界 • さまざまな手段で 変更されうる • CloudFormation で 管理されていない ものもある AWS CloudFormation Stack Copy of Template IaC サービスの世界 • ユーザーの指示を テンプレートとして 受け取って API を呼び出し • スタックに永続化 • テンプレートのコピー • 管理しているリソースの設定 • Export / Import された値 Props of Resources * Asset はここでは図示していません AWS CDK Construct Prepare Validate Synthetize Source code CloudFormation Template プログラミングの世界 • パラメータを含めすべて Git で管理される決定論的な世界 • CloudFormation テンプレートに ロジックを含めることはできない * • 未確定な値は CDK または別のプログラムで解決するか CloudFormation の機能で渡す必要がある * ここでは任意の処理を組み込めるわけではないことを指す。 Fn::If や Fn::FindInMap などで単純なロジックは記述可能。 Deploy
  20. © 2024, Amazon Web Services, Inc. or its affiliates. AWS

    CDKへの取り込み⽅法 CDK Migrate • 既存のCloudFormationからCDKコードを⽣成す る機能 • ソースとして、CloudFormation の Template, Stack, IaC Generator の Scan 結果から選択可能 (--from-stack, --from-path, --from-scan) • 内部的で CDK importを実⾏ • ユースケース • 1つまたは複数のリソースを新規のCDKアプリとし て管理したい場合 • CloudFormationの管理からCDKアプリとしての管 理に切り替えたい場合 CDK Import • CDK外で管理されている1つ以上のリソースを既 存のCDKコードに取り込んで管理する機能 • Import 後に cdk diff コマンドでのドリフト確認 により取り込みを確認 • ユースケース • 1つまたは複数のリソースを既存のCDKアプリで管 理したい場合 • 現在CDKで管理しているリソースと CloudFormation以外で管理しているリソースが混 在している場合 20
  21. © 2024, Amazon Web Services, Inc. or its affiliates. (補⾜)CfnInclude

    による取り込み CloudFormation のテンプレートファ イルをそのまま利⽤して、CDK にイン クルード インクルードしたテンプレート上のリ ソースに対して、getResource関数な どで参照 21 // === AWS Config Conformance Pack === // https://github.com/awslabs/aws-config- rules/tree/master/aws-config-conformance-packs new CfnInclude(this, 'CfnControlTowerGuardralis', { templateFile: 'cfn/AWS-Control-Tower-Detective- Guardrails.yaml', }); TypeScript BLEA のコード https://github.com/aws-samples/baseline-environment-on- aws/blob/f10bcf1167977976b8129483b2e26c46aef4006e/usecases/blea-gov- base-standalone/lib/construct/detection.ts#L39
  22. © 2024, Amazon Web Services, Inc. or its affiliates. IaC

    Generator と CDK Migrate を使った CDK 取り込み テ ン プ レ ー ト か ら の ⽣ 成 ( - - F R O M - P A T H ) • CFn テンプレートから CDK アプリを⽣成する⽅法 • 実⾏⼿順 § IaC Generator で CFn テンプレートの⽣成しローカルにダウン ロード § ダウンロードしたテンプレートのパスを選択し、cdk migrate § cdk deploy を実⾏し、既存リソースのインポートを実⾏ • 特徴 § ユーザによるIaC 対象の選定⽅法︓IaC Generatorのリソース選 択機能 § リソースのインポートタイミング︓CDK アプリの初回deploy 22 Stack IaC Generator の処理 CFnテンプレート スキャン結果 cdk migrate の処理 CDK リソース選択 インポート cdk migrate --stack-name <StackName> –-from-path <CFn template path> Terminal migrate.json
  23. © 2024, Amazon Web Services, Inc. or its affiliates. スキャン結果

    CFnテンプレート IaC Generator と CDK Migrate を使った CDK 取り込み ス タ ッ ク か ら の ⽣ 成 ( - - F R O M - S T A C K ) 23 • CFn スタックから CDK アプリを⽣成する⽅法 • 実⾏⼿順 § IaC Generator で CFn テンプレートの⽣成 § ⽣成されたテンプレートをもとにスタックをインポート § インポートしたスタック名を指定して cdk migrate • 特徴 § ユーザによるIaC 対象の選定⽅法︓IaC Generatorのリソース選 択機能 § リソースインポートタイミング︓IaC Generatorの⽣成テンプ レートのスタックインポート時 Stack IaC Generator の処理 CDK migrate.json cdk migrate の処理 リソース選択 インポート cdk migrate --stack-name <StackName> –-from-stack Terminal
  24. © 2024, Amazon Web Services, Inc. or its affiliates. CFnテンプレート

    スキャン結果 IaC Generator と CDK Migrate を使った CDK 取り込み ス キ ャ ン 結 果 か ら の ⽣ 成 ( - - F R O M - S C A N ) 24 • AWSリソースから CDK アプリを⽣成する⽅法 • 実⾏⼿順 § リソースのスキャン結果対象と対象リソースのfilterを設定し、 cdk migrate (下記 cdk migrate 側の処理) • 対象のスキャン結果からフィルター条件をもとに CFn テ ンプレートの⽣成を IaC Generator で実施 • ⽣成されたテンプレートをもとに CDK アプリと migrate.json を⽣成 § cdk deploy を実⾏し、既存リソースのインポートを実⾏ • 特徴 § ユーザによるIaC 対象の選定⽅法︓cdk migrateのfilter設定 § リソースインポートタイミング︓ CDK アプリの初回deploy Stack IaC Generator の処理 cdk migrate の処理 CDK migrate.json リソース選択 インポート cdk migrate --stack-name <StackName> –-from-scan new –-filter <filter条件> Terminal
  25. © 2024, Amazon Web Services, Inc. or its affiliates. (補⾜)migrate.json

    • CDK migrate 実⾏時に⽣成元のCFn template から Metadata(Template ID) より⽣成 • 対象リソースに関する参照情報が定義されている • migrate.json をもとに初回 deploy時に既存リソー スを import • 初回 Deploy完了後削除される 25 { "//": "This file is generated by cdk migrate. …” "Source": "arn:aws:cloudformation:ap-northeast-1:…", "Resources": [ { "ResourceType": "AWS::ApiGateway::ApiKey", "LogicalResourceId": "ApiGatewayApiKey00xxx03mbvO", "ResourceIdentifier": { "APIKeyId": "026wq2tqth” } }, { migrate.json --- ”Metadata": ”TemplateId": "arn:aws:cloudformation:ap-northeast-1:…", "Resources": … CFn template
  26. © 2024, Amazon Web Services, Inc. or its affiliates. ©

    2024, Amazon Web Services, Inc. or its affiliates. より効率的な IaC 化に向けて 26
  27. © 2024, Amazon Web Services, Inc. or its affiliates. IaC

    化の対象の選定課題 27 • 1 アカウントで複数の Project, App, 環境などを構築している場合、様々なリソー スが1アカウント上に存在している可能性がある • その環境下で IaC 化したい単位で抜け漏れなくリソースを選定するには多くの確 認時間が必要 AWS account Project Z Network Project Y Network App A Table App C Table Project X Table App A function dev App A function prod ・・・ App A Computing Poc computing App B computing Project V Topic Project W Topic
  28. © 2024, Amazon Web Services, Inc. or its affiliates. アカウント

    A リソースのタグ付け タグ Proj = X タグ Proj = Y タグ Proj = Z • タグを使⽤して、アプリ、プロジェクト、環境、その他の基準によってリソース を識別し、分類することができる • ⼀部のタグは組み込まれているもので削除できないが、⾃分でタグを作成し、使 ⽤することもできる タグ Env = DEV
  29. © 2024, Amazon Web Services, Inc. or its affiliates. 技術的なタグ

    • 名前 • アプリケーション ID • アプリケーション ロール • クラスター • 環境 • バージョン ⾃動化の ためのタグ • ⽇時 • オプトインと オプトアウト • セキュリティ ビジネスに 関するタグ • オーナー • コストセンターや ビジネスユニット • お客様 • プロジェクト セキュリティに 関するタグ • 機密性 • コンプライアンス タグ付けの⽬的
  30. © 2024, Amazon Web Services, Inc. or its affiliates. 技術的なタグ

    • 名前 • アプリケーション ID • アプリケーション ロール • クラスター • 環境 • バージョン ⾃動化の ためのタグ • ⽇時 • オプトインと オプトアウト • セキュリティ ビジネスに 関するタグ • オーナー • コストセンターや ビジネスユニット • お客様 • プロジェクト セキュリティに 関するタグ • 機密性 • コンプライアンス タグ付けの⽬的
  31. © 2024, Amazon Web Services, Inc. or its affiliates. リソースへのタグ付け

    • ⼿動作成したリソースのタグ付けは、下 記2つの⽅法が存在する § タグエディタ – マネジメントコンソールからリージョンやリソースタ イプなどの条件に合致する複数リソースに対するタグ 付けが可能 § AWS リソースグループのタグ付けAPI – API経由でタグ付けに関する操作を実⾏。複数のリ ソースのARNを指定してリクエスト可能。詳細はAPI Reference を参照 • ⼿動構築予定のリソースがある場合には、 構築時にタグ設定を実施 31 タグエディタでのタグ操作
  32. © 2024, Amazon Web Services, Inc. or its affiliates. まとめ

    • IaC Generator は既存リソースに対する IaC 化のサービス • GUI で 既存環境のスキャンから IaC とリソースの紐付けまでサポート • CDK で管理する場合は、Template 作成後 cdk migrate で CDK アプリ構築 § --from-path, --from-stack, --from-scan で対象リソースの選定とインポートのタイミングに差 異あり • 1アカウントに⼤量のリソースが存在する場合、事前にタグ付けを⾏い整理推奨 32 さあ、IaC 管理を始めてみましょう︕