google-cloud-functions - 当 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"
}
解决方案
根据官方文档:
要使用 Cloud Scheduler,您的 Cloud 项目必须包含位于受支持区域之一的 App Engine 应用。如果您的项目没有 App Engine 应用程序,您必须创建一个。
因此,通过运行以下命令找到您的应用引擎应用程序的位置:
gcloud app describe
#check for the locationId: europe-west2
然后确保使用 Ingress Settings 将云功能部署为“仅允许内部流量”到与应用引擎应用程序相同的位置。
我在与我的应用引擎应用程序相同的区域部署了一个云功能,一切都按预期工作。
推荐阅读
- git - 如何将新添加的分支从上游获取到原点?
- python - 为什么生产者-消费者不停止?
- docker - docker service create 永远不会返回
- linux - 收到邮件时运行 linux 脚本
- mysql - 查询差异
- subscription - 为什么 Subscription on Created 不适用于 Prisma?
- css - CSS 和 SCSS/SASS 变量中的自定义属性之间的区别
- mysql - Angular - 在 Zeppelin 中将动态表单内容插入数据库
- android - 创建为您提供位置的按钮 (Android Studio)
- go - 如何在 nats 中回复已接受的连接。在 golang 中订阅