启用 Google 云项目中的所有 API

Enabling all API in Google Cloud project

Google 需要启用云 API 才能完成很多事情。

启用只需要一个CLI 命令,通常很快。如果我尝试做一些需要不启用 API 的事情,CLI 甚至会建议启用。但它无论如何都会中断开发。

我的问题是为什么默认情况下不启用它们?如果我在创建新项目后立即启用它们以便以后不用再启用它们,是否可以?

我想了解这种设计的目的并学习最佳实践。

嗯,它们被禁用主要是为了不产生你不打算诱导的成本,让你知道你在哪个点使用哪个服务并跟踪 usage/costs对于他们每个人。

此外,Pub/Sub 等一些服务依赖于其他服务,而 Container Registry(或 Artifact Registry)等其他服务需要一个 Cloud Storage 存储桶来存储工件,它会自动创建一个如果您要推送 Docker 图像或使用 Cloud Build。所以这些是你需要注意的事情。

启用 API 需要一些时间,具体取决于服务,是的,但每个项目需要 one-time 操作。我不确定您对等待时间的担忧到底是什么,但是如果您想在执行 gcloud 命令以启用某些 API 的同时执行 运行 命令,您可以使用 --async 标志,它将 运行 命令在后台运行,无需您等待它完成再 运行 执行另一个命令。

最后,当然,如果您知道自己在做什么,您可以只启用它们,但风险自负 - 这是一种更安全的方法,只启用您需要的那些,而且您可能已经意识到,您可以在单个 gcloud 命令中启用多个。在 Container Registry 的示例中,它使用 Cloud Storage,您仍然需要为此付费。

启用服务可以访问(通常收费的)资源。

将这种“表面”资源限制在您(或客户)需要的资源范围内被认为是一种很好的做法;您启用的服务越多,您的潜在攻击面和潜在账单就越大。

Google 提供越来越多的服务(可通过 APIs 访问)。您不太可能想要全部访问它们。

API 由 Project 启用。项目创建阶段(包括启用服务)通常只占项目整个生命周期的一小部分;甚至那些项目 created-and-torn-down 按需。

可以异步启用 API,允许您 enable-not-block 每个服务:

for SERVICE in "containerregistry" "container" "cloudbuild" ...
do
  gcloud services enable ${SERVICE}.googleapis.com --project=${PROJECT} --async
done

在此基础上,将组织的项目配置(脚本、Terraform, Deployment Manager 等)自动化是一种很好的做法。这为您的项目的创建方式、启用的服务、默认权限等提供了一个基线模板。然后您的开发人员只需 fire-and-forget 一个供应商(希望也 checked-in 您的源代码控制),喝杯咖啡,然后等待这些步骤为他们完成。