排解 Cloud Run 函式問題
本文說明如何排解錯誤訊息,以及使用 Cloud Run 函式時如何解決問題。如果您使用 Cloud Run 建立或部署函式,請參閱排解 Cloud Run 問題。
部署作業
本節列出部署時可能會遇到的問題,並提供修正各項問題的建議。在部署期間可能遇到的許多問題,都與角色和權限或不正確的設定有關。
您可以使用身分與存取權管理,授權身分在使用 Cloud Functions v2 API 建立的函式上執行管理動作,例如使用 gcloud functions
、REST API 或 Terraform。管理動作包括建立、更新和刪除函式。詳情請參閱「使用 IAM 授權存取權」。
使用者在部署函式時,缺少對執行階段服務帳戶的權限
每個函式都與一個做為其身分識別的服務帳戶相關聯,當函式存取其他資源時,就會使用該服務帳戶。這個執行階段服務帳戶可以是預設服務帳戶或使用者自行管理的服務帳戶。在有多個函式存取不同資源的環境中,一般做法是使用個別函式身分搭配命名的執行階段服務帳戶,而非預設執行階段服務帳戶 (PROJECT_NUMBER[email protected]
)。
如要使用執行階段服務帳戶,部署者必須擁有該服務帳戶的 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[email protected] the role 'roles/iam.serviceAccountUser' to the caller on the service account projects/-/serviceAccounts/PROJECT_NUMBER[email protected] can do that by running 'gcloud iam service-accounts add-iam-policy-binding projects/-/serviceAccounts/PROJECT_NUMBER[email protected] --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[email protected]"
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[email protected]"]
解決方法
您可以將服務帳戶重設為預設的 cloudfunctions.serviceAgent 角色。
預設的執行階段服務帳戶不存在
如果您未指定使用者代管的執行階段服務帳戶,Cloud Functions 會使用預設的 Compute 服務帳戶做為執行階段服務帳戶。如果您刪除預設帳戶,但未指定使用者自行管理的帳戶,則部署作業會失敗。
錯誤訊息
gcloud
ERROR: (gcloud.functions.deploy) ResponseError: status=[404], code=[Ok], message=[Service account projects/-/serviceAccounts/PROJECT_NUMBER[email protected] was not found.]
解決方法
如要解決這個問題,請按照下列任一解決方案操作:
在部署函式前,指定使用者代管的執行階段服務帳戶。
部署函式時,Cloud Functions Service Agent 服務帳戶缺少專案值區權限
Cloud Run 函式只能由相同 Google Cloud Platform 專案中的 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[email protected]"]
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[email protected]"]
解決方法
如要解決這個問題,請將這個服務帳戶重設為預設角色。
具備「專案編輯者」角色的使用者無法將函式設為公開
專案編輯者角色擁有管理專案內資源的廣泛權限,但並未預設授予公開 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_values
或 denied_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 環境中提供更多可調整的資源分配,進而緩解因資源耗盡而導致的問題。
具備「檢視者」角色的使用者無法部署函式
獲派「專案檢視者」或「Cloud Functions 檢視者」角色的使用者,只能讀取函式和函式詳細資料,無法部署新函式。Google Cloud 控制台中的「Create function」功能已設為灰色,並顯示以下錯誤訊息:
錯誤訊息
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[email protected].
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.
解決方法
建構服務帳戶需要具備讀取來源值區的權限,以及讀取及寫入 Artifact Deployment 存放區的權限。您可能會因為 Cloud Build 使用服務帳戶的預設行為異動而遇到這個錯誤,詳情請參閱「Cloud Build 服務帳戶異動」。
如要解決這個問題,請使用下列任一解決方案:
- 為函式部署作業建立自訂建構服務帳戶。
- 將 Cloud Build 服務帳戶角色 (
roles/cloudbuild.builds.builder
) 新增至預設的 Compute 服務帳戶。 - 請參閱 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.
解決方法
如要解決這個問題,請按照下列任一解決方案操作:
為使用者指派特定功能的 Cloud Run 叫用者 Cloud IAM 角色。
如果貴機構支援這項功能,請重新部署函式,允許未經驗證的叫用作業。這在測試時相當實用。
由於 allow internal traffic only
設定,導致供應錯誤
Ingress 設定可限制 HTTP 函式是否可由 Google Cloud 專案或 VPC Service Controls 服務範圍以外的資源叫用。為 ingress 網路設定「僅允許內部流量」時,這則錯誤訊息表示系統只允許來自相同專案或 VPC Service Controls 範圍內虛擬私有雲網路的要求。這也可能是預設 functions.net
網址的 404 錯誤。
錯誤訊息
HTTP 錯誤回應代碼:404 NOT FOUND
解決方法
如要解決這項錯誤,請按照下列任一解決方案操作:
請確認要求來自您的 Google Cloud 專案或 VPC Service Controls 服務範圍。
變更函式的輸入設定,允許所有流量。
Cloud Run 函式原始碼也可能因函式網址、HTTP 方法、邏輯錯誤等錯誤而導致 404 錯誤。
函式叫用缺少有效的驗證憑證
如要叫用已設定為存取權受限的 Cloud Run 函式,就必須使用ID 權杖。存取權杖或更新權杖無法運作。
錯誤訊息
HTTP 錯誤回應代碼:401 未授權
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 函式執行階段可讓使用者執行非同步工作。如果函式建立這類工作,則必須明確等待這些工作完成。否則,函式可能會在錯誤的時間停止執行。
錯誤行為
您的函式會呈現下列任一行為:
- 函式會在非同步工作仍在執行時終止,但在指定的逾時期限結束前終止。
- 在這些工作完成後,函式不會停止執行,而是會持續執行,直到逾時期限到期為止。
解決方法
如果函式提早終止,請務必確保函式執行下列任何動作之前,所有非同步工作都已完成:
- 傳回值
- 解析或拒絕傳回的
Promise
物件 (僅限 Node.js 函式) - 擲回未偵測到的例外狀況或錯誤
- 傳送 HTTP 回應
- 呼叫回呼函式
如果函式在完成非同步工作後無法終止,您應確認函式在完成後是否正確傳送 Cloud Run 函式信號。特別要注意,請務必在函式完成非同步工作後立即執行上述任一操作。
存取 VPC Service Controls 保護的資源時發生執行階段錯誤
根據預設,Cloud Run 函式會使用公開 IP 位址,向其他服務提出外出要求。如果函式不在 VPC Service Controls 範圍內,由於服務範圍遭到拒絕,函式在嘗試存取由 VPC Service Controls 保護的服務時,可能會收到 HTTP 403 回應。 Google Cloud
錯誤訊息
在稽核資源記錄中,記錄項目如下:
"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" ...
解決方法
如要解決這項錯誤,請按照下列任一解決方案操作:
函式應將所有傳出流量轉送至虛擬私有雲網路。詳情請參閱「部署符合 VPC Service Controls 的函式」一節。
或者,您也可以將週邊的存取權授予函式的執行階段服務帳戶。您可以建立存取層級,然後將存取層級新增至服務範圍,或是在範圍中建立 ingress 政策。詳情請參閱「使用 VPC Service Controls」。
擴充性
本節列出可擴充性問題,並提供每個問題的修正建議。
與待處理佇列要求中止相關的 Cloud Logging 錯誤
下列情況可能會導致調整失敗:
在每個情況下,Cloud Run 函式可能無法快速擴充,以便管理流量。
錯誤訊息
The request was aborted because there was no available instance
severity=WARNING
( 回應代碼:429) 由於您在設定期間設定的max-instances
限制,Cloud Run 函式無法進行調整。severity=ERROR
( 回應代碼:500) Cloud Run 函式本身無法管理流量速率。
解決方法
如要解決這個問題,請解決上述原因。
針對以 HTTP 觸發事件為基礎的函式,請讓用戶端針對不得捨棄的要求實作指數輪詢和重試機制。如果您想從工作流程觸發 Cloud Run 函式,可以使用
try/retry
語法來達成這項目標。對於背景或事件驅動函式,Cloud Run 函式支援至少一次傳送。即使未明確啟用重試功能,系統也會自動重新提交事件,並重試函式執行作業。詳情請參閱「重試事件驅動函式」。
如果問題的根本原因是 Cloud Run 函式造成的暫時性錯誤數量增加,或是您需要協助解決問題,請與支援團隊聯絡。
針對冷啟動相關問題,請設定執行個體數量下限,以減少冷啟動次數,進而降低帳單金額。
記錄
以下章節將說明記錄相關問題及其修正方式。
記錄項目沒有或有錯誤的記錄嚴重性層級
Cloud Run 函式預設會記錄執行階段記錄。寫入 stdout
或 stderr
的記錄會自動顯示在 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 函式會建立並啟用預設值區。如果預設 bucket 已停用,或是 Cloud Run 函式記錄位於排除篩選器中,則記錄不會顯示在 Logs Explorer 中。
解決方法
啟用預設記錄。
Cloud Run 函式記錄未顯示在記錄檔探索工具中
部分 Cloud Logging 用戶端程式庫會使用非同步程序來寫入記錄項目。如果函式發生當機或其他終止情形,則可能有些記錄項目尚未寫入,可能會稍後才出現。部分記錄檔可能會遺失,無法在記錄檔探索工具中查看。
解決方法
請在退出函式前使用用戶端程式庫介面清除緩衝記錄條目,或是使用程式庫同步寫入記錄條目。您也可以同步將記錄直接寫入 stdout
或 stderr
。
使用 Log Router 接收器時,缺少 Cloud Run 函式記錄
記錄檔路由器接收器會將記錄項目轉送至各種目的地。
「排除篩選器」可定義可捨棄的項目。
解決方法
移除 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.
如果 Cloud Run 函式在部署時,由於 Google APIs Service Agent 服務帳戶 PROJECT_NUMBER@cloudservices.gserviceaccount.com
缺少權限,導致連接器處於錯誤狀態,就會導致以下錯誤:
錯誤訊息
Failed to prepare VPC connector. Please try again later.
解決方法
列出子網路,檢查連接器是否使用 /28
子網路遮罩。如果連接器未使用 /28
子網路遮罩,請重新建立或建立新的連接器。
如要解決這個問題,請按照下列任一解決方案操作:
如果您重新建立連接器,就不需要重新部署其他函式。重新建立連接器時,可能會發生網路中斷的情況。
如果您建立新的替代連接器,請重新部署函式以使用新連接器,然後刪除原始連接器。這可避免網路中斷。
確認 Cloud Run 函式及其關聯連接器已部署在相同的區域。
共用虛擬私有雲設定:
請確認 VPC 連接器用於在專案中佈建資源的服務帳戶
SERVICE_PROJECT_NUMBER@cloudservices.gserviceaccount.com
和service-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 流量遭到封鎖
為提高安全性, Google Cloud 會在透過函式傳送電子郵件時,封鎖與 TCP 目的地通訊埠 25
的連線。
解決方法
如要解除封鎖這些連線,請按照下列任一解決方案操作:
透過其他通訊埠連線至 SMTP 伺服器,例如 TCP 通訊埠
587
或465
。
預設 functions.net
網址發生 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