コードリポジトリを使用して AWS Service Catalog で Terraform 製品をプロビジョニングする - AWS 規範ガイダンス

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

コードリポジトリを使用して AWS Service Catalog で Terraform 製品をプロビジョニングする

作成者: Dr. Rahul Sharad Gaikwad (AWS) と Tamilselvan P (AWS)

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

テクノロジー: インフラストラクチャ DevOps

ワークロード:その他すべてのワークロード

AWS サービス: AWS Service CatalogAmazon EC2

[概要]

AWS Service Catalog は、HashiCorp Terraform 設定のガバナンスによるセルフサービスプロビジョニングをサポートしています。Terraform を使用する場合は、Service Catalog を単一のツールとして使用して、AWS 内で Terraform 設定を大規模に整理、管理、配布できます。Service Catalog の主な機能には、標準化および事前承認されたコードとしてのインフラストラクチャ (IaC) テンプレートのカタログ化、アクセス制御、最小特権アクセスによるクラウドリソースのプロビジョニング、バージョニング、数千の AWS アカウントへの共有、タグ付けなどがあります。エンジニア、データベース管理者、データサイエンティストなどのエンドユーザーは、アクセスできる製品とバージョンのリストを表示し、1 回のアクションでデプロイできます。

このパターンは、Terraform コードを使用して AWS リソースをデプロイするのに役立ちます。 GitHub リポジトリ内の Terraform コードには、Service Catalog からアクセスできます。このアプローチを使用して、製品を既存の Terraform ワークフローと統合します。管理者は、Terraform を使用して Service Catalog ポートフォリオを作成し、AWS Launch Wizard 製品を追加できます。

このソリューションの利点は次のとおりです。

  • Service Catalog のロールバック機能のため、デプロイ中に問題が発生した場合は、製品を以前のバージョンに戻すことができます。

  • 製品バージョンの違いを簡単に特定できます。これにより、デプロイ中の問題を解決できます。

  • Service Catalogue で、、 GitHub GitLab、AWS などのリポジトリ接続を設定できます CodeCommit。製品の変更は、リポジトリから直接行うことができます。

AWS Service Catalog の全体的な利点については、「Service Catalog とは」を参照してください。

前提条件と制限

前提条件

  • アクティブなAWS アカウント

  • GitHub、 BitBucket、または Terraform 設定ファイルを ZIP 形式で含むその他のリポジトリ。

  • AWS Serverless Application Model コマンドラインインターフェイス (AWS SAM CLI)、 をインストールしました。

  • インストールされた」 および「設定された」 AWS コマンドラインインターフェイス (AWS CLI) 。

  • Go、インストール済み

  • Python バージョン 3.9、 をインストールしました。AWS SAM CLI には、このバージョンの Python が必要です。

  • AWS Lambda 関数を記述して実行するアクセス許可と、Service Catalog 製品とポートフォリオにアクセスして管理するアクセス許可。

アーキテクチャ

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

  • AWS Service Catalog

  • AWS Lambda

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

コードリポジトリから Service Catalog で Terraform 製品をプロビジョニングするアーキテクチャ図

この図表は、次のワークフローを示しています:

  1. Terraform 設定の準備が完了すると、開発者はすべての terraform コードを含む .zip ファイルを作成します。デベロッパーは、.zip ファイルを Service Catalog に接続されているコードリポジトリにアップロードします。

  2. 管理者は、Terraform 製品を Service Catalog のポートフォリオに関連付けます。管理者は、エンドユーザーが製品をプロビジョニングできるようにする起動制約も作成します。

  3. Service Catalog では、エンドユーザーは Terraform 設定を使用して AWS リソースを起動します。デプロイする製品バージョンを選択できます。

ツール

AWS のサービスとツール

  • AWS Lambda は、サーバーのプロビジョニングや管理を行うことなくコードを実行できるコンピューティングサービスです。必要に応じてコードを実行し、自動的にスケーリングするため、課金は実際に使用したコンピューティング時間に対してのみ発生します。

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

その他のサービス

  • Go は、Google がサポートするオープンソースのプログラミング言語です。

  • Python」は汎用のコンピュータープログラミング言語です。

