创建和管理项目

使用集合让一切井井有条 根据您的偏好保存内容并对其进行分类。

Google Cloud 项目为创建、启用和使用所有 Google Cloud 服务定了基础,包括管理 API、启用结算功能、添加和移除协作者以及管理 Google Cloud 资源的权限。

本页面介绍如何使用 Resource Manager API 和 Google Cloud Console 创建和管理 Google Cloud 项目。

开始前须知

阅读资源层次结构概览,了解项目资源。 有关项目结构的指导信息,请参阅企业组织最佳做法

项目用于标识以下内容:

  • 项目名称:直观易懂的项目名称。

    项目名称未被任何 Google API 使用。您可以在项目创建期间或之后随时修改项目名称。项目名称不必是唯一的。

  • 项目 ID:项目的全局唯一标识符。

    项目 ID 是一个唯一的字符串,用于区分您的项目与 Google Cloud 中的所有其他项目。您可以使用 Cloud Console 生成项目 ID,也可以选择自己的 ID。您只能在创建项目时修改项目 ID。

    项目 ID 要求:

    • 长度必须为 6 到 30 个字符。
    • 只能包含小写字母、数字和连字符。
    • 必须以字母开头。
    • 不能以连字符结尾。
    • 无法使用或以前使用过,包括已删除的项目。
    • 不能包含受限制的字符串,如 googlessl
  • 项目编号:系统为您的项目自动生成的唯一标识符。

请勿在项目名称、项目 ID 或其他资源名称中包含敏感信息。

创建项目

如需创建项目,您必须拥有 resourcemanager.projects.create 权限。项目创建者角色 (roles/resourcemanager.projectCreator) 等角色均拥有此权限。默认情况下,项目创建者角色会被授予新组织的整个网域和免费试用用户。如需了解如何向个人授予该角色并限制组织范围的访问权限,请参阅管理默认组织角色页面。

如果您没有指定父资源,则系统会根据用户帐号的网域自动选择父资源。

您可以使用 Cloud Console、Google Cloud CLI 或 projects.create() 方法创建新项目。

控制台

如需创建新项目,请执行以下操作:

  1. 转到 Cloud Console 中的管理资源页面。
    转到“管理资源”页面
  2. 在页面顶部的选择组织下拉列表中,选择要在其中创建项目的组织。如果您是免费试用用户,请跳过此步骤,因为此列表不会显示。
  3. 点击创建项目
  4. 在显示的 New Project 窗口中,输入项目名称并选择适用的结算帐号。项目名称只能包含字母、数字、英文单引号、连字符、空格或英文感叹号,并且长度必须介于 4 到 30 个字符之间。
  5. 位置框中输入上级单位或文件夹。该资源将是新项目的层次结构父级。
  6. 输入新项目的详细信息后,点击创建

gcloud

如需创建新项目,请使用 gcloud projects create 命令:

gcloud projects create PROJECT_ID

其中,PROJECT_ID 是您要创建的项目的 ID。项目 ID 必须以小写字母开头,只能包含 ASCII 字母、数字和连字符,并且长度必须介于 6 到 30 个字符之间。

如需创建以组织或文件夹作为父级的项目,请使用 --organization--folder 标志。由于一个资源只能有一个父级,因此只能使用其中一个标志:

gcloud projects create PROJECT_ID --organization=ORGANIZATION_ID

gcloud projects create PROJECT_ID --folder=FOLDER_ID

API

使用 projects.create() 方法创建新项目时,您不能在项目 ID 中使用某些字词,例如 sslgoogle。当您使用受限字词时,请求会返回 INVALID_ARGUMENT 错误。

以下请求仅创建一个项目,而不会自动将其与结算帐号相关联。使用 projects.updateBillingInfo 方法来设置或更新与项目关联的结算帐号。

创建项目请求:

POST https://cloudresourcemanager.googleapis.com/v3/projects/
Authorization: *************
Content-Type: application/json

{
    "projectId": "our-project-123",
    "name": "my project",
    "labels": {
      "mylabel": "prod"
    }
}

创建项目响应:

{
    "name": "operations/pc.123456789",
}

获取操作请求:

GET https://cloudresourcemanager.googleapis.com/v3/operations/pc.123456789
Authorization: *************
Content-Type: application/json

获取操作响应:

