| --- |
| # ---------------------------------------------------------------------------- |
| # |
| # *** AUTO GENERATED CODE *** Type: MMv1 *** |
| # |
| # ---------------------------------------------------------------------------- |
| # |
| # This file is automatically generated by Magic Modules and manual |
| # changes will be clobbered when the file is regenerated. |
| # |
| # Please read more about how to change this file in |
| # .github/CONTRIBUTING.md. |
| # |
| # ---------------------------------------------------------------------------- |
| subcategory: "Cloud Scheduler" |
| description: |- |
| A scheduled job that can publish a PubSub message or an HTTP request |
| every X interval of time, using a crontab format string. |
| --- |
| |
| # google\_cloud\_scheduler\_job |
| |
| A scheduled job that can publish a PubSub message or an HTTP request |
| every X interval of time, using a crontab format string. |
| |
| |
| To get more information about Job, see: |
| |
| * [API documentation](https://cloud.google.com/scheduler/docs/reference/rest/) |
| * How-to Guides |
| * [Official Documentation](https://cloud.google.com/scheduler/) |
| |
| <div class = "oics-button" style="float: right; margin: 0 0 -15px"> |
| <a href="https://console.cloud.google.com/cloudshell/open?cloudshell_git_repo=https%3A%2F%2Fgithub.com%2Fterraform-google-modules%2Fdocs-examples.git&cloudshell_working_dir=scheduler_job_pubsub&cloudshell_image=gcr.io%2Fcloudshell-images%2Fcloudshell%3Alatest&open_in_editor=main.tf&cloudshell_print=.%2Fmotd&cloudshell_tutorial=.%2Ftutorial.md" target="_blank"> |
| <img alt="Open in Cloud Shell" src="//gstatic.com/cloudssh/images/open-btn.svg" style="max-height: 44px; margin: 32px auto; max-width: 100%;"> |
| </a> |
| </div> |
| ## Example Usage - Scheduler Job Pubsub |
| |
| |
| ```hcl |
| resource "google_pubsub_topic" "topic" { |
| name = "job-topic" |
| } |
| |
| resource "google_cloud_scheduler_job" "job" { |
| name = "test-job" |
| description = "test job" |
| schedule = "*/2 * * * *" |
| |
| pubsub_target { |
| # topic.id is the topic's full resource name. |
| topic_name = google_pubsub_topic.topic.id |
| data = base64encode("test") |
| } |
| } |
| ``` |
| <div class = "oics-button" style="float: right; margin: 0 0 -15px"> |
| <a href="https://console.cloud.google.com/cloudshell/open?cloudshell_git_repo=https%3A%2F%2Fgithub.com%2Fterraform-google-modules%2Fdocs-examples.git&cloudshell_working_dir=scheduler_job_http&cloudshell_image=gcr.io%2Fcloudshell-images%2Fcloudshell%3Alatest&open_in_editor=main.tf&cloudshell_print=.%2Fmotd&cloudshell_tutorial=.%2Ftutorial.md" target="_blank"> |
| <img alt="Open in Cloud Shell" src="//gstatic.com/cloudssh/images/open-btn.svg" style="max-height: 44px; margin: 32px auto; max-width: 100%;"> |
| </a> |
| </div> |
| ## Example Usage - Scheduler Job Http |
| |
| |
| ```hcl |
| resource "google_cloud_scheduler_job" "job" { |
| name = "test-job" |
| description = "test http job" |
| schedule = "*/8 * * * *" |
| time_zone = "America/New_York" |
| attempt_deadline = "320s" |
| |
| retry_config { |
| retry_count = 1 |
| } |
| |
| http_target { |
| http_method = "POST" |
| uri = "https://example.com/" |
| body = base64encode("{\"foo\":\"bar\"}") |
| headers = { |
| "Content-Type" = "application/json" |
| } |
| } |
| } |
| ``` |
| <div class = "oics-button" style="float: right; margin: 0 0 -15px"> |
| <a href="https://console.cloud.google.com/cloudshell/open?cloudshell_git_repo=https%3A%2F%2Fgithub.com%2Fterraform-google-modules%2Fdocs-examples.git&cloudshell_working_dir=scheduler_job_paused&cloudshell_image=gcr.io%2Fcloudshell-images%2Fcloudshell%3Alatest&open_in_editor=main.tf&cloudshell_print=.%2Fmotd&cloudshell_tutorial=.%2Ftutorial.md" target="_blank"> |
| <img alt="Open in Cloud Shell" src="//gstatic.com/cloudssh/images/open-btn.svg" style="max-height: 44px; margin: 32px auto; max-width: 100%;"> |
| </a> |
| </div> |
| ## Example Usage - Scheduler Job Paused |
| |
| |
| ```hcl |
| resource "google_cloud_scheduler_job" "job" { |
| paused = true |
| name = "test-job" |
| description = "test http job with updated fields" |
| schedule = "*/8 * * * *" |
| time_zone = "America/New_York" |
| attempt_deadline = "320s" |
| |
| retry_config { |
| retry_count = 1 |
| } |
| |
| http_target { |
| http_method = "POST" |
| uri = "https://example.com/ping" |
| body = base64encode("{\"foo\":\"bar\"}") |
| headers = { |
| "Content-Type" = "application/json" |
| } |
| } |
| } |
| ``` |
| <div class = "oics-button" style="float: right; margin: 0 0 -15px"> |
| <a href="https://console.cloud.google.com/cloudshell/open?cloudshell_git_repo=https%3A%2F%2Fgithub.com%2Fterraform-google-modules%2Fdocs-examples.git&cloudshell_working_dir=scheduler_job_app_engine&cloudshell_image=gcr.io%2Fcloudshell-images%2Fcloudshell%3Alatest&open_in_editor=main.tf&cloudshell_print=.%2Fmotd&cloudshell_tutorial=.%2Ftutorial.md" target="_blank"> |
| <img alt="Open in Cloud Shell" src="//gstatic.com/cloudssh/images/open-btn.svg" style="max-height: 44px; margin: 32px auto; max-width: 100%;"> |
| </a> |
| </div> |
| ## Example Usage - Scheduler Job App Engine |
| |
| |
| ```hcl |
| resource "google_cloud_scheduler_job" "job" { |
| name = "test-job" |
| schedule = "*/4 * * * *" |
| description = "test app engine job" |
| time_zone = "Europe/London" |
| attempt_deadline = "320s" |
| |
| retry_config { |
| min_backoff_duration = "1s" |
| max_retry_duration = "10s" |
| max_doublings = 2 |
| retry_count = 3 |
| } |
| |
| app_engine_http_target { |
| http_method = "POST" |
| |
| app_engine_routing { |
| service = "web" |
| version = "prod" |
| instance = "my-instance-001" |
| } |
| |
| relative_uri = "/ping" |
| } |
| } |
| ``` |
| ## Example Usage - Scheduler Job Oauth |
| |
| |
| ```hcl |
| data "google_compute_default_service_account" "default" { |
| } |
| |
| resource "google_cloud_scheduler_job" "job" { |
| name = "test-job" |
| description = "test http job" |
| schedule = "*/8 * * * *" |
| time_zone = "America/New_York" |
| attempt_deadline = "320s" |
| |
| http_target { |
| http_method = "GET" |
| uri = "https://cloudscheduler.googleapis.com/v1/projects/my-project-name/locations/us-west1/jobs" |
| |
| oauth_token { |
| service_account_email = data.google_compute_default_service_account.default.email |
| } |
| } |
| } |
| ``` |
| <div class = "oics-button" style="float: right; margin: 0 0 -15px"> |
| <a href="https://console.cloud.google.com/cloudshell/open?cloudshell_git_repo=https%3A%2F%2Fgithub.com%2Fterraform-google-modules%2Fdocs-examples.git&cloudshell_working_dir=scheduler_job_oidc&cloudshell_image=gcr.io%2Fcloudshell-images%2Fcloudshell%3Alatest&open_in_editor=main.tf&cloudshell_print=.%2Fmotd&cloudshell_tutorial=.%2Ftutorial.md" target="_blank"> |
| <img alt="Open in Cloud Shell" src="//gstatic.com/cloudssh/images/open-btn.svg" style="max-height: 44px; margin: 32px auto; max-width: 100%;"> |
| </a> |
| </div> |
| ## Example Usage - Scheduler Job Oidc |
| |
| |
| ```hcl |
| data "google_compute_default_service_account" "default" { |
| } |
| |
| resource "google_cloud_scheduler_job" "job" { |
| name = "test-job" |
| description = "test http job" |
| schedule = "*/8 * * * *" |
| time_zone = "America/New_York" |
| attempt_deadline = "320s" |
| |
| http_target { |
| http_method = "GET" |
| uri = "https://example.com/ping" |
| |
| oidc_token { |
| service_account_email = data.google_compute_default_service_account.default.email |
| } |
| } |
| } |
| ``` |
| |
| ## Argument Reference |
| |
| The following arguments are supported: |
| |
| |
| * `name` - |
| (Required) |
| The name of the job. |
| |
| |
| - - - |
| |
| |
| * `description` - |
| (Optional) |
| A human-readable description for the job. |
| This string must not contain more than 500 characters. |
| |
| * `schedule` - |
| (Optional) |
| Describes the schedule on which the job will be executed. |
| |
| * `time_zone` - |
| (Optional) |
| Specifies the time zone to be used in interpreting schedule. |
| The value of this field must be a time zone name from the tz database. |
| |
| * `paused` - |
| (Optional) |
| Sets the job to a paused state. Jobs default to being enabled when this property is not set. |
| |
| * `attempt_deadline` - |
| (Optional) |
| The deadline for job attempts. If the request handler does not respond by this deadline then the request is |
| cancelled and the attempt is marked as a DEADLINE_EXCEEDED failure. The failed attempt can be viewed in |
| execution logs. Cloud Scheduler will retry the job according to the RetryConfig. |
| The allowed duration for this deadline is: |
| * For HTTP targets, between 15 seconds and 30 minutes. |
| * For App Engine HTTP targets, between 15 seconds and 24 hours. |
| * **Note**: For PubSub targets, this field is ignored - setting it will introduce an unresolvable diff. |
| A duration in seconds with up to nine fractional digits, terminated by 's'. Example: "3.5s" |
| |
| * `retry_config` - |
| (Optional) |
| By default, if a job does not complete successfully, |
| meaning that an acknowledgement is not received from the handler, |
| then it will be retried with exponential backoff according to the settings |
| Structure is [documented below](#nested_retry_config). |
| |
| * `pubsub_target` - |
| (Optional) |
| Pub/Sub target |
| If the job providers a Pub/Sub target the cron will publish |
| a message to the provided topic |
| Structure is [documented below](#nested_pubsub_target). |
| |
| * `app_engine_http_target` - |
| (Optional) |
| App Engine HTTP target. |
| If the job providers a App Engine HTTP target the cron will |
| send a request to the service instance |
| Structure is [documented below](#nested_app_engine_http_target). |
| |
| * `http_target` - |
| (Optional) |
| HTTP target. |
| If the job providers a http_target the cron will |
| send a request to the targeted url |
| Structure is [documented below](#nested_http_target). |
| |
| * `region` - |
| (Optional) |
| Region where the scheduler job resides. If it is not provided, Terraform will use the provider default. |
| |
| * `project` - (Optional) The ID of the project in which the resource belongs. |
| If it is not provided, the provider project is used. |
| |
| |
| <a name="nested_retry_config"></a>The `retry_config` block supports: |
| |
| * `retry_count` - |
| (Optional) |
| The number of attempts that the system will make to run a |
| job using the exponential backoff procedure described by maxDoublings. |
| Values greater than 5 and negative values are not allowed. |
| |
| * `max_retry_duration` - |
| (Optional) |
| The time limit for retrying a failed job, measured from time when an execution was first attempted. |
| If specified with retryCount, the job will be retried until both limits are reached. |
| A duration in seconds with up to nine fractional digits, terminated by 's'. |
| |
| * `min_backoff_duration` - |
| (Optional) |
| The minimum amount of time to wait before retrying a job after it fails. |
| A duration in seconds with up to nine fractional digits, terminated by 's'. |
| |
| * `max_backoff_duration` - |
| (Optional) |
| The maximum amount of time to wait before retrying a job after it fails. |
| A duration in seconds with up to nine fractional digits, terminated by 's'. |
| |
| * `max_doublings` - |
| (Optional) |
| The time between retries will double maxDoublings times. |
| A job's retry interval starts at minBackoffDuration, |
| then doubles maxDoublings times, then increases linearly, |
| and finally retries retries at intervals of maxBackoffDuration up to retryCount times. |
| |
| <a name="nested_pubsub_target"></a>The `pubsub_target` block supports: |
| |
| * `topic_name` - |
| (Required) |
| The full resource name for the Cloud Pub/Sub topic to which |
| messages will be published when a job is delivered. ~>**NOTE:** |
| The topic name must be in the same format as required by PubSub's |
| PublishRequest.name, e.g. `projects/my-project/topics/my-topic`. |
| |
| * `data` - |
| (Optional) |
| The message payload for PubsubMessage. |
| Pubsub message must contain either non-empty data, or at least one attribute. |
| A base64-encoded string. |
| |
| * `attributes` - |
| (Optional) |
| Attributes for PubsubMessage. |
| Pubsub message must contain either non-empty data, or at least one attribute. |
| |
| <a name="nested_app_engine_http_target"></a>The `app_engine_http_target` block supports: |
| |
| * `http_method` - |
| (Optional) |
| Which HTTP method to use for the request. |
| |
| * `app_engine_routing` - |
| (Optional) |
| App Engine Routing setting for the job. |
| Structure is [documented below](#nested_app_engine_routing). |
| |
| * `relative_uri` - |
| (Required) |
| The relative URI. |
| The relative URL must begin with "/" and must be a valid HTTP relative URL. |
| It can contain a path, query string arguments, and \# fragments. |
| If the relative URL is empty, then the root path "/" will be used. |
| No spaces are allowed, and the maximum length allowed is 2083 characters |
| |
| * `body` - |
| (Optional) |
| HTTP request body. |
| A request body is allowed only if the HTTP method is POST or PUT. |
| It will result in invalid argument error to set a body on a job with an incompatible HttpMethod. |
| A base64-encoded string. |
| |
| * `headers` - |
| (Optional) |
| HTTP request headers. |
| This map contains the header field names and values. |
| Headers can be set when the job is created. |
| |
| |
| <a name="nested_app_engine_routing"></a>The `app_engine_routing` block supports: |
| |
| * `service` - |
| (Optional) |
| App service. |
| By default, the job is sent to the service which is the default service when the job is attempted. |
| |
| * `version` - |
| (Optional) |
| App version. |
| By default, the job is sent to the version which is the default version when the job is attempted. |
| |
| * `instance` - |
| (Optional) |
| App instance. |
| By default, the job is sent to an instance which is available when the job is attempted. |
| |
| <a name="nested_http_target"></a>The `http_target` block supports: |
| |
| * `uri` - |
| (Required) |
| The full URI path that the request will be sent to. |
| |
| * `http_method` - |
| (Optional) |
| Which HTTP method to use for the request. |
| |
| * `body` - |
| (Optional) |
| HTTP request body. |
| A request body is allowed only if the HTTP method is POST, PUT, or PATCH. |
| It is an error to set body on a job with an incompatible HttpMethod. |
| A base64-encoded string. |
| |
| * `headers` - |
| (Optional) |
| This map contains the header field names and values. |
| Repeated headers are not supported, but a header value can contain commas. |
| |
| * `oauth_token` - |
| (Optional) |
| Contains information needed for generating an OAuth token. |
| This type of authorization should be used when sending requests to a GCP endpoint. |
| Structure is [documented below](#nested_oauth_token). |
| |
| * `oidc_token` - |
| (Optional) |
| Contains information needed for generating an OpenID Connect token. |
| This type of authorization should be used when sending requests to third party endpoints or Cloud Run. |
| Structure is [documented below](#nested_oidc_token). |
| |
| |
| <a name="nested_oauth_token"></a>The `oauth_token` block supports: |
| |
| * `service_account_email` - |
| (Required) |
| Service account email to be used for generating OAuth token. |
| The service account must be within the same project as the job. |
| |
| * `scope` - |
| (Optional) |
| OAuth scope to be used for generating OAuth access token. If not specified, |
| "https://www.googleapis.com/auth/cloud-platform" will be used. |
| |
| <a name="nested_oidc_token"></a>The `oidc_token` block supports: |
| |
| * `service_account_email` - |
| (Required) |
| Service account email to be used for generating OAuth token. |
| The service account must be within the same project as the job. |
| |
| * `audience` - |
| (Optional) |
| Audience to be used when generating OIDC token. If not specified, |
| the URI specified in target will be used. |
| |
| ## Attributes Reference |
| |
| In addition to the arguments listed above, the following computed attributes are exported: |
| |
| * `id` - an identifier for the resource with format `projects/{{project}}/locations/{{region}}/jobs/{{name}}` |
| |
| * `state` - |
| State of the job. |
| |
| |
| ## Timeouts |
| |
| This resource provides the following |
| [Timeouts](https://developer.hashicorp.com/terraform/plugin/sdkv2/resources/retries-and-customizable-timeouts) configuration options: |
| |
| - `create` - Default is 20 minutes. |
| - `update` - Default is 20 minutes. |
| - `delete` - Default is 20 minutes. |
| |
| ## Import |
| |
| |
| Job can be imported using any of these accepted formats: |
| |
| * `projects/{{project}}/locations/{{region}}/jobs/{{name}}` |
| * `{{project}}/{{region}}/{{name}}` |
| * `{{region}}/{{name}}` |
| * `{{name}}` |
| |
| |
| In Terraform v1.5.0 and later, use an [`import` block](https://developer.hashicorp.com/terraform/language/import) to import Job using one of the formats above. For example: |
| |
| ```tf |
| import { |
| id = "projects/{{project}}/locations/{{region}}/jobs/{{name}}" |
| to = google_cloud_scheduler_job.default |
| } |
| ``` |
| |
| When using the [`terraform import` command](https://developer.hashicorp.com/terraform/cli/commands/import), Job can be imported using one of the formats above. For example: |
| |
| ``` |
| $ terraform import google_cloud_scheduler_job.default projects/{{project}}/locations/{{region}}/jobs/{{name}} |
| $ terraform import google_cloud_scheduler_job.default {{project}}/{{region}}/{{name}} |
| $ terraform import google_cloud_scheduler_job.default {{region}}/{{name}} |
| $ terraform import google_cloud_scheduler_job.default {{name}} |
| ``` |
| |
| ## User Project Overrides |
| |
| This resource supports [User Project Overrides](https://registry.terraform.io/providers/hashicorp/google/latest/docs/guides/provider_reference#user_project_override). |