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

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

Hiroya Morikawa
May 22, 2024
730

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

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 管理を始めてみましょう︕