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

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

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

作成者: Sandeep Gawande (AWS)、RAJNEESH TYAGI (AWS)、Viyoma Sachdeva (AWS)

概要

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

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

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

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

前提条件と制限

前提条件

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

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

  • AWS Service Catalog、AWS CloudFormationおよび AWS IAM にアクセスするための AWS Identity and Access Management (IAM) 権限。

製品バージョン

  • AWS CDK バージョン 2.27.0

アーキテクチャ

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

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

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

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

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

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

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

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

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

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

ツール

AWS サービス

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

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

  • AWS CloudFormation を使用すると、AWS リソースをセットアップし、迅速かつ一貫したプロビジョニングを行い、AWS アカウントとリージョン全体でライフサイクル全体にわたってリソースを管理できます。

  • AWS Identity and Access Management (IAM)」は、AWS リソースへのアクセスを安全に管理し、誰が認証され、使用する権限があるかを制御するのに役立ちます。

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

コードリポジトリ

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

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

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

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

  • config/templates — このフォルダには、サービスセンター製品のCloudFormation テンプレートが含まれています。

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

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

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

ベストプラクティス

エピック

タスク説明必要なスキル

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

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

cdk --version

がインストールされていない場合は、次のコマンドを実行してインストールします。

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 を含むコマンド全体をコピーできます。これにより、GitHub から aws-cdk-サービスカタログ-自動化 リポジトリがクローンされます。

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 CDK の AWS 認証情報は、環境変数を通じて提供されます。

AWS DevOps、DevOps エンジニア

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

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

AWS DevOps、DevOps エンジニア

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

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

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

  2. 自己管理権限の付与 (IAM ドキュメント)の手順に従って、ポートフォリオアカウントにスタックセット管理ロールを作成し、各ターゲットアカウントに実行ロールを作成します。

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

CloudFormation テンプレートの準備

この config/templates フォルダーで、ポートフォリオに含めたい製品の CloudFormation テンプレートを作成します。詳細については、Working with 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 ロールの名前。この値を変更しないでください。ロールにはこの正確な名前が必要です。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

AWS 全般

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

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

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

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

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

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

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

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

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

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

sh uninstall.sh
AWS DevOps、DevOps エンジニア

関連リソース

追加情報

追加情報

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

リポジトリのクローンを作成するには、次の コマンドを入力します。

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" } } ] }