为 Amazon RDS 资源添加标签 - Amazon Relational Database Service
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

为 Amazon RDS 资源添加标签

Amazon RDS 标签是由您定义的名称-值对,与某种 Amazon RDS 资源(例如,数据库实例或数据库快照)关联。此名称也叫。您可以选择为键提供值。

可以使用 Amazon Web Services Management Console、Amazon CLI 或 Amazon RDS API 添加、列出和删除 Amazon RDS 资源上的标签。在使用 CLI 或 API 时,确保提供要使用的 RDS 资源的 Amazon 资源名称(ARN)。有关构造 ARN 的详细信息,请参阅构建 Amazon RDS 的 ARN

为什么要使用 Amazon RDS 资源标签?

您可使用标签执行以下操作:

  • 按应用程序、项目、部门、环境等对 RDS 资源进行分类。例如,您可以使用标签键定义类别,其中标签值是类别中的项目。您可以创建标签 environment=prod。或者,您可以定义标签键 project 和标签值 Salix,这表示 Amazon RDS 资源将分配给 Salix 项目。

  • 自动执行资源管理任务。例如,您可以为已标记 environment=prod 的实例创建一个维护时段,该时段不同于已标记 environment=test 的实例的时段。您还可以为已标记 environment=prod 的实例配置自动数据库快照。

  • 使用 IAM 策略控制对 RDS 资源的访问。您可以使用全局 aws:ResourceTag/tag-key 条件键完成此操作。例如,策略可能只允许 DBAdmin 组中的用户修改已标记 environment=prod 的数据库实例。有关使用 IAM 策略管理对已标记资源的访问的信息,请参阅 Amazon RDS 的 Identity and Access Management,以及《Amazon Identity and Access Management 用户指南》中的控制对 Amazon 资源的访问

  • 根据标签监控资源。例如,您可以为已标记 environment=prod 的数据库实例创建 Amazon CloudWatch 控制面板。

  • 通过将具有类似标签的资源的费用分组在一起来跟踪成本。例如,如果您使用 project=Salix 标记与 Salix 项目关联的 RDS 资源,则可以为该项目生成成本报告并为该项目分配费用。有关更多信息,请参阅 Amazon 账单如何与 Amazon RDS 中的标签结合使用

Amazon RDS 资源标签的工作原理

Amazon不会对您的标签应用任何语义意义。标签严格按字符串进行解释。

Amazon RDS 中的标签集

每个 Amazon RDS 资源都有一个名为标签集的容器。该容器包含所有分配给该资源的标签。一个资源只有一个标签集。

一个标签集包含 0 至 50 个标签。如果向 RDS 资源添加一个标签,而该标签的键与某个现有资源标签相同,则新值将覆盖旧值。

Amazon RDS 中的标签结构

RDS 标签的结构如下所示:

标签键

键是标签的必需名称。该字符串值的长度必须在 1 到 128 个 Unicode 字符之间,并且不能带有前缀 aws:rds:。字符串只能包含 Unicode 字母、数字、空格、_.:/=+-@ 的集合。Java 正则表达式是 "^([\\p{L}\\p{Z}\\p{N}_.:/=+\\-@]*)$"。标签键区分大小写。因此,键 projectProject 是不同的。

键对于标签集是唯一的。例如,标签集中不能有键相同但值不同的键-值对,如 project=Trinityproject=Xanadu

标签值

值是标签的可选字符串值。该字符串值的长度必须在 1 到 256 个 Unicode 字符之间。字符串只能包含 Unicode 字母、数字、空格、_.:/=+-@ 的集合。Java 正则表达式是 "^([\\p{L}\\p{Z}\\p{N}_.:/=+\\-@]*)$"。标签值区分大小写。因此,值 prodProd 是不同的。

在标签集中,值无需具有唯一性,且可为空值。例如,在 project=Trinitycost-center=Trinity 的标签集中,可以存在键-值对。

符合标记条件的 Amazon RDS 资源

您可以标记以下 Amazon RDS 资源:

  • 数据库实例

  • 数据库集群

  • 数据库集群端点

  • 只读副本

  • 数据库快照

  • 数据库集群快照

  • 预留数据库实例

  • 事件订阅

  • 数据库选项组

  • 数据库参数组

  • 数据库集群参数组

  • 数据库子网组

  • RDS Proxy

  • RDS Proxy 终端节点

    注意

    目前,您无法使用 Amazon Web Services Management Console 标记 RDS Proxy 和 RDS Proxy 端点。

  • 蓝/绿部署

  • 零 ETL 集成(预览版)

Amazon 账单如何与 Amazon RDS 中的标签结合使用

