を使用して AWS Service Catalog ポートフォリオと製品のデプロイを自動化する AWS CDK - AWS 規範ガイダンス

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

を使用して AWS Service Catalog ポートフォリオと製品のデプロイを自動化する AWS CDK

Sandeep Gawande (AWS)、 RAJNEESH TYAGI (AWS)、Viyoma Sachdeva (AWS) によって作成されました

コードリポジトリ: aws-cdk-servicecatalog-automation

環境:PoC またはパイロット

テクノロジー: DevOps、インフラストラクチャ、管理とガバナンス

ワークロード: オープンソース

AWS サービス: AWS Service Catalog; AWS CDK

[概要]

AWS Service Catalog は、組織のAWS環境での使用が承認された IT サービスまたは製品のカタログを一元管理するのに役立ちます。ポートフォリオとは、製品の集合で、設定情報も含まれます。AWS Service Catalog を使用すると、組織内のユーザータイプごとにカスタマイズされたポートフォリオを作成し、適切なポートフォリオへのアクセスを許可できます。そうすれば、ユーザーはポートフォリオ内から必要な製品をすばやくデプロイできます。

マルチリージョンアーキテクチャやマルチアカウントアーキテクチャなどの複雑なネットワークインフラストラクチャを使用している場合は、Service Catalog ポートフォリオを単一の中央アカウントで作成および管理することをお勧めします。このパターンでは、AWSCloud Development Kit (AWS CDK) を使用して中央アカウントでの Service Catalog ポートフォリオの作成を自動化し、エンドユーザーにそれらへのアクセスを許可し、オプションで 1 つ以上のターゲットAWSアカウントで製品をプロビジョニングする方法について説明します。この ready-to-useソリューションは、ソースアカウントに Service Catalog ポートフォリオを作成します。また、オプションで、AWS CloudFormation スタックを使用してターゲットアカウントで製品をプロビジョニングし、 TagOptions 製品の を設定するのに役立ちます。

  • AWS CloudFormation StackSets – を使用して StackSets 、複数のAWSリージョンとアカウントで Service Catalog 製品を起動できます。このソリューションでは、このソリューションをデプロイするときに製品を自動的にプロビジョニングできます。詳細については、「 (Service Catalog ドキュメント) AWS CloudFormation StackSetsの使用」とStackSets 「概念 (CloudFormation ドキュメント)」を参照してください。

  • TagOption library – TagOption ライブラリを使用して、プロビジョニング済み製品のタグを管理できます。TagOption は、AWSService Catalog で管理されるキーと値のペアです。タグではありませんがAWS、 に基づいてAWSタグを作成するためのテンプレートとして機能します TagOption。詳細については、TagOption 「 ライブラリ (Service Catalog ドキュメント)」を参照してください。

前提条件と制限

前提条件

  • Service Catalog ポートフォリオを管理するソースAWSアカウントとして使用するアクティブなアカウント。

  • このソリューションを使用して 1 つ以上のターゲットアカウントに製品をプロビジョニングする場合、ターゲットアカウントはすでに存在し、アクティブである必要があります。

  • AWS ID とアクセス管理 (IAM) の AWS Service Catalog、、AWS CloudFormationおよび AWS へのアクセス許可IAM。

製品バージョン

  • AWS CDK バージョン 2.27.0

アーキテクチャ

ターゲットテクノロジースタック

  • 一元化されたAWSアカウントの Service Catalog ポートフォリオ

  • ターゲットアカウントにデプロイされたService Catalog 製品

ターゲット アーキテクチャ

AWS CDK Service Catalog ポートフォリオの作成とターゲットアカウントでの製品のプロビジョニング。
  1. ポートフォリオ (またはソース ) アカウントでは、ユースケースのAWSアカウント、AWSリージョン、IAMロール、ポートフォリオ、製品情報を使用して config.json ファイルを更新します。

  2. AWS CDK アプリケーションをデプロイします。

  3. AWS CDK アプリケーションはデプロイIAMロールを引き受け、config.json ファイルで定義された Service Catalog ポートフォリオと製品を作成します。

    ターゲットアカウントに製品をデプロイ StackSets するように を設定した場合、プロセスは続行されます。製品をプロビジョニング StackSets するように を設定していない場合、プロセスは完了します。

  4. AWS CDK アプリケーションはStackSet 管理者ロールを引き受け、config.json ファイルで定義したAWS CloudFormation スタックセットをデプロイします。

  5. ターゲットアカウントで、 はStackSet 実行ロール StackSets を引き受け、製品をプロビジョニングします。

