我正在使用 GCP 托管的 Cloud Run 和 MongoDB Atlas 开发应用程序。如果我允许从任何地方连接 Atlas 的 IP 白名单,Cloud Run 与 MongoDB Atlas 完美配合。但是,我只想限制必要 IP 的连接,但我在云中找不到 Cloud Run 的出站 IP。有什么办法可以知道出站IP吗?
如何在 CI 环境中以编程方式获取已部署服务的 URL?成功部署后会记录 URL,但是如果我想以编程方式提取和使用 URL,作为部署后需求的一部分,例如发布 URL 以进行验收测试,该怎么办。
将 docker 容器映像部署到 Cloud Run 时,我可以选择一个区域,这很好。Cloud Run 将构建委托给 Cloud Build,它显然创建了两个存储桶来实现这一点。意外的行为是存储分区不是在 Cloud Run 部署的区域中创建的,而是默认为美国多区域。
如何将区域指定为“us-east1”,以便“始终免费”层承担存储成本? (显然,美国多区域存储桶将数据存储在免费层限制之外的区域,这导致了意外账单 - 我试图避免该账单。)
如果重要的话,我也在这个项目中使用 Firebase。我在 us-east1 区域创建了 Firebase 默认存储桶,希望它也能成为其他桶的默认存储桶,但事实并非如此。最终的存储桶列表如下所示,您可以在其中看到使用不需要的多区域设置自动创建的两个存储桶。
这是我用来构建和部署的 shell 脚本:
#!/bin/sh
project_id=$1
service_id=$2
if [ -z "$project_id" ]; then
echo "First argument must be the Google Cloud project ID" >&2
exit 1
fi
if [ -z "$service_id" ]; then
echo "Second argument must be the Cloud Run app name" >&2
exit 1
fi
echo "Deploying $service_id to $project_id"
tag="gcr.io/$project_id/$service_id"
gcloud builds submit \
--project …Run Code Online (Sandbox Code Playgroud) google-cloud-storage google-cloud-platform google-cloud-build google-cloud-run
我有一个正在运行的云运行服务user-service。出于测试目的,我通过环境变量以纯文本形式传递客户端机密。现在,由于一切正常,我想使用一个秘密。
在“编辑修订版”选项的“变量”选项卡中,我可以声明环境变量,但我不知道如何传递秘密?我是否只需要像${my-secret-id}变量的值字段中那样传递秘密名称?没有关于如何在此选项卡中使用机密的文档,只有顶部的提示:
Store and consume secrets using Secret Manager
Run Code Online (Sandbox Code Playgroud)
在这种情况下这不是很有帮助。
我正在尝试将 Docker 映像拉入 Google Cloud Run。我看到我可能需要先将它拉到 Google Container Registry,但我能以某种方式避免它吗?另外,我宁愿直接从源头获得它以使其保持最新状态。
docker google-cloud-platform google-container-registry google-cloud-run
我正在使用托管 CloudRun 部署一个带有concurrency=1. 部署后,我将并行触发四个长时间运行的请求。大多数情况下,一切正常——但偶尔,我会在几秒钟内面对来自其中一个节点的 500 个;日志仅提供主题中提供的错误消息。
使用带指数退避的重试并没有改善这种情况;重试也以 500 秒结束。StackDriver 日志也不提供更多信息。
可能相关的gcloud beta run deploy论点:
--memory 2Gi --concurrency 1 --timeout 8m --platform managed
错误消息的确切含义是什么——我该如何解决这个问题?
我有一个容器化的 API,并在 cloud run 内运行。如何获取正在执行云运行的当前项目 ID?我努力了:
还有其他办法吗?
编辑:
经过下面的一些评论后,我最终在Cloud Run中运行的 .net API 中得到了这段代码。
private string GetProjectid()
{
var projectid = string.Empty;
try {
var PATH = "http://metadata.google.internal/computeMetadata/v1/project/project-id";
using (var client = new HttpClient())
{
client.DefaultRequestHeaders.Add("Metadata-Flavor", "Google");
projectid = client.GetStringAsync(PATH).Result.ToString();
}
Console.WriteLine("PROJECT: " + projectid);
}
catch (Exception ex) {
Console.WriteLine(ex.Message + " --- " + ex.ToString());
}
return projectid;
}
Run Code Online (Sandbox Code Playgroud)
更新一下,可以用了 我的构建推送一直失败,但我没有看到。感谢大家。
我们有一个小脚本,可以抓取网页(约 17 个条目),并将它们写入 Firestore 集合。为此,我们在 Google Cloud Run 上部署了一项服务。
使用 Docker 容器镜像在本地测试时,此代码的执行需要约 5 秒。部署到 Cloud Run 的同一映像需要 1 多分钟。
即使是“删除集合中的所有文档”这样的简单命令,在本地需要 2-3 秒,而在 Cloud Run 上部署时需要 10 多秒。
我们知道冷启动,所以我们在第三次、第四次和第五次运行中测试了 Cloud Run 的性能,但它仍然很慢。
我们还尝试了 CPU 数、实例数、并发数、内存数,使用两端的默认值和极值,但 Cloud Run 的性能很慢。
这是预期的吗?Cloud Run 的单个实例真的这么弱吗?我们可以做些什么来让它更快吗?
这种缓慢的问题在于,如果我们为大量条目运行我们的代码,Cloud Run 最终会超时(更不用说每秒 Cloud Run 的成本)
这是我的用例。
但是,在我的本地环境中,我需要使用服务帐户密钥文件来实现此目的。(例如,当我设置 GOOGLE_APPLICATION_CREDENTIALS 环境变量时)
但是,我无法使用我的用户帐户凭据。
Java、Node 或 Go 中的日志跟踪非常清晰:不可能在用户凭证类型上生成身份令牌。
所以,
还有一段上下文:我们希望避免使用服务帐户密钥文件。今天,这是我们的重大安全漏洞(文件被复制、通过电子邮件发送、甚至公开提交到 Github 上......)。用户帐户默认凭据适用于所有 Google Cloud API,但不适用于 IAP 和 CLoud Run/Functions。
编辑
这是一些错误的例子。
爪哇
我这样做
Credentials credentials = GoogleCredentials.getApplicationDefault().createScoped("https://www.googleapis.com/auth/cloud-platform");
IdTokenCredentials idTokenCredentials = IdTokenCredentials.newBuilder()
.setIdTokenProvider((IdTokenProvider) credentials)
.setTargetAudience(myUri).build();
HttpRequestFactory factory = new NetHttpTransport().createRequestFactory(new HttpCredentialsAdapter(idTokenCredentials));
Run Code Online (Sandbox Code Playgroud)
我的用户凭证不符合IdTokenProvider接口
Caused by: java.lang.ClassCastException: class com.google.auth.oauth2.UserCredentials cannot be cast to class com.google.auth.oauth2.IdTokenProvider (com.google.auth.oauth2.UserCredentials and com.google.auth.oauth2.IdTokenProvider …Run Code Online (Sandbox Code Playgroud) google-cloud-platform google-cloud-functions google-iam google-cloud-run
几个月来,我们一直在完全托管的 CloudRun 上使用 NestJS 和 TypeORM 运行服务,没有出现任何问题。昨天下午Improper path /cloudsql/{SQL_CONNECTION_NAME} to connect to Postgres Cloud SQL instance "{SQL_CONNECTION_NAME}",我们的日志开始出现错误。
我们没有围绕此时间戳进行任何服务器/SQL 更改。目前对服务没有影响,所以我们不确定这是否是一个严重的问题。
这个错误不是来自我们的代码,我们的第三方模块不应该知道我们是否使用 Cloud SQL,所以我不知道这个错误来自哪里。
我的假设是 Cloud SQL 代理或 Cloud Run 中使用的任何 SQL 客户端都会导致此错误。在使用“gcloud run deploy”CLI 命令进行部署时,我们使用 --add-cloudsql-instances 标志。
问题链接在这里
postgresql google-cloud-sql google-cloud-platform typeorm google-cloud-run