更新订阅 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. In the Google Cloud console, activate Cloud Shell.

    Activate Cloud Shell

    At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.

  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 或名称。

后续步骤