Create a trigger for Cloud Run

You can create an Eventarc trigger so that your Cloud Run service receives notifications of a specified event or set of events. By specifying filters for the trigger, you can configure the routing of the event, including the event source and the target Cloud Run service.

Requests to your service are triggered by the following event types:

You can create triggers by using the Google Cloud CLI or through the Google Cloud console.

Some of the steps in this document might not work correctly if your organization applies constraints to your Google Cloud environment. In that case, you might not be able to complete tasks like creating public IP addresses or service account keys. If you make a request that returns an error about constraints, see how to Develop applications in a constrained Google Cloud environment.

Prepare to create a trigger

Before you create a trigger, complete these prerequisites:

  1. Enable the APIs:

    gcloud services enable cloudbuild.googleapis.com \
        eventarc.googleapis.com \
        logging.googleapis.com \
        pubsub.googleapis.com \
        run.googleapis.com \
        workflows.googleapis.com
    
  2. Grant the required Identity and Access Management (IAM) roles, permissions, and flags for authenticated and unauthenticated invocations. For more information, see Eventarc roles and permissions.

  3. If you are creating a trigger for a direct event from Cloud Storage, grant the pubsub.publisher role to the Cloud Storage service account:

    SERVICE_ACCOUNT="$(gsutil kms serviceaccount -p PROJECT_ID)"
    
    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member="serviceAccount:${SERVICE_ACCOUNT}" \
        --role='roles/pubsub.publisher'
    

    Replace PROJECT_ID with your Google Cloud project ID. You can find your project ID on the Dashboard page of the Google Cloud console.

Create a trigger using gcloud

You can create a trigger by running a gcloud command along with required and optional flags.

Cloud Audit Logs events

gcloud eventarc triggers create TRIGGER \
    --location=LOCATION \
    --destination-run-service=DESTINATION_RUN_SERVICE \
    --destination-run-region=DESTINATION_RUN_REGION \
    --event-filters="type=google.cloud.audit.log.v1.written" \
    --event-filters="serviceName=SERVICE_NAME" \
    --event-filters="methodName=METHOD_NAME" \
    --service-account=PROJECT_NUMBER-compute@developer.gserviceaccount.com

Replace the following:

  • TRIGGER: the ID of the trigger or a fully qualified identifier.
  • LOCATION: the location of the Eventarc trigger. Alternatively, set the eventarc/location property; for example, gcloud config set eventarc/location us-central1.

    Cloud Audit Logs triggers for Eventarc are available in specific regions and in the global region, but are not available in dual-region and multi-region locations. To avoid any performance and data residency issues caused by a global trigger, Google recommends that the location match that of the Google Cloud service that is generating events.

    If you specify the global location, you will receive events from all locations yielding matches for the event filters. For example, by creating a global Eventarc trigger, you can receive events from resources such as Cloud Storage buckets in the EU and US multi-regions.

  • DESTINATION_RUN_SERVICE: the name of the Cloud Run service that receives the events for the trigger. The service must be in the same region as the trigger, unless the trigger's location is global. The service must be in the same project as the trigger and will receive events as HTTP POST requests sent to its root URL path (/), whenever the event is generated.
  • DESTINATION_RUN_REGION: the region in which the destination Cloud Run service can be found. If not specified, it is assumed that the service is in the same region as the trigger.
  • SERVICE_NAME: the identifier of the Google Cloud service.
  • METHOD_NAME: the identifier of the operation.
  • PROJECT_NUMBER is your Google Cloud project number.