コードリポジトリ

Service Catalog を通じてデプロイできるサンプル Terraform 設定が必要な場合は、 GitHub Terraform を使用した Amazon Macie Organization Setup リポジトリの設定を使用できます。このリポジトリでコードサンプルを使用する必要はありません。

ベストプラクティス

  • Terraform 設定ファイル (terraform.tfvars) で変数の値を指定する代わりに、Service Catalog を使用して製品を起動するときに変数値を設定します。

  • 特定のユーザーまたは管理者にのみポートフォリオへのアクセスを許可します。

  • 最小特権の原則に従い、タスクの実行に必要な最小限のアクセス許可を付与します。詳細については、IAM ドキュメントの「最小特権の付与」と「セキュリティのベストプラクティス」を参照してください。

エピック

タスク説明必要なスキル

(オプション) Docker をインストールします。

開発環境で AWS Lambda 関数を実行する場合は、Docker をインストールします。手順については、Docker ドキュメントの「Docker Engine のインストール」を参照してください。

DevOps エンジニア

Terraform 用の AWS Service Catalog エンジンをインストールします。

  1. 次のコマンドを入力して、AWS Service Catalog Engine for Terraform リポジトリのクローンを作成します。

    git clone https://github.com/aws-samples/service-catalog-engine-for-terraform-os.git
  2. クローンされたリポジトリのルートディレクトリに移動します。

  3. 次のコマンドを入力します。これにより、エンジンがインストールされます。

    run ./bin/bash/deploy-tre.sh -r

    デフォルトプロファイルに設定された AWS リージョンは、自動インストール中は使用されません。代わりに、このコマンドを実行するときにリージョンを指定します。

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

GitHub リポジトリへの接続を作成します。

  1. AWS マネジメントコンソールにサインインし、デベロッパーツールコンソールを開きます。デベロッパーツールコンソールにアクセスするには、AWS 、AWS CodePipeline、 CodeCommitまたは AWS などのサービスを選択します CodeDeploy。

  2. 左側のナビゲーションペインで、設定 を選択し、接続 を選択します。

  3. [Create connection] (接続の作成) を選択します。

  4. Terraform ソースコードを維持するリポジトリを選択します。例えば、Bitbucket 、、GitHubまたは GitHub Enterprise Server を選択できます。

  5. 接続の名前を入力し、接続 を選択します。

  6. プロンプトが表示されたら、リポジトリを認証します。

    認証が完了すると、接続が作成され、ステータスがアクティブな に変わります。

AWS 管理者
タスク説明必要なスキル

Service Catalog 製品を作成します。

  1. AWS Service Catalog コンソール を開きます。

  2. 管理」セクションに移動し、[製品リスト] を選択します。

  3. [製品の作成] を選択します。

  4. 「製品の詳細」セクションの「製品の作成」ページで、「外部製品タイプ」を選択します。 Service Catalog は、この製品タイプを使用して Terraform Community Edition 製品をサポートします。

  5. Service Catalog 製品の名前と所有者を入力します。

  6. CodeStar プロバイダー を使用してコードリポジトリを指定するを選択します

  7. リポジトリの次の情報を入力します。

    • を使用してプロバイダーに接続する AWS CodeConnections – 前に作成した接続を選択します。

    • リポジトリ – リポジトリを選択します。

    • ブランチ – ブランチを選択します。

    • テンプレートファイルパス — コードテンプレートファイルが保存されているパスを選択します。ファイル名は で終わる必要がありますtar.gz

  8. バージョン名と説明 で、製品バージョンに関する情報を入力します。

  9. [製品の作成] を選択します。

AWS 管理者

ポートフォリオを作成します。

  1. AWS Service Catalog コンソール を開きます。

  2. 管理セクションに移動し、ポートフォリオ を選択します。

  3. ポートフォリオの作成を選択する

  4. 次の値を入力します。

    • ポートフォリオ名 - Sample terraform

    • ポートフォリオの説明 — Sample portfolio for Terraform configurations

    • 所有者 – E メールなどの連絡先情報

  5. [作成] を選択します。

