

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 为资源添加 ElastiCache 标签
<a name="Tagging-Resources"></a>

为了帮助您管理集群和其他 ElastiCache 资源，您可以以标签的形式为每个资源分配自己的元数据。标签使您能够以不同的方式对AWS资源进行分类，例如按用途、所有者或环境进行分类。这在您具有相同类型的很多资源时会很有用 – 您可以根据分配给特定资源的标签快速识别该资源。本主题介绍标签并说明如何创建标签。

**警告**  
作为最佳实践，我们建议您不要在标签中包含敏感数据。

## 标签基本知识
<a name="Tagging-basics"></a>

标签是您分配给AWS资源的标签。每个标签都包含定义的一个键和一个可选值。标签使您能够以不同的方式对AWS资源进行分类，例如按用途或所有者进行分类。例如，您可以为账户的集 ElastiCache 群定义一组标签，以帮助您跟踪每个实例的所有者和用户组。

我们建议您针对每类资源设计一组标签，以满足您的需要。使用一组连续的标签键，管理 资源时会更加轻松。您可以根据添加的标签搜索和筛选资源。有关如何实施有效的资源标记策略的更多信息，请参阅 [AWS白皮书标记最佳实践](https://d1.awsstatic.com/whitepapers/aws-tagging-best-practices.pdf)。

标签没有任何语义含义， ElastiCache 并且严格解释为字符串。同时，标签不会自动分配至您的资源。您可以修改标签的键和值，还可以随时删除资源的标签。您可以将标签的值设置为 `null`。如果添加的标签的键与该资源上现有标签的键相同，新值就会覆盖旧值。如果您删除资源，则该资源的所有标签也会被删除。此外，如果添加或删除复制组的标签，则也将向该复制组中的所有节点添加或删除其标签。

 您可以使用AWS 管理控制台AWS CLI、和 ElastiCache API 处理标签。

如果您使用的是 IAM，则可以控制AWS账户中哪些用户有权创建、编辑或删除标签。有关更多信息，请参阅 [资源级权限](IAM.ResourceLevelPermissions.md)。

## 您可以为之添加标签的资源
<a name="Tagging-your-resources"></a>

您可以为账户中已存在的大多数 ElastiCache 资源添加标签。下表列出了支持标记的资源。如果您使用的是AWS 管理控制台，则可以使用标签[编辑器对资源应用标签](https://docs.aws.amazon.com/ARG/latest/userguide/tag-editor.html)。在您创建资源时，某些资源屏幕支持为资源指定标签；例如，包含 Name 键和您指定的值的标签。在大多数情况下，控制台会在资源创建后 （而不是在资源创建期间）立即应用标签。控制台可以根据**名称**标签组织资源，但是此标签对 ElastiCache 服务没有任何语义意义。

 此外，某些资源创建操作让您可以在创建资源时为其指定标签。如果无法在资源创建期间应用标签，系统会回滚资源创建过程。这样可确保要么创建带有标签的资源，要么根本不创建资源，即任何时候都不会创建出未标记的资源。通过在创建时标记资源，您不需要在资源创建后运行自定义标记脚本。

 如果您使用的是亚马逊 ElastiCache API、AWS CLI 或AWS软件开发工具包，则可以使用相关 ElastiCache API 操作中的`Tags`参数来应用标签。它们是：
+ `CreateServerlessCache`
+ `CreateCacheCluster`
+ `CreateReplicationGroup`
+ `CopyServerlessCacheSnapshot`
+ `CopySnapshot`
+ `CreateCacheParameterGroup`
+ `CreateCacheSecurityGroup`
+ `CreateCacheSubnetGroup`
+ `CreateServerlessCacheSnapshot`
+ `CreateSnapshot`
+ `CreateUserGroup`
+ `CreateUser`
+ `PurchaseReservedCacheNodesOffering`

下表描述了可以标记的 ElastiCache 资源，以及可以使用 ElastiCache API、AWS CLI 或AWS SDK 在创建时标记的资源。


**为资源添加标签支持 ElastiCache**  

| 资源 | 支持标签 | 支持在创建时标记 | 
| --- | --- | --- | 
| serverlesscache | 支持 | 是 | 
| parametergroup | 支持 | 是 | 
| securitygroup | 支持 | 是 | 
| subnetgroup | 支持 | 是 | 
| replicationgroup | 支持 | 是 | 
| cluster | 支持 | 是 | 
| reserved-instance | 支持 | 是 | 
| serverlesscachesnapshot | 支持 | 是 | 
| 快照 | 支持 | 是 | 
| 用户 | 是 | 是 | 
| usergroup | 支持 | 是 | 

**注意**  
无法标记全局数据存储。

您可以将您的 IAM 策略中基于标签的资源级权限应用于支持在创建时添加标签的 ElastiCache API 操作，以实现对可以在创建时标记资源的用户和群组的精细控制。资源从创建开始就会受到适当的保护 – 标签会立即应用于资源。因此，控制资源使用的任何基于标签的资源级权限都会立即生效。可以更准确地对您的资源进行跟踪和报告。您可以强制对新资源使用标记，可以控制对资源设置哪些标签键和值。

有关更多信息，请参阅 [标记资源示例](#Tagging-your-resources-example)。

 有关标记资源以便于计费的更多信息，请参阅 [使用成本分配标签监控成本](Tagging.md)。

## 标记缓存和快照
<a name="Tagging-replication-groups-snapshots"></a>

以下规则适用于请求操作中的标记：
+ **CreateReplicationGroup**: 
  + 如果请求中包含 `--primary-cluster-id` 和 `--tags` 参数，则会向复制组添加请求标签且标签会传播到复制组中的所有集群。如果主集群具有现有标签，则这些标签将被请求标签覆盖，以便所有节点上的标签保持一直。

    如果没有请求标签，则主集群标记将添加到复制组并传播到所有集群。
  + 如果提供了 `--snapshot-name` 或 `--serverless-cache-snapshot-name`：

    如果请求中包含标签，则仅使用这些标签对复制组进行标记。如果请求中未包含任何标签，则快照标签将添加到复制组。
  + 如果提供了 `--global-replication-group-id`：

    如果请求中包含标签，则请求标签将添加到复制组并传播到所有集群。
+ **CreateCacheCluster** : 
  +  如果提供了 `--replication-group-id`：

    如果请求中包含标签，则仅使用这些标签对集群进行标记。如果请求中未包含任何标签，则集群将继承复制组标签，而不是主集群的标签。
  + 如果提供了 `--snapshot-name`：

    如果请求中包含标签，则仅使用这些标签对集群进行标记。如果请求中未包含任何标签，则将向集群添加快照标签。
+ **CreateServerlessCache** : 
  + 如果请求中包含标签，则仅将请求标签添加到无服务器缓存。
+ **CreateSnapshot** : 
  +  如果提供了 `--replication-group-id`：

    如果请求中包含标签，则仅将请求标签添加到快照。如果请求中未包含任何标签，则复制组标签将添加到快照。
  + 如果提供了 `--cache-cluster-id`：

    如果请求中包含标签，则仅将请求标签添加到快照。如果请求中未包含任何标签，则集群标签将添加到快照。
  + 自动快照：

    标签将传播自复制组标签。
+ **CreateServerlessCacheSnapshot** : 
  + 如果请求中包含标签，则仅将请求标签添加到无服务器缓存快照。
+ **CopySnapshot** : 
  + 如果请求中包含标签，则仅将请求标签添加到快照。如果请求中未包含任何标签，则源快照标签将添加到复制的快照。
+ **CopyServerlessCacheSnapshot** : 
  + 如果请求中包含标签，则仅将请求标签添加到无服务器缓存快照。
+ **AddTagsToResource**和 **RemoveTagsFromResource**：
  + 标签将 added/removed 来自复制组，操作将传播到复制组中的所有集群。
**注意**  
**AddTagsToResource**且**RemoveTagsFromResource**不能用于默认参数和安全组。
+ **IncreaseReplicaCount** 和 **ModifyReplicationGroupShardConfiguration**：
  + 对添加到复制组的所有新集群应用与复制组相同的标签。

## 标签限制
<a name="Tagging-restrictions"></a>

下面是适用于 标签的基本限制：
+ 每个资源的标签数上限：50
+ 对于每个资源，每个标签键必须是唯一的，并且每个标签键只能有一个值。
+ 最大键长度 – 128 个 Unicode 字符 （采用 UTF-8 格式)。
+ 最大值长度 – 256 个 Unicode 字符 （采用 UTF-8 格式)。
+ 尽管 ElastiCache 允许在其标签中使用任何字符，但其他服务可能会受到限制。允许在不同的服务中使用的字符包括：可以使用 UTF-8 表示的字母、数字和空格以及以下字符：\+ - = . \_ : / @
+ 标签键和值区分大小写。
+ 该`aws:`前缀已保留供AWS使用。如果某个标签具有带有此标签键，则您无法编辑该标签的键或值。具有 `aws:` 前缀的标签不计入每个资源的标签数限制。

您不能仅依据标签终止或删除资源，而必须指定资源的标识符。例如，要删除您使用名为 `DeleteMe` 的标签键标记的快照，您必须将 `DeleteSnapshot` 操作与快照的资源标识符（如 `snap-1234567890abcdef0`）结合使用。

有关可以标记的 ElastiCache 资源的更多信息，请参阅[您可以为之添加标签的资源](#Tagging-your-resources)。

## 标记资源示例
<a name="Tagging-your-resources-example"></a>
+ 使用标签创建无服务器缓存。此示例使用 Memcached 作为引擎。

  ```
  aws elasticache create-serverless-cache \
      --serverless-cache-name CacheName \
      --engine memcached
      --tags Key="Cost Center", Value="1110001" Key="project",Value="XYZ"
  ```
+ 向无服务器缓存添加标签

  ```
  aws elasticache add-tags-to-resource \
  --resource-name arn:aws:elasticache:us-east-1:111111222233:serverlesscache:my-cache \
  --tags Key="project",Value="XYZ" Key="Elasticache",Value="Service"
  ```
+ 向复制组添加标签。

  ```
  aws elasticache add-tags-to-resource \
  --resource-name arn:aws:elasticache:us-east-1:{{111111222233}}:replicationgroup:my-rg \
  --tags Key="project",Value="XYZ" Key="Elasticache",Value="Service"
  ```
+ 使用标签创建缓存群集。

  ```
  aws elasticache create-cache-cluster \
  --cluster-id testing-tags \
  --cluster-description cluster-test \
  --cache-subnet-group-name test \
  --cache-node-type cache.t2.micro \
  --engine valkey \
  --tags Key="project",Value="XYZ" Key="Elasticache",Value="Service"
  ```
+ 使用标签创建缓存群集。此示例使用 Redis 作为引擎。

  ```
  aws elasticache create-cache-cluster \
  --cluster-id testing-tags \
  --cluster-description cluster-test \
  --cache-subnet-group-name test \
  --cache-node-type cache.t2.micro \
  --engine valkey \
  --tags Key="project",Value="XYZ" Key="Elasticache",Value="Service"
  ```
+ 创建具有标签的无服务器快照。此示例使用 Memcached 作为引擎。

  ```
  aws elasticache create-serverless-cache-snapshot \
  --serverless-cache-name testing-tags \
  --serverless-cache-snapshot-name bkp-testing-tags-scs \
  --tags Key="work",Value="foo"
  ```
+ 创建具有标签的快照。

  快照目前仅适用于 Redis。在此情况下，如果您根据请求添加标签，即使复制组包含标签，快照也将仅接收请求标签。

  ```
  aws elasticache create-snapshot \
  --replication-group-id testing-tags \
  --snapshot-name bkp-testing-tags-rg \
  --tags Key="work",Value="foo"
  ```

## 基于标签的访问控制策略示例
<a name="Tagging-access-control"></a>

1. 允许仅当集群具有 Project=XYZ 标签时才对该集群应用 `AddTagsToResource` 操作。

------
#### [ JSON ]

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Effect": "Allow",
               "Action": "elasticache:AddTagsToResource",
               "Resource": [
                   "arn:aws:elasticache:*:*:cluster:*"
               ],
               "Condition": {
                   "StringEquals": {
                       "aws:ResourceTag/Project": "XYZ"
                   }
               }
           }
       ]
   }
   ```

------

1. 当复制组包含 Project 和 Service 标签且密钥与 Project 和 Service 不同时，允许该复制组执行 `RemoveTagsFromResource` 操作。

------
#### [ JSON ]

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Effect": "Allow",
               "Action": "elasticache:RemoveTagsFromResource",
               "Resource": [
                   "arn:aws:elasticache:*:*:replicationgroup:*"
               ],
               "Condition": {
                   "StringEquals": {
                       "aws:ResourceTag/Service": "Elasticache",
                       "aws:ResourceTag/Project": "XYZ"
                   },                
                   "ForAnyValue:StringNotEqualsIgnoreCase": {
                       "aws:TagKeys": [
                           "Project",
                           "Service"
                       ]
                   }
               }
           }
       ]
   }
   ```