使用标签来组织Amazon账单以反映您自身的成本结构。要执行此操作,请注册以获取包含标签键值的 Amazon Web Services 账户 账单。然后,如需查看组合资源的成本,请按有同样标签键值的资源组织您的账单信息。例如,您可以将特定的应用程序名称用作几个资源的标签,然后组织账单信息,以查看在数个服务中的使用该应用程序的总成本。有关更多信息,请参阅 Amazon Billing 用户指南 中的使用成本分配标签

成本分配标签如何与数据库快照结合使用

您可以向数据库快照添加标签。但是,您的账单不会反映此分组。必须满足以下条件,才能将成本分配标签应用于数据库快照:

  • 标签必须附加到父数据库实例。

  • 父数据库实例必须与数据库快照在同一 Amazon Web Services 账户中。

  • 父数据库实例必须与数据库快照在同一 Amazon Web Services 区域中。

如果数据库快照与父数据库实例不在同一区域中,这些快照将被视为孤立快照。孤立快照的成本会汇总到单个未标记的行项目中。满足以下条件时,跨账户数据库快照将不会被视为孤立快照:

  • 这些快照与父数据库实例在同一区域中。

  • 父数据库实例由源账户所有。

    注意

    如果父数据库实例由其他账户所有,则成本分配标签不适用于目标账户中的跨账户快照。

标记 Amazon RDS 资源的最佳实践

在使用标签时,我们建议您遵循以下最佳实践:

  • 记录组织中所有团队所遵循的标签使用惯例。具体而言,请确保名称既具有描述性又保持一致。例如,对格式 environment:prod 进行标准化,而不是使用 env:production 标记某些资源。

    重要

    请勿在标签中存储个人身份信息(PII)或其他机密或敏感信息。

  • 自动添加标记以确保一致性。例如,您可以使用以下方法:

    • 在 Amazon CloudFormation 模板中包含标签。在使用模板创建资源时,系统会自动标记资源。

    • 使用 Amazon Lambda 函数定义和应用标签。

    • 创建一个 SSM 文档,其中包含向 RDS 资源添加标签的步骤。

  • 仅在必要时使用标签。您最多可以为单个 RDS 资源添加 50 个标签,但最佳实践是避免不必要的标签激增和复杂性。

  • 定期检查标签的相关性和准确性。根据需要删除或修改已过时的标签。

  • 考虑在 Amazon Web Services Management Console中使用 Amazon 标签编辑器创建标签。您可以使用标签编辑器同时向多个受支持的 Amazon 资源(包括 RDS 资源)添加标签。有关更多信息,请参阅 Amazon Resource Groups 用户指南中的标签编辑器

在 Amazon RDS 中管理标签

您可执行以下操作:

  • 在创建资源的同时创建标签,例如在运行 Amazon CLI 命令 create-db-instance 时。

  • 使用命令 add-tags-to-resource 向现有资源添加标签。

  • 使用命令 list-tags-for-resource 列出与特定资源关联的标签。

  • 使用命令 add-tags-to-resource 更新标签。

  • 使用命令 remove-tags-from-resource 从资源中删除标签。

以下步骤说明如何对与数据库实例相关的资源执行典型的标记操作。注意,对标签进行缓存以用于授权。因此,当您在 Amazon RDS 资源上添加或更新标签时,可能需要等待几分钟,之后修改才能生效。

为 Amazon RDS 资源加标签的过程对于所有资源均类似。以下过程展示如何为 Amazon RDS 数据库实例加标签。

要向数据库实例添加标签,请执行以下操作:
  1. 登录Amazon Web Services Management Console并通过以下网址打开 Amazon RDS 控制台:https://console.aws.amazon.com/rds/

  2. 在导航窗格中,选择 Databases (数据库)

    注意

    要在数据库窗格中筛选数据库实例的列表,对于筛选数据库,输入文本字符串。只会显示包含该字符串的数据库实例。

  3. 选择要标记的数据库实例的名称以显示其详细信息。

  4. 在详细信息部分中,向下滚动到标签部分。

  5. 选择 Add。将显示添加标签窗口。

    “Add tags (添加标签)”窗口
  6. 标签键输入一个值。

  7. 要添加其他标签,您可以选择添加其他标签,并为其标签键输入一个值。

    将该步骤重复执行所需的次数。

  8. 选择 Add

删除数据库实例的标签
  1. 登录Amazon Web Services Management Console并通过以下网址打开 Amazon RDS 控制台:https://console.aws.amazon.com/rds/

  2. 在导航窗格中,选择 Databases (数据库)

    注意

    要在数据库窗格中筛选数据库实例的列表,请在筛选数据库框输入文本字符串。只会显示包含该字符串的数据库实例。

  3. 选择数据库实例的名称以显示其详细信息。

  4. 在详细信息部分中,向下滚动到标签部分。

  5. 选择要删除的标签。

    “Tags (标签)”部分
  6. 选择 Delete (删除),然后在 Delete tags (删除标签) 窗口中选择 Delete (删除)