ツール

AWS サービス

  • AWS Cloud Development Kit (AWS CDK) は、コードでAWSクラウドインフラストラクチャを定義およびプロビジョニングするのに役立つソフトウェア開発フレームワークです。

  • AWS CDK Toolkit は、AWSCDKアプリケーションの操作に役立つコマンドラインクラウド開発キットです。

  • AWS CloudFormation は、AWSリソースをセットアップし、迅速かつ一貫してプロビジョニングし、AWSアカウントとリージョン全体のライフサイクルを通じてリソースを管理するのに役立ちます。

  • AWS Identity and Access Management (IAM) は、誰が認証され、誰に使用を許可されているかを制御することで、AWSリソースへのアクセスを安全に管理するのに役立ちます。

  • AWS Service Catalog を使用すると、 用に承認された IT サービスのカタログを一元管理できますAWS。エンドユーザーは、組織によって設定された制約に従って、必要な承認済みの IT サービスのみをすばやくデプロイできます。

コードリポジトリ

このパターンのコードは GitHub、aws-cdk-servicecatalog-automationリポジトリの で使用できます。コードリポジトリには以下のファイルとフォルダが含まれています。

  • cdk-sevicecatalog-app – このフォルダには、このソリューションのAWSCDKアプリケーションが含まれています。

  • config – このフォルダには、config.json ファイルと、Service Catalog ポートフォリオに製品をデプロイするための CloudFormation テンプレートが含まれています。

  • config/config.json — このファイルにはすべての設定情報が含まれています。このファイルを更新して、ユースケースに合わせてこのソリューションをカスタマイズします。

  • config/templates – このフォルダには、 Service Center 製品の CloudFormation テンプレートが含まれています。

  • setup.sh — このスクリプトはソリューションをデプロイします。

  • uninstall.sh – このスクリプトは、このソリューションをデプロイするときに作成されたスタックとすべてのAWSリソースを削除します。

これらのファイルを使用するには、エピックセクションの指示に従ってください。

ベストプラクティス

エピック

タスク説明必要なスキル

Toolkit をインストールしますAWSCDK。

Toolkit AWSCDKがインストールされていることを確認します。次のコマンドを入力して、インストールされているかどうかを確認し、バージョンを確認します。 

cdk --version

AWS CDK Toolkit がインストールされていない場合は、次のコマンドを入力してインストールします。

npm install -g aws-cdk@2.27.0

AWS CDK Toolkit バージョンが 2.27.0 より前の場合は、次のコマンドを入力してバージョン 2.27.0 に更新します。

npm install -g aws-cdk@2.27.0 --force
AWS DevOps, DevOps エンジニア

リポジトリをクローン作成します。

次のコマンドを入力します。追加情報セクションのリポジトリのクローンで、リポジトリURLの を含むコマンド全体をコピーできます。これにより、 からaws-cdk-servicecatalog-automationリポジトリがクローンされます GitHub。

git clone <repository-URL>.git

これにより、ターゲットディレクトリに cd aws-cdk-servicecatalog-automation フォルダーが作成されます。次のコマンドを入力して、このフォルダーに移動します。

cd aws-cdk-servicecatalog-automation
AWS DevOps, DevOps エンジニア

AWS 認証情報を設定します。

次のコマンドを入力します。これらは、スタックをデプロイするAWSアカウントとリージョンを定義する次の変数をエクスポートします。

export CDK_DEFAULT_ACCOUNT=<12-digit AWS account number>
export CDK_DEFAULT_REGION=<AWS Region>

AWS の認証情報AWSCDKは、環境変数を通じて提供されます。

AWS DevOps, DevOps エンジニア

エンドユーザーIAMロールのアクセス許可を設定します。

IAM ロールを使用してポートフォリオとその製品へのアクセスを許可する場合、ロールには servicecatalog.amazonaws.com サービスプリンシパルが引き受けるアクセス許可が必要です。これらのアクセス許可を付与する方法については、「Service Catalog による信頼されたアクセスの有効化AWS」 ( Organizations ドキュメント) を参照してください。

