从Cloud Function部署Google Cloud Function

时间:2018-11-30 13:00:54

标签: google-cloud-platform google-cloud-functions

已解决/无效-参见下文

我正在尝试根据需要从Google Cloud Function部署Google Cloud Function。

但是,无论我如何尝试,我都会被禁止使用403:

请求https://cloudfunctions.googleapis.com/v1/projects/MY_PROJECT/locations/MY_REGION/functions?alt=json时返回HttpError 403“呼叫者没有权限”

我最终授予云功能服务帐户“项目所有者”角色,以确保它可以执行任何操作,但仍然出现相同的错误。

这是故意限制的吗(例如,避免叉炸弹之类的东西)还是我做错了什么?

有人能做这项工作吗?

记录:我使用自己的帐户在Flask上本地运行了相同的(Python)函数,然后它将完美地部署了新的云函数,因此代码本身似乎还可以。

更新

我如何部署云功能的代码片段:

cf_client = discovery.build('cloudfunctions', 'v1')

location = "projects/{MYPROJECT}/locations/europe-west1"

request = {
    "name": "projects/{MYPROJECT}/locations/europe-west1/functions/hopper--2376cd24d318cd2d42f000f4f1c31a8f", 
    "description": "Hopper hopper--2376cd24d318cd2d42f000f4f1c31a8f", 
    "entryPoint": "pubsub_trigger", 
    "runtime": "python37", 
    "availableMemoryMb": 256, 
    "timeout": "60s", 
    "sourceArchiveUrl": "gs://staging.{MYPROJECT}.appspot.com/deployment/hopper.zip", 
    "eventTrigger": {
        "eventType": "providers/cloud.pubsub/eventTypes/topic.publish",
        "resource": "projects/{MYPROJECT}/topics/hopper-test-input"
    },
    "environmentVariables": {
        "HOPPER_ID": "hopper--2376cd24d318cd2d42f000f4f1c31a8f"
    }
}

response = cf_client.projects() \
    .locations() \
    .functions() \
    .create(location=location, body=req) \
    .execute()

更新

我觉得自己是个白痴...事实证明,由于某种原因,我将主功能部署到了与我授予权限的项目不同的项目中。难怪它没有用。

1 个答案:

答案 0 :(得分:0)

正确的答案应该是:检查一切是否确实在按预期方式运行。一切都已正确配置,并且在CF中部署CF并不是问题。该项目不正确,原因是在gcloud实用程序上设置了其他默认项目。