首页 > 解决方案 > 当 ingressSettings = ALLOW_INTERNAL_ONLY 时如何从 Google Cloud Scheduler 调用 Google Cloud Function?

问题描述

在同一个项目中,我有一个 HTTP 云函数和一个云调度程序,它们向这个函数发送一个 POST 请求。我只想允许来自项目内部的请求调用函数。但是,当我将 Ingress Settings 设置为“仅允许内部流量”时,Cloud Scheduler 会得到“PERMISSION_DENIED”

这是错误日志(已编辑)


httpRequest: {
  status: 403   
 }
 insertId: "insert_id"  

jsonPayload: {
  @type: "type.googleapis.com/google.cloud.scheduler.logging.AttemptFinished"   
  jobName: "projects/project_name/locations/location/jobs/cloud_scheduler_job"   
  status: "PERMISSION_DENIED"   
  targetType: "HTTP"   
  url: "https://location-project_name.cloudfunctions.net/cloud_function_name"   
 }
 logName: "projects/project_name/logs/cloudscheduler.googleapis.com%2Fexecutions"  
 receiveTimestamp: "2020-02-20T13:15:43.134508712Z"  

resource: {

labels: {
   job_id: "cloud_scheduler_name"    
   location: "location"    
   project_id: "project_id"    
  }
  type: "cloud_scheduler_job"   
 }
 severity: "ERROR"  
 timestamp: "2020-02-20T13:15:43.134508712Z"  
}

链接到 ingressSettings 的 UI 选项

标签: google-cloud-functionsgoogle-cloud-scheduler

解决方案


根据官方文档:

要使用 Cloud Scheduler,您的 Cloud 项目必须包含位于受支持区域之一的 App Engine 应用。如果您的项目没有 App Engine 应用程序,您必须创建一个。

Cloud Scheduler 概览

因此,通过运行以下命令找到您的应用引擎应用程序的位置:

gcloud app describe
#check for the locationId: europe-west2

然后确保使用 Ingress Settings 将云功能部署为“仅允许内部流量”到与应用引擎应用程序相同的位置。

我在与我的应用引擎应用程序相同的区域部署了一个云功能,一切都按预期工作。


推荐阅读