为 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 Aurora 的 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}_.:/=+\\-@]*)$"
。标签键区分大小写。因此,键project
和Project
是不同的。键对于标签集是唯一的。例如,标签集中不能有键相同但值不同的键-值对,如
project=Trinity
和project=Xanadu
。 - 标签值
-
值是标签的可选字符串值。该字符串值的长度必须在 1 到 256 个 Unicode 字符之间。字符串只能包含 Unicode 字母、数字、空格、
_
、.
、:
、/
、=
、+
、-
和@
的集合。Java 正则表达式是"^([\\p{L}\\p{Z}\\p{N}_.:/=+\\-@]*)$"
。标签值区分大小写。因此,值prod
和Prod
是不同的。在标签集中,值无需具有唯一性,且可为空值。例如,在
project=Trinity
和cost-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
从资源中删除标签。
以下步骤说明如何对与数据库实例和 Aurora 数据库集群相关的资源执行典型的标记操作。注意,对标签进行缓存以用于授权。因此,当您在 Amazon RDS 资源上添加或更新标签时,可能需要等待几分钟,之后修改才能生效。
为 Amazon RDS 资源加标签的过程对于所有资源均类似。以下过程展示如何为 Amazon RDS 数据库实例加标签。
要向数据库实例添加标签,请执行以下操作:
-
登录Amazon Web Services Management Console并通过以下网址打开 Amazon RDS 控制台:https://console.aws.amazon.com/rds/
。 -
在导航窗格中,选择 Databases (数据库)。
注意
要在数据库窗格中筛选数据库实例的列表,对于筛选数据库,输入文本字符串。只会显示包含该字符串的数据库实例。
-
选择要标记的数据库实例的名称以显示其详细信息。
-
在详细信息部分中,向下滚动到标签部分。
-
选择 Add。将显示添加标签窗口。
-
为标签键和值输入一个值。
-
要添加其他标签,您可以选择添加其他标签,并为其标签键和值输入一个值。
将该步骤重复执行所需的次数。
-
选择 Add。
删除数据库实例的标签
-
登录Amazon Web Services Management Console并通过以下网址打开 Amazon RDS 控制台:https://console.aws.amazon.com/rds/
。 -
在导航窗格中,选择 Databases (数据库)。
注意
要在数据库窗格中筛选数据库实例的列表,请在筛选数据库框输入文本字符串。只会显示包含该字符串的数据库实例。
-
选择数据库实例的名称以显示其详细信息。
-
在详细信息部分中,向下滚动到标签部分。
选择要删除的标签。
-
选择 Delete (删除),然后在 Delete tags (删除标签) 窗口中选择 Delete (删除)。
可以使用 Amazon CLI 为数据库实例添加、列出或删除标签。
要将一个或多个标签添加到 Amazon RDS 资源,请使用 Amazon CLI 命令
add-tags-to-resource
。要列出 Amazon RDS 资源上的标签,请使用 Amazon CLI 命令
list-tags-for-resource
。要从 Amazon RDS 资源中删除一个或多个标签,请使用 Amazon CLI 命令
remove-tags-from-resource
。
要了解有关如何构建所需 ARN 的更多信息,请参阅构建 Amazon RDS 的 ARN。
您可使用 Amazon RDS API 为数据库实例添加、列出或删除标签。
要向 Amazon RDS 资源添加标签,请使用
AddTagsToResource
操作。要列出分配给 Amazon RDS 资源的标签,请使用
ListTagsForResource
。要从 Amazon RDS 资源删除标签,请使用
RemoveTagsFromResource
操作。
要了解有关如何构建所需 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 标签及其特征的列表。Key
和 Value
的值区分大小写。例如,project=Trinity
和 PROJECT=Trinity
是不同的标签。
标签元素 | 描述 |
---|---|
标签集 | 标签集是分配给 Amazon RDS 资源的所有标签的容器。每个资源只能有一个标签集。您只可以通过 Amazon RDS API 使用标签集。 |
标签 | 标签是用户定义的键值对。一个标签集中可以有 1 到 50 个标签。 |
密钥 |
密钥是标签必需的名称。有关限制,请参阅 Amazon RDS 中的标签结构。 该字符串值的长度可以在 1 到 128 个 Unicode 字符之间,并且不能带有前缀 密钥在标签集中必须具有唯一性。例如,标签集中不能有键相同但值不同的键-值对,如 project/Trinity 和 project/Xanadu。 |
值 |
值是标签的可选内容。有关限制,请参阅 Amazon RDS 中的标签结构。 该字符串值的长度可以在 1 到 256 个 Unicode 字符之间,并且不能带有前缀 在标签集中,值不必具有唯一性,且可为空值。例如,在“项目/Trinity”和“成本 - 中心/Trinity”的一个标签集中,可以存在键值对。 |
复制标签到数据库集群快照
在创建或还原数据库集群时,您可以指定将集群中的标签复制到数据库集群的快照。复制标签可确保数据库快照的元数据与源数据库集群的元数据匹配。它还确保数据库快照的任何访问策略也与源数据库集群的访问策略相匹配。默认情况下不复制标签。
您可以为以下操作指定将标签复制到数据库快照:
创建数据库集群
还原数据库集群。
创建只读副本
复制数据库集群快照
注意
在某些情况下,您可以为 Amazon CLI 命令 create-db-snapshot 的 --tags
参数包含一个值。或者,您可以为 CreateDBSnapshot API 操作提供至少一个标签。在这些情况下,RDS 不会将标签从源数据库实例复制到新的数据库快照。即使源数据库实例已开启 --copy-tags-to-snapshot
(CopyTagsToSnapshot
)选项,此功能也适用。
如果您采用此方法,则可以从数据库快照创建数据库实例的副本。这种方法可避免添加不适用于新数据库实例的标签。您可以使用 Amazon CLI create-db-snapshot
命令(或 CreateDBSnapshot
RDS API 操作)创建数据库快照。创建数据库快照后,可以按本主题后面所述添加标签。
教程:使用标签指定要停止哪些 Aurora 数据库集群
假设您正在开发或测试环境中创建大量 Aurora 数据库集群。您需要将所有这些集群保留几天。一些集群会在夜间运行测试。另一些集群可以在夜间停止运行并在第二天重新开始运行。以下示例说明如何为适合在夜间停止运行的集群分配标签。之后,该示例显示脚本如何检测哪些集群具有该标签并随后停止这些集群。在此示例中,键值对的值部分无关紧要。存在stoppable
标签表示集群具有此用户定义的属性。
指定要停止的 Aurora 数据库集群
-
确定您要指定为“可停止”的集群的 ARN。
用于标记的命令和 API 使用 ARN。这样一来,它们就可以在 Amazon 区域、Amazon 账户和可能具有相同短名称的不同类型资源之间无缝运作。您可以在集群上运行的 CLI 命令中指定 ARN 代替集群 ID。将自己集群的名称替换为
dev-test-cluster
。在使用 ARN 参数的后续命令中,替换自己集群的 ARN。ARN 包含您自己的 Amazon 账户 ID 和集群所在的 Amazon 区域的名称。$
aws rds describe-db-clusters --db-cluster-identifierdev-test-cluster
\ --query "*[].{DBClusterArn:DBClusterArn}" --output textarn:aws:rds:us-east-1:123456789:cluster:dev-test-cluster
-
将标签
stoppable
添加至此集群。由您选择此标签的名称。这种方法意味着,您可以避免设计一种在名称中对所有相关信息进行编码的命名约定。在此类约定中,您可以在数据库实例名称或其他资源的名称中对信息进行编码。由于此示例将标签视为存在或不存在的属性,因此它忽略了
Value=
参数的--tags
部分。$
aws rds add-tags-to-resource \ --resource-namearn:aws:rds:us-east-1:123456789:cluster:dev-test-cluster
\ --tags Key=stoppable -
确认集群中存在该标签。
以下命令以 JSON 格式和以制表符分隔的纯文本检索集群的标签信息。
$
aws rds list-tags-for-resource \ --resource-namearn:aws:rds:us-east-1:123456789:cluster:dev-test-cluster
{ "TagList": [ { "Key": "stoppable", "Value": "" } ] }
$
aws rds list-tags-for-resource \ --resource-namearn:aws:rds:us-east-1:123456789:cluster:dev-test-cluster
--output textTAGLIST stoppable
-
要停止所有指定为
stoppable
的集群,请准备所有集群的列表。循环浏览列表,并检查每个集群是否都具有相关属性标签。此 Linux 示例使用 shell 脚本将群集 ARN 列表保存到临时文件中,然后为每个集群执行 CLI 命令。
$
aws rds describe-db-clusters --query "*[].[DBClusterArn]" --output text >/tmp/cluster_arns.lst$
for arn in $(cat /tmp/cluster_arns.lst) do match="$(aws rds list-tags-for-resource --resource-name $arn --output text | grep 'TAGLIST\tstoppable')" if [[ ! -z "$match" ]] then echo "Cluster $arn is tagged as stoppable. Stopping it now." # Note that you can specify the full ARN value as the parameter instead of the short ID 'dev-test-cluster'. aws rds stop-db-cluster --db-cluster-identifier $arn fi doneCluster arn:aws:rds:us-east-1:123456789:cluster:dev-test-cluster is tagged as stoppable. Stopping it now. { "DBCluster": { "AllocatedStorage": 1, "AvailabilityZones": [ "us-east-1e", "us-east-1c", "us-east-1d" ], "BackupRetentionPeriod": 1, "DBClusterIdentifier": "dev-test-cluster", ...
您可以在每天结束时运行此类脚本,以确保停止非必要的集群。还可以使用实用程序(例如 cron
)安排任务,如每晚执行此类检查。例如,您可以这样做,以防某些集群被误运行。在此,您可以对准备待检查集群列表的命令进行微调。
以下命令生成集群列表,但只生成处于available
状态的集群的列表。该脚本可以忽略已停止的集群,因为它们将具有不同的状态值,如stopped
或stopping
。
$
aws rds describe-db-clusters \ --query '*[].{DBClusterArn:DBClusterArn,Status:Status}|[?Status == `available`]|[].{DBClusterArn:DBClusterArn}' \ --output textarn:aws:rds:us-east-1:123456789:cluster:cluster-2447 arn:aws:rds:us-east-1:123456789:cluster:cluster-3395 arn:aws:rds:us-east-1:123456789:cluster:dev-test-cluster arn:aws:rds:us-east-1:123456789:cluster:pg2-cluster
提示
您可以将分配标签的过程与查找具有这些标签的集群的过程结合使用,以其他方式降低成本。我们以用于开发和测试的 Aurora 数据库集群为例。在此,您可以指定在每天结束时删除一些集群,或者仅删除其读取器数据库实例。或者,您可以指定某些集群在预期使用率较低的时期,将其数据库实例更改为小型数据库实例类。