TerraformでWorkflowsのワークフローを作ってみた

2024.05.05

データアナリティクス事業本部の根本です。最近はWorkflowsやDataformを実装することが多いのですがせっかくなのでWorkflowsのリソース作成をgcloudコマンドではなくTerraformで作りたいなと思い試してみました。

この記事の対象者

  • TerraformでWorkflowsワークフローを作成してみたいひと

前提条件

  • Workflows、Cloud Shellが使用できること

検証の全体像

  • TerraformでWorkflowsが作成できるかどうか

早速やっていきます。

やってみる

まずはTerraformを実装していきます。一応Cloud ShellにTerraformが入っているかコマンドで確認します。

terraform version

コマンドを実行して以下のようなバージョン情報の出力があれば問題ありません。

Terraform v1.5.7
on linux_amd64

Your version of Terraform is out of date! The latest version
is 1.8.2. You can update by downloading from https://www.terraform.io/downloads.html

(今回は検証なのでバージョンは特に気にしません)
それではTerraformを動かす準備をしていきます。
まずはTerraform用のフォルダを作成して、作成したフォルダへ移動します。

mkdir terraform_workflows_test && cd terraform_workflows_test

さて、今回作成するファイルは2つです。

  • main.tf(TerraformでWorkflwosワークフローを作成するもの)
  • workflow.yaml(Workflowsワークフローの処理).

まずはTeffaformのファイルmain.tfを作成します。

main.tf

provider "google" {
  project = "プロジェクトID"
  region  = "asia-northeast1"
}

resource "google_workflows_workflow" "test_workflow" {
  name = "test-workflow"
  description = "Terraformで作成したワークフロー"

  source_contents = file("${path.module}/workflow.yaml")
}

source_contentsにて作成対象のWorkflowsワークフローのyamlファイルを指定しています。
それではworkflow.yamlも実装します。

workflow.yaml

main:
  steps:
    - call_sys_log:
        call: sys.log
        args:
          text: "terraform作成のworkflowsワークフロー"
          severity: "INFO"

作成するWorkflowsのワークフローはログ出力するだけのシンプルなものです。
2つのファイルが準備できたらTerraformを実行していきます。 まずは以下のコマンドを発行します。

terraform init

terraform initコマンドが成功したらterraform applyコマンドを発行してWorkflowsワークフローを作成します。

terraform apply

terraform applyを実行してリソース作成を実行します。

Do you want to perform these actions?

と確認されますので、yesと入力してEnterキーを押下します。

google_workflows_workflow.test_workflow: Modifying... [id=projects/プロジェクトID/locations/asia-northeast1/workflows/test-workflow]
google_workflows_workflow.test_workflow: Modifications complete after 1s [id=projects/プロジェクトID/locations/asia-northeast1/workflows/test-workflow]

Apply complete! Resources: 0 added, 1 changed, 0 destroyed.

上記のようなメッセージが表示されていれば作成成功です。
Workflowsのコンソールから作成されているか確認してみます。

無事作成できていました。

workflow.yamlのファイル内容通りのソースコードとなっていました。問題なくTerraformでリソース作成ができました。

サービスアカウントも設定してみる

せっかくなのでサービスアカウントも設定してみました。
リファレンスを確認したところ  

projects/{project}/serviceAccounts/{account} or {account}.  

上記形式でサービスアカウントを指定できるようでしたので、それに則りservice_accountの指定を追加しました。

main.tf

provider "google" {
  project = "プロジェクトID"
  region  = "asia-northeast1"
}

resource "google_workflows_workflow" "test_workflow" {
  name = "test-workflow"
  description = "Terraformで作成したワークフロー"
  service_account = "projects/プロジェクトID/serviceAccounts/サービスアカウント名(メール)" 
  #↑上記を追加
  source_contents = file("${path.module}/workflow.yaml")
}

こちらもterraform applyを実行してリソース作成をしてみます。

サービスアカウントが設定されたワークフローが作成されていました!

おわりに

簡潔な記述でリソース作成ができて、とても嬉しく思いました。開発時はgcloudコマンドでデプロイしていても、本運用の時にはTerraform化してあると運用保守しやすくて良いかなと個人的には思います。そしてTerraformでリソース作成するのは本当に面白いです。
この記事が誰かのお役に立てば嬉しいです。それではまた。

参考

Terraformリファレンス
Terraformを使用してワークフローを作成する