Amazon Web Services ブログ

新規 — AWS Service Catalog を使用した Terraform オープンソース構成のセルフサービスプロビジョニング

AWS Service Catalog では、AWS での使用が承認された Infrastructure as Code (IaC) テンプレートのカタログを作成、管理、管理できます。このような IaC テンプレートには、仮想マシンイメージ、サーバー、ソフトウェア、データベースから完全な多層アプリケーションアーキテクチャまで、あらゆるものが含まれます。個人、グループ、部門、またはコストセンターに基づいて、使用可能な IaC テンプレートとバージョン、各バージョンで設定する内容、各テンプレートにアクセスできるユーザーを制御できます。エンジニア、データベース管理者、データサイエンティストなどのエンドユーザーは、日常業務を行うために必要な承認済みの AWS リソースをすばやく見つけてセルフサービスプロビジョニングできます。

サービスカタログを使用する場合の最初のステップは、IaC テンプレートに基づいて製品を作成することです。その後、構成情報とともに、製品をポートフォリオで収集できます。

今日から、AWS CloudFormation または Hashicorp Terraform のいずれかを使用して Service Catalog 製品とそのリソースを定義し、プロセスや専門知識により適したツールを選択できます。これで、既存の Terraform 構成を Service Catalog に統合して、一元的に承認された製品ポートフォリオの一部にし、エンドユーザーが使用する AWS アカウントと共有できるようになりました。これにより、不一致を防ぎ、コンプライアンス違反のリスクを軽減できます。

Service Catalog によってリソースをデプロイすると、プロビジョニング中に最小特権アクセスを維持し、デプロイされたリソースへのタグ付けを管理できます。Service Catalog のエンドユーザーは、アクセスできる製品とバージョンのリストから必要なものを選択します。そうすれば、デプロイに使用されたテクノロジー (CloudFormation または Terraform) に関係なく、1 回のアクションで製品をプロビジョニングできます。

組織が大規模なガバナンスを行えるようにする Service Catalog のハブアンドスポークモデルを、Terraform 構成を含むように拡張できるようになりました。Service Catalog のハブアンドスポークモデルでは、管理/ユーザーアカウントの関係を使用してデプロイを一元管理できます。

  • 1 つの管理アカウント — Service Catalog 製品の作成、ポートフォリオへの整理、およびユーザーアカウントとのポートフォリオの共有に使用されます
  • 複数のユーザーアカウント (最大数千個) — ユーザーアカウントとは、Service Catalog のエンドユーザーがリソースをプロビジョニングしている任意の AWS アカウントです。

ここからは、実際にどのように機能するのかを見ていきましょう。

Terraform を使用した AWS Service Catalog 製品の作成
使用を開始するには、Terraform オープンソースエンジンが AWS Service Catalog と連携するために必要なコードとインフラストラクチャを設定する Terraform リファレンスエンジン (AWS が GitHub で提供) をインストールします。これを Service Catalog の管理アカウントで 1 回実行するだけで、セットアップはわずか数分で完了します。自動インストールスクリプトを使用しています。

./deploy-tre.sh -r us-east-1

この記事ではわかりやすくするために、AWS Graviton プロセッサと Amazon Linux 2023 オペレーティングシステムを使用して、単一の EC2 インスタンスをデプロイする製品を作成します。これが私の main.tf ファイルの内容です:

terraform {
  required_providers {
    aws = {
      source  = "hashicorp/aws"
      version = "~> 4.16"
    }
  }

  required_version = ">= 1.2.0"
}

provider "aws" {
  region  = "us-east-1"
}

resource "aws_instance" "app_server" {
  ami           = "ami-00c39f71452c08778"
  instance_type = "t4g.large"

  tags = {
    Name = "GravitonServerWithAmazonLinux2023"
  }
}

Service Catalog の管理アカウントで AWS マネジメントコンソールにサインインします。Service Catalog コンソールで、ナビゲーションペインの [Administration] (管理) セクションで [Product list] (製品リスト) を選択します。そこで、[Create product] (製品の作成) を選択します。

[Product details] (製品の詳細) で、[Product type] (製品タイプ) として [Terraform open source] (Terraform オープンソース) を選択します。製品名と説明、および所有者の名前を入力します。

コンソールのスクリーンショット。

[Version details] (バージョンの詳細) で、[Upload a template file] (テンプレートファイルをアップロード) (tar.gz アーカイブを使用) を選択します。オプションで、S3 URL を使用してテンプレートを指定することも、AWS CodeStar プロバイダーを使用して外部コードリポジトリ (GitHubGitHub Enterprise Server、または Bitbucket 上) を指定することもできます。

コンソールのスクリーンショット。

サポートの詳細とカスタムタグを入力します。タグを使用してリソースを分類したり、リソースを作成するためのアクセス許可を確認したりできることに注意してください。その後、製品の作成を完了します。