Notes:

  • These flags are required:
    • --event-filters="type=google.cloud.audit.log.v1.written"
    • --event-filters="serviceName=VALUE"
    • --event-filters="methodName=VALUE"
  • For a list of the audit log events supported by Eventarc, including serviceName and methodName values, see Events supported by Eventarc.
  • Each trigger can have multiple event filters, comma delimited in one --event-filters=[ATTRIBUTE=VALUE,...] flag, or you can repeat the flag to add more filters. Only events that match all the filters are sent to the destination. Wildcards and regular expressions are not supported. See Determine event filters for Cloud Audit Logs.
  • The --service-account flag specifies the Identity and Access Management (IAM) service account email associated with the trigger.
  • Optionally, filter events for a specific resource by using the --event-filters="resourceName=VALUE" flag and specifying the complete path to the resource. Omit the flag for dynamically created resources that have identifiers generated at creation time. Or, filter events for a set of resources by using the --event-filters-path-pattern="resourceName=VALUE" flag and specifying the resource path pattern.
  • Optionally, specify a relative path on the destination Cloud Run service to which the events for the trigger should be sent by using the --destination-run-path flag.

Example:

  gcloud eventarc triggers create helloworld-trigger \
      --location=us-central1 \
      --destination-run-service=helloworld-events \
      --destination-run-region=us-central1 \
      --event-filters="type=google.cloud.audit.log.v1.written" \
      --event-filters="serviceName=storage.googleapis.com" \
      --event-filters="methodName=storage.buckets.update" \
      --event-filters="resourceName=projects/_/buckets/eventarc-bucket/objects/random.txt" \
      --service-account=${PROJECT_NUMBER}-compute@developer.gserviceaccount.com

This command creates a trigger called helloworld-trigger for audit logs that are written by storage.googleapis.com and for the operation identified as storage.buckets.update.

Direct events

Cloud Storage

gcloud eventarc triggers create TRIGGER \
    --location=LOCATION \
    --destination-run-service=DESTINATION_RUN_SERVICE \
    --destination-run-region=DESTINATION_RUN_REGION \
    --event-filters="type=EVENT_FILTER_TYPE" \
    --event-filters="bucket=BUCKET" \
    --service-account=PROJECT_NUMBER-compute@developer.gserviceaccount.com

Replace the following:

  • TRIGGER: the ID of the trigger or a fully qualified identifier.
  • LOCATION: the location of the Eventarc trigger. Alternatively, set the eventarc/location property; for example, gcloud config set eventarc/location us-central1.

    Cloud Storage triggers for Eventarc are available in single-region, dual-region, and multi-region locations. Note that the trigger must be in the same location as the Cloud Storage bucket.

  • DESTINATION_RUN_SERVICE: the name of the Cloud Run service that receives the events for the trigger. The service must be in the same region as the trigger, unless the trigger's location is global. The service must be in the same project as the trigger and will receive events as HTTP POST requests sent to its root URL path (/), whenever the event is generated.
  • DESTINATION_RUN_REGION: the region in which the destination Cloud Run service can be found. If not specified, it is assumed that the service is in the same region as the trigger.
  • EVENT_FILTER_TYPE: the identifier of the Cloud Storage event and can be one of the following:
    • google.cloud.storage.object.v1.finalized: event is sent when a new object is created (or an existing object is overwritten, and a new generation of that object is created) in the bucket
    • google.cloud.storage.object.v1.archived: event is sent when a live version of an object is archived or deleted. This event is only sent for versioning buckets.
    • google.cloud.storage.object.v1.deleted: event is sent when an object is permanently deleted. Depending on the object versioning setting for a bucket this means:
      • For versioning buckets, this is only sent when a version is permanently deleted (but not when an object is archived).
      • For non-versioning buckets, this is sent when an object is deleted or overwritten.
    • google.cloud.storage.object.v1.metadataUpdated: event is sent when the metadata of an existing object changes.
  • BUCKET: the globally unique identifier of the Cloud Storage bucket.
  • PROJECT_NUMBER: your Google Cloud project number.

