更新订阅 SMT

本文档介绍了如何更新 Pub/Sub 订阅的单条消息转换 (SMT)。对 SMT 所做的更改会在几分钟内生效。对于订阅 SMT,更改会在 UDF 更新后对传递到订阅的新消息生效。

如需更新订阅 SMT,您可以使用 Google Cloud 控制台、Google Cloud CLI、客户端库或 Pub/Sub API。

所需的角色和权限

如需获得更新订阅 SMT 所需的权限,请让您的管理员为您授予项目的 Pub/Sub Editor (roles/pubsub.editor) IAM 角色。 如需详细了解如何授予角色,请参阅管理对项目、文件夹和组织的访问权限。

此预定义角色包含更新订阅 SMT 所需的权限。如需查看所需的确切权限,请展开所需权限部分:

所需权限

如需更新订阅 SMT,您需要具备以下权限:

  • 向更新授予订阅的订阅权限: projects.subscriptions.patch
  • 向视图授予项目的订阅权限。仅当您使用 Google Cloud 控制台时才需要此权限: pubsub.subscriptions.view

您也可以使用自定义角色或其他预定义角色来获取这些权限。

您可以在项目级层和单个资源级层配置访问权限控制。

更新订阅 SMT

如需更新订阅 SMT,请按以下步骤操作:

控制台

  1. 在 Google Cloud 控制台中,前往 Pub/Sub 订阅页面。

    前往“订阅”

  2. 点击要修改 SMT 的订阅。

  3. 在订阅详情页面中,点击修改。

    转换标签页会列出附加到订阅的所有 SMT。

  4. 在“修改订阅”页面中,您可以执行以下任务:

    1. 添加新的 SMT。点击添加转换。

    2. 修改现有 SMT。展开任意 SMT 即可修改该 SMT。

    3. 重新排列 SMT。使用向上键和向下键。

    4. 删除 SMT。点击“删除”按钮。

  5. 点击更新。

gcloud

  1. 在 Google Cloud 控制台中,激活 Cloud Shell。

    激活 Cloud Shell

    Cloud Shell 会话随即会在 Google Cloud 控制台的底部启动,并显示命令行提示符。Cloud Shell 是一个已安装 Google Cloud CLI 且已为当前项目设置值的 Shell 环境。该会话可能需要几秒钟时间来完成初始化。

  2. 运行 gcloud pubsub subscriptions update 命令:

    gcloud pubsub subscriptions update SUBSCRIPTION_ID \
        --message-transforms-file=TRANSFORMS_FILE

    替换以下内容:

    • SUBSCRIPTION_ID:要更新的订阅的 ID 或名称。

    • TRANSFORMS_FILE:包含更新后的 SMT 的 YAML 或 JSON 文件的路径。

      以下是 YAML 转换文件的一个示例:

      - javascriptUdf:
          code: >
              function redactSSN(message, metadata) {
                const data = JSON.parse(message.data);
                delete data['ssn'];
                message.data = JSON.stringify(data);
                return message;
              }
          functionName: redactSSN
      - javascriptUdf:
          code: >
              function filterHighAmount(message, metadata) {
                const data = JSON.parse(message.data);
                if (data['amount'] > 100 ) { return null; }
                return message;
              }
          functionName: filterHighAmount

    如需从订阅中清除所有 SMT,请使用以下命令:

    gcloud pubsub subscriptions update SUBSCRIPTION_ID --clear-message-transforms

    将 SUBSCRIPTION_ID 替换为您要更新的订阅的 ID 或名称。

后续步骤