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.
-
外部 ID プロバイダ(IdP)を使用している場合は、まず連携 ID を使用して gcloud CLI にログインする必要があります。
-
gcloud CLI を初期化するには、次のコマンドを実行します。
gcloud init
-
Create or select a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator
(
roles/resourcemanager.projectCreator
), which contains theresourcemanager.projects.create
permission. Learn how to grant roles.
-
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.
-
外部 ID プロバイダ(IdP)を使用している場合は、まず連携 ID を使用して gcloud CLI にログインする必要があります。
-
gcloud CLI を初期化するには、次のコマンドを実行します。
gcloud init
-
Create or select a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator
(
roles/resourcemanager.projectCreator
), which contains theresourcemanager.projects.create
permission. Learn how to grant roles.
-
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 のドキュメントをご覧ください。
ターミナルを開き、ディレクトリを作成します。
mkdir terraform
terraform
ディレクトリに移動します。cd terraform
新しいファイル
main.tf
をディレクトリに追加します。nano main.tf
main.tf
ファイルに次の Google Cloud リソースの Terraform プロバイダを追加します。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 レジストリ引数リファレンスをご覧ください。
ターミナルを開き、
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
サブスクリプションから 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 プロジェクトを削除すると、そのプロジェクト内で使用されているすべてのリソースに対する課金が停止します。デフォルトでは、Cloud Shell ホーム ディレクトリ内のファイル(Terraform ファイルなど)は、セッション間で維持されます。
Delete a Google Cloud project:
gcloud projects delete PROJECT_ID
または、Terraform で作成したすべてのリソースを削除することもできます。
terraform destroy
コマンドは、Terraform の状態で指定されたすべてのリソースを終了します。現在の Terraform プロジェクトで管理されていないリソースは破棄されません。Terraform 構成ファイルは破棄されません。詳細については、インフラストラクチャを破棄するをご覧ください。terraform destroy
Terraform 構成ファイルを作成する
Terraform を Cloud Scheduler で使用するには、インフラストラクチャを記述する構成ファイルを作成し、実行プランを作成する必要があります。次に、構成ファイルをプラットフォームまたはサービスに適用して、インフラストラクチャをプロビジョニングするオペレーションを実行します。
次の手順に沿って、main.tf
という Terraform 構成ファイルを作成します。
cron ジョブを作成します。
Terraform リソースをデプロイして、cron ジョブを作成します。
日曜日の 16:30 に Pub/Sub トピックにメッセージを送信するジョブを作成しました。このジョブを実行できるようになりました。
ジョブを実行する
指定したスケジュールに沿ってジョブを実行するだけでなく、次のコマンドを実行してジョブの即時実行を強制的に行うこともできます。
gcloud scheduler jobs run test-job --location=us-central1
初期構成によっては、プロジェクトで作成された最初のジョブの実行に数分かかることがあります。
結果を確認する
Pub/Sub トピックがジョブからメッセージを受け取ったことを確認する
クリーンアップ
このページで使用したリソースについて、 Google Cloud アカウントに課金されないようにするには、リソースを含む Google Cloud プロジェクトを削除します。