AWS DevOps, DevOps エンジニア

に必要なIAMロールを設定します StackSets。

StackSets を使用してターゲットアカウントに製品を自動的にプロビジョニングする場合は、スタックセットを管理および実行するIAMロールを設定する必要があります。

  1. ソースアカウントで、AWSCloudFormationStackSetAdministrationRole が既に存在しているかどうかを確認します。ソースアカウントで、AWSCloudFormationStackSetExecutionRole が既に存在しているかどうかを確認します。これらのロールが既にある場合、次のエピックまでスキップできます。

  2. セルフマネージドアクセス許可を付与 (IAM ドキュメント) の指示に従って、ポートフォリオアカウントにスタックセット管理ロールを作成し、各ターゲットアカウントに実行ロールを作成します。

AWS DevOps, DevOps エンジニア
タスク説明必要なスキル

CloudFormation テンプレートを作成します。

config/templates フォルダで、ポートフォリオに含める製品の CloudFormation テンプレートを作成します。詳細については、AWS CloudFormation 「 テンプレートの操作 (CloudFormation ドキュメント)」を参照してください。

アプリデベロッパー、AWS DevOps、 DevOps エンジニア

設定ファイルをカスタマイズします。

config フォルダーで config.json ファイルを開き、ユースケースに適したパラメーターを定義します。特に明記されていない限り、以下のパラメータは必須です。

  • portfolios セクションで、以下のパラメータを定義して 1 つ以上のService Catalog ポートフォリオを作成します。

    • ポートフォリオの名前。

    • providerName — ポートフォリオを管理する個人、チーム、または組織の名前。

    • description — ポートフォリオに関する簡単な説明。

    • roles – (オプション) このポートフォリオにアクセスできるIAMロールの名前。このロールを持つユーザーは、このポートフォリオの製品にアクセスできます。

    • users – (オプション) このポートフォリオとその製品にアクセスできる必要があるすべてのIAMユーザーの名前。

    • groups – (オプション) このポートフォリオとその製品にアクセスできる必要があるIAMユーザーグループの名前。

    警告: IAM ユーザーには長期的な認証情報があり、セキュリティリスクがあります。このリスクを軽減するために、これらのユーザーにはタスクの実行に必要な権限のみを付与し、不要になったユーザーを削除することをお勧めします。

    重要: rolesusersgroups はすべてオプションのパラメータですが、これらのパラメータのいずれかを定義しないと、Service Catalog コンソールにポートフォリオ製品を表示できません。これらのパラメータのうち少なくとも 1 つを定義します。詳細については、Service Catalog エンドユーザーへの権限の付与 (Service Catalog ドキュメント)を参照してください。

  • (オプション) tagOption セクションで、 製品を TagOptions 次のように定義します。

    • key – TagOption キーの名前

    • value – に許可される文字列値 TagOption

    詳細については、TagOption 「 ライブラリ (Service Catalog ドキュメント)」を参照してください。

  • productsセクションで、次のパラメーターの値を指定します。

    • portfolioName — 製品を追加するポートフォリオの名前。 – 指定できるフォーマットは 1 つだけです。

    • productName – 製品の名前。

    • owner – 製品の所有者。

    • productVersionName — 文字列値内の製品バージョンの名前 (v1 など)。

    • templatePath – 製品の CloudFormation テンプレートのファイルパス。

    • deployWithStackSets – (オプション) ポートフォリオ内の製品 StackSets を自動的にプロビジョニングするために使用する 1 つ以上のアカウントとリージョンを指定します。このデプロイオプションを使用する場合、このセクションの以下のパラメータはすべて必須です。

      • accounts — ターゲットアカウント。

      • regions – ターゲットリージョンです。

      • stackSetAdministrationRoleName – StackSets 設定の管理に使用されるIAMロールの名前。この値を変更しないでください。ロールにはこの正確な名前が必要です。

      • stackSetExecutionRoleName – スタックインスタンスをデプロイするターゲットアカウントのIAMロールの名前。この値を変更しないでください。ロールにはこの正確な名前が必要です。

完成した設定ファイルの例については、追加情報 セクションのサンプル設定ファイルを参照してください。

アプリ開発者、 DevOps エンジニア、 AWS DevOps

ソリューションをデプロイします。

