Terraform を使用して cron ジョブをスケジュールして実行する
このクイックスタートでは、Terraform を使用して Cloud Scheduler cron ジョブを作成する方法について説明します。Terraform は、コードを使用してクラウド インフラストラクチャを予想どおりに作成、変更、改善できる Infrastructure as Code(IaC)ツールです。Terraform を使用して Google Cloud でインフラストラクチャをプロビジョニングする方法についてご確認いただけます。
Cloud Scheduler には無料枠があり、このクイックスタートを実行しても費用は発生しません。詳細は、料金をご覧ください。
このクイックスタートでは、以下の操作を行います。
- Terraform を使用して Cloud Scheduler の cron ジョブを作成します。
- ジョブの定期的なスケジュールを設定する。
- Pub/Sub トピックをジョブ ターゲットとして指定する。
- ジョブを実行します。
- ジョブが正常に実行されていることを確認します。
始める前に
-
Sign in to your Google Account.
If you don't already have one, sign up for a new account.
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
-
Create or select a Google Cloud project.
-
Create a Google Cloud project:
gcloud projects create PROJECT_ID
Replace
PROJECT_ID
with a name for the Google Cloud project you are creating. -
Select the Google Cloud project that you created:
gcloud config set project PROJECT_ID
Replace
PROJECT_ID
with your Google Cloud project name.
-
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
-
Create or select a Google Cloud project.
-
Create a Google Cloud project:
gcloud projects create PROJECT_ID
Replace
PROJECT_ID
with a name for the Google Cloud project you are creating. -
Select the Google Cloud project that you created:
gcloud config set project PROJECT_ID
Replace
PROJECT_ID
with your Google Cloud project name.
-
- Cloud Shell には Terraform がすでに統合されています。Terraform をインストールする必要がある場合は、HashiCorp Terraform のドキュメントをご覧ください。
Terraform 構成ファイルを作成する
Terraform を Cloud Scheduler で使用するには、構成ファイルを作成してインフラストラクチャを記述し、実行プランを作成する必要があります。次に、構成ファイルをプラットフォームまたはサービスに適用して、インフラストラクチャをプロビジョニングするオペレーションを実行します。
次の手順で main.tf
という Terraform 構成ファイルを作成します。
ターミナルを開いてディレクトリを作成します。
mkdir terraform
terraform
ディレクトリに移動します。cd terraform
新しいファイル
main.tf
をディレクトリに追加します。nano main.tf
次の Google Cloud 用の Terraform プロバイダ リソースを
main.tf
ファイルに追加します。Cloud Scheduler と Pub/Sub API を有効にします。
パブリッシャーがメッセージを送信できるリソースとして Pub/Sub トピックを作成します。
これにより、
pubsub_topic
というトピックが作成されます。Pub/Sub トピックにパブリッシュされたメッセージを受信するサブスクリプションを作成します。
google_cloud_scheduler_job
リソースを使用して cron ジョブを作成します。このサンプルでは、次の引数が使用されます。
name
: ジョブの名前。description
: ジョブの説明。schedule
: unix-cron に基づく形式で指定したジョブの頻度。このサンプルの
30 16 * * 7
は、ジョブが日曜日の 16 時 30 分に実行されることを意味します。詳細については、cron ジョブの形式とタイムゾーンをご覧ください。region
: ジョブが存在するリージョン。pubsub_target
: ジョブの実行時にメッセージ ペイロード(data
)が公開されるトピック(topic_name
)の完全なリソース名を含む Pub/Sub トピック ターゲット。
その他の引数もサポートされています。詳細については、Terraform Registry 引数リファレンスをご覧ください。
cron ジョブを作成します。
Terraform リソースをデプロイして cron ジョブを作成します。
ターミナルを開き、
terraform
ディレクトリで Terraform を初期化します。terraform init
Terraform で示した変更が、想定されているプランと一致していることを確認します。
terraform plan
-out
オプションを使用しないという注意事項は無視できます。cron ジョブを作成します。
terraform apply
[Enter a value] プロンプトで、「
yes
」と入力してリソースの作成を続行します。ジョブが作成されたことを確認します。
gcloud scheduler jobs describe test-job --location=us-central1
出力例を以下に示します。
description: test job lastAttemptTime: '2024-04-04T13:56:00.669530Z' name: projects/PROJECT_ID/locations/us-central1/jobs/test-job pubsubTarget: data: dGVzdA== topicName: projects/PROJECT_ID/topics/pubsub_topic schedule: '30 16 * * 7' scheduleTime: '2024-04-04T13:58:00.737907Z' state: ENABLED
日曜日の 16:30 に Pub/Sub トピックにメッセージを送信するジョブを作成しました。このジョブを実行できるようになりました。
ジョブを実行する
指定したスケジュールに沿ってジョブを実行するだけでなく、次のコマンドを実行して、即時にジョブを実行することもできます。
gcloud scheduler jobs run test-job --location=us-central1
初期構成によっては、プロジェクトで作成された最初のジョブの実行に数分かかることがあります。
結果を確認する
Pub/Sub トピックがジョブからメッセージを受け取ったことを確認する
サブスクリプションから Pub/Sub メッセージを pull する
gcloud pubsub subscriptions pull pubsub_subscription --limit 5
最初に pull されたメッセージがない場合は、コマンドを再実行します。
ジョブの実行結果を表示します。出力は次のようになります。
DATA: Hello world! MESSAGE_ID: 5028933846601543 ORDERING_KEY: ATTRIBUTES: DELIVERY_ATTEMPT: ACK_ID: RFAGFixdRkhRNxkIaFEOT14jPzUgKEUQAgVPAihdeTFXLkFacGhRDRlyfWB9[...]
クリーンアップ
このページで使用したリソースについて、Google Cloud アカウントに課金されないようにするには、Google Cloud プロジェクトとそのリソースをまとめて削除してください。
- Google Cloud プロジェクトを削除すると、そのプロジェクト内で使用されているすべてのリソースに対する課金が停止します。 デフォルトでは、Cloud Shell ホーム ディレクトリ内のファイル(Terraform ファイルなど)は、セッション間で維持されます。
Delete a Google Cloud project:
gcloud projects delete PROJECT_ID
あるいは、Terraform で作成したすべてのリソースを削除することもできます。
terraform destroy
コマンドは、Terraform の状態で指定されたすべてのリソースを終了します。現在の Terraform プロジェクトで管理されていないリソースは破棄されません。Terraform 構成ファイルは破棄されません。詳細については、インフラストラクチャの破棄をご覧ください。terraform destroy