[アップデート]Service Catalogの製品タイプにTerraform Cloudが追加されました

2023.08.16

アップデート概要

Service Catalogの製品タイプにTerraform Cloudが追加されました。

ちなみに、Terraform コミニティ版は今年の4月にService Catalogに対応しています。

何が嬉しい?

  • Terraform Cloudの機能でガバナンスを効かせつつ、Service Catalogでセルフサービスを提供可能
  • Terraform Cloudの権限を持たない利用者もリソースのプロビジョニングが可能(Service Catalogの権限は必要)

Terraform Cloudには、ポリシー機能(OPA・Sentinel)や監査ログなどガバナンスを効かせるために便利な機能があります。

Service Catalogと組み合わせることでセルフサービスでプロビジョニング可能にしつつ、ポリシー機能でインスタンスサイズの制限等を行うことができます。

Terraform Cloudのユーザーを発行したくない場合も、嬉しいかもしれません。

利用者(※)には、AWSアカウントでService Catalogで製品を作る権限を付与するだけで良いです。Terraform Cloudのユーザーを発行する必要がありません。

※ テンプレートの登録や修正は行わずに、プロビジョニングだけするユーザー

Service CatalogとTerraform Cloud No-Code Provisioning

「Service Catalog? Terraform CloudにはNo-Code Provisioningという似たような機能あったよね」と思った方もいるかもしれません。

その通り。No-Code Provisioningでは似たようなことができます。

以下のようなパターンでは、Terraform Cloud + Service Catalogがおすすめです。

  • Terraform CloudのプランがFreeかStandard
  • 普段からService Catalog使っている

No-code provisioningは現在FreeとStandardプランでは利用できません。

上記のプランのままセルフサービスをやりたい場合は、Service Catalogが良いと思います。

HashiCorp Terraform: Enterprise Pricing, Packages & Features

すでに、Service Catalogを使って運用を行っている方にも、おすすめです。(特に、Service Catalogで製品タイプCloudFormationも使っている場合)

CloudFormation・Terraformどちらでも利用者は同じインターフェースでプロビジョニング可能なため、利用者の認知負荷が低そうです。

やってみた

Terraform Cloud用 Terraformエンジンの設定

Service CatalogでTerraform製品を利用するには、Terraformエンジンを事前に設定する必要があります。

Terraformエンジンの設定方法は、以下のリポジトリにあります。

AWS Service Catalog Engine for Terraform Cloud

$ git clone git@github.com:hashicorp/aws-service-catalog-engine-for-tfc.git
$ cd aws-service-catalog-engine-for-tfc

tfvarsを環境に合わせて設定します。

$ cp terraform.tfvars.example terraform.tfvars
$ vi terraform.tfvars
tfc_organization = "<Terraform CloudのOrganization名>"
tfc_team = "<Service catalogに使われるTerraform Cloudのチーム名>"
token_rotation_interval_in_days = 30

AWS認証情報とTerraform Cloudの認証情報をセットして、terraformコマンドを実行し、Terraformエンジンを準備します。

$ terraform init
$ terraform plan
$ terraform apply

サンプル ポートフォリオの確認

Terraformエンジンの設定時に、サンプル用のポートフォリオと製品がService Catalogに登録されます。

サンプル 製品の起動

初期状態ではアクセス権がないため、製品の起動ができません。

アクセス権を付与して、製品の起動まで行います。

管理者 -> ポートフォリオ -> TFC Example Portfolio -> アクセス -> アクセス件の付与を選択します。

任意のグループ/ロール/ユーザーを指定して、アクセス権を付与します。

プロビジョニング -> 製品 -> service-catalog-example-product-XXXXを選択します。

起動する製品の内容はこちら から確認できます。(S3バケットが作成されます。)

プロビジョニング->プロビジョニングされた製品->service-catalog-example-product-XXXX -> リソースからS3バケットの作成を確認できます。

Terraform Cloud Workspaceの確認

Terraform Cloudも確認してみます。

Workspaceが作成されていました。

また、Terraform Cloud上でRunが実行されてリソースを作成したことを確認できます。

製品の登録(TERRAFORM_OPEN_SOURCEと同様)

製品の登録方法はService Catalogの製品タイプTERRAFORM_OPEN_SOURCEと同様です。

tfファイルをtar.gz形式に圧縮して、S3にアップロードする必要があります。

おわりに

Service CatalogのTerraform Cloudサポートでした。

セルフサービスの際の選択肢に、Service Catalogが増えたのが嬉しいですね。

そのうち、Terraform CloudのNo Code Provisioningとしっかり比較してみたいです。

個人的にはテンプレート登録時にtfファイルをtar.gzにしてS3に上げる工程が少し面倒に感じるため、今後のアップデートに期待です。

以上、AWS事業本部の佐藤(@chari7311)でした。