{
    "name": "operations/pc.123456789",
    "done": true,
    "response": {
        "@type": "type.googleapis.com/google.cloudresourcemanager.v3.Project",
        "projectNumber": "464036093014",
        "projectId": "our-project-123",
        "lifecycleState": "ACTIVE",
        "name": "my project",
        "labels": {
        "mylabel": "prod"
        },
    "createTime": "2016-01-07T21:59:43.314Z"
    }
}

Python

...
from googleapiclient import discovery
from oauth2client.client import OAuth2Credentials as creds
crm = discovery.build(
    'cloudresourcemanager', 'v3', http=creds.authorize(httplib2.Http()))

operation = crm.projects().create(
body={
    'project_id': flags.projectId,
    'name': 'my project'
}).execute()

...

使用服务帐号创建项目

您可以使用服务帐号自动创建项目。与用户帐号一样,可以授予服务帐号在组织内创建项目的权限。服务帐号不得在组织外部创建项目,并且必须在创建项目时指定父资源。服务帐号可以使用 gcloud CLI 或 projects.create() 方法创建新项目。

管理项目配额

如果配额中的剩余项目少于 30 个,系统会在新项目页面上显示配额中剩余的项目数量。达到项目数量上限后,您必须请求提高项目数量上限才能创建更多项目。或者,您可以在“管理资源”页面上安排删除 30 天后的某些项目。用户已软删除的项目会计入您的配额。这些项目会在 30 天后完全删除。

如需为配额中的项目申请额外容量,请使用申请增加项目配额表单。如需详细了解配额以及使用原因,请参阅免费试用项目配额申请支持页面。如需详细了解结算报告,请参阅结算报告支持页面。

识别项目

如需与 Google Cloud 资源交互,您必须为每个请求提供标识性的项目信息。项目由项目 ID 和项目编号标识。

如需获取项目 ID 和项目编号,请执行以下操作:

  1. 转到 Cloud Console 中的信息中心页面

    转到“信息中心”页面

  2. 点击页面顶部的从以下列表中选择:下拉列表。在随即显示的从以下列表中选择:窗口中,选择您的项目。

项目 ID 和项目编号会显示在项目信息中心的项目信息卡片上:

在上面的示例中,项目名称为 My Sample Project,项目 ID 为 my-sample-project-191923

获取现有项目

您可以使用 Cloud Console 或 projects.get() 方法来获取现有项目。

控制台

如需使用 Google Cloud Console 查看项目,请执行以下操作:

  1. 转到 Google Cloud Console 中的信息中心页面。

    转到“信息中心”页面

  2. 点击页面顶部的从以下列表中选择:下拉列表。在随即显示的从以下列表中选择:窗口中,选择您的项目。

gcloud

如需获取项目的元数据,请使用 gcloud projects describe 命令:

gcloud projects describe PROJECT_ID

其中,PROJECT_ID 是您要查看的项目的 ID。

API

请求:

GET
https://cloudresourcemanager.googleapis.com/v3/projects/our-project-123

响应:

{
    "projectNumber": "464036093014",
    "projectId": "our-project-123",
    "lifecycleState": "ACTIVE",
    "name": "my project",
    "labels": {
        "mylabel": "prod"
    },
    "createTime": "2016-01-07T21:59:43.314Z"
}

Python

...
from googleapiclient import discovery
from oauth2client.client import OAuth2Credentials as creds
crm = discovery.build(
    'cloudresourcemanager', 'v3', http=creds.authorize(httplib2.Http()))

project = crm.projects().get(name="projects/"+projectId).execute()

...

列出项目

列出资源下的所有项目

要列出资源是直接子项目的所有项目,请使用 v3 projects.list 方法,并在查询中指定父资源:

请求:

GET https://cloudresourcemanager.googleapis.com/v3/projects

{
    "parent": "folders/662951040570"
}

响应:

{
    "projects": [
    {
        "name": "projects/951040570662",
        "parent": "folders/662951040570",
        "projectId": "tokyo-rain-123",
        "state": "ACTIVE",
        "displayName": "Tokyo Rain"
        "createTime": "2013-11-13T20:31:53.308Z"
        "updateTime": "2013-11-13T20:31:53.308Z"
        "etag": "BwWUlZ6XEfY="
    }
    ]
}

搜索项目

