🙃

Terraform Cloud の No-Code Modules (BETA) を試してみる

2023/03/09に公開

本記事のレベル感

Terraform Cloud をすでにご利用の方向けの内容になります。

はじめに

No-Code Modulesは、その名の通り、(ユーザーから見たときに)コーディングせずに利用できるTerraform Moduleのことです。
一応おさらいですが、ModuleとはTerraformの一つの機能のまとまりのようなもののことで、要するにNo-Code Modulesを利用すると、コードを書かずに簡単にインフラのプロビジョニングを行えるようになります。

Terraform Cloudでは、このNo-Code ModulesをPrivateに登録できるので、セルフサービスポータル的に使うことができるようになり、より広範囲にIaCのメリットを享受することができるようになります。

Step 1. Moduleを作る。

今回はNo-Code Modulesを簡単に試したいだけなので、こちら のサンプルを使います。
Forkして、 terraform-aws-rds にrenameするだけでModuleの準備は完了です。
renameする必要があるのは、Terraform CloudのModuleに命名規則があるためで、登録するModuleは以下の命名規則を守る必要があります。

terraform-<プロバイダー名>-<モジュール名>

Forkしたらローカルに引っ張っておきます。

git clone git@github.com:taromurata/terraform-aws-rds.git

main.tf を見てみましょう。

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

data "aws_availability_zones" "available" {}
...

No-Code Modulesが通常のTerraformモジュールと異なる点は、 provider の宣言を行う必要があるところです。No-Code Modulesは、それ単体で動作する必要があるためですね。

Step 2. No-Code Module 用にチューニング(されているので確認)

No-Code Moduleは、Terraformに詳しくない方でも簡単にTerraformの仕組みに乗っかってインフラのプロビジョニングを行うことを支援するための機能です。
よって、モジュールを利用するための変数は少なければ少ないに越したことはないです。
できるだけ設定可能な項目を減らし、簡単に使えるようにします。

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
}

ここでは、RDSの利用に必要最低限な変数に絞っています。

Step 3. No-Code Moduleのパブリッシュ

準備ができたらpublishします。
まず、通常のモジュールもそうですが、利用にあたってタグをつける必要があるため、gitのタグを付与しておきます。

git tag 1.0.0

つけたらpushします。

git push --tags

これでModule側の準備は完了です。このモジュールをTerraform Cloudに登録します。
ここでは、予めVCS連携を有効化しておく必要があります。
まだVCS連携を有効にしていない場合はこのガイド を参考に設定してみてください。

モジュール追加の最後のステップで Add Module to no-code provision allowlist にチェックを入れることでNo-Code Provisioningを有効化します。

これで No-Code Module の登録が完了しました。
Provision workspace からNo-Code Provisioningを実行することができます。

Step 4. 使ってみる

登録したModuleでNo-Code Provisioningをクリックすると、以下のように、変数を設定する画面がでてきます。
ここで、モジュール側で設定した変数を入力していきます。

No-Code Moduleをプロビジョニングする際には、それぞれ一つのワークスペースが作成されます。
そのワークスペースを次のステップで設定します。

これで以上です。 Create workspaceをクリックすると、ワークスペースが作成され、自動的にプロビジョニングが始まります。
プロビジョニングした対象へは、Outputsからhostname等を辿ってアクセスすることができますので、Terraform Cloudをセルフサービスポータルとして活用することもできるようになります。

さて、Terraform Cloudに詳しい方はお気づきかもしれませんが、このままではAWSへの認証情報がないためプロビジョニングは失敗します。初回のデプロイに失敗したのち、変数をワークスペースに設定することで、正常にNo-Code Provosioningを実行することができるようになります。

参考: https://developer.hashicorp.com/terraform/tutorials/cloud/no-code-provisioning

Discussion