排解 Cloud Run functions 問題

本文說明如何排解使用 Cloud Run 函式時出現的錯誤訊息,並解決相關問題。如果您使用 Cloud Run 建立或部署函式,請參閱「排解 Cloud Run 問題」。

部署作業

本節列出部署時可能會遇到的問題,並提供各項問題的修正建議。部署期間可能遇到的許多問題,都與角色和權限或設定錯誤有關。

您可以使用 Identity and Access Management 授權身分,對使用 Cloud Functions v2 API 建立的函式執行管理動作,例如使用 gcloud functions、REST API 或 Terraform。管理動作包括建立、更新及刪除函式。詳情請參閱「使用 IAM 授權存取權」。

部署函式時,使用者缺少執行階段服務帳戶的權限

當函式存取其他資源時,每個函式都與一個做為其身分識別的服務帳戶相關聯。這個執行階段服務帳戶可以是預設服務帳戶,也可以是使用者代管的服務帳戶。在多個函式存取不同資源的環境中,一般會使用每個函式的身分,搭配具名的執行階段服務帳戶,而非預設的執行階段服務帳戶 (PROJECT_NUMBER-compute@developer.gserviceaccount.com)。

如要使用執行階段服務帳戶,部署者必須擁有該服務帳戶的 iam.serviceAccounts.actAs 權限。建立非預設執行階段服務帳戶的使用者會自動獲得這項權限,但其他部署者必須由使用者授予這項權限。

為具有專案檢視者、Cloud Functions 開發人員或 Cloud Functions 管理員角色的使用者,指派執行階段服務帳戶的 iam.serviceAccounts.actAs 權限。

錯誤訊息

主控台

  You must have the iam.serviceAccounts.actAs permission on the selected service account. To obtain this permission, you can grant a role that includes it like the Service Account User role, on the project.

gcloud

預設服務帳戶:

