HCP Terraform No Code ProvisioningでWorkspaceが作成された際にSlack通知をしてみた

HCP Terraform No Code ProvisioningでWorkspaceが作成された際にSlack通知をしてみた

Clock Icon2025.05.27

HCP TerraformのNo Code ProvisioningでWorkspaceが作成された際に通知ができるのか、気になったため調査してみました。

結論、現時点(2025/5時点)ではHCP Terraformの機能では実現できませんでした。ユーザーによる作り込みが必要です。

No Code ModuleにSlack通知のlocal-execを仕込むことで実現してみたので、ブログにします。

HCP Terraformの通知機能

HCP Terraformには以下の通知機能があります。

名前の通り、それぞれWorkspaceやTeam単位で通知できる機能です。

Workspace Notificationでは、Runのイベントを通知可能です。

この機能を使えば要件は達成できます。

しかし、この機能は存在するWorkspaceのみに設定可能です。

No Code Provisioningでは、実行時に自動的にWorkspaceが作成されます。

現時点では、Workspace作成前に作成されるWorkspaceに対してWorkspace Notificationの設定はできません。(Workspace作成後は可能です)

そのため、この機能を使う場合は、以下の流れになり少し煩雑です。

  1. No Code Provisioning Workspaceを作成する(Manual Applyを設定して、Workspace作成時に自動でApplyしないようにしておく)
  2. 作成されたWorkspaceに対して、Workspace Notificationを設定する
  3. WorkspaceでRunを作成して、リソースを作成する
  4. 通知が飛ぶ

今後のアップデートで、ProjectレベルでWorkspace Notificationのデフォルト設定ができたら嬉しいですね。

Team Notificationは現時点では、通知イベントが「Change Request」のみで今回のケースでは使えません。

[HCP Terraform]Team Notificationを試してみた | DevelopersIO](https://dev.classmethod.jp/articles/hcp-tf-team-notification/)

やってみた

No Code Moduleにlocal-execを追加して、Slackに通知する方法をご紹介します。

No Code Moduleにlocal-execを追加

No Code Moduleに以下の記述を追加します。

variable.tf
# ProjectのVariable Setで設定
variable "slack_webhook_url" {
  description = "Slack webhook URL for notifications"
  type        = string
  default     = null
}

slack_webhook_urlはHCP TerraformのVariables Setで渡します。

No Code Provisioning時に渡すことも可能です。

しかし、WebhookURLを変更したいときに、Workspace毎に変更する必要があり手間です。

Variables SetでWebhook URLを設定してProjectに割り当てることで、変更時の修正が一箇所で済みます。

main.tf
resource "null_resource" "slack_notification" {
  count = var.slack_webhook_url != null && var.slack_webhook_url != "null" ? 1 : 0
  provisioner "local-exec" {
    command = "curl -X POST -H 'Content-type: application/json' --data '{\"text\":\"Workspace ${var.waypoint_application} has been created\"}' ${var.slack_webhook_url}"
  }
}

今回は、HCP Waypoint経由でNo Code Provisioningを行っています。

var.waypoint_applicationには、自動的にWaypoint Application名が入ります。

No Code Moduleで作成されるWorkspace名も同一の値が入ります。

そのため、Workspace <作成されたWorkspace名> has been createdという内容で通知されます。

Slack Webhookの用意

以下を参考にSlack Webhook URLを作成します。

Sending messages using incoming webhooks | Slack

Variables Setの作成・Projectへの適用

HCP Terraformに移動して、Variables Setを作成します。

Variables___classmethod-sandbox___HCP_Terraform.png

作成したVariables Setは、No Code Provisioning利用先のProjectに割り当てます。

Key Value Category Actions
slack_webhook_url <作成したSlack Webhook URL> terraform None

動作確認

変更を適用して、通知をテストしてみます。

以下を実施し、No Code Moduleを最新版にアップデートします。

  • GitHub: リリースタグを作成
  • HCP Terraform: No Code Moduleのバージョン最新化

HCP Waypointを使っているため、HCP Waypoint経由でWorkspaceを作成します。

Create_an_application___Waypoint___HashiCorp_Cloud_Platform.png

Waypoint Applicationが作成され、HCP Terraform Workspaceが作成されたことも確認できました。

run-n5p1nxQuczrYFAJp___Runs___classmethod-sandbox___HCP_Terraform.png

問題なく通知も飛んでいました。

random__Channel__-_test_-_Slack.png

おわりに

No Code Provisioning時の通知についてでした。

今回はlocal-execを使った少し強引な方法で実現しました。

HCP Terraformの機能としてサポートされることを期待しています。(もしくは、ProjectレベルでのWorkspace Notificationが追加されると嬉しい)

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

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.