次のコマンドを入力します。これにより、AWSCDKアプリがデプロイされ、config.json ファイルで指定されているように Service Catalog ポートフォリオと製品がプロビジョニングされます。

sh +x setup.sh
アプリ開発者、 DevOps エンジニア、 AWS DevOps

デプロイメントを確認する

以下を実行して、デプロイが正常に完了したことを確認します。

  1. 設定ファイルで定義した 1 つ以上のポートフォリオにアクセスできる認証情報を使用して、AWSマネジメントコンソールにサインインします。

  2. で Service Catalog コンソールを開きますhttps://console.aws.amazon.com/servicecatalog/。 

  3. ナビゲーションペインで、プロビジョニング 内の 製品を選択します。ポートフォリオに指定した製品のリストが表示されていることを確認します。

  4. 製品の起動 (Service Catalog ドキュメント)の手順に従って、使用可能な製品のいずれかを起動します。使用可能な製品バージョンとタグが、設定ファイルに指定した値と一致していることを確認します。

  5. を使用して 1 つ以上のターゲットアカウントで製品を自動的にプロビジョニングすることを選択した場合は StackSets、以下を実行します。

    1. いずれかのターゲットアカウントでプロビジョニングされた製品を閲覧する権限を付与する認証情報を使用してサインインします。

    2. Service Catalog コンソールのナビゲーションペインのプロビジョニングで、プロビジョニング済み製品を選択します。

    3. 予想される製品がリストに表示されていることを確認します。

全般 AWS

(オプション) ポートフォリオと製品を更新します。

このソリューションを使用してポートフォリオや製品を更新したり、新しい製品をプロビジョニングしたりする場合:

  1. config.json ファイルに必要な変更を加えます。

  2. 必要に応じて、 config/templateフォルダに CloudFormation テンプレートを追加または変更します。

  3. ソリューションをデプロイする

たとえば、ポートフォリオを追加したり、リソースをさらにプロビジョニングできます。AWS CDK アプリケーションは変更のみを実装します。以前にデプロイしたポートフォリオや製品に変更がなければ、再デプロイしても影響はありません。

アプリ開発者、 DevOps エンジニア、一般 AWS
タスク説明必要なスキル

(オプション) このソリューションによってデプロイされたAWSリソースを削除します。

プロビジョニング済み製品を削除する場合は、プロビジョニング済み製品の削除 (Service Catalog ドキュメント)の手順に従ってください。

このソリューションで作成されたリソースをすべて削除する場合は、次のコマンドを入力します。

sh uninstall.sh
AWS DevOps、 DevOps エンジニア、アプリデベロッパー

関連リソース

追加情報

追加情報

リポジトリをクローンします

次のコマンドを入力して、 からリポジトリをクローンします GitHub。

git clone https://github.com/aws-samples/aws-cdk-servicecatalog-automation.git

サンプル設定ファイル

以下は、サンプル値を含む config.json ファイルのサンプルです。

{ "portfolios": [ { "displayName": "EC2 Product Portfolio", "providerName": "User1", "description": "Test1", "roles": [ "<Names of IAM roles that can access the products>" ], "users": [ "<Names of IAM users who can access the products>" ], "groups": [ "<Names of IAM user groups that can access the products>" ] }, { "displayName": "Autoscaling Product Portfolio", "providerName": "User2", "description": "Test2", "roles": [ "<Name of IAM role>" ] } ], "tagOption": [ { "key": "Group", "value": [ "finance", "engineering", "marketing", "research" ] }, { "key": "CostCenter", "value": [ "01", "02", "03", "04" ] }, { "key": "Environment", "value": [ "dev", "prod", "stage" ] } ], "products": [ { "portfolioName": "EC2 Product Profile", "productName": "Ec2", "owner": "owner1", "productVersionName": "v1", "templatePath": "../../config/templates/template1.json" }, { "portfolioName": "Autoscaling Product Profile", "productName": "autoscaling", "owner": "owner1", "productVersionName": "v1", "templatePath": "../../config/templates/template2.json", "deployWithStackSets": { "accounts": [ "012345678901", ], "regions": [ "us-west-2" ], "stackSetAdministrationRoleName": "AWSCloudFormationStackSetAdministrationRole", "stackSetExecutionRoleName": "AWSCloudFormationStackSetExecutionRole" } } ] }