可以使用 Amazon CLI 为数据库实例添加、列出或删除标签。

要了解有关如何构建所需 ARN 的更多信息,请参阅构建 Amazon RDS 的 ARN

您可使用 Amazon RDS API 为数据库实例添加、列出或删除标签。

要了解有关如何构建所需 ARN 的更多信息,请参阅构建 Amazon RDS 的 ARN

在通过 Amazon RDS API 使用 XML 时,标签会使用如下架构:

<Tagging> <TagSet> <Tag> <Key>Project</Key> <Value>Trinity</Value> </Tag> <Tag> <Key>User</Key> <Value>Jones</Value> </Tag> </TagSet> </Tagging>

下表提供了允许使用的 XML 标签及其特征的列表。KeyValue 的值区分大小写。例如,project=TrinityPROJECT=Trinity 是不同的标签。

标签元素 描述
标签集 标签集是分配给 Amazon RDS 资源的所有标签的容器。每个资源只能有一个标签集。您只可以通过 Amazon RDS API 使用标签集。
标签 标签是用户定义的键值对。一个标签集中可以有 1 到 50 个标签。
密钥

密钥是标签必需的名称。有关限制,请参阅 Amazon RDS 中的标签结构

该字符串值的长度可以在 1 到 128 个 Unicode 字符之间,并且不能带有前缀 aws:rds:。该字符串只能包含 Unicode 字母、数字、空格、“_”、“.”、“/”、“=”、“+”、“-”的集合(Java 正则表达式:“^([\\p{L}\\p{Z}\\p{N}_.:/=+\\-]*)$”)。

密钥在标签集中必须具有唯一性。例如,标签集中不能有键相同但值不同的键-值对,如 project/Trinity 和 project/Xanadu。

值是标签的可选内容。有关限制,请参阅 Amazon RDS 中的标签结构

该字符串值的长度可以在 1 到 256 个 Unicode 字符之间,并且不能带有前缀 aws:rds:。该字符串只能包含 Unicode 字母、数字、空格、“_”、“.”、“/”、“=”、“+”、“-”的集合(Java 正则表达式:“^([\\p{L}\\p{Z}\\p{N}_.:/=+\\-]*)$”)。

在标签集中,值不必具有唯一性,且可为空值。例如,在“项目/Trinity”和“成本 - 中心/Trinity”的一个标签集中,可以存在键值对。

将标签复制到数据库快照

在创建或还原数据库实例时,您可以指定将数据库实例中的标签复制到数据库实例的快照。复制标签可确保数据库快照的元数据与源数据库实例的元数据匹配。它还确保数据库快照的任何访问策略也与源数据库实例的访问策略相匹配。

您可以为以下操作指定将标签复制到数据库快照:

  • 创建数据库实例。

  • 还原数据库实例。

  • 创建只读副本。

  • 复制数据库快照。

在大多数情况下,默认不复制标签。不过,从数据库快照还原数据库实例时,RDS 会检查您是否指定新标签。如果是,新标签将添加到还原的数据库实例中。如果没有新的标签,RDS 会在创建快照时将源数据库实例中的标签添加到还原的数据库实例中。

为防止来自源数据库实例的标签添加到还原的数据库实例中,建议在还原数据库实例时指定新标签。

注意

在某些情况下,您可以为 Amazon CLI 命令 create-db-snapshot--tags 参数包含一个值。或者,您可以为 CreateDBSnapshot API 操作提供至少一个标签。在这些情况下,RDS 不会将标签从源数据库实例复制到新的数据库快照。即使源数据库实例已开启 --copy-tags-to-snapshotCopyTagsToSnapshot)选项,此功能也适用。

如果您采用此方法,则可以从数据库快照创建数据库实例的副本。这种方法可避免添加不适用于新数据库实例的标签。您可以使用 Amazon CLI create-db-snapshot 命令(或 CreateDBSnapshot RDS API 操作)创建数据库快照。创建数据库快照后,可以按本主题后面所述添加标签。

教程:使用标签指定要停止的数据库实例

本教程假设您在开发或测试环境中有多个数据库实例。您需要将这些数据库数据库实例保留几天。一些数据库实例在夜间运行测试,而其他数据库实例可在夜间停止运行,并在第二天重新开始运行。

以下教程说明如何为适合在夜间停止运行的数据库实例分配标签。本教程说明脚本如何检测哪些数据库实例具有该标签及随后停止已标记的数据库实例。在此示例中,键值对的值部分无关紧要。存在stoppable标签表示数据库实例具有此用户定义的属性。

