Terraform Cloud No-Code Provisioningやってみた

2022.12.08

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

「Terraform CloudでNo-Codeでリソースをプロビジョニング!?」

2022年10月にTerraform CloudにNo-Code Provisioningという機能が発表されました。

Terraform Gains Visibility, Self-Service, and Compliance Upgrades

今回はこの機能を試してみます。

Terraform CloudのNo-code provisioningとは

一言でいうと、Terraform CloudのGUI上からCloudformationのパラメーターのように値を渡してリソースを作成できる機能です。

Terraformのコードを書けない人でも、リソースをプロビジョニングできるようになるので、セルフサービス化が捗りますね。

現在このプランはベータ版で利用するには、Terraform Cloudビジネスプランが必要です。(2022年12月時点)

2023/4/26 GAされました。機能もアップデートされているため、合わせて以下の記事をご確認ください。

2023/5/17 Businessプラン -> Plusプランに変更になりました。この機能は、現在Plusプランで使用できます。

やってみた

今回は以下のチュートリアルをやってみます。 チュートリアルの内容としては、Terraform CloudのNo-Code Provisioning機能を使ってAmazon RDSを作成するといった内容です。

Create and Use No-Code Modules | Terraform | HashiCorp Developer

サンプルコードを眺めてみる

サンプルコードは、RDSとVPCを作成するModuleとなっています。

hashicorp/learn-terraform-no-code-provisioning

No-Code Provisioning用のModuleもディレクトリ構成は標準的なModuleと同様です。

% ls -1
README.md
main.tf
outputs.tf
variables.tf

variables.tfで宣言している変数の値をTerraform Cloud上から渡すことができます。

variables.tf

variable "db_name" {
  description = "Unique name to assign to RDS instance"
}

variable "db_username" {
  description = "RDS root username"
}

variable "db_password" {
  description = "RDS root user password"
  sensitive   = true
}

特徴的な部分は、Module内でAWS Providerの宣言をおこなっていることです。

main.tf

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

data "aws_availability_zones" "available" {}
# 省略

通常のModuleは、他のTerraformワークスペースから呼び出して使用するためにAWS Providerでリージョンを指定する記述は呼び出す側に書きます。

しかし、No-Code Provisioning Moduleの場合、直接Terraform Cloud上からリソースを作成するためAWS Providerでリージョンを指定する必要があります。 (このサンプルコード上の上記箇所ががない場合、リソースをどこのリージョンにデプロイすれば良いかTerraform側でわからないためエラーになります。)

No-Code Moduleの登録

Terraform Cloudに通常のModule登録するときと、ほとんど変わらない操作で可能です。

Githubのリポジトリを選択して、モジュールを作成します。 この際に「Add Module to no-code provision allowlist.」を有効にするだけです。

No-Code Moduleを使ってリソースをプロビジョニング

作成したModuleの、Provison workspaceを選択します。

次の画面に進むとModule内のvariables.tfで定義している変数をTerraform Cloud上から入力することができます。

No-Code Moduleを使って新規に作成されるワークスペースの情報を入力します。 デフォルトでは、globalに設定されているAWS認証情報を設定してプロビジョニングされます。

globalに設定しているAWS認証情報は存在しない環境でこの手順を実施しているため、初回のデプロイは失敗しています。

通常通りワークスペースに対して、AWS認証情報を設定します。

Create a Credentials Variable Set | Terraform | HashiCorp Developer

AWS認証情報設定後はApplyが成功しました。リソースが作成されることも確認できました。

おわりに

Terraform CloudのNo-Code Provisioningを試してみました。

セルフサービスが捗る便利な機能だと思うので、GAが楽しみですね。

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

参考