您可以使用 projects.search 方法和查询字符串返回与过滤条件匹配的特定项目资源。结果仅包含您已获 resourcemanager.projects.get 权限的项目。

以下代码段会返回显示名称为“Tokyo Rain”的 Project 资源:

请求:

GET https://cloudresourcemanager.googleapis.com/v3/projects:search

{
    "displayName": "Tokyo Rain"
}

响应:

{
    "projects": [
    {
        "name": "projects/951040570662",
        "parent": "folders/662951040570",
        "projectId": "tokyo-rain-123",
        "state": "ACTIVE",
        "displayName": "Tokyo Rain"
        "createTime": "2013-11-13T20:31:53.308Z"
        "updateTime": "2013-11-13T20:31:53.308Z"
        "etag": "BwWUlZ6XEfY="
    }
    ]
}

以下代码段会返回带有红色标签的所有项目资源:

请求:

GET
https://cloudresourcemanager.googleapis.com/v3/projects:search

{
    "labels": {
    "color": "red"
    }
}

响应:

{
    "projects": [
    {
        "name": "projects/951054970012",
        "parent": "folders/662951040570",
        "projectId": "Osaka-rain-234",
        "state": "ACTIVE",
        "displayName": "Osaka Rain"
        "createTime": "2013-11-13T20:31:53.308Z"
        "updateTime": "2013-11-13T20:31:53.308Z"
        "etag": "BwWUlZ6XEfY="
        "labels": {
            "color": "red"
        },
    }
    ]
}

如果在请求正文中指定 parent.typeparent.id 字段,则系统会对父级检查 resourcemanager.projects.list 权限。如果用户拥有此权限,在应用其余过滤条件后,系统将返回父级下的所有项目。

如果用户没有此权限,在应用其余过滤条件后,系统会返回用户具有 resourcemanager.projects.get 权限的所有项目。

如果未指定过滤条件,该调用将返回用户具有 resourcemanager.projects.get 权限的项目。

更新项目

您可以使用 Cloud Console 或 projects.patch() 方法更新项目。

只能更新项目名称和标签字段。 如需详细了解如何更新项目,请参阅项目 API 参考页面

如需在资源层次结构中移动项目,请参阅移动项目。如需将项目从一个组织迁移到另一个组织,请参阅迁移项目

控制台

如需使用 Cloud Console 更新项目名称或标签,请执行以下操作:

  • 打开 Google Cloud Console 中的“设置”页面。

    打开“设置”页面

  • 在屏幕顶部,点击项目选择下拉列表。
  • 在随即显示的从以下列表中选择:窗口中,点击组织下拉列表,然后选择您的组织。如果您是免费试用用户,请跳过此步骤,因为不会出现组织列表。
  • 从显示的列表中选择您的项目。
  • 要更改项目名称,请修改项目名称,然后点击保存
  • 要更改标签,请点击左侧导航栏中的标签。详细了解如何使用标签

gcloud

如需更新项目名称或标签,请使用 gcloud alpha projects update 命令:

gcloud alpha projects update PROJECT_ID \
    --name=NAME \
    --update-labels=KEY=VALUE, ...

地点:

  • PROJECT_ID 是要更新的项目的 ID。

  • NAME 是您要分配给项目的新名称。

  • KEY=VALUE...是您要更新的标签的键值对列表。如果标签已存在,则会修改其值。如果不存在,则会创建新标签。

如需了解详情以及可与此命令搭配使用的其他标志,请参阅 Google Cloud CLI SDK

API

要更新项目,请执行以下操作:

  • 使用 projects.get 方法获取 project 对象。

  • 修改您要更新的字段。

  • 调用 projects.patch 方法。

以下示例将项目名称更新为 myproject 且标签为 color:blue

以下代码段会将项目名称更新为“myproject”:

请求:

PATCH https://cloudresourcemanager.googleapis.com/v3/{project.name=PROJECT_NAME}
{
  updateMask=displayName,labels
}

其中,PROJECT_NAME 是要更新的项目的名称。

请求 JSON 正文:

{
    "displayName": "myproject",
    "labels":
      {
        "color": "red"
      }
}

响应:

{
    "projects": [
    {
        "name": "projects/951054970012",
        "parent": "folders/662951040570",
        "projectId": "Osaka-rain-234",
        "state": "ACTIVE",
        "displayName": "myproject"
        "createTime": "2013-11-13T20:31:53.308Z"
        "updateTime": "2013-11-13T20:35:42.308Z"
        "etag": "BwWUlZ6XEfY="
        "labels": {
            "color": "red"
        },
    }
    ]
}

