[HCP Terraform]No Code Provisioningで作成したWorkspaceにリソースをImportしてみた
No Code Provisioningで作成したHCP Terraform Workspaceに、リソースのImportが可能か気になり試してみました。
結論
可能です。
No-code moduleで作成されるWorkspace及びStatefileはユーザー側で操作可能であるため、Importもできます。
工夫が必要な点もあります。
デフォルトではNo-code Provisioning時に自動的にリソース(Applyの自動承認)が作成されます。
Importする際にはすでにリソースが存在する状態のため、この動作では無駄なリソースが作成されたり、エラーが出たりする可能性があります。
自動的にリソースが作成されないように設定(Applyの自動承認->手動承認に変更※)し、No-code Provisioningを実行する必要があります。
やってみた
No Code Provisioningで作成したWorkspaceに、Amazon SQSキューをImportしてみます。
作成されるWorkspaceのProjectには、AWS認証用のIAMロールが設定されている前提とします。
リソースの作成
SQSキューを作成します。
CloudShell等で以下のコマンドを実行します。
aws sqs create-queue --queue-name no-code-import
Moduleの作成
Private Module用にGitHubリポジトリを作成します。
Private Registryに登録するにはリポジトリの命名が、terraform-[PROVIDER]-[NAME]である必要があります。
今回はterraform-aws-sqsとしました。
GitHubリポジトリ内に、以下のコードを保存します。
provider "aws" {
region = "ap-northeast-1"
}
resource "aws_sqs_queue" "this" {
name = "no-code-import"
}
コミットして、OriginにPushします。
git add .
git commit -m "add: tag"
git push origin HEAD
Private Registryでリリースタグが必要なため、作成します。
$ gh release create v0.0.1
? Title (optional) v0.0.1
? Release notes Leave blank
? Is this a prerelease? No
? Submit? Publish release
https://github.com/<Org名>/terraform-aws-sqs/releases/tag/v0.0.1
No Code ModuleとしてPrivate Registryに登録
HCP TerraformでPrivate Registryに登録します。この際、No Code Provisioningを有効にします。

No Code Provisioning実行
Registryに移動して、Provision workspaceからNo Code Provisioningを実行します。

WorkspaceやProjectを指定します。
この際に、Apply methodsはManual applyを指定してください。
Auto ApplyではWorkspace作成と同時にApplyが行われるため、リソースが作成されるためです。

Runも自動的に作成されますが、同様の理由でdiscardedしておきます。

この時点では、Statefileは空であることを確認できます。

Importの実行
ではImportを実行してみます。
以下の内容でmain.tfを作成します。
Workspaceの接続とimportを実行します。
terraform {
cloud {
organization = "<HCP Terraform Organizations名>"
# No Code Provisioningで作成したWorkspaceとの接続
workspaces {
name = "no-code-import"
project = "<Project名>" # オプション
}
}
}
provider "aws" {
region = "ap-northeast-1"
}
resource "aws_sqs_queue" "this" {
name = "no-code-import"
}
import {
to = aws_sqs_queue.this
id = "https://queue.amazonaws.com/80398EXAMPLE/MyQueue" # 要置き換え
}
Terraformコマンドを実行します。
terraform init
terraform plan
Plan結果を確認すると、1 to importになっていることを確認できます。
Plan: 1 to import, 0 to add, 0 to change, 0 to destroy.
Applyを実行します。
terraform apply
WorkspaceのStatefileからもImportされていることが確認できました。

動作確認: No Code Moduleのバージョンアップ
手動でImportしたあとも、No Code ProvisioningでWorkspaceが管理されているか確認してみます。
今回はNo Code Moduleをバージョンアップして、Workspaceに通知が来るかを確認します。
Private Moduleのコードを更新します。
今回はSQSにタグを追加します。
provider "aws" {
region = "ap-northeast-1"
}
resource "aws_sqs_queue" "this" {
name = "no-code-import"
# タグの定義を追加
tags = {
Name = "no-code-import"
}
}
originへPush及び、新しいリリースの作成を行います。
git add .
git commit -m "add: tag"
git push origin HEAD
gh release create v0.0.2
Private Moduleのバージョンを更新します。


Workspaceを見ると、新しいモジュールバージョンが利用可能になっていることを確認できました。

View updateから進んで、アップデートも問題なく実行できました。