------

1. 允许仅当标签与 Project 和 Service 不同时才能对任何资源应用 `AddTagsToResource`。

------
#### [ JSON ]

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Effect": "Allow",
               "Action": "elasticache:AddTagsToResource",
               "Resource": [
                   "arn:aws:elasticache:*:*:*:*"
               ],
               "Condition": {
                   "ForAnyValue:StringNotEqualsIgnoreCase": {
                       "aws:TagKeys": [ 
                           "Service", 
                           "Project" 
                       ]
                   }
               }
           }
       ]
   }
   ```

------

1. 在请求具有 `Tag Project=Foo` 时拒绝 `CreateReplicationGroup` 操作。

------
#### [ JSON ]

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Effect": "Deny",
               "Action": "elasticache:CreateReplicationGroup",
               "Resource": [
                   "arn:aws:elasticache:*:*:replicationgroup:*"
               ],
               "Condition": {
                   "StringEquals": {
                       "aws:RequestTag/Project": "Foo"
                   }
               }
           }
       ]
   }
   ```

------

1. 在源快照具有 Project=XYZ 标签且请求标签为 Service=Elasticache 时拒绝 `CopySnapshot` 操作。

------
#### [ JSON ]

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Effect": "Deny",
               "Action": "elasticache:CopySnapshot",
               "Resource": [
                   "arn:aws:elasticache:*:*:snapshot:*"
               ],
               "Condition": {
                   "StringEquals": {
                       "aws:ResourceTag/Project": "XYZ",
                       "aws:RequestTag/Service": "Elasticache"
                   }
               }
           }
       ]
   }
   ```

------

1. 如果请求标签 `CreateCacheCluster` 丢失或不等于 `Project`、`Dev` 或 `QA`，则拒绝 `Prod` 操作。

------
#### [ JSON ]

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
             {
               "Effect": "Allow",
               "Action": [
                   "elasticache:CreateCacheCluster"
               ],
               "Resource": [
                   "arn:aws:elasticache:*:*:parametergroup:*",
                   "arn:aws:elasticache:*:*:subnetgroup:*",
                   "arn:aws:elasticache:*:*:securitygroup:*",
                   "arn:aws:elasticache:*:*:replicationgroup:*"
               ]
           },
           {
               "Effect": "Deny",
               "Action": [
                   "elasticache:CreateCacheCluster"
               ],
               "Resource": [
                   "arn:aws:elasticache:*:*:cluster:*"
               ],
               "Condition": {
                   "Null": {
                       "aws:RequestTag/Project": "true"
                   }
               }
           },
           {
               "Effect": "Allow",
               "Action": [
                   "elasticache:CreateCacheCluster",
                   "elasticache:AddTagsToResource"
               ],
               "Resource": "arn:aws:elasticache:*:*:cluster:*",
               "Condition": {
                   "StringEquals": {
                       "aws:RequestTag/Project": [
                           "Dev",
                           "Prod",
                           "QA"
                       ]
                   }
               }
           }
       ]
   }
   ```

------

有关条件键的相关信息，请参阅[使用条件键](IAM.ConditionKeys.md)。