Notes:

  • These flags are required:
    • --event-filters="type=EVENT_FILTER_TYPE"
    • --event-filters="bucket=BUCKET"
  • Once a trigger is created, EVENT_FILTER_TYPE cannot be modified. Instead, create a new trigger and delete the old one.
  • Events are delivered using Pub/Sub notifications from Cloud Storage. Setting up too many notifications registered against the same bucket might exhaust the notification limit for the bucket as indicated by the error Cloud Storage bucket ...: Pub/Sub notification limit reached. The bucket can have up to 10 notification configurations set to trigger for a specific event. See more quotas and limitations in the Cloud Storage quotas and limits page.
  • Each trigger can have multiple event filters, comma delimited in one --event-filters=[ATTRIBUTE=VALUE,...] flag, or you can repeat the flag to add more filters. Only events that match all the filters are sent to the destination. Wildcards and regular expressions are not supported.
  • The --service-account flag is used to specify the Identity and Access Management (IAM) service account email associated with the trigger.
  • Optionally, specify a relative path on the destination Cloud Run service to which the events for the trigger should be sent by using the --destination-run-path flag.
  • The Cloud Storage bucket must reside in the same Google Cloud project and region or multi-region as the Eventarc trigger.

Example:

gcloud eventarc triggers create helloworld-trigger \
    --location=us-central1 \
    --destination-run-service=helloworld-events \
    --destination-run-region=us-central1 \
    --event-filters="type=google.cloud.storage.object.v1.finalized" \
    --event-filters="bucket=my-project-bucket" \
    --service-account=${PROJECT_NUMBER}-compute@developer.gserviceaccount.com

This command creates a trigger called helloworld-trigger for the Cloud Storage bucket my-project-bucket and the event identified as google.cloud.storage.object.v1.finalized.

Firebase Alerts

gcloud eventarc triggers create TRIGGER \
    --location=global \
    --destination-run-service=DESTINATION_RUN_SERVICE \
    --destination-run-region=DESTINATION_RUN_REGION \
    --event-filters="type=google.firebase.firebasealerts.alerts.v1.published" \
    --event-filters="alerttype=ALERT_TYPE" \
    --service-account=PROJECT_NUMBER-compute@developer.gserviceaccount.com

Replace the following:

  • TRIGGER: the ID of the trigger or a fully qualified identifier.
  • DESTINATION_RUN_SERVICE: the name of the Cloud Run service that receives the events for the trigger. The service must be in the same region as the trigger, unless the trigger's location is global. The service must be in the same project as the trigger and will receive events as HTTP POST requests sent to its root URL path (/), whenever the event is generated.
  • DESTINATION_RUN_REGION: the region in which the destination Cloud Run service can be found. If not specified, it is assumed that the service is in the same region as the trigger.
  • ALERT_TYPE: the type of Firebase alert and can be one of the following:
    • appDistribution.newTesterIosDevice: event is sent when a new iOS device is registered from a given app
    • billing.planAutomatedUpdate: event is sent when the billing plan for a Firebase project is automatically updated; for example, when a plan is downgraded due to payment issues
    • billing.planUpdate: event is sent when the billing plan for a Firebase project is modified by a user; for example, when a billing account is attached to or detached from a project
    • crashlytics.newAnrIssue: event is sent when an app experiences a new application not responding (ANR) error (not for any subsequent, identical events)
    • crashlytics.newFatalIssue: event is sent when an app experiences a new fatal crash (not for any subsequent, identical events)
    • crashlytics.newNonfatalIssue: event is sent when an app experiences a new non-fatal error (not for any subsequent, identical events)
    • crashlytics.regression: event is sent when an app experiences a crash for an issue marked as closed for a previous app version
    • crashlytics.stabilityDigest: event is sent when there is a notification of the top trending issues in Crashlytics
    • crashlytics.velocity: event is sent when a single issue is responsible for causing a significant number of app sessions to crash
  • PROJECT_NUMBER: your Google Cloud project number.

Notes:

  • The --location flag must be global. For more information, see Eventarc locations.
  • The --event-filters="type=google.firebase.firebasealerts.alerts.v1.published" and --event-filters="alerttype=ALERT_TYPE" flags are required.
  • Optionally, you can filter events for a specific Firebase App ID by using the --event-filters="appid=APP_ID" flag and by specifying an exact match.
  • Once a trigger is created, the event filter type cannot be modified. Instead, create a new trigger and delete the old one.
  • The --service-account flag is used to specify the Identity and Access Management (IAM) service account email associated with the trigger.
  • Optionally, specify a relative path on the destination Cloud Run service to which the events for the trigger should be sent by using the --destination-run-path flag.

Example:

gcloud eventarc triggers create helloworld-trigger \
    --location=global \
    --destination-run-service=helloworld-events \
    --destination-run-region=us-central1 \
    --event-filters="type=google.firebase.firebasealerts.alerts.v1.published" \
    --event-filters="alerttype=crashlytics.velocity" \
    --service-account=${PROJECT_NUMBER}-compute@developer.gserviceaccount.com

This command creates a trigger called helloworld-trigger for the event identified as google.firebase.firebasealerts.alerts.v1.published, and for a crashlytics.velocity alert type.

Firebase Remote Config

gcloud eventarc triggers create TRIGGER \
    --location=global \
    --destination-run-service=DESTINATION_RUN_SERVICE \
    --destination-run-region=DESTINATION_RUN_REGION \
    --event-filters="type=google.firebase.remoteconfig.remoteConfig.v1.updated" \
    --service-account=PROJECT_NUMBER-compute@developer.gserviceaccount.com

Replace the following:

  • TRIGGER: the ID of the trigger or a fully qualified identifier.
  • DESTINATION_RUN_SERVICE: the name of the Cloud Run service that receives the events for the trigger. The service must be in the same region as the trigger, unless the trigger's location is global. The service must be in the same project as the trigger and will receive events as HTTP POST requests sent to its root URL path (/), whenever the event is generated.
  • DESTINATION_RUN_REGION: the region in which the destination Cloud Run service can be found. If not specified, it is assumed that the service is in the same region as the trigger.
  • PROJECT_NUMBER: your Google Cloud project number.

Notes:

  • The --location flag must be global. For more information, see Eventarc locations.
  • The --event-filters flag is required and the type must be google.firebase.remoteconfig.remoteConfig.v1.updated. An event is sent when a Remote Config template is updated.
  • Once a trigger is created, the event filter type cannot be modified. Instead, create a new trigger and delete the old one.
  • The --service-account flag is used to specify the Identity and Access Management (IAM) service account email associated with the trigger.
  • Optionally, specify a relative path on the destination Cloud Run service to which the events for the trigger should be sent by using the --destination-run-path flag.

Example:

gcloud eventarc triggers create helloworld-trigger \
    --location=global \
    --destination-run-service=helloworld-events \
    --destination-run-region=us-central1 \
    --event-filters="type=google.firebase.remoteconfig.remoteConfig.v1.updated" \
    --service-account=${PROJECT_NUMBER}-compute@developer.gserviceaccount.com

This command creates a trigger called helloworld-trigger for the event identified as google.firebase.remoteconfig.remoteConfig.v1.updated.

Firebase Test Lab

gcloud eventarc triggers create TRIGGER \
    --location=global \
    --destination-run-service=DESTINATION_RUN_SERVICE \
    --destination-run-region=DESTINATION_RUN_REGION \
    --event-filters="type=google.firebase.testlab.testMatrix.v1.completed" \
    --service-account=PROJECT_NUMBER-compute@developer.gserviceaccount.com

Replace the following:

  • TRIGGER: the ID of the trigger or a fully qualified identifier.
  • DESTINATION_RUN_SERVICE: the name of the Cloud Run service that receives the events for the trigger. The service must be in the same region as the trigger, unless the trigger's location is global. The service must be in the same project as the trigger and will receive events as HTTP POST requests sent to its root URL path (/), whenever the event is generated.
  • DESTINATION_RUN_REGION: the region in which the destination Cloud Run service can be found. If not specified, it is assumed that the service is in the same region as the trigger.
  • PROJECT_NUMBER: your Google Cloud project number.

Notes:

  • The --location flag must be global. For more information, see Eventarc locations.
  • The --event-filters flag is required and the type must be google.firebase.testlab.testMatrix.v1.completed. An event is sent when a TestMatrix has completed.
  • Once a trigger is created, the event filter type cannot be modified. Instead, create a new trigger and delete the old one.
  • The --service-account flag is used to specify the Identity and Access Management (IAM) service account email associated with the trigger.
  • Optionally, specify a relative path on the destination Cloud Run service to which the events for the trigger should be sent by using the --destination-run-path flag.

Example:

gcloud eventarc triggers create helloworld-trigger \
    --location=global \
    --destination-run-service=helloworld-events \
    --destination-run-region=us-central1 \
    --event-filters="type=google.firebase.testlab.testMatrix.v1.completed" \
    --service-account=${PROJECT_NUMBER}-compute@developer.gserviceaccount.com

This command creates a trigger called helloworld-trigger for the event identified as google.firebase.testlab.testMatrix.v1.completed.

Pub/Sub messages (existing topic)

gcloud eventarc triggers create TRIGGER \
    --location=LOCATION \
    --destination-run-service=DESTINATION_RUN_SERVICE \
    --destination-run-region=DESTINATION_RUN_REGION \
    --event-filters="type=google.cloud.pubsub.topic.v1.messagePublished" \
    --transport-topic=projects/PROJECT_ID/topics/TOPIC_NAME

Replace the following:

  • TRIGGER: the ID of the trigger or a fully qualified identifier.
  • LOCATION: the location of the Eventarc trigger. Alternatively, set the eventarc/location property; for example, gcloud config set eventarc/location us-central1.

    Pub/Sub triggers for Eventarc are only available in single-region locations, and you cannot create a global Eventarc trigger.

  • DESTINATION_RUN_SERVICE: the name of the Cloud Run service that receives the events for the trigger. The service must be in the same region as the trigger, unless the trigger's location is global. The service must be in the same project as the trigger and will receive events as HTTP POST requests sent to its root URL path (/), whenever the event is generated.
  • DESTINATION_RUN_REGION: the region in which the destination Cloud Run service can be found. If not specified, it is assumed that the service is in the same region as the trigger.
  • PROJECT_ID: your Google Cloud project ID.
  • TOPIC_NAME: the name of the existing Pub/Sub topic. The topic must be in the same project as the trigger.

Notes:

  • The --event-filters="type=google.cloud.pubsub.topic.v1.messagePublished" flag is required.
  • Each trigger can have multiple event filters, comma delimited in one --event-filters=[ATTRIBUTE=VALUE,...] flag, or you can repeat the flag to add more filters. Only events that match all the filters are sent to the destination. Wildcards and regular expressions are not supported.
  • The --transport-topic flag is used to specify the ID of the existing Pub/Sub topic or its fully qualified identifier.
  • Optionally, specify a relative path on the destination Cloud Run service to which the events for the trigger should be sent by using the --destination-run-path flag.
  • By default, Pub/Sub subscriptions created for Eventarc persist regardless of activity and do not expire. To change the inactivity duration, see Manage subscriptions.

Example:

  gcloud eventarc triggers create pubsub-trigger-existing \
      --location=us-central1 \
      --destination-run-service=helloworld-events-pubsub \
      --destination-run-region=us-central1 \
      --event-filters="type=google.cloud.pubsub.topic.v1.messagePublished" \
      --transport-topic=projects/${PROJECT_ID}/topics/${TOPIC_NAME}

This command creates a trigger called pubsub-trigger-existing for the Pub/Sub topic identified by projects/${PROJECT_ID}/topics/${TOPIC_NAME}.

Pub/Sub messages (new topic)

gcloud eventarc triggers create TRIGGER \
    --location=LOCATION \
    --destination-run-service=DESTINATION_RUN_SERVICE \
    --destination-run-region=DESTINATION_RUN_REGION \
    --event-filters="type=google.cloud.pubsub.topic.v1.messagePublished"

Replace the following:

  • TRIGGER: the ID of the trigger or a fully qualified identifier.
  • LOCATION: the location of the Eventarc trigger. Alternatively, set the eventarc/location property; for example, gcloud config set eventarc/location us-central1.

    Pub/Sub triggers for Eventarc are only available in single-region locations, and you cannot create a global Eventarc trigger.

  • DESTINATION_RUN_SERVICE: the name of the Cloud Run service that receives the events for the trigger. The service must be in the same region as the trigger, unless the trigger's location is global. The service must be in the same project as the trigger and will receive events as HTTP POST requests sent to its root URL path (/), whenever the event is generated.
  • DESTINATION_RUN_REGION: the region in which the destination Cloud Run service can be found. If not specified, it is assumed that the service is in the same region as the trigger.

Notes:

  • The --event-filters="type=google.cloud.pubsub.topic.v1.messagePublished" flag is required.
  • Each trigger can have multiple event filters, comma delimited in one --event-filters=[ATTRIBUTE=VALUE,...] flag, or you can repeat the flag to add more filters. Only events that match all the filters are sent to the destination. Wildcards and regular expressions are not supported.
  • Optionally, specify a relative path on the destination Cloud Run service to which the events for the trigger should be sent by using the --destination-run-path flag.
  • By default, Pub/Sub subscriptions created for Eventarc persist regardless of activity and do not expire. To change the inactivity duration, see Manage subscriptions.

Example:

  gcloud eventarc triggers create pubsub-trigger-new \
      --location=us-central1 \
      --destination-run-service=helloworld-events-pubsub \
      --destination-run-region=us-central1 \
      --event-filters="type=google.cloud.pubsub.topic.v1.messagePublished"

This creates a new Pub/Sub topic and a trigger for it called pubsub-trigger-new.

As a best practice, Google recommends not to reuse the Pub/Sub topic created by a trigger because deleting an Eventarc trigger also deletes any Pub/Sub topics that were created by the trigger.

Create a trigger through the console

You can use the Cloud Run console page to create triggers for Cloud Audit Logs and Pub/Sub event types. However, to create triggers for direct events (for example, from Cloud Storage or Firebase Alerts), you must use the gcloud CLI or the Eventarc console page.

  1. If necessary, enable the Eventarc API.

    Enable the API

  2. In the Cloud console, go to Cloud Run.

    Go to Cloud Run

  3. From the list of services, click an existing service, or create a new service.

  4. On the Service details page, click the Triggers tab.

  5. Click Add Eventarc trigger.

  6. In the Pick an event list, locate all the event providers and events that are supported.

    Add a trigger through the console

  7. Select an event provider and choose an event.

    For example, select Cloud Scheduler > google.cloud.scheduler.v1.CloudScheduler.UpdateJob.

    You must identify what event to filter. See Determine event filters for Cloud Audit Logs.

  8. If you select the Cloud Pub/Sub topic event, you can select an existing topic or create a new topic for the trigger.

    By default, Pub/Sub subscriptions created for Eventarc persist regardless of activity and do not expire. To change the inactivity duration, see Manage subscriptions.
  9. Select one of the following:

    • Any resource—This is the default and includes dynamically created resources that have identifiers generated at creation time.

    • Specific resource—You must provide the full resource name. For example, type projects/_/buckets/eventarc-bucket/objects/random.txt.

  10. Specify a region to receive events from.

    Eventarc triggers are available in specific regions. To avoid any performance and data residency issues caused by a global trigger, Google recommends that the location match that of the Google Cloud service that is generating events.

  11. Select the Service account that invokes your Cloud Run service.

    Or, create a new service account.

    This specifies the IAM service account email associated with the trigger. For Cloud Run destinations, this service account is used to generate identity tokens when invoking the service.

  12. Optionally, specify the Service URL path to send the incoming request to.

    This is the relative path on the destination service to which the events for the trigger should be sent. For example: /, /route, route, route/subroute.

  13. After creating the trigger, verify its health by ensuring that there is a checkmark on the Triggers tab.

What's next