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

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

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

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

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

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

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

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

AWS サービス: AWS Service Catalog、AWS CloudFormation

[概要]

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

マルチリージョンアーキテクチャやマルチアカウントアーキテクチャなどの複雑なネットワークインフラストラクチャを使用している場合は、Service Catalog ポートフォリオを単一の中央アカウントで作成および管理することをお勧めします。このパターンでは、AWS Cloud Development Kit (AWS CDK) を使用して、中央アカウントでの Service Catalog ポートフォリオの作成を自動化し、エンドユーザーにそのポートフォリオへのアクセスを許可し、オプションで 1 つ以上のターゲット AWS アカウントに製品をプロビジョニングする方法を説明します。この ready-to-use ソリューションは、ソースアカウントに 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 タグではありませんが、 に基づいて AWS タグを作成するためのテンプレートとして機能します TagOption。詳細については、TagOption 「 library」(Service Catalog ドキュメント) を参照してください。

前提条件と制限

前提条件

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

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

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

製品バージョン

  • 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. ターゲットアカウントで、 はStackSet 実行ロールを StackSets 引き受け、製品をプロビジョニングします。

ツール

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 – このフォルダには、config.json ファイルと、Service Catalog ポートフォリオに製品をデプロイするための 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 を含むコマンド全体をコピーできます。これにより、 から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 CDK の AWS 認証情報は、環境変数を通じて提供されます。

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

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

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

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

    • productName – 製品の名前。

    • owner – 製品の所有者。

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

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

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

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

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

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

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

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

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

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

次のコマンドを入力します。これにより、AWS CDK アプリケーションがデプロイされ、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" } } ] }