AWS-Service-Catalog

AWS Service CatalogとTerraformで実現するセルフサービスプロビジョニング

はじめに

こんにちは、ディーネットの牛山です。

ブログ執筆ご無沙汰しておりましたが、皆さまいかがお過ごしでしょうか。

今回は、AWS Service Catalogを使用し、Terraformオープンソース構成のセルフサービスプロビジョニングを学習ガテラ紹介します。

Cloud9上での操作

AWS Service CatalogとTerraformを連携させるTerraformリファレンスエンジン(TRE)を管理アカウントへデプロイする必要がありますので実際におこなってみます。

TREがGitHubより提供されていますので、Cloud9上のEC2インスタンスにgit cloneし環境へデプロイします。

Cloud9の立ち上げは割愛し、git cloneするところより開始しますのでご了承ください。

Cloud9のプラットフォームに「Amazon Linux 2023」を選択し実施しております。(デフォルト)

デプロイワークフローとして次のようになっており、これらのリソースが環境にデプロイされます。


  1. インバウンド・メッセージSQSキュー
  2. メッセージハンドラーLambda関数
  3. 実行Step Functionsステートマシン
  4. SSM Run Commandの実行
  5. Terraform状態S3バケット
  6. Terraform実行EC2自動スケーリング グループ

# sudo su -
 →管理者権限に昇格します。

# git clone https://github.com/aws-samples/service-catalog-engine-for-terraform-os.git
 →GitHubからプロジェクトをダウンロードします。

# cd service-catalog-engine-for-terraform-os
 →TREプロジェクト直下へ移動します。

# ./bin/bash/deploy-tre.sh -r ap-northeast-1
 →Bootstrap-TREおよびSAM-TREがSAMによってCloudFomationよりデプロイされます。

※デプロイリソースが多いため、Cloud9のEC2インスタンスに「AdministratorAccess」を与えるようにします。

AWS Service Catalog製品の作成

Bootstrap-TREおよびSAM-TREがCloudFormationによって正常にデプロイされたら、Service Catalog製品を定義します。

Terraformテンプレートの準備

次の通り、T3インスタンスのAlmaLinux9.4を使用してEC2インスタンスをデプロイするmain.tfを作成します。

  • main.tfの内容

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

  required_version = ">= 1.2.0"
}

provider "aws" {
  region = "ap-northeast-1"
}

resource "aws_instance" "app_server" {
  ami           = "ami-02f2cac4a2cf9384a"
  instance_type = "t3.small"

  tags = {
    Name = "T3WithAlmaLinux9_4"
  }
}

作成しました、main.tfをgz形式へ圧縮する必要がありますので、main.tf.tar.gzという名前で圧縮します。

# tar zcvf main.tf.tar.gz main.tf
 →圧縮はtarコマンドを使用します。

Service Catalog起動ロール作成

Terraform製品には起動制約が必要となりますので、起動制約で指定する起動ロールを作成します。

Service Catalogを他アカウントに共有して利用する場合、そちらのアカウントにも同様の起動ロールが存在している必要がありますのでご注意ください。

今回、Service Catalogを単一アカウントで使用するのみなので起動ロールは1つのみとなります。

次の通り、公式から起動ロール作成ドキュメントが提供されていますので内容にしたがって設定します。

ドキュメントに記載されている「カスタム信頼ポリシー」箇所、accounti_id置き替え箇所が 4箇所 存在していますのでそれぞれ、AWSアカウントID12桁に置き替えてください。

許可ポリシーに「AmazonEC2FullAccess」を付与するようにしてください。
 →今回のTerraformテンプレートでは、EC2インスタンスの操作が発生するため必要になります。

許可ポリシー内容

許可ポリシーが次の通りであることを確認します。

  • AmazonEC2FullAccess
  • S3ResourceCreationAndArtifactAccessPolicy

信頼関係内容

{AWSアカウントID12桁} 箇所が必ず、Service Catalog管理アカウントのAWSアカウントID12桁になっていることを確認します。

Service Catalog管理アカウントについては、今回、考慮しなくてよいため、ロール作成対象のアカウントを指定する形となります。

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

製品リスト登録

AWSマネージメントコンソール → Service Catalogコンソールに移動し、管理者タブにある製品リストを開き「製品を作成」をクリックします。

次のリンクから製品リストへ移動できます。

製品を作成画面で次の通り設定します。

その他の項目は、任意内容で問題ありません。

製品の詳細

製品タイプで 「外部」 を選択します。

バージョンの詳細

バージョンソース Cloudformation テンプレートファイルをアップロードする
テンプレートファイルの使用
独自のテンプレートファイルのアップロード独自のテンプレートファイルのアップロード
main.tf.tar.gz

設定内容キャプチャ

作成完了後

製品へポートフォリオ追加

作成した製品へポートフォリオを追加します。

管理者タブメニューよりポートフォリオをクリックし、「ポートフォリオの作成」をクリックします。

次の通り設定し、「作成」をクリックします。

ポートフォリオの詳細

ポートフォリオ名 ポートフォリオの説明 - オプション 所有者
T3WithAlmaLinux9_4 T3 EC2インスタンスをAlmaLinux9.4 AMIを使用しデプロイします。 admin

作成完了後

ポートフォリオに製品を追加

作成したポートフォリオ「T3WithAlmaLinux9_4」をクリックし、製品タブから「ポートフォリオに製品を追加」をクリックします。

製品

一覧に「T3WithAlmaLinux9_4」が出てきますのでこちらを選択します。

起動の制約

「ロール名を入力」を選択し、ロール名欄に「SCLaunch-S3product」と入力し、「ポートフォリオに追加して制約を作成」をクリックします。

アクセス許可設定

AWSServiceCatalogEndUserFullAccess ポリシーを付与したIAMユーザにアクセス権を付与もしくは、既存のユーザを追加します。

今回、既存のユーザを追加する形となり、「AdministratorAccess」が付与されたユーザを追加しています。

制約設定キャプチャ画像

製品の起動

製品に追加したユーザからService Catalogサービスのプロビジョニングタブから製品をクリックします。

起動

「プロビジョニングされた製品の名前」項目に「T3WithAlmaLinux9_4」と入力し、「製品を起動」をクリックします。

正常にデプロイが完了すると次のようにEC2インスタンスが立ち上がります。

まとめ

いかがでしたでしょうか、main.tfに記載されている内容通りにデプロイがなされました。

Service Catalogを利用し、Terraformによるデプロイができ感銘を受けています。

返信を残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA