Cloud Storage 触发器

在 Cloud Functions 中,Cloud Storage 触发器能够调用函数来响应 Cloud Storage 中发生的更改。为函数指定 Cloud Storage 触发器时,您需要选择事件类型并指定 Cloud Storage 存储桶。每当指定存储桶中的对象(文件)发生更改时,系统都会调用您的函数。

以下 Cloud Storage 事件类型受支持:

Event 事件类型 说明
对象已完成创建
  • 第 2 代:google.cloud.storage.object.v1.finalized (通过 Eventarc)
  • 第 1 代:google.storage.object.finalize
当创建了新对象,或者现有对象被覆盖并创建了该对象的新一代实例时,会发生此事件。
删除了对象
  • 第 2 代:google.cloud.storage.object.v1.deleted (通过 Eventarc)
  • 第 1 代:google.storage.object.delete
当对象被永久删除时会发生此事件。
对象已归档
  • 第 2 代:google.cloud.storage.object.v1.archived (通过 Eventarc)
  • 第 1 代:google.storage.object.archive
当对象的当前版本成为非当前版本时发生。 如需了解详情,请参阅对象版本控制
更新了对象元数据
  • 第 2 代:google.cloud.storage.object.v1.metadataUpdated (通过 Eventarc)
  • 第 1 代:google.storage.object.metadataUpdate
当现有对象的元数据更改时会发生此事件。

若要使函数使用 Cloud Storage 触发器,必须将其作为事件驱动型函数实现:

Google 事件代码库包含用于处理事件数据的其他资源。

权限

如需在 Cloud Functions (第 2 代) 中使用 Cloud Storage 触发器,Cloud Storage 服务代理必须具有项目的 Pub/Sub Publisher (roles/pubsub.publisher) IAM 角色。此要求不适用于 Cloud Functions (第 1 代)。

Deployment

您可以在部署函数时指定 Cloud Storage 触发器。如需查看如何部署函数的一般说明,请参阅部署 Cloud Functions 函数;如需了解有关在部署期间配置 Cloud Storage 触发器的更多信息,请参阅下文。

gcloud

如果您要使用 gcloud CLI 进行部署,则可以将 Cloud Storage“对象已完成创建”事件类型与以下标志结合使用:

gcloud functions deploy YOUR_FUNCTION_NAME \
--trigger-bucket=YOUR_STORAGE_BUCKET \
[--retry] \
...
  • --trigger-bucket 标志用于指定触发器要监控的 Cloud Storage 存储桶。此存储桶中的“对象已完成创建”事件会触发对函数的调用。
  • --retry 标志用于控制是否自动重试失败的函数调用。如需了解详情,请参阅重试事件驱动型函数

如需使用除“对象已完成创建”以外的事件类型,请使用以下标志:

  • 对于 Cloud Functions(第 2 代):

    gcloud functions deploy YOUR_FUNCTION_NAME \
    --gen2 \
    --trigger-event-filters="type=EVENT_TYPE" \
    --trigger-event-filters="bucket=YOUR_STORAGE_BUCKET" \
    ...
    

    部署第 2 代函数时,请仅指定不含前导 gs:// 的存储桶名称;例如 --trigger-event-filters="bucket=my-bucket"

  • 对于 Cloud Functions (第 1 代),请使用:

    gcloud functions deploy YOUR_FUNCTION_NAME \
    --trigger-event=EVENT_TYPE \
    --trigger-resource=YOUR_STORAGE_BUCKET \
    ...
    

旧版 Cloud Storage 事件

Cloud Functions (第 1 代) 中的旧版函数对 Cloud Storage 触发器使用旧版对象更改通知

gcloud functions deploy YOUR_FUNCTION_NAME \
--trigger-event=providers/cloud.storage/eventTypes/object.change \
--trigger-resource=YOUR_STORAGE_BUCKET \
...

已在使用这些事件的旧版函数支持此事件类型。但是,我们不建议您使用此事件类型,因为它可能会在将来某个日期被移除。

控制台

如果您要使用 Google Cloud 控制台进行部署,则可以在触发器部分中配置 Cloud Storage 触发器。

  • 对于 Cloud Functions(第 2 代):

    1. 触发器类型字段中,选择 Cloud Storage
    2. 事件类型字段中,选择一个触发事件。默认值为 google.cloud.storage.object.v1.finalized

      对于使用 Cloud Audit Logs 的 Cloud Storage 事件,请参阅 Eventarc 触发器的触发器配置说明。

    3. 存储桶字段中,点击浏览,以选择触发器要监控的 Cloud Storage 存储桶。更改此存储桶中的对象会触发对函数的调用。

    4. 选择或取消选择失败时重试复选框,以控制 Cloud Functions 函数是否自动重试失败的函数调用。如需了解详情,请参阅重试事件驱动型函数

    5. 点击更多选项以对触发器进行其他配置:

      • 触发器类型字段中,指定 Google 来源自定义第三方之一:

        • Google 来源可让您为 Pub/Sub、Cloud Storage、Firestore 和其他 Google 事件提供方指定触发器。在 Eventarc 触发器窗格中时,使用事件提供方字段来选择提供要触发函数的事件类型的产品。然后,在事件字段中,选择要用作触发器的事件。

        • 自定义选项可让您通过应用代码生成和使用事件。按照 Eventarc 触发器窗格中的提示创建渠道。渠道是一种资源,用作将自定义事件从使用方传送到提供方的管道。自定义事件会发布到渠道,并且 Eventarc 触发器会订阅这些事件。

        • 第三方选项可让您与提供 Eventarc 来源的非 Google 提供方集成。如需了解详情,请参阅 Eventarc 中的第三方事件

      • 事件字段中,选择一个触发事件。默认值为 google.cloud.storage.object.v1.finalized

      • (可选)在服务账号字段中,选择要用作 Eventarc 触发器的身份的服务账号。如需了解详情,请参阅触发器身份

    6. 点击保存触发器

  • 对于 Cloud Functions(第 1 代):

    1. 触发器类型字段中,选择 Cloud Storage
    2. 事件类型字段中,选择一种事件类型。
    3. 存储桶字段中,点击浏览,以选择触发器要监控的 Cloud Storage 存储桶。更改此存储桶中的对象会触发对函数的调用。
    4. 选中或取消选中失败时重试复选框,以控制是否自动重试失败的函数调用。如需了解详情,请参阅重试事件驱动型函数

事件交付

Cloud Storage 触发器通过适用于 Cloud Storage 的 Pub/Sub 通知实现。事件受 Pub/Sub 通知传送保证的约束。

存储桶最多可将 10 个通知配置设定为针对特定事件触发。超出存储桶的通知限制会导致更多函数部署失败,并显示如下错误:

Cloud Storage bucket ...: Pub/Sub notification limit reached

如需了解详情,请参阅 Cloud Storage 配额和限制

后续步骤