Python

from googleapiclient import discovery
from oauth2client.client import OAuth2Credentials as creds
crm = discovery.build(
    'cloudresourcemanager', 'v3', http=creds.authorize(httplib2.Http()))

project = crm.projects().get(projectId=flags.projectId).execute()
project['name'] = 'myproject'
project = crm.projects().update(
projectId=flags.projectId, body=project).execute()

关停(删除)项目

您可以使用 Cloud Console 或 API 中的 projects.delete 方法关停项目。项目的生命周期状态必须为 ACTIVE 才能以这种方式关停。

此方法会立即标记要删除的项目。系统会向执行删除操作的用户以及重要联系人中列出的技术类别联系人发送通知电子邮件。如果“技术”类别中的联系人无任何通知,回退联系人将不会收到通知。标记为删除的项目不可用。如果项目具有与其关联的结算帐号,该关联就会断开,并且如果项目删除操作被取消,则不会恢复。30 天后,该项目将被完全删除。

如需在 30 天内停止项目删除过程,请参阅恢复项目的步骤。您可以使用 gcloud projects describe Google Cloud CLI 方法验证 30 天内的剩余天数。

30 天期限结束后,项目及其所有资源都会被删除,且无法恢复。在删除之前,该项目将计入您的项目配额。

如果您为项目设置了结算功能,则在当前结算周期结束且成功向您的帐号收取费用之前,可能无法完全删除该项目。 使用的服务数量和类型也会影响系统永久删除项目的时间。如需详细了解数据保留和安全删除,请参阅 Google 如何保留收集的数据

要关停项目,请执行以下操作:

控制台

如需使用 Cloud Console 关停项目,请执行以下操作:

  • 打开 Google Cloud Console 中的“设置”页面(位于“IAM 和管理”下方)。

    打开“设置”页面

  • 点击选择项目

  • 选择要删除的项目,然后点击打开

  • 点击关机

  • 输入项目 ID,然后点击关停

gcloud

如需删除项目,请使用 gcloud projects delete 命令:

gcloud projects delete PROJECT_ID

其中,PROJECT_ID 是您要删除的项目的 ID。

API

以下代码段会删除指定的项目:

请求:

DELETE
https://cloudresourcemanager.googleapis.com/v3/projects/my-project-123

Python

...
from googleapiclient import discovery
from oauth2client.client import OAuth2Credentials as creds
crm = discovery.build(
    'cloudresourcemanager', 'v3', http=creds.authorize(httplib2.Http()))

project = crm.projects().delete(projectId=flags.projectId).execute()

...

排查项目删除问题

如果关停项目的过程失败,请参阅排查项目删除问题了解详情。

恢复项目

项目所有者可以在 30 天恢复期(恢复项目关闭后)内恢复已删除的项目。恢复项目会使其恢复到关闭之前所处的状态。有些资源(例如 Cloud Storage 或 Pub/Sub 资源)会在 30 天期限结束前被删除,因而可能无法完全恢复。

一些服务可能需要手动重启。如需了解详情,请参阅重启 Google Cloud 服务

您必须对要恢复的项目拥有 resourcemanager.projects.undelete 权限。要恢复项目,请执行以下操作:

控制台

要在 Cloud Console 中查看项目,您需要以下权限:

  • resourcemanager.projects.list
  • resourcemanager.folders.list
  • resourcemanager.projects.get

如需使用 Cloud Console 恢复项目,请执行以下操作:

  1. 转到 Google Cloud Console 中的管理资源页面。

    转到“管理资源”页面

  2. 在页面顶部的项目选择器中,选择您的组织。

  3. 在组织、文件夹和项目列表下方,点击待删除的资源

  4. 选中要恢复的项目对应的复选框,然后点击恢复。在出现的对话框中,确认您想要恢复项目。

gcloud

如需恢复项目,请使用 gcloud projects undelete 命令:

gcloud projects undelete PROJECT_ID

其中,PROJECT_ID 是要恢复的项目的 ID 或项目编号。

API

以下代码段会恢复指定项目:

请求:

POST
https://cloudresourcemanager.googleapis.com/v3/projects/my-project-123:undelete