翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
コードリポジトリを使用して 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 コードを使用して 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)、 をインストールしました。
Go、インストール済み
。 Python バージョン 3.9、 をインストール
しました。AWS SAM CLI には、このバージョンの Python が必要です。 AWS Lambda 関数を記述して実行するアクセス許可と、Service Catalog 製品とポートフォリオにアクセスして管理するアクセス許可。
アーキテクチャ
ターゲットテクノロジースタック
AWS Service Catalog
AWS Lambda
ターゲット アーキテクチャ
![コードリポジトリから Service Catalog で Terraform 製品をプロビジョニングするアーキテクチャ図](images/pattern-img/7d0d76e8-9485-4b3f-915f-481b6a7cdcd9/images/e83fa44a-4ca6-4438-a0d1-99f09a3541bb.png)
この図表は、次のワークフローを示しています:
Terraform 設定の準備が完了すると、開発者はすべての terraform コードを含む .zip ファイルを作成します。デベロッパーは、.zip ファイルを Service Catalog に接続されているコードリポジトリにアップロードします。
管理者は、Terraform 製品を Service Catalog のポートフォリオに関連付けます。管理者は、エンドユーザーが製品をプロビジョニングできるようにする起動制約も作成します。
Service Catalog では、エンドユーザーは Terraform 設定を使用して AWS リソースを起動します。デプロイする製品バージョンを選択できます。
ツール
AWS のサービスとツール
AWS Lambda は、サーバーのプロビジョニングや管理を行うことなくコードを実行できるコンピューティングサービスです。必要に応じてコードを実行し、自動的にスケーリングするため、課金は実際に使用したコンピューティング時間に対してのみ発生します。
AWS Service Catalog では、では、AWS で承認された IT サービスのカタログを一元管理できます。エンドユーザーは、組織によって設定された制約に従って、必要な承認済みの IT サービスのみをすばやくデプロイできます。
その他のサービス
コードリポジトリ
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 エンジンをインストールします。 |
| DevOps エンジニア、AWS 管理者 |
タスク | 説明 | 必要なスキル |
---|---|---|
GitHub リポジトリへの接続を作成します。 |
| AWS 管理者 |
タスク | 説明 | 必要なスキル |
---|---|---|
Service Catalog 製品を作成します。 |
| AWS 管理者 |
ポートフォリオを作成します。 |
| AWS 管理者 |
Terraform 製品をポートフォリオに追加します。 |
| AWS 管理者 |
アクセスポリシーを作成します。 |
| AWS 管理者 |
カスタム信頼ポリシーを作成します。 |
| AWS 管理者 |
Service Catalog 製品に起動制約を追加します。 |
| AWS 管理者 |
製品へのアクセス権を付与します。 |
| AWS 管理者 |
製品を起動します。 |
| DevOps エンジニア |
タスク | 説明 | 必要なスキル |
---|---|---|
デプロイを検証します。 | Service Catalog プロビジョニングワークフローには 2 つの AWS Step Functions ステートマシンがあります。
| DevOps エンジニア |
タスク | 説明 | 必要なスキル |
---|---|---|
プロビジョニング済み製品を削除します。 |
| DevOps エンジニア |
Terraform 用の AWS Service Catalog エンジンを削除します。 |
| 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*" ] } } } ] }