Terraform を使用した AWS Service Catalog 製品のポートフォリオへの追加
Terraform 製品の準備ができたので、ポートフォリオに追加します。ポートフォリオには、Terraform 製品と CloudFormation 製品の両方を含めることができます。ナビゲーションペインの [Administrator] (管理者) セクションから [Portfolios] (ポートフォリオ) を選択します。そこで、ポートフォリオを名前で検索して開きます。[Add product to portfolio] (ポートフォリオに製品を追加) を選択します。Terraform 製品を名前で検索して選択します。

コンソールのスクリーンショット。

Terraform 製品には起動制約が必要です。起動制約では、製品のデプロイに使用される AWS Identity and Access Management (IAM) ロールの名前を指定します。このロールが製品を共有しているすべてのアカウントで作成されていることを個別に確認する必要があります。

エンドユーザーが製品を起動、更新、または終了すると、管理アカウントの Terraform オープンソースエンジンが起動ロールを引き受けます。起動ロールには、プロビジョニングされた製品のリソースグループを説明、作成、更新したり、製品リソースにタグを付けたりするアクセス許可も含まれています。このようにして、Service Catalog はリソースグループを最新の状態に保ち、製品に関連するリソースにタグを付けます。

起動ロールを使用すると、エンドユーザーは最小特権でアクセスできるようになります。この機能を使用すると、エンドユーザーは製品の基盤となるリソースを直接プロビジョニングするアクセス許可を必要としません。これは、Amazon Elastic Compute Cloud (Amazon EC2) インスタンスの承認済み設定など、Terraform オープンソースエンジンがそれらのリソースをプロビジョニングするための起動ロールを引き受けるためです。

[Launch constraint] (起動制約) セクションで [Enter role name] (ロール名を入力) を選択して、この製品用に以前に作成したロールを使用します。

  • ロールの信頼関係によって、そのロールを引き受けることができるエンティティが定義されます。このロールの信頼関係には、Service Catalog および Terraform リファレンスエンジンを含む管理アカウントが含まれます。
  • アクセス許可では、このロールにより、製品に必要なリソースをプロビジョニング、更新、終了したり、それらのリソースでリソースグループとタグを管理したりできます。

コンソールのスクリーンショット。

ポートフォリオへの製品の追加を完了しました。これで、このポートフォリオにアクセスできるエンドユーザーが製品を利用できるようになりました。

Terraform を使用した AWS Service Catalog 製品の起動
エンドユーザーには、アクセスできる製品とバージョンのリストが表示され、1 回の操作でデプロイできます。すでに Service Catalog を使用している場合、エクスペリエンスは CloudFormation 製品と同じです。

Service Catalog のユーザーアカウントで AWS コンソールにサインインします。以前に使用したポートフォリオは、このユーザーアカウントを使用して管理アカウントで共有されています。Service Catalog コンソールで、ナビゲーションペインの [Provisioning] (プロビジョニング) グループから [Products] (製品) を選択します。製品を名前で検索し、[Launch product] (製品を起動) を選択します。

コンソールのスクリーンショット。

Service Catalog に、プロビジョニングされた製品の固有の名前を生成させ、デプロイする製品バージョンを選択させます。次に、製品を起動します。

コンソールのスクリーンショット。

数分後、製品がデプロイされ、使用可能になります。デプロイは Terraform リファレンスエンジンによって管理されています。

コンソールのスクリーンショット。

[Associated tags] (関連付けタグ) タブに、Service Catalog がポートフォリオと製品に関する情報を自動的に追加していることがわかります。

コンソールのスクリーンショット。

[Resources] (リソース) タブに、プロビジョニングされた製品によって作成されたリソースが表示されます。予想どおり、これは EC2 インスタンスです。リンクをたどって Amazon EC2 コンソールを開き、詳細情報を取得できます。

コンソールのスクリーンショット。

エンジニア、データベース管理者、データサイエンティストなどのエンドユーザーは、Terraform と CloudFormation のどちらを使用してプロビジョニングされているかを考慮しなくても、Service Catalog を引き続き使用して必要な製品を起動できます。

利用可能なリージョンと料金
Terraform オープンソース構成の AWS Service Catalog は、現在提供されているすべての AWS リージョンでご利用いただけます。Terraform を使用する場合、価格に変更はありません。Service Catalog では、サービスに対して行う API 呼び出しの料金を支払います。無料利用枠で無料で開始できます。また、Terraform リファレンスエンジンが使用および作成したリソースに対しても料金が発生します。詳細については、「Service Catalog の料金」を参照してください。

Terraform オープンソース構成の大規模なセルフサービスプロビジョニングを可能にします。

Danilo

原文はこちらです。