AWS 管理者

Terraform 製品をポートフォリオに追加します。

  1. AWS Service Catalog コンソール を開きます。

  2. 管理」セクションに移動し、[製品リスト] を選択します。

  3. 前に作成した Terraform 製品を選択します。

  4. アクション を選択し、ポートフォリオ に製品を追加 を選択します。

  5. Sample terraform ポートフォリオを選択します。

  6. [製品をポートフォリオに追加] を選択します。

AWS 管理者

アクセスポリシーを作成します。

  1. AWS Identity and Access Management (IAM) コンソール を開きます。

  2. ナビゲーションペインで、ポリシー を選択します。

  3. コンテンツペインで、[ポリシーの作成] を選択します。

  4. JSON オプションを選択します。

  5. このパターンの「追加情報」セクションの「アクセスポリシー」にサンプル JSON ポリシーを入力します。 追加情報

  6. [次へ] をクリックします。

  7. 確認と作成 ページのポリシー名 ボックスに と入力しますTerraformResourceCreationAndArtifactAccessPolicy

  8. [ポリシーの作成] を選択します。

AWS 管理者

カスタム信頼ポリシーを作成します。

  1. AWS Identity and Access Management (IAM) コンソール を開きます。

  2. ナビゲーションペインで Roles (ロール) を選択します。

  3. [ロールの作成] を選択します。

  4. 信頼されたエンティティタイプ で、カスタム信頼ポリシー を選択します。

  5. JSON ポリシーエディタで、このパターンの追加情報セクションの信頼ポリシーにサンプル JSON ポリシーを入力します。 追加情報

  6. [次へ] をクリックします。

  7. アクセス許可ポリシー で、以前に作成した TerraformResourceCreationAndArtifactAccessPolicy を選択します。

  8. [次へ] をクリックします。

  9. 「ロールの詳細」の「ロール名」ボックスに「」と入力しますSCLaunch-product。 

    重要:ロール名は で始まる必要がありますSCLaunch

  10. [ロールの作成] を選択します。

AWS 管理者

Service Catalog 製品に起動制約を追加します。

  1. 管理者権限を持つユーザーとして AWS マネジメントコンソールにサインインします。

  2. AWS Service Catalog コンソール を開きます。

  3. ナビゲーションペインで、ポートフォリオ を選択します。

  4. 前に作成したポートフォリオを選択します。

  5. [ポートフォリオの詳細] ページで、[制約] タブを選択し、[制約の作成] を選択します。

  6. 製品 で、前に作成した Terraform 製品を選択します。

  7. 起動制約 で、メソッド でロール名 を入力 を選択します。

  8. 「ロール名」ボックスに「」と入力しますSCLaunch-product

  9. [作成] を選択します。

AWS 管理者

製品へのアクセス権を付与します。

  1. AWS Service Catalog コンソール を開きます。

  2. ナビゲーションペインで、ポートフォリオ を選択します。

  3. 前に作成したポートフォリオを選択します。

  4. アクセスタブを選択し、アクセスを許可を選択します

  5. ロール タブを選択し、この製品をデプロイするためのアクセス権を持つロールを選択します。

  6. [Grant access (アクセス権の付与)] を選択します。

AWS 管理者

製品を起動します。

  1. Service Catalog 製品をデプロイする権限を持つユーザーとして AWS マネジメントコンソールにサインインします。

  2. AWS Service Catalog コンソール を開きます。

  3. ナビゲーションペインで、[Products] (製品) を選択します。

  4. 前に作成した製品を選択し、製品を起動 を選択します。

  5. 製品名を入力し、必要なパラメータを定義します。

  6. [製品の起動] を選択します。

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

デプロイを検証します。

Service Catalog プロビジョニングワークフローには 2 つの AWS Step Functions ステートマシンがあります。

  • ManageProvisionedProductStateMachine–Service Catalog は、新しい Terraform 製品をプロビジョニングするとき、および既存の Terraform プロビジョニング済み製品を更新するときに、このステートマシンを呼び出します。

  • TerminateProvisionedProductStateMachine–Service Catalog は、既存の Terraform プロビジョニング済み製品を終了するときに、このステートマシンを呼び出します。

