将第 1 代函数升级为 Cloud Run functions
本指南介绍了如何将第 1 代 HTTP 和 Pub/Sub 函数升级为在 Cloud Run 上运行的 Cloud Run 函数。本指南仅适用于使用 Cloud Functions v1 API 创建的第 1 代函数。本指南中的说明不适用于使用 Cloud Functions v2 API 或 Cloud Functions for Firebase(单独的产品)创建的第 2 代函数。
升级完成后,您只能使用 Cloud Run Admin API 和 Cloud Run 工具与升级后的函数进行交互。
限制
升级工具目前仅支持升级由 HTTP 和 Pub/Sub 触发的函数。
升级流程概述
下面简要介绍了升级流程:
以下部分详细介绍了此流程。
“开始升级”概览
- 当您开始升级时(使用 Google Cloud CLI 或 Google Cloud 控制台),升级工具会创建一个临时第 2 代函数,该函数是原始第 1 代函数的副本。此第 2 代函数:
- 充当原始第 1 代函数与最终完全升级的函数之间的桥梁。
- 与原始第 1 代函数具有相同的名称、代码和配置。
- 如果升级的是 HTTP 函数,则具有与原始第 1 代函数相同的
cloudfunctions.net
网址,并且还具有run.app
Cloud Run 网址。- 开始升级后,第 1 代函数和第 2 代函数副本都会分配到同一
cloudfunctions.net
网址。当向cloudfunctions.net
网址发送请求时,流量会继续路由到第 1 代函数。第 2 代函数副本也有 Cloud Runrun.app
网址。在您在下一步中重定向流量之前,第 2 代函数网址不会接收流量。
- 开始升级后,第 1 代函数和第 2 代函数副本都会分配到同一
- 如果升级的 Pub/Sub 函数与第 1 代函数使用相同的 Pub/Sub 主题,但尚未订阅。
- 如果升级的是 HTTP 函数,则具有与原始第 1 代函数相同的
- 请注意,如果您未将依赖项固定到特定版本,则新创建的第 2 代函数副本可能会使用较新的依赖项版本。
- 第 1 代函数会继续在第 1 代 Google Cloud 控制台中列出,而其临时第 2 代副本会首次显示在 Cloud Run 控制台中。
示例:下表显示了在初始升级步骤中 HTTP 函数的状态。
函数 | 处理流量? | 在控制台中可见? |
---|---|---|
原始的第 1 代函数 | 可以,通过 cloudfunctions.net 网址 |
是,第 1 代控制台。 |
新第 2 代文案 | 不会。此函数同时具有 cloudfunctions.net 和 run.app 网址,但在重定向步骤之前不会处理流量。 |
可以,Cloud Run 控制台。 |
重定向流量概览
- 重定向流量时,结果取决于您要升级的函数是 HTTP 函数还是 Pub/Sub 函数:
- 如果您要升级 HTTP 函数,则定向到
cloudfunctions.net
网址的流量会转到第 2 代函数。您的第 1 代函数会继续存在,但不会接收任何流量。 - 如果您要升级 Pub/Sub 函数,第 2 代函数触发器会使用相同的 Pub/Sub 主题,但会创建一个新订阅,用于向 Cloud Run 函数发送消息。旧订阅已删除。
- 如果您要升级 HTTP 函数,则定向到
- 第 1 代函数从第 1 代控制台中消失。
- 如果您运行
gcloud functions describe
命令,则会看到该函数的环境现在为第 2 代。 - 请注意,在此过渡阶段存在风险,尤其是对于 Pub/Sub 函数:
- 重复消息:在删除旧订阅之前创建新订阅。在此过渡期间,同一条 Pub/Sub 消息可能会同时发送到旧函数和新函数。
- 丢失消息:如果您要升级 Pub/Sub 函数,但新函数在流量重定向后无法处理消息,则可能会丢失 Pub/Sub 消息。如果函数已停用重试功能,则尤其如此;详情请参阅升级 Pub/Sub。
示例:下表显示了在流量重定向步骤中 HTTP 函数的状态。
函数 | 处理流量? | 在控制台中可见? |
---|---|---|
原始的第 1 代函数 | 不会。 | 不再显示在第 1 代控制台中,但仍然存在。 |
新第 2 代文案 | 可以,从 cloudfunctions.net 网址以及 run.app Cloud Run 网址都可以。 |
可以,Cloud Run 控制台。 |
回滚流量概览
- 回滚流量时,升级工具会将第 2 代函数副本中的所有流量回滚到原始第 1 代函数,后者现在会处理所有流量。第 2 代函数仍可用于测试。
- 如果您要回滚 Pub/Sub 函数,系统会重新创建第 1 代函数订阅,并删除第 2 代函数订阅。
- 如果您想在回滚流量后继续升级,必须先将流量再次重定向到新的第 2 代函数,然后才能继续。
示例:下表显示了回滚流量后 HTTP 函数的状态。
函数 | 处理流量? | 在控制台中可见? |
---|---|---|
原始的第 1 代函数 | 可以。 | 是,第 1 代控制台。 |
新第 2 代文案 | 不会。 | 不再显示在 Cloud Run 控制台中,但仍存在。 |
中止概览
在提交之前,您可以随时中止升级。一旦提交,升级便不可逆转。
示例:下表显示了中止升级时 HTTP 函数的状态。
函数 | 处理流量? | 在控制台中可见? |
---|---|---|
原始的第 1 代函数 | 可以。 | 是,第 1 代控制台。 |
第 2 代文案 | 不会。 | 不再显示在 Cloud Run 控制台中,不再存在。 |
提交概览(不可逆)
- 提交升级会完成第 1 代函数的升级过程。此操作无法撤消。
- 临时第 2 代函数会转换为基于 Cloud Run Admin API 的成熟 Cloud Run 函数。
- 这相当于对第 2 代函数运行
detach
命令。detach
命令可将 Cloud Functions v2 函数从其现有的 API 环境中分离出来。 - 升级后,您只能使用 Cloud Run Admin API 和 Cloud Run 工具与升级后的函数进行交互。
- 这相当于对第 2 代函数运行
- 第 1 代函数会被删除,所有流量都会转到升级后的 Cloud Run 函数。
示例:下表显示了提交升级后 HTTP 函数的状态:
函数 | 处理流量? | 在控制台中可见? |
---|---|---|
基于 Cloud Run Admin API 的新 Cloud Run 函数。 | 可以,从 cloudfunctions.net 网址以及 run.app Cloud Run 网址都可以。 |
可以,Cloud Run 控制台。 |
原始的第 1 代函数 | 不会。 | 否,已不存在。 |
第 2 代文案 | 不会。 | 否,已不存在。 |
测试提示
测试是升级流程中不可或缺的一环。
建议您先在非生产函数上测试升级工具,熟悉该工具。当您熟练掌握此流程并取得持续成功后,就可以开始升级制作功能了。
以下是一些工具和技巧,可用于在升级期间测试函数:
每当函数更改状态时,请使用 Google Cloud CLI
describe
命令验证函数是否存在,以及其环境和版本是否符合预期。根据要升级的函数的当前状态,使用以下任一方法Cloud Run:
gcloud run services describe FUNCTION_NAME --format yaml
Cloud Functions:
gcloud functions describe --region REGION_NAME FUNCTION_NAME
使用第 1 代 Cloud Functions 控制台和 Cloud Run 控制台中的“日志记录”页面查看函数流量的详细信息。
在升级过程中,使用 Cloud Run 控制台查看并测试第 2 代函数副本:
- 升级开始后,您可以使用触发器标签页测试第 2 代函数副本。
- 使用 YAML 标签页查看有关函数的详细信息,包括其 Cloud Run
run.app
网址。
准备工作
在开始升级之前,请确保您满足以下前提条件:
您已启用 Cloud Run API:
gcloud services enable run.googleapis.com
您有现有的第 1 代 HTTP 或 Pub/Sub 函数。
您拥有所需的 IAM 角色:
- 您必须在函数的服务账号上设置
roles/iam.serviceAccountUser
。 - 您必须拥有项目的
roles/cloudfunctions.admin
角色或同等角色才能执行升级。 - 对于具有
no-retry
设置的 Pub/Sub 函数,您拥有roles/serviceusage.consumer
角色或具有serviceusage.services.user
权限的自定义角色。 - 如需提交 Pub/Sub 函数升级,您必须具有
roles/pubsub.admin
角色。角色roles/pubsub.admin
是一种项目级角色,可授予对项目内所有 Pub/Sub 资源的管理员权限。
您可以按如下方式查看函数的 IAM 政策:
gcloud functions get-iam-policy FUNCTION_NAME
- 您必须在函数的服务账号上设置
您必须对函数的服务账号拥有
roles/cloudfunctions.admin
权限。如需授予roles/cloudfunctions.admin
角色,请使用gcloud functions add-iam-policy-binding
命令,例如:gcloud functions add-iam-policy-binding FUNCTION_NAME \ --region=REGION \ --member=serviceAccount:SERVICE_ACCOUNT \ --role="roles/cloudfunctions.admin"
如果您在尝试运行此命令时遇到错误,请确保您的函数符合贵组织的政策。例如,您的组织可能不允许未经身份验证的 HTTP 函数。
如需详细了解成员和角色,请参阅添加主账号并授予角色。
升级 HTTP 函数
本部分介绍如何将第 1 代 HTTP 函数升级为 Cloud Run 函数。如需了解如何升级第 1 代 Pub/Sub 函数,请参阅后面的部分。
按照以下部分所述重定向流量并提交升级后,与原始第 1 代 HTTP 函数关联的 cloudfunctions.net
网址将继续有效,并将流量路由到新的 Cloud Run 函数。
启动 HTTP 函数升级
此步骤会创建第 1 代函数的第 2 代副本。
控制台
在 Google Cloud 控制台中,前往“函数(第 1 代)”页面:
找到要升级的第 1 代函数,并确认其在升级状态列中的状态为可升级。
点击函数名称以显示其详情页面。
在函数详情页面上,点击可升级下的升级。
按照提示开始升级流程。
完成此步骤后,系统会显示升级正在进行中面板,提示您点击前往 Cloud Run 链接以继续升级流程。
gcloud
运行带有 --setup-config
标志的 gcloud beta functions upgrade
命令:
gcloud beta functions upgrade FUNCTION_NAME --setup-config
将 FUNCTION_NAME 替换为第 1 代函数的名称。
开始升级后:
- 第 1 代函数会继续处理发送到其原始网址的流量。如需查看此网址,请前往第 1 代 Cloud Functions 控制台中的函数详情页面,然后打开触发器标签页。
系统会创建一个临时第 2 代函数,它是第 1 代函数的副本。它具有与第 1 代函数相同的
cloudfunctions.net
网址,以及新的 Cloud Runrun.app
网址。如需查看这两个网址,请前往 Cloud Run 控制台中的函数详情页面,然后打开 YAML 标签页。或者,您也可以使用以下命令:gcloud run services describe YOUR_SERVICE_NAME \ --region YOUR_REGION \ --format="value(status.url)"
您可以验证第 1 代函数的第 2 代副本是否存在:
gcloud run services describe FUNCTION_NAME --format yaml
您可以验证第 1 代函数环境,其中输出应显示函数环境为
1st gen
:gcloud functions describe --region REGION_NAME FUNCTION_NAME
排查“开始升级”步骤
在以下情况下,升级会失败:
- 同一区域和项目中已存在同名的函数。
- 第 1 代函数使用已停用的运行时,因此在您使用受支持的运行时重新部署该函数之前,它无法升级。
- 调用方缺少
cloudfunctions.functions.generationUpgrade
权限。请注意,调用者需要拥有项目的roles/cloudfunctions.admin
角色或同等角色。
重定向 HTTP 函数的流量
此时,您应测试原始函数及其副本的网址。请确保它们按预期运行,然后再继续。如果遇到问题,请中止升级以返回到干净状态,以便解决第 1 代函数中的任何潜在问题。
重定向步骤会将流量从第 1 代 Cloud Functions 网址重定向到第 2 代函数副本。
控制台
- 在 Cloud Run functions 详情页面的升级正在进行中面板中,点击前往 Cloud Run。
- 点击测试函数以测试函数(可选,但强烈建议执行)。
- 准备就绪后,点击重定向流量。
gcloud
运行带有 --redirect-traffic
标志的 gcloud beta functions upgrade
命令:
gcloud beta functions upgrade FUNCTION_NAME --redirect-traffic
重定向流量后,第 2 代函数副本会同时通过函数网址 (cloudfunctions.net
) 和 Cloud Run 网址 (run.app
) 处理流量。
在重定向后测试 HTTP 函数
验证函数环境:
gcloud functions describe --region REGION_NAME FUNCTION_NAME
输出显示环境为
2nd gen
。使用控制台日志记录工具将第 2 代函数副本与原始第 1 代函数进行比较。
排查重定向问题
在以下情况下,重定向会失败:
- 您未运行上一步 (
--setup-config
)。
回滚 HTTP 函数的流量
如果您尚未准备好提交升级,可以将流量回滚到第 1 代函数。
控制台
在 Cloud Run 控制台的 Cloud Run functions 详情页面中,点击升级正在进行中面板中的回滚流量。
gcloud
运行带有 --rollback-traffic
标志的 gcloud beta functions upgrade
命令:
gcloud beta functions upgrade FUNCTION_NAME --rollback-traffic
回滚流量后:
- 第 1 代函数会处理发送到
cloudfunctions.net
网址的流量。 - 第 2 代函数副本仍可供使用,您可以使用其
run.app
网址触发该函数。
您可以按如下方式验证函数环境。输出应显示函数环境为 1st gen
:
gcloud functions describe --region REGION_NAME FUNCTION_NAME
如果您尚未将流量重定向到第 2 代函数,回滚会失败。
提交 HTTP 函数的升级
此步骤会完成升级,之后您将无法再中止该流程。在执行此步骤之前,请确保您已全面测试函数。
控制台
在 Cloud Run 控制台的 Cloud Run functions 详情页面中,点击升级正在进行中面板中的提交升级。
gcloud
运行带有 --commit
标志的 gcloud beta functions upgrade
命令:
gcloud beta functions upgrade FUNCTION_NAME --commit
提交升级后:
- 第 1 代函数会被删除,第 2 代函数副本会被分离,成为成熟的 Cloud Run 函数。
- Cloud Run function 会保留
cloudfunctions.net
网址以及新的run.app
网址。 您可以验证第 1 代函数是否不再存在:
gcloud functions describe --region REGION_NAME FUNCTION_NAME
您可以验证 Cloud Run 服务详情:
gcloud run services describe FUNCTION_NAME --format yaml
输出结果显示已创建新代,并且 Goog-managed-by
标签的值为空。
如果流量尚未重定向到 Cloud Run 函数,提交会失败。
升级 Pub/Sub 函数
本部分介绍了如何将第 1 代 Pub/Sub 函数升级为 Cloud Run 函数。
升级第 1 代 Pub/Sub 函数的过程与升级 HTTP 函数的基本模式相同,但还有一些额外的注意事项:
停用“在失败时重试”功能不是 Cloud Run 支持的功能,但它是第 1 代的默认设置。因此,您可能同时拥有这两种类型的函数。升级工具执行的操作取决于此设置:
- 如果第 1 代函数已停用重试功能(第 1 代函数的默认设置),升级工具会创建 Eventarc Pub/Sub 触发器以及死信队列 (DLQ)。升级工具会为订阅及其主题设置 Identity and Access Management (IAM) 政策。升级完成后,死信队列主题会存储未传送的消息,您可以通过创建对该死信队列的新订阅来检索这些消息。
- 如果第 1 代函数已启用重试,升级工具会创建具有默认设置的 Eventarc Pub/Sub 触发器。
开始升级 Pub/Sub 函数
此步骤会创建第 1 代函数的第 2 代副本。
控制台
在 Google Cloud 控制台中,前往 Cloud Functions(第 1 代)页面:
找到要升级的第 1 代函数,并确认其在升级状态列中的状态为可升级。
点击函数名称以显示其详情页面。
在函数详情页面上,点击可升级下的升级。
此阶段完成后,系统会显示正在升级面板,提示您点击前往 Cloud Run 链接以继续升级流程。
gcloud
运行带有 --setup-config
标志的 gcloud beta functions upgrade
命令:
gcloud beta functions upgrade FUNCTION_NAME --setup-config
将 FUNCTION_NAME 替换为第 1 代函数的名称。
(可选)为触发器指定服务账号:
gcloud beta functions upgrade FUNCTION_NAME --setup-config --trigger-service-account=CUSTOM_SA_EMAIL
将 CUSTOM_SA_EMAIL 替换为您的自定义服务账号的电子邮件地址。
如果触发服务账号(默认 Compute Engine 服务账号或指定的自定义服务账号)缺少 run.route.invoke
权限,系统会提示您绑定 roles/run.invoker
角色。
开始升级后:
- 第 1 代函数会继续处理发送到其原始网址的流量。
- 系统会创建第 1 代函数的第 2 代副本。您可以使用其 Cloud Run 网址触发该工作流。
- 第 1 代函数会继续处理发送到其
cloudfunctions.net
网址的流量。
在启动升级步骤后测试 Pub/Sub 函数
您可以验证第 1 代函数的第 2 代副本是否存在:
gcloud run services describe FUNCTION_NAME --format yaml
您可以验证第 1 代函数环境,其中输出应显示函数环境为
1st gen
:gcloud functions describe --region REGION_NAME FUNCTION_NAME
向目标主题发布消息以触发第 1 代函数。
如需测试新函数,请向其添加 Pub/Sub 触发器,并确认该函数按预期响应触发器:
- 在 Cloud Run 控制台中选择相应函数,然后打开触发器标签页。
- 点击添加触发器,然后在 Eventarc 触发器面板中,选择一个用于触发该函数的主题。默认情况下,当有消息发布到主题时,系统会触发该函数。
- 在正在升级面板中,点击测试函数。
- 在打开的 Cloud Code for Cloud Shell 窗口中,向您在触发器标签页中添加的主题发布消息。
- 在 Cloud Run 控制台中,前往可观测性 > 日志,确认您的函数已发布消息。或者,您也可以使用 Cloud Shell 版 Cloud Code 中的命令行查看日志记录输出。
例如,假设您有一个发布问候语的基本 Hello World 函数。指定新触发器后,您可以在 Cloud Code for Cloud Shell 中对其进行测试,如下所示:
gcloud pubsub topics publish YOUR_TOPIC_NAME --message YOUR_NAME gcloud functions logs read --region YOUR_REGION --limit 50
排查 Pub/Sub 启动升级步骤
在以下情况下,升级会失败:
- 同一区域和项目中已存在同名的 Cloud Run 函数。
- 您尝试升级第 2 代函数。
- 第 1 代函数已在进行升级流程。
- 第 1 代函数不存在。
- 第 1 代函数处于错误状态。
- 第 1 代函数既不是 HTTP 函数,也不是 Pub/Sub 函数。
- 调用方缺少
cloudfunctions.functions.generationUpgrade
权限。请注意,调用者需要拥有项目的roles/cloudfunctions.admin
角色或同等角色。
重定向 Pub/Sub 函数的流量
此步骤会将流量从第 1 代 Cloud Functions 网址重定向到第 2 代函数副本。
控制台
- 在 Cloud Run functions 详情页面的升级正在进行中面板中,点击前往 Cloud Run。
- 点击测试函数以测试函数(可选,但强烈建议执行)。
- 准备就绪后,点击重定向流量。
gcloud
运行带有 --redirect-traffic
标志的 gcloud beta functions upgrade
命令:
gcloud beta functions upgrade FUNCTION_NAME --redirect-traffic
重定向流量后,第 2 代函数会同时通过 Cloud Functions 网址和 Cloud Run 网址处理流量。
在重定向流量后测试 Pub/Sub
您可以验证函数环境:
gcloud functions describe --region REGION_NAME FUNCTION_NAME
输出显示环境为
2nd gen
。eventTrigger.retryPolicy
与函数创建期间指定的重试政策相匹配。eventTrigger.serviceAccountEmail
是默认的 Compute Engine 服务账号或指定的自定义服务账号。- 现在,向目标主题发布消息会触发第 2 代函数复制。
排查 Pub/Sub 重定向问题
在以下情况下,重定向会失败:
- 您未运行上一步 (
--setup-config
)。 - Cloud Run functions 函数已被手动删除。
回滚 Pub/Sub 函数的流量
此步骤会将流量恢复到第 1 代函数。
控制台
在 Cloud Run functions 详情页面的正在升级面板中,点击回滚流量。
gcloud
运行带有 --rollback-traffic
标志的 gcloud beta functions upgrade
命令:
gcloud beta functions upgrade FUNCTION_NAME --rollback-traffic
回滚流量后:
- 该函数会恢复到初始升级步骤完成后的状态。
- 第 1 代函数会处理发送到
cloudfunctions.net
网址的流量。 第 2 代副本仍可供使用,您可以使用其 Cloud Run 网址触发该副本。
您可以验证函数环境:
gcloud functions describe --region REGION_NAME FUNCTION_NAME
输出应显示函数环境为
1st gen
。向目标主题发布消息会触发第一代函数。
如果您尚未将流量重定向到 Cloud Run 函数,回滚会失败。
提交 Pub/Sub 函数的升级
此步骤会完成升级,之后您将无法再中止该流程。此步骤无法撤消。 在执行此步骤之前,请确保您已全面测试函数。
控制台
在 Cloud Run functions 详情页面的升级正在进行中面板中,点击提交升级。
gcloud
运行带有 --commit
标志的 gcloud beta functions upgrade
命令:
gcloud beta functions upgrade FUNCTION_NAME --commit
提交升级后:
- 第 1 代函数已被删除。
- Cloud Run 函数会保留
cloudfunctions.net
网址。 - 您可以验证该函数是否不再显示在列表中:
gcloud functions describe --region REGION_NAME FUNCTION_NAME
- 您可以验证 Cloud Run 服务详情:
gcloud run services describe FUNCTION_NAME --format yaml
- 输出结果显示已创建新一代。
Goog-managed-by
标签的值应为空。
- 输出结果显示已创建新一代。
- 如果您在创建第 1 代函数时未勾选失败时重试,则触发器的 Pub/Sub 订阅将具有死信队列 (DLQ)。
- 现在,向目标主题发布消息会触发 Cloud Run 函数。
在以下情况下,提交会失败:
- 流量尚未重定向到 Cloud Run 函数。
- Cloud Run functions 函数已被手动删除。
中止升级
此操作会取消升级流程。新的第 2 代函数副本会被删除,第 1 代函数会继续处理发送到原始 cloudfunctions.net
网址的流量。您可以在升级过程中的任何时间执行此操作,但必须在提交升级之前执行。
如果您使用 Google Cloud 控制台执行升级,则界面仅允许您在初始升级操作后立即中止该过程。中止按钮位于 Functions(第 1 代)控制台的左上角。如果您使用的是 Google Cloud CLI,可以在提交升级之前的任何时间中止升级,之后该流程将不可逆。
即使您使用 Google Cloud 控制台执行升级流程,也可以使用 Google Cloud CLI 中止函数升级:
gcloud beta functions upgrade FUNCTION_NAME --abort
中止升级后:
- 第 2 代函数副本已被删除。
- 第 1 代函数会处理发送到
cloudfunctions.net
网址的流量。 - 在 Google Cloud 控制台中,函数的升级状态从已复制配置变回准备升级。
您可以验证 Cloud Run 服务是否不再显示在列表中:
gcloud run services list
您可以验证函数环境:
gcloud functions describe --region REGION_NAME FUNCTION_NAME
输出显示函数环境为 1st gen
。
如果您已提交升级,则中止操作会失败。
检查转换后的 IAM 政策
在升级过程中,该工具会尽最大努力在第 1 代 Cloud Functions 和新的 Cloud Run functions 之间转换角色和权限。
升级过程会将第 1 代 Cloud Functions IAM 角色转换为等效的 Cloud Run 角色。
转化规则:
roles/cloudfunctions.invoker
转换为roles/run.invoker
。roles/cloudfunctions.developer
转换为roles/run.sourceDeveloper
。roles/cloudfunctions.viewer
转换为roles/run.sourceViewer
。roles/cloudfunctions.admin
转换为roles/run.admin
和roles/run.sourceDeveloper
。
如果调用者缺少 projects.getIamPolicy
或 run.setIamPolicy
权限,则 IAM 政策升级会失败。调用者需要具有项目的 roles/cloudfunctions.admin
角色或等效角色。
验证 IAM 政策升级
如需验证您的 IAM 政策是否已正确升级,请在升级过程的每个阶段检查这些政策,以确认它们是否具有预期值:
开始升级函数:
gcloud beta functions upgrade FUNCTION_NAME --setup-config
如果检测到自定义角色绑定,输出会显示一条警告消息。
验证为第 1 代函数设置的 IAM 政策是否已转换为 Cloud Run 函数并升级:
gcloud functions get-iam-policy FUNCTION_NAME gcloud run services get-iam-policy FUNCTION_NAME
验证项目级 Cloud Run functions 调用者角色绑定是否已转换为 Cloud Run function 并升级:
gcloud projects get-iam-policy PROJECT_ID | grep "roles/cloudfunctions.invoker" gcloud run services get-iam-policy FUNCTION_NAME
后续步骤
- 详细了解 Cloud Run 函数。