ERROR: (gcloud.functions.deploy) ResponseError: status=[403], code=[Ok], message=[Caller is missing permission 'iam.serviceaccounts.actAs' on service account projects/-/serviceAccounts/PROJECT_NUMBER-compute@developer.gserviceaccount.com.Grant the role 'roles/iam.serviceAccountUser' to the caller on the service account projects/-/serviceAccounts/PROJECT_NUMBER-compute@developer.gserviceaccount.com.You can do that by running 'gcloud iam service-accounts add-iam-policy-binding projects/-/serviceAccounts/PROJECT_NUMBER-compute@developer.gserviceaccount.com --member MEMBER --role roles/iam.serviceAccountUser'where MEMBER has a prefix like 'user:' or 'serviceAccount:'

非預設服務帳戶:

ERROR: (gcloud.functions.deploy) ResponseError: status=[403], code=[Ok], message=[Caller is missing permission 'iam.serviceaccounts.actAs' on service account projects/-/serviceAccounts/
SERVICE_ACCOUNT_NAME@PROJECT_ID
.iam.gserviceaccount.com.Grant the role 'roles/iam.serviceAccountUser' to the caller on the service account projects/-/serviceAccounts/
SERVICE_ACCOUNT_NAME@PROJECT_ID
.iam.gserviceaccount.com.You can do that by running 'gcloud iam service-accounts add-iam-policy-binding projects/-/serviceAccounts/
SERVICE_ACCOUNT_NAME@PROJECT_ID
.iam.gserviceaccount.com --member MEMBER --role roles/iam.serviceAccountUser'where MEMBER has a prefix like 'user:' or 'serviceAccount:'

解決方案

為使用者指派預設或非預設執行階段服務帳戶的「服務帳戶使用者」角色 (roles/iam.serviceAccountUser)。這個角色包含 iam.serviceAccounts.actAs 權限。

部署事件導向函式時,部署服務帳戶缺少 Pub/Sub 權限

執行管理動作時,Cloud Functions 服務會使用 Cloud Functions 服務代理人服務帳戶 (service-PROJECT_NUMBER@gcf-admin-robot.iam.gserviceaccount.com)。根據預設,系統會將 Cloud Functions cloudfunctions.serviceAgent 角色指派給這個帳戶。如要部署事件驅動函式,Cloud Functions 服務必須存取 Pub/Sub,才能設定主題和訂閱項目。如果變更指派給服務帳戶的角色,但未授予適當權限,Cloud Functions 服務就無法存取 Pub/Sub,部署作業也會失敗。

錯誤訊息

主控台

Validation failed for trigger projects/PROJECT_ID/locations/LOCATION/triggers/FUNCTION_NAME-EVENTARC_ID: Permission "iam.serviceAccounts.ActAs" denied on "EndUserCredentials to PROJECT_NUMBER-compute@developer.gserviceaccount.com"

gcloud

ERROR: (gcloud.functions.deploy) ResponseError: status=[403], code=[Ok], message=[Validation failed for trigger projects/test-project-356312/locations/LOCATION/triggers/FUNCTION_NAME-EVENTARC_ID: Permission "iam.serviceAccounts.ActAs" denied on "EndUserCredentials to PROJECT_NUMBER-compute@developer.gserviceaccount.com"]

解決方案

您可以將服務帳戶重設為預設的 cloudfunctions.serviceAgent 角色。

預設執行階段服務帳戶不存在

如未指定使用者代管的執行階段服務帳戶,Cloud Functions 會使用預設的 Compute 服務帳戶做為執行階段服務帳戶。如果刪除預設帳戶,但未指定使用者管理的帳戶,部署作業就會失敗。

錯誤訊息

gcloud

ERROR: (gcloud.functions.deploy) ResponseError: status=[404], code=[Ok], message=[Service account projects/-/serviceAccounts/PROJECT_NUMBER-compute@developer.gserviceaccount.com was not found.]

解決方案

如要解決這個問題,請嘗試下列任一解決方案:

部署函式時,Cloud Functions 服務代理程式服務帳戶缺少專案 bucket 權限

Cloud Run 函式只能由相同 Google Cloud 平台專案中的 Cloud Storage 值區觸發。此外,Cloud Functions 服務代理程式服務帳戶 (service-PROJECT_NUMBER@gcf-admin-robot.iam.gserviceaccount.com) 需要專案的 cloudfunctions.serviceAgent 角色。

錯誤訊息

主控台

ERROR: (gcloud.functions.deploy) ResponseError: status=[403], code=[Ok], message=[Validation failed for trigger projects/PROJECT_ID/locations/LOCATION/triggers/FUNCTION_NAME-EVENTARC_ID: Permission "iam.serviceAccounts.ActAs" denied on "EndUserCredentials to PROJECT_NUMBER-compute@developer.gserviceaccount.com"]

gcloud

ERROR: (gcloud.functions.deploy) ResponseError: status=[403], code=[Ok], message=[Validation failed for trigger projects/<project-id>/locations/LOCATION/triggers/FUNCTION_NAME-EVENTARC_ID: Permission "iam.serviceAccounts.ActAs" denied on "EndUserCredentials to PROJECT_NUMBER-compute@developer.gserviceaccount.com"]

解決方案

如要解決這個問題,請將這個服務帳戶重設為預設角色。

具備「專案編輯者」角色的使用者無法將函式設為公開

專案編輯者角色擁有管理專案中資源的廣泛權限,但不會自動授予公開 Cloud Functions 的權限。部署函式的使用者或服務需要 run.services.setIamPolicy 權限。

錯誤訊息

gcloud

ERROR: (gcloud.run.services.add-iam-policy-binding) PERMISSION_DENIED: Permission 'run.services.setIamPolicy' denied on resource 'projects/PROJECT_ID/locations/LOCATION/functions/FUNCTION_NAME' (or resource may not exist).

解決方案

您可以:

  • 為部署者指派「專案擁有者」或「Cloud Functions 管理員」角色。

  • 建立自訂角色,手動授予權限。

  • 檢查專案是否強制執行網域限定共用

使用「資源位置限制」機構政策時,函式部署作業會失敗

如果貴機構使用資源位置限制政策,系統會禁止在政策限制的區域中部署函式。在 Google Cloud 控制台中部署函式時,區域下拉式選單不會顯示受限區域。

錯誤訊息

gcloud

ResponseError: status=[400], code=[Ok], message=["LOCATION" violates constraint "constraints/gcp.resourceLocations" on the resource "projects/PROJECT_ID/locations/LOCATION/functions/FUNCTION_NAME".]

解決方案

您可以從資源位置限制的 allowed_valuesdenied_values 清單新增或移除位置,確保部署作業順利完成。

執行函式的全域範圍時,函式部署失敗

這個錯誤表示程式碼有問題。部署管道已完成函式部署作業,但在最後一個步驟 (將健康狀態檢查傳送至函式) 失敗。這項健康狀態檢查旨在執行函式的全域範圍,可能會擲回例外狀況、當機或逾時。您通常會在全域範圍載入程式庫並初始化用戶端。

錯誤訊息

在 Cloud Logging 記錄檔中:

Could not create or update Cloud Run service FUNCTION_NAME, Container Healthcheck failed. Revision REVISION_NAMEE is not ready and cannot serve traffic. The user-provided container failed to start and listen on the port defined provided by the PORT=8080 environment variable. Logs for this revision might contain more information.

解決方案

如要解決這個問題,請嘗試下列任一解決方案:

  • 如需更詳細的錯誤訊息,請查看函式的建構記錄

  • 如果無法確定函式為何無法執行其全域範圍,請考慮暫時將程式碼移至要求呼叫中,並延遲初始化全域變數。您可以在用戶端程式庫周圍新增額外的記錄陳述式,這些程式庫可能會在例項化時逾時 (尤其是呼叫其他服務時)、當機或一併擲回例外狀況。

  • 此外,請嘗試增加函式逾時時間。Cloud Run 函式中較長的逾時限制可提供更多初始化空間,並在 Cloud Run 環境中提供更具延展性的資源分配,如果問題是由資源耗盡所致,這或許能減輕問題。

  • 原始碼必須包含已在部署作業中正確指定的進入點函式,可透過控制台gcloud 指定。

具備「檢視者」角色的使用者無法部署函式

具備專案檢視者或 Cloud Functions 檢視者角色的使用者,可唯讀存取函式和函式詳細資料,但無法部署新函式。Google Cloud 控制台中的「建立函式」功能呈現灰色,並顯示下列錯誤:

錯誤訊息

gcloud

ERROR: (gcloud.functions.deploy) ResponseError: status=[403], code=[Ok], message=[Permission 'cloudfunctions.functions.generateUploadUrl' denied on 'projects/PROJECT_ID/locations/LOCATION/functions']

解決方案

為使用者指派 Cloud Functions 開發人員角色。

建構作業服務帳戶缺少權限

錯誤訊息

在函式部署錯誤或建構記錄中,您可能會看到下列其中一項錯誤:

The service account running this build does not have permission to write logs. To fix this, grant the Logs Writer (roles/logging.logWriter) role to the service account.
Step #0 - "fetch": failed to Fetch: failed to download archive gs://gcf-v2-sources-PROJECT_NUMBER-LOCATION/FUNCTION_NAME/version-VERSION_NUMBER/function-source.zip: Access to bucket gcf-v2-sources-PROJECT_NUMBER-LOCATION denied. You must grant Storage Object Viewer permission to PROJECT_NUMBER-compute@developer.gserviceaccount.com.
Step #2 - "build": ERROR: failed to create image cache: accessing cache image "LOCATION-docker.pkg.dev/PROJECT/gcf-artifacts/FUNCTION_NAME/cache:latest": connect to repo store "LOCATION-docker.pkg.dev/PROJECT/gcf-artifacts/FUNCTION_NAME/cache:latest": GET https://LOCATION-docker.pkg.dev/v2/token?scope=repository%3APROJECT%2Fgcf-artifacts%2FFUNCTION_NAME%2Fcache%3Apull&service=: DENIED: Permission "artifactregistry.repositories.downloadArtifacts" denied on resource "projects/PROJECT/locations/LOCATION/repositories/gcf-artifacts" (or it may not exist)
Could not build the function due to a missing permission on the build service account. If  you didn't revoke that permission explicitly, this could be caused by a change in the organization policies.

解決方案

建構服務帳戶需要來源 bucket 的讀取權限,以及 Artifact Deployment 存放區的讀取和寫入權限。Cloud Build 服務帳戶的預設行為有所異動,詳情請參閱「Cloud Build 服務帳戶異動」。

如要解決這個問題,請嘗試下列任一解決方案:

已停用建構作業服務帳戶

錯誤訊息

Could not build the function due to disabled service account used by Cloud Build. Please make sure that the service account is active.

解決方案

您必須啟用建構服務帳戶,才能部署函式。 Cloud Build 服務帳戶的預設行為有所異動,詳情請參閱「Cloud Build 服務帳戶異動」。

如要解決這個問題,請嘗試下列任一解決方案:

供應

本節列出您可能會遇到的放送問題,並提供各項問題的修正建議。

由於函式需要驗證,因此發生放送權限錯誤

如果 HTTP 函式未啟用「允許未經驗證的叫用」,則只有具備適當權限的使用者和服務帳戶可以存取。這則錯誤訊息表示呼叫者沒有權限叫用函式。

錯誤訊息

HTTP 錯誤回應代碼:403 禁止

HTTP 錯誤回應主體:

Error: Forbidden Your client does not have permission
to get URL /FUNCTION_NAME from this server.

解決方案

如要解決這個問題,請嘗試下列任一解決方案:

allow internal traffic only 設定導致放送錯誤

連入設定會限制 HTTP 函式是否可由 Google Cloud 專案或 VPC Service Controls 服務範圍外的資源叫用。如果您為 Ingress 網路設定「僅允許內部流量」,這個錯誤訊息表示系統只允許來自相同專案或 VPC Service Controls 範圍的虛擬私有雲網路要求。這也可能是預設 functions.net URL 的 404 錯誤

錯誤訊息

HTTP 錯誤回應代碼:404 NOT FOUND

解決方案

如要解決這項錯誤,請嘗試下列任一解決方案:

  • 確認要求來自您的 Google Cloud 專案或 VPC Service Controls 服務範圍。

  • 將函式的輸入設定變更為允許所有流量

  • 如果函式網址、HTTP 方法或邏輯錯誤等有誤,Cloud Run 函式原始碼也可能導致 404 錯誤。

函式呼叫缺少有效的驗證憑證

如要叫用已設定存取限制的 Cloud Run 函式,必須使用 ID 權杖存取權杖更新權杖無效。

錯誤訊息

HTTP 錯誤回應代碼:401 Unauthorized

HTTP 錯誤回應主體:

Your client does not have permission to the requested URL 'FUNCTION_NAME'

解決方案

如要解決這項錯誤,請按照下列任一解決方案操作:

  • 請確認要求包含 Authorization: Bearer ID_TOKEN 標頭,且權杖是 ID 權杖,而非存取或重新整理權杖。如果您使用服務帳戶的私密金鑰手動產生這個權杖,就必須將自行簽署的 JWT 權杖換成 Google 簽署的 ID 權杖。

    在要求標頭中使用驗證憑證,叫用 HTTP 函式。舉例來說,您可以使用 gcloud 取得身分符記,如下所示:

      curl  -H "Authorization: Bearer $(gcloud auth print-identity-token)" 
    https://REGION-PROJECT_ID.cloudfunctions.net/FUNCTION_NAME

  • 如果貴機構支援這項功能,請重新部署函式,允許未經驗證的叫用作業。這在測試時相當實用。

函式在執行期間停止,或在程式碼執行完畢後繼續執行

部分 Cloud Run functions 執行階段可讓使用者執行非同步工作。如果函式會建立這類工作,也必須明確等待這些工作完成。否則函式可能會在錯誤的時間停止執行。

錯誤行為

函式出現下列其中一種行為:

  • 非同步工作仍在執行,但指定逾時時間尚未到期,函式就已終止。
  • 這些工作完成後,函式不會停止執行,而是會持續執行,直到逾時時間結束為止。

解決方案

如果函式提早終止,請務必先完成函式的所有非同步工作,再執行下列任一動作:

  • 傳回值
  • 解析或拒絕傳回的 Promise 物件 (僅限 Node.js 函式)
  • 擲回未偵測到的例外狀況或錯誤
  • 傳送 HTTP 回應
  • 呼叫回呼函式

如果函式在完成非同步工作後無法終止,請確認函式是否在完成後正確發出 Cloud Run 函式信號。特別是,請務必在函式完成非同步工作後,立即執行先前列出的其中一項作業。

存取受 VPC Service Controls 保護的資源時發生執行階段錯誤

根據預設,Cloud Run 函式會使用公開 IP 位址,向其他服務發出輸出要求。如果函式不在 VPC Service Controls 範圍內,嘗試存取受 VPC Service Controls 保護的 Google Cloud 服務時,可能會因服務範圍拒絕而收到 HTTP 403 回應。

錯誤訊息

在「受稽核的資源」記錄中,類似下列內容的項目:

"protoPayload": {
  "@type": "type.googleapis.com/google.cloud.audit.AuditLog",
  "status": {
    "code": 7,
    "details": [
      {
        "@type": "type.googleapis.com/google.rpc.PreconditionFailure",
        "violations": [
          {
            "type": "VPC_SERVICE_CONTROLS",
  ...
  "authenticationInfo": {
    "principalEmail": "CLOUD_FUNCTION_RUNTIME_SERVICE_ACCOUNT",
  ...
  "metadata": {
    "violationReason": "NO_MATCHING_ACCESS_LEVEL",
    "securityPolicyInfo": {
      "organizationId": "ORGANIZATION_ID",
      "servicePerimeterName": "accessPolicies/NUMBER/servicePerimeters/SERVICE_PERIMETER_NAME"
  ...

解決方案

如要解決這項錯誤,請按照下列任一解決方案操作:

擴充性

本節列出可擴充性問題,並提供各項問題的修正建議。

與待處理佇列要求中止相關的 Cloud Logging 錯誤

下列情況可能會導致擴充失敗:

  • 流量突然大幅增加。
  • 冷啟動時間過長。
  • 要求處理時間過長。
  • 函式錯誤率偏高。
  • 達到執行個體上限,導致系統無法擴充。
  • 歸因於 Cloud Run functions 服務的暫時性因素。

在上述任一情況下,Cloud Run functions 可能無法快速擴充,以管理流量。

錯誤訊息

  • The request was aborted because there was no available instance
    • severity=WARNING ( 回應代碼:429 ) Cloud Run functions 無法擴充,因為您在設定期間設定了 max-instances 限制。
    • severity=ERROR ( 回應代碼:500 ) Cloud Run functions 本身無法管理流量速率。

解決方案

  • 如要解決這個問題,請先處理先前列出的原因。

  • 如果是以 HTTP 觸發為基礎的函式,請讓用戶端針對不得捨棄的要求,實作指數輪詢和重試機制。如果您是從 Workflows 觸發 Cloud Run 函式,可以使用 try/retry 語法達成此目的。

  • 如果是背景或事件驅動函式,Cloud Run 函式支援至少傳送一次。 即使未明確啟用重試功能,系統也會自動重新傳送事件,並重試執行函式。詳情請參閱「重試事件驅動函式」。

  • 如果問題的根本原因是一段時間內暫時性錯誤增加,且完全歸因於 Cloud Run 函式,或是您需要協助解決問題,請與支援團隊聯絡。

  • 如要解決冷啟動相關問題,請設定執行個體數量下限,減少冷啟動次數,但這會導致帳單費用增加。

記錄

下一節將說明記錄檔相關問題及修正方法。

記錄項目沒有或有不正確的記錄嚴重性層級

Cloud Run functions 預設會包含執行階段記錄。寫入 stdoutstderr 的記錄會自動顯示在 Cloud Logging 中。但根據預設,這些記錄檔項目只會包含字串訊息。

錯誤訊息

記錄檔中沒有或有錯誤的嚴重程度。

解決方案

如要納入記錄嚴重性,請傳送結構化記錄項目。

當機時,以不同方式處理或記錄例外狀況

您可能想自訂管理及記錄當機資訊的方式。

解決方案

將函式包裝在 try 區塊中,即可自訂例外狀況的處理方式和記錄堆疊追蹤記錄。

示例

import logging
import traceback
def try_catch_log(wrapped_func):
  def wrapper(*args, **kwargs):
    try:
      response = wrapped_func(*args, **kwargs)
    except Exception:
      # Replace new lines with spaces so as to prevent several entries which
      # would trigger several errors.
      error_message = traceback.format_exc().replace('\n', '  ')
      logging.error(error_message)
      return 'Error';
    return response;
  return wrapper;

#Example hello world function
@try_catch_log
def python_hello_world(request):
  request_args = request.args

  if request_args and 'name' in request_args:
    1 + 's'
  return 'Hello World!'

Node.js 10 以上版本、Python 3.8、Go 1.13 和 Java 11 中的記錄過大

在這些執行階段中,一般記錄項目的最大大小為 105 KiB。

解決方案

傳送小於此限制的記錄項目。

Cloud Run 函式傳回錯誤,但缺少記錄

Cloud Run 函式會將 Cloud Run 函式記錄串流至預設 bucket。建立專案時,Cloud Run functions 會建立並啟用預設值區。如果預設 bucket 已停用,或 Cloud Run 函式記錄位於排除篩選器中,記錄檔探索工具就不會顯示記錄。

解決方案

啟用預設記錄。

記錄檔探索工具未顯示 Cloud Run functions 記錄

部分 Cloud Logging 用戶端程式庫會使用非同步程序寫入記錄檔項目。如果函式當機或終止,可能有些記錄項目尚未寫入,稍後可能會顯示。部分記錄檔可能會遺失,且無法在記錄檔探索工具中查看。

解決方案

使用用戶端程式庫介面,在函式結束前排清緩衝的記錄檔項目,或使用程式庫同步寫入記錄檔項目。您也可以直接將記錄同步寫入 stdoutstderr

使用記錄路由器接收器時,Cloud Run functions 記錄遺失

記錄檔路由器接收器會將記錄項目轉送至各種目的地。

螢幕截圖:控制台記錄檔路由器,並醒目顯示「查看接收器詳細資料」

排除篩選器會定義可捨棄的項目。

解決方案

移除「resource.type = "cloud_run_revision"」的排除篩選器組合。

資料庫連線

連線至資料庫時可能會發生許多問題,其中許多問題與超出連線限制或逾時有關。如果記錄檔中顯示 Cloud SQL 警告 (例如 Context deadline exceeded),您可能需要調整連線設定。詳情請參閱 Cloud SQL 最佳做法

網路

本節列出網路問題,並提供各項問題的修正建議。

網路連線

即使設定輸出設定後,Cloud Run 函式的所有輸出要求仍失敗,您可以執行連線測試,找出任何潛在的網路連線問題。詳情請參閱「建立及執行連線測試」。

無伺服器虛擬私有雲存取連接器尚未就緒或不存在

如果無伺服器虛擬私有雲存取連接器發生錯誤,可能是因為未使用連接器專用的 /28 子網路遮罩。

錯誤訊息

Problem connecting to VPC Connector projects/xxxxx/locations/REGION/connectors/xxxx: Serverless VPC Access is not found.

如果 Google API 服務代理程式服務帳戶 PROJECT_NUMBER@cloudservices.gserviceaccount.com缺少權限,導致連線器狀態不佳,部署 Cloud Run 函式時就會發生下列錯誤:

錯誤訊息

Failed to prepare VPC connector. Please try again later.

解決方案

列出子網路,檢查連接器是否使用 /28 子網路遮罩。如果連接器未使用 /28 子網路遮罩,請重新建立或建立新的連接器

如要解決這個問題,請嘗試下列任一解決方案:

  • 如果重新建立連接器,就不需要重新部署其他函式。重新建立連接器時,網路可能會中斷。

  • 如果您建立新的替代連接器,請重新部署函式以使用新連接器,然後刪除原始連接器。這個方法可避免網路中斷。

  • 請確認 Cloud Run 函式及其相關聯的連接器部署在相同區域。

  • 共用虛擬私有雲設定:

    • 請確認 VPC Connector 用於在專案中佈建資源的服務帳戶 SERVICE_PROJECT_NUMBER@cloudservices.gserviceaccount.comservice-SERVICE_PROJECT_NUMBER@gcp-sa-vpcaccess.iam.gserviceaccount.com 沒有缺少權限。如果連接器位於服務專案中,這些服務帳戶應在共用虛擬私有雲設定的主專案中具備 roles/compute.networkUser 角色。

    • 如果連接器是在主專案中建立,請確保主專案的 Cloud Run 服務代理人獲授 Serverless VPC Access User 角色。

  • 如果連接器狀態顯示 Connector is in a bad state, manual deletion recommended 錯誤,且 Google API 服務代理人缺少在連接器專案中佈建運算資源的必要權限,請將 roles/compute.admin 授予 PROJECT_NUMBER@cloudservices.gserviceaccount.com 服務帳戶。在某些情況下,新增這些權限後可能需要重新建立連結器。

系統會封鎖使用 TCP 通訊埠 25 傳輸至外部目的地 IP 位址的 SMTP 流量

為提升安全防護,從函式傳送電子郵件時,系統會封鎖與 TCP 目的地通訊埠 25 的連線。 Google Cloud

解決方案

如要解除封鎖這些連線,請嘗試下列任一解決方案:

預設 functions.net URL 發生 404 錯誤

在 Cloud Run 中停用 run.app 網址,也會禁止存取 Cloud Run 函式 (第 2 代) 的預設 cloudfunctions.net 網址。如果只允許內部流量,也可能導致放送錯誤

錯誤訊息

HTTP 錯誤回應代碼:404 NOT FOUND

解決方案

如要重新啟用 Cloud Run 函式 (第 2 代) 的預設 cloudfunctions.net 網址,請在 Cloud Run 中重新啟用 run.app 網址,方法是將 service.yaml 檔案替換為新設定,其中 annotations:run.googleapis.com/default-url-disabled: false