使用 Cloud Build 和 VPC 连接器将 Node 应用程序自动部署到 App Engine

Posted

技术标签:

【中文标题】使用 Cloud Build 和 VPC 连接器将 Node 应用程序自动部署到 App Engine【英文标题】:Deploying automatically Node app to App Engine with Cloud Build and VPC connector 【发布时间】:2020-02-28 16:27:35 【问题描述】:

在将带有 Cloud Build 和 VPC 连接器的 App Engine 应用程序部署到我的 MongodDB Atlas 数据库时遇到问题。

当我使用 gcloud 部署它时,它可以与以下命令完美配合: gcloud beta 应用部署

但我希望通过 Cloud Build 实现 CI(持续集成)。 在 Cloud build 期间出现以下错误:

Step #3: #============================================================#
Step #3: #= Uploading 2 files to Google Cloud Storage                =#
Step #3: #============================================================#
Step #3: File upload done.
Step #3: Updating service [nodeapi]...
Step #3: .......................................................................................................................................................................................failed.
Step #3: ERROR: (gcloud.beta.app.deploy) Error Response: [7] Error attaching GCE network to app.
Step #3: 
Step #3: Details: [
Step #3:   [
Step #3:     
Step #3:       "@type": "type.googleapis.com/google.rpc.ResourceInfo",
Step #3:       "resourceName": "projects/visifingc/global/networks/default",
Step #3:       "resourceType": "Network"
Step #3:     
Step #3:   ]
Step #3: ]
Step #3: 
Finished Step #3
ERROR
ERROR: build step 3 "gcr.io/cloud-builders/gcloud" failed: exit status 1

我的 app.yaml 文件:

runtime: nodejs10
service: nodeapi
vpc_access_connector:
  name: "projects/visifingc/locations/europe-west1/connectors/app-engine"

network:
  name: default

还有 cloudbuild.yaml:

steps:
  - name: node:10.15.1
    entrypoint: npm
    args: ["install"]
  - name: node:10.15.1
    entrypoint: npm
    args: ["run", "build"]
  - name: "gcr.io/cloud-builders/gcloud"
    args: ["beta","app","deploy"]

当我在 App Engine 中查看已部署的实例配置时(但出现错误,因此未真正部署) 以下 App Engine Instance Configuration 可以看到:

runtime: nodejs10
env: standard
instance_class: F1
handlers:
  - url: .*
    script: auto
automatic_scaling:
  min_idle_instances: automatic
  max_idle_instances: automatic
  min_pending_latency: automatic
  max_pending_latency: automatic
network: 

如您所见,网络出现问题,因为它是空的。

您能帮我找到解决方案吗?我认为这可能是一个权限问题,因此我尝试授予所有帐户对 VPC 的访问权限,但 id 没有帮助。 大多数情况下,我遵循此处描述的 VPC 网络的定义设置: https://cloud.google.com/appengine/docs/standard/nodejs/connecting-vpc

【问题讨论】:

我不是 nodejs 环境的专家,但据我所知,您无法访问具有标准环境的 VPC,我看到应用程序中缺少 env: flexible 字段。 yaml - 这真的很奇怪,它是如何通过 gcloud 工作的,所以我可能错了。 【参考方案1】:

我遇到了同样的问题,结果发现它毕竟是一个权限问题。对我们来说,解决方法是为 CI/CD 进程授予“计算网络管理员”权限。

【讨论】:

这个答案对我有帮助。顺便说一句,我授予“计算网络用户”(而不是“管理员”)权限只是为了避免过度许可【参考方案2】:

我早些时候遇到过这个问题,并为此苦苦挣扎了一段时间。解决了从“gcloud beta app deploy”更改为简单的“gcloud app deploy”的问题。不知道为什么 beta 版本不起作用(尤其是在您的 CLI 中运行时)。

我知道这不是一个令人满意的答案,但希望它能让你走上正轨!

之前:

steps:
  - name: "gcr.io/google-containers/busybox"
    args: ["sed", "-i", "s/PROJECT_ID/$PROJECT_ID/g", "app.yaml"]
  - name: "gcr.io/cloud-builders/gcloud"
    args: ["beta", "app", "deploy"]

之后:

steps:
  - name: "gcr.io/google-containers/busybox"
    args: ["sed", "-i", "s/PROJECT_ID/$PROJECT_ID/g", "app.yaml"]
  - name: "gcr.io/cloud-builders/gcloud"
    args: ["app", "deploy"]

【讨论】:

以上是关于使用 Cloud Build 和 VPC 连接器将 Node 应用程序自动部署到 App Engine的主要内容,如果未能解决你的问题,请参考以下文章

CodeBuild 与 Amazon Virtual Private Cloud 结合使用

如何将 Cloud9 (python) 连接到 VPC 中的 Redshift?

限制通过VPC网络访问Google Cloud Firestore。

GCP - 将 Vertex.AI 连接到共享 VPC 的问题

使用私有 IP 从不同 VPC 网络中的 GKE 集群连接到 Cloud SQL

OTC(Open Telekom Cloud)与AWS对比之VPC