标签: google-cloud-run

如何关联 Cloud Run 中的请求日志?

我正在使用自结构的 JSON 有效负载从基于 Node.js/Express 的 Cloud Run 服务进行日志记录,但无法从同一请求中获取日志以使用该trace方法进行关联。

文件说:

除非您使用 Stackdriver Logging 客户端库,否则容器日志不会自动与请求日志相关联。如果您希望在不使用客户端库的情况下进行这种关联,请使用结构化 JSON 日志行,其中包含带有传入 X-Cloud-Trace-Context 标头内​​容的跟踪字段。然后您的日志将与请求日志正确关联。

我知道我的结构化 JSON 日志正在按预期工作,level/severity并且message正在按预期提取和显示。

我传递的trace正是X-Cloud-Trace-Context我使用req.getExpress: 提供的方法获得的标头所传递的值req.get('X-Cloud-Trace-Context')

这是正在记录的 JSON:

{
    "message": "Create Query",
    "level": "debug",
    "severity": "DEBUG",
    "trace": "40f...........................cc/131...............23;o=1"
}
Run Code Online (Sandbox Code Playgroud)

以下是该日志行在 Stackdriver Logging 中的显示方式示例。

我还尝试使用结构化负载文档logging.googleapis.com/trace中的特殊字段中提到的属性。我相当确定X-Cloud-Trace-Context标头的值对此属性无效,但我不确定如何设置标头值的格式以匹配此页面上记录的值。


综上所述,我的问题是:

  • 哪个是正确的属性名称trace
  • 如何根据X-Cloud-Trace-Context标题的值正确格式化此属性的值?

以下是 Stackdriver Logging 中显示的完整日志消息示例(已删除 ID):

