You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过编程方式创建可访问Cloud SQL的Cloud Run Job?

如何通过编程方式创建可访问私有Cloud SQL的Cloud Run Job?

问题描述

我需要通过编程方式创建一个能访问Cloud SQL实例的Cloud Run Job。在控制台成功创建的Job的YAML文件里,看到访问权限是由run.googleapis.com/cloudsql-instances和run.googleapis.com/vpc-access-connector这类注解控制的。

尝试用Java Builder添加注解:

builder.putAnnotations(
        "run.googleapis.com/cloudsql-instances",
        "my-instance")

结果触发报错:

INVALID_ARGUMENT: Violation in CreateJobRequest.job.template.annotations[run.googleapis.com/vpc-access-egress]: system annotations are not supported in Cloud Run API v2.

这让我以为以run.googleapis.com开头的注解不被允许,那是不是没法通过编程方式创建连接私有Cloud SQL数据库的Job?


解决方案

不是无法实现,而是Cloud Run API v2不再支持通过系统注解(以run.googleapis.com开头的)配置VPC或Cloud SQL访问,需要改用API v2对应的原生字段来配置:

1. 配置Cloud SQL访问(Java示例)

在API v2中,Cloud SQL实例的连接有两种配置方式:

  • 方式一:通过环境变量传递连接信息
builder.getTemplateBuilder()
        .getSpecBuilder()
        .addContainersBuilder()
        .addEnvBuilder()
        .setName("CLOUDSQL_CONNECTION_NAME")
        .setValue("你的项目ID:区域:实例名");
  • 方式二:直接设置cloudSqlInstances字段(需使用最新版客户端库)
builder.getTemplateBuilder()
        .getSpecBuilder()
        .addCloudSqlInstances("你的项目ID:区域:实例名");

2. 配置VPC访问连接器(Java示例)

VPC连接器需要配置在template.spec.vpcAccess字段下,替代原注解:

builder.getTemplateBuilder()
        .getSpecBuilder()
        .getVpcAccessBuilder()
        .setConnector("projects/你的项目ID/locations/区域/connectors/连接器名")
        .setEgress("ALL_TRAFFIC"); // 按需设置为PRIVATE_RANGES_ONLY或ALL_TRAFFIC

关键注意事项

  • 确保使用Cloud Run v2版本的Java客户端库,v1库的字段结构和v2不兼容
  • 给Cloud Run Job的服务账号配置必要权限:比如Cloud SQL Client角色、VPC连接器的访问权限
  • API v2将原v1的系统注解全部转化为原生API字段,更符合REST规范,也避免了注解冲突

内容的提问来源于stack exchange,提问作者eric

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.17 10:52:10