

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 為您的 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 索引鍵和您指定值的標籤。在大多數的案例中，主控台會立即在建立資源後套用標籤 (而非在資源建立過程時)。主控台可根據 **Name** 標籤整理資源，但此標籤對 ElastiCache 服務來說不具任何語意意義。

 此外，有些資源建立動作可讓您在建立資源時指定資源的標籤。若標籤無法在資源建立時套用，我們會轉返資源建立程序。這可確保資源不是具有標籤建立，就是不會建立，因此無論何時都不會有不具有標籤的資源。藉由在建立時為資源建立標籤，您可以消除在資源建立後執行自訂標籤指令碼的必要。

 如果您使用的是 Amazon ElastiCache API、CLI AWS 或 AWS SDK，您可以使用相關 ElastiCache API 動作上的 `Tags` 參數來套用標籤。這些類別為：
+ `CreateServerlessCache`
+ `CreateCacheCluster`
+ `CreateReplicationGroup`
+ `CopyServerlessCacheSnapshot`
+ `CopySnapshot`
+ `CreateCacheParameterGroup`
+ `CreateCacheSecurityGroup`
+ `CreateCacheSubnetGroup`
+ `CreateServerlessCacheSnapshot`
+ `CreateSnapshot`
+ `CreateUserGroup`
+ `CreateUser`
+ `PurchaseReservedCacheNodesOffering`

下表說明可標記的 ElastiCache 資源，以及可使用 ElastiCache API、CLI AWS 或 AWS SDK 建立時可標記的資源。


**ElastiCache 資源的標記支援**  

| 資源 | 支援標籤 | 支援在建立時標記 | 
| --- | --- | --- | 
| serverlesscache | 是 | 是 | 
| parametergroup | 是 | 是 | 
| securitygroup | 是 | 是 | 
| subnetgroup | 是 | 是 | 
| replicationgroup | 是 | 是 | 
| 叢集 | 是 | 是 | 
| reserved-instance | 是 | 是 | 
| serverlesscachesnapshot | 是 | 是 | 
| 快照 | 是 | 是 | 
| user | 是 | 是 | 
| 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**：
  + 將從複寫群組新增/移除標籤，並將動作傳播到複寫群組中的所有叢集。
**注意**  
**AddTagsToResource** 與 **RemoveTagsFromResource** 無法用於預設參數和安全群組。
+ **IncreaseReplicaCount** 和 **ModifyReplicationGroupShardConfiguration**: 
  + 新增至複寫群組的所有新叢集都會套用與複寫群組相同的標籤。

## 標籤限制
<a name="Tagging-restrictions"></a>

以下基本限制適用於 標籤：
+ 每一資源最多標籤數 – 50
+ 針對每一個資源，每個標籤鍵必須是唯一的，且每個標籤鍵只能有一個值。
+ 索引鍵長度上限 - 128 個 UTF-8 Unicode 字元。
+ 值長度上限 - 256 個 UTF-8 Unicode 字元。
+ 雖然 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)。