{
    "message": "Create Query", …
Run Code Online (Sandbox Code Playgroud)

logging stackdriver google-cloud-run

5
推荐指数
1
解决办法
583
查看次数

使用“--set-sql-instance”参数部署到云运行时,云构建权限被拒绝

我正在尝试配置构建maven springboot项目然后部署到云运行的云构建触发器。当我没有指定要连接的云 sql 实例时,我遇到了一个问题,但是当我添加"--set-cloudsql-instances", "${_DATABASE_CONNECTION_NAME}"为参数之一时,它会在云构建中引发错误,如下所示:

Step #1: ERROR: (gcloud.beta.run.deploy) PERMISSION_DENIED: The caller does not have permission
Finished Step #1
ERROR
ERROR: build step 1 "gcr.io/cloud-builders/gcloud" failed: exit status 1
Run Code Online (Sandbox Code Playgroud)

以下是我的 cloudbuild.yml

steps:
  - name: 'gcr.io/kaniko-project/executor:latest'
    args:
      - --destination=gcr.io/$PROJECT_ID/${_IMAGE_NAME}
      - --cache=true
  - name: 'gcr.io/cloud-builders/gcloud'
    args: [
      "beta", "run",
      "deploy", "${_SERVICE_NAME}-${_PROFILE}",
      "--image", "gcr.io/${PROJECT_ID}/${_IMAGE_NAME}",
      "--region", "${_REGION}",
      "--platform", "managed",
      "--set-cloudsql-instances", "${_DATABASE_CONNECTION_NAME}",
      "--allow-unauthenticated",
      "--set-env-vars", "SPRING_PROFILES_ACTIVE=${_SPRING_PROFILE},DATABASE_CONNECTION_NAME=${_DATABASE_CONNECTION_NAME},DATABASE_NAME=${_DATABASE_NAME},DATABASE_USERNAME=${_DATABASE_USERNAME},DATABASE_PASSWORD=${_DATABASE_PASSWORD},MINIO_ACCESS_KEY=${_MINIO_ACCESS_KEY},MINIO_SECRET_KEY=${_MINIO_SECRET_KEY},MINIO_HOSTNAME=${_MINIO_HOSTNAME},MINIO_PORT=${_MINIO_PORT}"
    ]
images:
  - gcr.io/${PROJECT_ID}/${_IMAGE_NAME}
Run Code Online (Sandbox Code Playgroud)

我已经为服务帐户设置了角色/权限,如下所示:

  • {PROJECT_ID}-compute@developer.gserviceaccount.com : 编辑器,Cloud Sql 客户端 <-- 默认 SA
  • <Cloud run service …

google-cloud-sql google-cloud-platform google-cloud-build google-cloud-run

5
推荐指数
1
解决办法
3029
查看次数

Google Cloud 上的 IP 过滤运行

我有一个 Angular Web 应用程序,我想使用 Google Cloud run 进行部署。但是,我只需要从预定义的 IP 地址列表中才能看到该应用程序。

我可以简单地在谷歌云平台防火墙下设置 ip 允许/拒绝规则还是需要其他方法?

提前致谢,

妮可

google-cloud-run

5
推荐指数
1
解决办法
1426
查看次数

处理 Cloud Run 容器关闭

在编写 Cloud Run 服务时,我们开发了一个容器来侦听PORT环境变量以处理传入的 HTTP 请求。容器的一个实例启动并处理请求,然后在完成原始请求后存活一段时间,以防有进一步的请求到达。如果没有进一步的请求,GCP 会关闭容器。正是在这个领域,我有一个问题。

集装箱内是否有挂钩、信号或其他迹象表明集装箱正在关闭?

在我的示例中,我的容器想要干净地结束。也许它想关闭连接或执行一些缓存的快速刷新。

google-cloud-platform google-cloud-run

5
推荐指数
1
解决办法
1571
查看次数

Cloud Run 错误:容器无法启动

我无法将基本的 Angular 应用程序部署到 Google Cloud Run。该错误表明它未在端口 8080 上正确提供服务,但在我的机器上本地运行 localhost:8080 显示该应用程序。所以我可能需要一些额外的东西来运行云,如果有人有什么想法吗?

详细情况如下:

我创建了一个基本的角度应用程序

ng new test-app
Run Code Online (Sandbox Code Playgroud)

Dockerfile 如下

FROM node:latest as node
WORKDIR /app
COPY . .

RUN npm install
RUN npm run build --prod

ENV PORT=8080

FROM nginx:latest
COPY --from=node /app/dist/test-app /usr/share/nginx/html
EXPOSE 8080
CMD ["nginx", "-g", "daemon off;"]
Run Code Online (Sandbox Code Playgroud)

在本地我运行构建的容器,我可以在 localhost:8080 看到它

docker container run -p 8080:80 gcr.io/$GOOGLE_PROJECT/test-app:$IMAGE
Run Code Online (Sandbox Code Playgroud)

截屏

然后我部署到 Google Cloud Run 托管。

gcloud run deploy test-app --image gcr.io/$GOOGLE_PROJECT/test-app:$IMAGE --platform managed
Run Code Online (Sandbox Code Playgroud)

但是,它无法以错误开头

Cloud Run error: Container failed to start. …
Run Code Online (Sandbox Code Playgroud)

dockerfile google-cloud-run

5
推荐指数
1
解决办法
6790
查看次数

您可以在 Cloud Run 容器中运行沙盒容器吗?

假设我会让用户上传一些 python 或 bash 脚本,在云运行中执行它并返回结果。为此,我将使用无权访问项目资源的服务帐户创建 Cloud Run 服务。我也想在嵌套容器中运行脚本,这样用户就不能干扰服务器代码并操纵来自其他用户的连续请求。

我如何让 gvisor runc 或其他一些沙箱运行时在 Cloud Run 上运行的容器内可用?

我发现一些资源提到在原始容器上使用特权标志,但这在 Cloud Run 中是不可能的。此外,我找不到有关如何使用 runc 运行无根容器的任何信息。让我知道我是否在正确的轨道上,或者这是否可以通过云运行实现,或者我应该使用其他服务吗?

谢谢你。

sandbox docker google-cloud-platform google-cloud-run gvisor

5
推荐指数
1
解决办法
277
查看次数

Cloudflare 和 Google Cloud Run 出现 525 错误

最近我的登台网站因 525 错误而关闭。

这意味着源服务器不信任 Cloudflare,但是我已经 6 个月没有接触 Cloud Run 和 Cloudflare 之间的任何东西了。

为了让它再次工作,我不得不将 Cloudflare 放入Full (Not strict) Mode.

您认为这个问题是由 Cloudflare 证书更新引起的吗?如果是这种情况,我需要将 Cloudflare Origin CA 放在 Cloud Run 上,但我找不到任何关于此的信息。

希望您能帮帮我,谢谢!

ssl cloudflare google-cloud-platform google-cloud-run

5
推荐指数
1
解决办法
1276
查看次数

如何从 dart 代码连接到 Cloud PostgreSQL 数据库?

我在 Google Cloud 中部署了一个 PostgreSQL 数据库,我试图从 Cloud Run 实例连接到该数据库。我尝试了以下两个包,它们最终都导致了相同的异常:

我得到的例外是: SocketException: Failed host lookup: '/cloudsql/{INSTANCE_CONNECTION_NAME}' (OS Error: Name or service not known, errno = -2)

我在尝试建立连接时两次都到这里,所以在第一个包的情况下:

connection = new PostgreSQLConnection(
        '/cloudsql/{INSTANCE_CONNECTION_NAME}',
        5432,
        'postgres',
        username: 'username',
        password: 'password');
await connection.open(); // <-- exception thrown here
Run Code Online (Sandbox Code Playgroud)

我曾尝试将主机字符串更改为/cloudsql/INSTANCE_CONNECTION_NAME}/.s.PGSQL.5432,但这不起作用。我首先想到的是权限,Cloud Run 实例使用的服务帐户 (xxx-compute@developer.gserviceaccount.com) 具有该Cloud SQL Editor角色(也尝试过 Client 和 Admin)。