ManageProvisionedProductStateMachine ステートマシンのログをチェックして、製品がプロビジョニングされたことを確認します。

  1. AWS マネジメントコンソールにサインインし、AWS Step Functions コンソール を開きます。

  2. 左側のナビゲーションペインで、ステートマシン を選択します。

  3. 選択 ManageProvisionedProductStateMachine

  4. 実行リストで、プロビジョニングされた製品 ID を入力して実行を見つけます。

    : 状態ファイルのバックエンドバケット名は で始まりますsc-terraform-engine-state-

  5. 必要なリソースがすべてアカウントで作成されていることを確認します。

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

プロビジョニング済み製品を削除します。

  1. Service Catalog 製品をデプロイする権限を持つユーザーとして AWS マネジメントコンソールにサインインします。

  2. AWS Service Catalog コンソール を開きます。

  3. 左側のナビゲーションで、プロビジョニング済み製品 を選択します。

  4. 作成した製品を選択します。

  5. Actions リストで、Terminate を選択します。

  6. 確認テキストボックスに「」と入力しterminate「プロビジョニング済み製品の終了」を選択します。

  7. これらのステップを繰り返して、プロビジョニングされたすべての製品を削除します。

DevOps エンジニア

Terraform 用の AWS Service Catalog エンジンを削除します。

  1. 管理者権限を持つユーザーとして AWS マネジメントコンソールにサインインします。

  2. Amazon S3 コンソールを開きます。

  3. ナビゲーションペインで、バケットを選択します。

  4. sc-terraform-engine-logging-XXXX バケットを選択します。

  5. 空の を選択します。

  6. 次のバケットに対してステップ 4~5 を繰り返します。

    • sc-terraform-engine-state-XXXX

    • terraform-engine-bootstrap-XXXX

  7. AWS CloudFormation コンソール を開き、正しい AWS リージョンにいることを確認します。

  8. 左側のナビゲーションで、スタック を選択します。

  9. を選択しSAM-TRE削除 を選択します。スタックが削除されるまで待ちます。

  10. を選択しBootstrap-TRE削除 を選択します。スタックが削除されるまで待ちます。

AWS 管理者

関連リソース

AWS ドキュメント

Terraformのドキュメント

追加情報

アクセスポリシー

{ "Version": "2012-10-17", "Statement": [ { "Sid": "VisualEditor0", "Effect": "Allow", "Action": "s3:GetObject", "Resource": "*", "Condition": { "StringEquals": { "s3:ExistingObjectTag/servicecatalog:provisioning": "true" } } }, { "Action": [ "s3:CreateBucket*", "s3:DeleteBucket*", "s3:Get*", "s3:List*", "s3:PutBucketTagging" ], "Resource": "arn:aws:s3:::*", "Effect": "Allow" }, { "Action": [ "resource-groups:CreateGroup", "resource-groups:ListGroupResources", "resource-groups:DeleteGroup", "resource-groups:Tag" ], "Resource": "*", "Effect": "Allow" }, { "Action": [ "tag:GetResources", "tag:GetTagKeys", "tag:GetTagValues", "tag:TagResources", "tag:UntagResources" ], "Resource": "*", "Effect": "Allow" } ] }

信頼ポリシー

{ "Version": "2012-10-17", "Statement": [ { "Sid": "GivePermissionsToServiceCatalog", "Effect": "Allow", "Principal": { "Service": "servicecatalog.amazonaws.com" }, "Action": "sts:AssumeRole" }, { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::account_id:root" }, "Action": "sts:AssumeRole", "Condition": { "StringLike": { "aws:PrincipalArn": [ "arn:aws:iam::accounti_id:role/TerraformEngine/TerraformExecutionRole*", "arn:aws:iam::accounti_id:role/TerraformEngine/ServiceCatalogExternalParameterParserRole*", "arn:aws:iam::accounti_id:role/TerraformEngine/ServiceCatalogTerraformOSParameterParserRole*" ] } } } ] }