在以下教程中,用于标记的命令和 API 使用 ARN,这可让 RDS 跨 Amazon 区域、Amazon 账户以及不同类型的资源(这些资源可能具有相同的短名称)无缝工作。您可以在数据库实例上运行的 CLI 命令中指定 ARN 代替数据库实例 ID。

指定要停止的数据库实例
  1. 确定您要指定为“可停止”的数据库实例的 ARN。

    在以下示例中,将自己的数据库实例名称替换为 dev-test-db-instance。在使用 ARN 参数的后续命令中,替换自己的数据库实例的 ARN。ARN 包含您自己的 Amazon 账户 ID 和数据库实例所在的 Amazon 区域的名称。

    $ aws rds describe-db-instances --db-instance-identifier dev-test-db-instance \ --query "*[].{DBInstance:DBInstanceArn}" --output text arn:aws:rds:us-east-1:123456789102:db:dev-test-db-instance
  2. 将标签 stoppable 添加至此数据库实例。

    由您选择此标签的名称。由于此示例将标签视为存在或不存在的属性,因此它忽略了 Value= 参数的 --tags 部分。这种方法意味着,您可以避免设计一种在名称中对所有相关信息进行编码的命名约定。在此类约定中,您可以在数据库实例名称或其他资源的名称中对信息进行编码。

    $ aws rds add-tags-to-resource \ --resource-name arn:aws:rds:us-east-1:123456789102:db:dev-test-db-instance \ --tags Key=stoppable
  3. 确认数据库实例中存在标签。

    以下命令以 JSON 格式和以制表符分隔的纯文本检索数据库实例中的标签信息。

    $ aws rds list-tags-for-resource \ --resource-name arn:aws:rds:us-east-1:123456789102:db:dev-test-db-instance { "TagList": [ { "Key": "stoppable", "Value": "" } ] } aws rds list-tags-for-resource \ --resource-name arn:aws:rds:us-east-1:123456789102:db:dev-test-db-instance --output text TAGLIST stoppable
  4. 停止所有被指定为 stoppable 的数据库实例。

    以下示例创建一个文本文件,其中列出了所有数据库实例。Shell 命令循环访问该列表,并检查每个数据库实例是否都标记有相关属性,并为每个数据库实例运行命令 aws rds stop-db-instance

    $ aws rds describe-db-instances --query "*[].[DBInstanceArn]" --output text >/tmp/db_instance_arns.lst $ for arn in $(cat /tmp/db_instance_arns.lst) do match="$(aws rds list-tags-for-resource --resource-name $arn --output text | grep stoppable)" if [[ ! -z "$match" ]] then echo "DB instance $arn is tagged as stoppable. Stopping it now." # Note that you need to get the DB instance identifier from the ARN. dbid=$(echo $arn | sed -e 's/.*://') aws rds stop-db-instance --db-instance-identifier $dbid fi done DB instance arn:arn:aws:rds:us-east-1:123456789102:db:dev-test-db-instance is tagged as stoppable. Stopping it now. { "DBInstance": { "DBInstanceIdentifier": "dev-test-db-instance", "DBInstanceClass": "db.t3.medium", ...

您可以在每天结束时运行与上一个脚本类似的脚本,以确保停止非必要的数据库实例。还可以使用实用程序(例如 cron)安排任务,如每晚执行此类检查。例如,您可以这样做,以防某些数据库实例被误运行。在此,您可以对准备待检查数据库实例列表的命令进行微调。

以下命令生成数据库实例列表,但只生成处于available状态的数据库实例的列表。该脚本可以忽略已停止的数据库实例,因为它们将具有不同的状态值,如stoppedstopping

$ aws rds describe-db-instances \ --query '*[].{DBInstanceArn:DBInstanceArn,DBInstanceStatus:DBInstanceStatus}|[?DBInstanceStatus == `available`]|[].{DBInstanceArn:DBInstanceArn}' \ --output text arn:aws:rds:us-east-1:123456789102:db:db-instance-2447 arn:aws:rds:us-east-1:123456789102:db:db-instance-3395 arn:aws:rds:us-east-1:123456789102:db:dev-test-db-instance arn:aws:rds:us-east-1:123456789102:db:pg2-db-instance
提示

您可以将分配标签的过程与查找带这些标签的数据库实例的过程结合使用,以其他方式降低成本。我们以用于开发和测试的数据库实例为例。在这种情况下,您可以指定在每天结束时删除一些数据库实例。或者,您可以指定它们在预期使用率较低的时期,将其数据库实例更改为小型数据库实例类。