从 dart 控制台应用程序在本地运行相同的数据库代码,我可以通过它的公共 IP 地址连接到我的数据库作为带有两个包的主机,因此数据库本身已启动并正在运行。

有人可以通过此异常为我指出正确的方向/有上述任何包的示例代码,以展示如何将其从 Cloud Run 连接到 Cloud SQL 实例?

编辑:我尝试在本地设置代理以测试连接是否错误,如下所示:

.\cloud_sql_proxy.exe -instances={INSTANCE_CONNECTION_NAME}=tcp:5433 psql
Run Code Online (Sandbox Code Playgroud)

然后将代码中的连接主机值更改为localhost,并将端口更改为 …

postgresql dart google-cloud-sql google-cloud-run

5
推荐指数
1
解决办法
394
查看次数

为什么我会在部署容器时看到此错误:“错误:(gcloud.run.deploy) PERMISSION_DENIED:调用方没有权限”?

假设我有一个cloudbuild.yaml像下面这样的文件。还假设我可以在gcloud用于单独的功能(构建和运行)时手动运行和部署有问题的容器。

部署的时候,第三步导致报错 ERROR: (gcloud.run.deploy) PERMISSION_DENIED: The caller does not have permission

steps:
# Build the container image
- name: 'gcr.io/cloud-builders/docker'
  args: ['build', '-t', 'gcr.io/[PROJECT_ID]/[IMAGE]:$COMMIT_SHA', '.']
# Push the image to Container Registry
- name: 'gcr.io/cloud-builders/docker'
  args: ['push', 'gcr.io/[PROJECT_ID]/[IMAGE]:$COMMIT_SHA']
# Deploy image to Cloud Run
- name: 'gcr.io/cloud-builders/gcloud'
  args:
  - 'run'
  - 'deploy'
  - '[SERVICE_NAME]'
  - '--image'
  - 'gcr.io/[PROJECT_ID]/[IMAGE]:$COMMIT_SHA'
  - '--region'
  - '[REGION]'
  - '--platform'
  - 'managed'
images:
- gcr.io/[PROJECT_ID]/[IMAGE]

Run Code Online (Sandbox Code Playgroud)

google-cloud-platform google-cloud-build google-cloud-run

5
推荐指数
2
解决办法
4538
查看次数

谷歌云运行、Django 和 sqlite

我正在 Django 中开发小型单用户应用程序。目前我使用 Heroku 这样做,效果很好。我想在 Google Cloud run 上部署应用程序,以便将来有更多的灵活性。

为了使开销尽可能小,我正在考虑使用 Sqlite。为了保持持久性,我只需要一个持久卷,它可以通过 Google Cloud 存储实现,该存储通过 gcsfuse 安装到 docker 容器中。但问题就在这里。我找不到带有 python 和 gcsfuse 的小图像。我不是码头工人。刚刚开始...

任何帮助表示赞赏。

django google-cloud-storage docker google-cloud-run

5
推荐指数
1
解决办法
774
查看次数