Terraform for Cloud Automator で Google Cloud の運用を自動化する

記事タイトルとURLをコピーする

こんにちは、サービス開発課の山田です。

今回は Cloud Automator の Terraform Provider を使って「Compute Engine: VMインスタンスを起動」「Compute Engine: VMインスタンスを停止」アクションのジョブを作成する手順をご紹介します。

Cloud Automator とは?

Cloud Automator はサーバーワークスが提供している、運用自動化サービスです。

AWS のEC2インスタンスを定時起動するといったことはもちろん、Google Cloud のVMインスタンスのマシンイメージを定期作成するような運用を自動化することが出来ます。
例えば、業務開始前にEC2インスタンスを自動起動したり、毎日深夜にマシンイメージを作成するといった設定をWeb上で簡単に設定することが出来ます。

詳しくはサービスサイトをご覧ください。

https://cloudautomator.com/

Google Cloud のアクションジョブをコードで管理する

先日のブログでもご紹介しましたが、Google Cloud のVMインスタンスを起動・停止するための「Compute Engine: VMインスタンスを起動」「Compute Engine: VMインスタンスを停止」アクションを 2023年2月27日 に Cloud Automator に新しく追加しました。

このアクションはこれまで通り Cloud Automator のジョブ作成画面から作成することができるのですが、今回は Cloud Automator の Terraform Provider を使って Terraform 経由で「Compute Engine: VMインスタンスを起動」アクションジョブを作成して、ジョブの構成をコードベースで管理できるようにしてみようと思います。

手順

1. Terraform をインストールする

公式ドキュメントにインストール方法が記載されているため、これに沿ってインストールします。

Install Terraform

terraform version を実行して、バージョンが表示されれば完了です。

$ terraform version
Terraform v1.3.8

2. Cloud Automator の API キーを環境変数で設定する

Cloud Automator の API キーを環境変数で設定します。
API キーの発行方法はマニュアルをご参照ください。

Cloud Automator APIの利用方法

$ export CLOUD_AUTOMATOR_API_KEY="abcdefghijklmnopqrstuvwxyz123456789"

3. 作業環境を作成する

適当なディレクトリを作成して、その中に main.tf ファイルを作成してください。
以降は、作成した main.tf ファイルに追記していく形で作業を進めます。

$ mkdir ~/cloudautomator
$ cd ~/cloudautomator
$ touch main.tf

4. 利用する Provider を宣言する

Terraform Provider for Cloud Automator をインストールして使用できるようにするため、main.tf ファイルに required_providers を書いて宣言します。

terraform {
  required_providers {
    cloudautomator = {
      source = "CloudAutomator/cloudautomator"
    }
  }
}

5. Terraform Provider for Cloud Automator をインストールする

terraform init を実行して、Terraform Provider for Cloud Automator をインストールします。
Terraform has been successfully initialized! が表示されれば成功です。

6. ジョブの定義を書く

続いて、「Compute Engine: VMインスタンスを起動」アクションジョブの定義を main.tf ファイルに書いていきます。
今回の例では以下のジョブを作成します。

※ その他アクションやトリガーの定義例については、GitHub リポジトリの example ディレクトリに格納しているので、詳細はこちらをご確認ください。

- トリガー
  - タイマートリガー
    - 毎週、月曜日〜金曜日 の 9:00 に実行
- アクション
  - Compute Engine: VMインスタンスを起動アクション
    - 対象VMインスタンスが存在するリージョン
      - asia-northeast1
    - 対象のVMインスタンスが属するプロジェクトID
      - example-project
    - VMインスタンスの指定方法
      - ラベル
    - 対象のVMインスタンスのラベルのキー
      - env
    - 対象のVMインスタンスのラベルの値
      - develop

ジョブの定義が以下になります。

resource "cloudautomator_job" "cron-job" {
  name = "example-cron-job"

  group_id                = 123
  google_cloud_account_id = 456

  rule_type = "cron"
  cron_rule_value {
    hour          = "9"
    minutes       = "0"
    schedule_type = "weekly"
    weekly_schedule = [
      "monday",
      "tuesday",
      "wednesday",
      "thursday",
      "friday"
    ]
  }

  action_type = "google_compute_start_vm_instances"
  google_compute_start_vm_instances_action_value {
    region                  = "asia-northeast1"
    project_id              = "example-project"
    specify_vm_instance     = "label"
    vm_instance_label_key   = "env"
    vm_instance_label_value = "develop"
  }
}

7. 作成するジョブの情報を確認する

terraform plan を実行して、これから作成するジョブの情報を確認します。

8. ジョブを作成する

terraform apply を実行してジョブを作成します。
Apply complete! と表示されれば成功です。

9. ジョブを確認する

ジョブ一覧ページを表示して、Terraform で作成したジョブを確認してみましょう。

ジョブ定義で宣言した同じ名前のジョブが作成されており、

タイマートリガーの設定とアクションの設定も、ジョブ定義と同じ設定になっていることを確認できました。

あとがき

Terraform for Cloud Automatorで Google Cloud のアクションジョブを作成する手順をご紹介しました。
Google Cloud のアクションはもちろん、AWSの全アクションにも対応しているので example からお試しください。