

# 管理 Amazon EC2 资源
<a name="resources"></a>

*资源*是可以使用的实体。Amazon EC2 会在您使用服务的功能时创建资源。例如，Amazon EC2 资源包括映像、实例、实例集、密钥对和安全组。所有 Amazon EC2 资源类型都包含可描述资源的属性，例如名称、描述、资源标识符和 Amazon 资源名称（ARN）。

Amazon EC2 资源取决于所在的 AWS 区域或可用区。例如，亚马逊机器映像（AMI）是特定于某个 AWS 区域，但从 AMI 启动的实例是特定于您启动该实例的区域。您可以使用 Amazon EC2 资源的 ARN 在权限策略中指定 Amazon EC2 资源。

您的 AWS 账户具有 Amazon EC2 的默认配额。这些配额定义了您可以创建的最大资源数量。例如，正在运行的实例中 vCPU 的最大数量有配额。如果启动实例或启动已停止的实例会导致您超出配额，则操作将失败。

您可以使用资源 ID 或标签按区域搜索 AWS 账户中的特定资源。要搜索多个区域中的特定资源或资源类型，请使用 Amazon EC2 全局视图。

**Topics**
+ [为您的 Amazon EC2 资源选择区域](using-regions-availability-zones-setup.md)
+ [查找 Amazon EC2 资源](Using_Filtering.md)
+ [使用 AWS 全局视图查看跨区域的资源](global-view.md)
+ [标记 Amazon EC2 资源](Using_Tags.md)
+ [Amazon EC2 Service Quotas](ec2-resource-limits.md)

# 为您的 Amazon EC2 资源选择区域
<a name="using-regions-availability-zones-setup"></a>

Amazon EC2 资源取决于所在的 AWS 区域或可用区。创建 Amazon EC2 资源时，您可选择该资源的区域。

**注意事项**
+ 某些 AWS 资源可能并非在所有区域都可用。在区域中开始创建资源之前，确保您可以在区域中创建所需的所有 AWS 资源。
+ 默认情况下，会禁用某些区域。您必须先启用这些区域，然后才能使用。有关更多信息，请参阅 [AWS Regions](https://docs.aws.amazon.com/global-infrastructure/latest/regions/aws-regions.html)。

**使用控制台为资源选择区域**

1. 通过以下网址打开 Amazon EC2 控制台：[https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/)。

1. 在导航栏中，选中 **Regions**（区域）选择器，然后选择区域。  
![\[查看您的区域\]](http://docs.aws.amazon.com/zh_cn/AWSEC2/latest/UserGuide/images/EC2_select_region.png)

1. 区域选择器包括可在您的 AWS 账户中使用的所有资源。选择列表底部附近带下划线的文本，查看您的账户未启用的区域。

**使用 AWS CLI 为资源选择区域**  
您可以将 AWS CLI 配置为使用默认区域。如果您未在命令中指定区域，则使用默认区域。要对特定命令使用不同的区域，请添加以下选项。

```
--region us-east-1
```

**使用 Tools for PowerShell 为资源选择区域**  
您可以将 Tools for Windows PowerShell 配置为使用默认区域。如果您未在命令中指定区域，则使用默认区域。要对特定命令使用不同的区域，请添加以下参数。

```
-Region us-east-1
```

# 查找 Amazon EC2 资源
<a name="Using_Filtering"></a>

您可以使用 Amazon EC2 控制台获取某些类型的资源的列表。您可以使用相应命令或 API 操作获取每种类型的资源的列表。如果您拥有许多资源，可以筛选结果以仅包含或排除符合特定标准的资源。

**Topics**
+ [控制台步骤](#advancedsearch)
+ [命令行示例](#Filtering_Resources_CLI)
+ [全局视图（跨区域）](#global-view-intro)

## 使用控制台列出并筛选资源
<a name="advancedsearch"></a>

**Contents**
+ [使用控制台列出资源](#listing-resources)
+ [使用控制台筛选资源](#console-filter)
  + [支持的筛选条件](#console-filters)
+ [使用控制台保存筛选条件](#saved-filter-sets-in-the-ec2-console)
  + [主要 功能](#saved-filter-sets-key-features)
  + [创建筛选条件集](#create-saved-filter-sets)
  + [修改筛选条件集](#modify-saved-filter-sets)
  + [删除筛选条件集](#delete-saved-filter-sets)

### 使用控制台列出资源
<a name="listing-resources"></a>

您可以使用控制台查看最常用的 Amazon EC2 资源类型。要查看其他资源，请使用命令行界面或 API 操作。

**要使用控制台列出 EC2 资源**

1. 通过以下网址打开 Amazon EC2 控制台：[https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/)。

1. Amazon EC2 资源是特定于 AWS 区域。在导航栏中，从**区域**选择器中选择一个区域。  
![\[查看您的区域\]](http://docs.aws.amazon.com/zh_cn/AWSEC2/latest/UserGuide/images/EC2_select_region.png)

1. 在导航窗格中，选择与资源类型对应的选项。例如，要列出所有实例，请选择**实例**。

### 使用控制台筛选资源
<a name="console-filter"></a>

**筛选资源列表**

1. 在导航窗格中，选择资源类型 (例如，**Instances**)。

1. 选择搜索字段。

1. 从列表中选择筛选条件。

1. 选择运算符，例如 **=**（等于）。某些属性具有更多可供选择的运算符。请注意，并非所有页面都支持选择运算符。

1. 选择筛选条件值。

1. 要编辑选定的筛选条件，请选择过滤条件令牌（蓝色框），进行所需的编辑，然后选择 **Apply**（应用）。请注意，并非所有页面都支持编辑选定的筛选条件。  
![\[编辑筛选条件。\]](http://docs.aws.amazon.com/zh_cn/AWSEC2/latest/UserGuide/images/filter-edit.png)

1. 完成后，删除筛选条件。

#### 支持的筛选条件
<a name="console-filters"></a>

Amazon EC2 控制台支持两种类型的筛选。
+ *API 筛选*发生在服务器端。该筛选应用于 API 调用，可减少服务器返回的资源数量。它可以对大型资源集进行快速筛选，并可降低服务器和浏览器之间的数据传输时间和成本。API 筛选支持 **=**（等于）和 **:**（包含）运算符，并且始终区分大小写。
+ *客户端筛选*发生在客户端。它可以对浏览器中现有的数据（也就是 API 已返回的数据）进行筛选。客户端筛选与 API 筛选结合使用，可以在浏览器中筛选出较小的数据集。除 **=**（等于）和 **:**（包含）运算符外，客户端筛选还支持范围运算符 [例如 **>=**（大于等于）] 和否定（反向）运算符 [例如 **\$1=**（不等于）]。

Amazon EC2 控制台支持以下类型的搜索：

**按关键字搜索**  
按关键词搜索是一种自由文本搜索，可让您在所有资源属性或标签中搜索特定的值，而无需指定要搜索的属性或标签键。  
所有关键字搜索都使用*客户端筛选*。
要按关键字进行搜索，请在搜索框中输入或粘贴要查找的内容，然后按 **Enter**。例如，搜索 `123` 时将会比对任何属性（例如 IP 地址、实例 ID、VPC ID 或 AMI ID）或任何标签（例如 Name）中包含 *123* 的所有实例。如果自由文本搜索返回不需要的匹配项，请再应用其他筛选条件。

**按属性搜索**  
按属性搜索可让您在所有资源中搜索特定属性。  
属性搜索可以使用 *API 筛选*或*客户端筛选*，具体取决于所选的属性。执行属性搜索时，会相应地对属性进行分组。
例如，您可以搜索所有实例的 **Instance state** 属性，以便仅返回处于 `stopped` 状态的实例。要实现此目的，应按照以下步骤进行：  

1. 在**实例**屏幕上的搜索字段中，开始输入 `Instance state`。输入字符时，**实例状态**将显示两种类型的筛选条件：**API 筛选条件**和**客户端筛选条件**。

1. 要在服务器端进行搜索，请在 **API 筛选条件**下选择** 实例状态**。要在客户端进行搜索，请在**客户端筛选条件**下选择**实例状态（客户端）**。

   这时会显示所选属性的可能运算符列表。

1. 选择 **=**（等于）运算符。

   这时会显示所选属性和运算符的可能值列表。

1. 从列表中选择**已停止**。

**按标签搜索**  
借助按标签搜索功能，您可以按标签键或标签值来筛选当前显示的表中的资源。  
标签搜索使用 *API 筛选*或*客户端筛选*方式，具体取决于 Preferences（首选项）窗口中的设置。  

**确保对标签执行 API 筛选**

1. 打开 **Preferences**（首选项）窗口。

1. 清除**使用正则表达式匹配**复选框。如果选中此复选框，则将执行客户端筛选。

1. 选择**使用区分大小写的匹配**复选框。如果清除此复选框，则将执行客户端筛选。

1. 选择**确认**。
按标签搜索时，您可以使用以下值：  
+ **（空）** – 查找具有指定标签键，但必须不具有标签值的所有资源。
+ **All values**（所有值）– 查找具有指定标签键和任何标签值的所有资源。
+ **Not tagged**（未添加标签）– 搜索不具有指定标签键的所有资源。
+ 显示的值 – 查找具有指定标签键和指定标签值的所有资源。

您可以使用以下技术来增强或优化搜索：

**逆向搜索**  
反向搜索可让您搜索与指定的值**不**匹配的资源。在**实例**和 **AMI** 屏幕中，反向搜索的方法是首先选择 **\$1=**（不等于）或 **\$1:**（不包含）运算符，然后选择一个值。在其他屏幕中，反向搜索可通过在搜索关键词前加上感叹号（\$1）字符来执行。  
只有*客户端*筛选条件上的关键字搜索和属性搜索支持反向搜索。API 筛选条件上的属性搜索不支持它。
例如，您可以搜索所有实例的**实例状态**属性，以便包含处于 `terminated` 状态的所有实例。要实现此目的，应按照以下步骤进行：  

1. 在**实例**屏幕上的搜索字段中，开始输入 `Instance state`。输入字符时，**实例状态**将显示两种类型的筛选条件：**API 筛选条件**和**客户端筛选条件**。

1. 在 **Client filters**（客户端筛选条件）下，选择 **Instance state (client)** [实例状态（客户端）]。只有*客户端*筛选条件支持反向搜索。

   这时会显示所选属性的可能运算符列表。

1. 选择 **\$1=**（不等于），然后选择 **terminated**（已终止）。
要根据实例状态属性筛选实例，您还可以使用**实例状态**列中的搜索图标 (![\[\]](http://docs.aws.amazon.com/zh_cn/AWSEC2/latest/UserGuide/images/search.png))。带加号 (**\$1**) 的搜索图标将显示与该属性*匹配*的所有实例。带减号 (**-**) 的搜索图标将*排除*与该属性匹配的所有实例。  
以下是使用反向搜索的另一个示例：要列出**未**分配名为 `launch-wizard-1` 的安全组的所有实例，则在 **Client filters**（客户端筛选条件）下，按 **Security group name**（安全组名称）属性进行搜索，然后选择 **\$1=** 并在搜索栏中输入 `launch-wizard-1`。

**部分搜索**  
使用部分搜索，可以搜索部分字符串值。要执行部分搜索，请仅输入要搜索的关键字的一部分。在 **Instances**（实例）和 **AMI** 屏幕中，部分搜索只能通过 **:**（包含）运算符来执行。在其他屏幕中，您可以选择该客户端筛选条件属性，然后立即仅输入要搜索的关键词的一部分。例如，在 **Instance type**（实例类型）屏幕上，要搜索所有 `t2.micro`、`t2.small` 和 `t2.medium` 实例，则按 **Instance Type**（实例类型）属性进行搜索，然后输入关键词 `t2`。

**正则表达式搜索**  
要使用正则表达式搜索，必须在**首选项**窗口中选中**使用正则表达式匹配**复选框。  
当需要匹配字段中具有特定模式的值时，可以使用正则表达式。例如，要搜索以 `s` 开头的值，请搜索 `^s`。要搜索以 `xyz` 结尾的值，请搜索 `xyz$`。或者要搜索以数字开头，后跟一个或多个字符的值，请搜索 `[0-9]+.*`。  
只有客户端筛选条件上的关键字搜索和属性搜索支持正则表达式搜索。API 筛选条件上的属性搜索不支持它。

**区分大小写搜索**  
要使用区分大小写搜索，必须在**首选项**窗口中选中**使用区分大小写的匹配**复选框。区分大小写的首选项仅适用于客户端筛选条件和标签筛选条件。  
API 筛选条件始终区分大小写。

**通配符搜索**  
使用 `*` 通配符匹配零个或多个字符。使用 `?` 通配符匹配零个或一个字符。例如，假设您有一个包含值 `prod`、`prods`、和 `production` 的数据集，搜索 `prod*` 将会匹配所有值，而 `prod?` 只匹配 `prod` 和 `prods`。要使用文字值，请使用反斜杠（\$1）进行转义。例如，“`prod\*`”将匹配 `prod*`。  
仅 API 筛选条件上的属性和标签搜索支持通配符搜索。客户端筛选条件上的关键词搜索以及属性和标签搜索不支持通配符。

**合并搜索**  
通常，具有相同属性的多个筛选条件会自动以 `OR` 连接。例如，搜索 `Instance State : Running` 和 `Instance State : Stopped` 会返回正在运行或已停止的所有实例。要使用 `AND` 连接搜索，请跨不同的属性进行搜索。例如，搜索 `Instance State : Running` 和 `Instance Type : c4.large` 只会返回为类型为 `c4.large` 且处于运行状态的实例。

### 使用控制台保存筛选条件
<a name="saved-filter-sets-in-the-ec2-console"></a>

*保存的筛选条件集*是一组自定义的筛选条件，您可以创建并重复使用这些筛选条件来高效查看自己的 Amazon EC2 资源。此功能有助于简化您的工作流，实现快速访问特定的资源视图。

保存的筛选条件集仅受 Amazon EC2 控制台支持，并且当前仅适用于**卷**页面。

#### 主要 功能
<a name="saved-filter-sets-key-features"></a>
+ **自定义：**创建根据您的需求量身定制的筛选条件集。例如，您可以创建一个筛选条件集来仅显示在指定日期之后创建的 `gp3` 卷。
+ **默认筛选条件：**为某页面设置默认筛选条件集，当您导航到该页面时，系统会自动应用默认筛选条件。如果未设置默认值，则不应用任何筛选条件。
+ **轻松应用：**选择保存的筛选条件集即可立即应用。然后，Amazon EC2 会显示相关资源，其中活动筛选条件用蓝色标记表示。
+ **灵活性：**根据需要创建、修改和删除筛选条件集。

#### 创建筛选条件集
<a name="create-saved-filter-sets"></a>

**创建新的筛选条件集**

1. 通过以下网址打开 Amazon EC2 控制台：[https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/)。

1. 在导航窗格中，选择 **Volumes**。
**注意**  
保存的筛选器集目前仅适用于**卷**。

1. 在搜索字段中，为您的筛选条件集选择筛选条件。

1. 选择**清除筛选条件**按钮旁边的箭头，然后选择**保存新的筛选条件集**。

1. 在**保存筛选条件集**窗口中，执行下面的操作：

   1. 对于**筛选条件集名称**，输入筛选条件集的名称。

   1. （可选）对于**筛选条件集描述**，输入筛选条件集的描述。

   1. （可选）要将筛选条件集设置为默认筛选条件，请选中**设为默认值**复选框。
**注意**  
每次您打开控制台页面时，都会自动应用默认筛选条件。

   1. 选择**保存**。

#### 修改筛选条件集
<a name="modify-saved-filter-sets"></a>

**修改筛选条件集**

1. 从**保存的筛选条件集**列表中，选择要修改的筛选条件。

1. 要添加筛选条件，请在搜索字段中选择要添加到筛选条件集中的筛选条件。要删除集中的筛选条件，请选择筛选条件标记上的 **X**。

1. 选择**清除筛选条件**按钮旁边的箭头，然后选择**修改筛选条件集**。

1. 在**修改筛选条件集**窗口中，执行下面的操作：

   1. （可选）要将筛选条件集设置为默认筛选条件，请选中**设为默认值**复选框。
**注意**  
每次您打开控制台页面时，都会自动应用默认筛选条件。

   1. 选择 **Modify**(修改)。

#### 删除筛选条件集
<a name="delete-saved-filter-sets"></a>

**删除筛选条件集**

1. 从**保存的筛选条件集**列表中，选择要删除的筛选条件。

1. 选择**清除筛选条件**按钮旁边的箭头，然后选择**删除筛选条件集**。

1. 在**删除筛选条件集**窗口中，查看筛选条件以确认这是要删除的筛选条件，然后选择**删除**。

## 使用命令行列出并筛选
<a name="Filtering_Resources_CLI"></a>

每个资源类型都有对应的 API 操作，以供您用来描述、列出或获取该类型的资源。生成的资源列表可能很长，因此筛选结果以仅包括符合特定条件的资源可能会更快、更有用。

**筛选注意事项**
+ 在单个请求中，您最多可以指定 50 个筛选条件，以及为每个筛选条件最多指定 200 个值。
+ 筛选条件字符串的长度最多为 255 个字符。
+ 您可以将通配符与筛选值一同使用。星号 (\$1) 匹配零个或多个字符，而问号 (?) 匹配零个或一个字符。
+ 筛选值区分大小写。
+ 您的搜索中可包含通配符的字面值；您只需要在字符前用反斜线隔开字符。例如，用 `\*amazon\?\\` 值搜索文字字符串 `*amazon?\`。
+ 您不能将筛选条件值指定为 null，但可以使用客户端筛选。例如，以下命令使用 **--query** 选项，返回在无密钥对的情况下启动之实例的 ID。

  ```
  aws ec2 describe-instances \
      --query 'Reservations[*].Instances[?!not_null(KeyName)].InstanceId' \
      --output text
  ```

------
#### [ AWS CLI ]

**Example 示例：指定单个筛选条件**  
您可以使用 [https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-instances.html](https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-instances.html) 列出 Amazon EC2 实例。如果没有筛选条件，响应将包含您的所有资源的信息。您可以使用以下选项，在输出中仅包含正在运行的实例。  

```
--filters Name=instance-state-name,Values=running
```
要仅列出正在运行的实例的实例 ID，请按如下所示添加 `--query` 选项。  

```
--query "Reservations[*].Instances[*].InstanceId"
```

**Example 示例：指定多个筛选条件或筛选条件值**  
如果指定多个筛选条件或多个筛选条件值，则资源必须在与所有筛选条件匹配时才会包含在结果中。  
您可以使用以下选项来列出类型为 `m5.large` 或 `m5d.large` 的所有实例。  

```
--filters Name=instance-type,Values=m5.large,m5d.large
```
您可以使用以下选项来列出类型为 `t2.micro` 的所有已停止实例。  

```
--filters Name=instance-state-name,Values=stopped Name=instance-type,Values=t2.micro
```

**Example 示例：在筛选条件值中使用通配符**  
您可以使用 [describe-snapshots](https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-snapshots.html) 和以下选项，从而仅返回描述为“database”的快照。  

```
--filters Name=description,Values=database
```
\$1 通配符可与零个或多个字符匹配。您可以使用以下选项，仅返回描述中包含单词 database 的快照。  

```
--filters Name=description,Values=*database*
```
? 通配符完全匹配 1 个字符。您可以使用以下选项，仅返回描述为“database”或“database”并后接一个字符的快照。  

```
--filters Name=description,Values=database?
```
您可以使用以下选项，仅返回描述为“database”并后接不超过四个字符的快照。这会排除包含“database”并后接五个或以上字符的描述。  

```
--filters Name=description,Values=database????
```

**Example 示例：基于日期进行筛选**  
使用 AWS CLI，您可以使用 JMESPath 通过表达式来筛选结果。例如，以下 [https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-snapshots.html](https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-snapshots.html) 命令会显示指定 AWS 账户在指定日期之前创建的所有快照的 ID。如果未指定所有者，则结果将包括所有公有快照。  

```
aws ec2 describe-snapshots \
    --filters Name=owner-id,Values=123456789012 \
    --query "Snapshots[?(StartTime<='2024-03-31')].[SnapshotId]" \
    --output text
```
以下示例会显示在指定日期范围内创建的所有快照的 ID。  

```
aws ec2 describe-snapshots \
    --filters Name=owner-id,Values=123456789012 \
    --query "Snapshots[?(StartTime>='2024-01-01') && (StartTime<='2024-12-31')].[SnapshotId]" \
    --output text
```

**示例：基于标签进行筛选**  
有关如何根据资源标签筛选资源列表的示例，请参阅[按标签筛选 Amazon EC2 资源](filtering-the-list-by-tag.md)。

------
#### [ PowerShell ]

**Example 示例：指定单个筛选条件**  
您可以使用 [https://docs.aws.amazon.com/powershell/latest/reference/items/Get-EC2Instance.html](https://docs.aws.amazon.com/powershell/latest/reference/items/Get-EC2Instance.html) 列出 Amazon EC2 实例。如果没有筛选条件，响应将包含您的所有资源的信息。您可以使用以下参数，在输出中仅包含正在运行的实例。  

```
-Filter @{Name="instance-state-name"; Values="running"}
```

以下示例仅会列出正在运行的实例的实例 ID。

```
(Get-EC2Instance -Filter @{Name="instance-state-name"; Values="stopped"}).Instances | Select InstanceId
```

**Example 示例：指定多个筛选条件或筛选条件值**  
如果指定多个筛选条件或多个筛选条件值，则资源必须与所有筛选条件匹配才能包括在结果中。  
您可以使用以下选项来列出类型为 `m5.large` 或 `m5d.large` 的所有实例。  

```
-Filter @{Name="instance-type"; Values="m5.large", "m5d.large"}
```
您可以使用以下选项来列出类型为 `t2.micro` 的所有已停止实例。  

```
-Filter @{Name="instance-state-name"; Values="stopped"}, @{Name="instance-type"; Values="t2.micro"}
```

------

## 使用 Amazon EC2 全局视图查看跨区域的资源
<a name="global-view-intro"></a>

通过 Amazon EC2 全局视图，您可以在单个控制台中跨单个 AWS 区域或跨多个区域同时查看和搜索 Amazon EC2 和 Amazon VPC 资源。有关更多信息，请参阅 [使用 AWS 全局视图查看跨区域的资源](global-view.md)。

# 使用 AWS 全局视图查看跨区域的资源
<a name="global-view"></a>

通过 AWS 全局视图，您可以在单个控制台中跨单个 AWS 区域或跨多个区域查看一些 Amazon EC2 和 Amazon VPC 资源。AWS全局视图还提供*全局搜索*功能，让您能同时搜索多个区域中的特定资源或特定资源类型。

AWS 全局视图不允许您以任何方式修改资源。

**支持的资源**  
使用 AWS 全局视图，您可以查看已启用 AWS 账户 的所有区域中以下资源的全局摘要。
+ 自动扩缩组
+ 可用区
+ 容量预留和容量块
+ 数据库集群
+ 数据库实例数
+ DHCP 选项集
+ 仅出口互联网网关
+ 弹性 IP
+ 端点服务
+ 实例
+ 互联网网关
+ 托管前缀列表
+ NAT 网关
+ 网络 ACL
+ 网络接口
+ Outposts
+ 路由表
+ S3 存储桶
+ 安全组
+ 子网
+ 卷
+ VPC
+ VPC 端点
+ VPC 对等连接

**所需的权限**  
用户必须具有以下权限才能使用 AWS 全局视图。

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
  {
    "Effect": "Allow",
    "Action": [
      "autoscaling:DescribeAutoScalingGroups",
      "ec2:DescribeRegions",
      "ec2:DescribeCapacityReservations",
      "ec2:DescribeDhcpOptions",
      "ec2:DescribeEgressOnlyInternetGateways",
      "ec2:DescribeAddresses",
      "ec2:DescribeVpcEndpointServices",
      "ec2:DescribeInstances",
      "ec2:DescribeInternetGateways",
      "ec2:DescribePrefixLists",
      "ec2:DescribeNatGateways",
      "ec2:DescribeNetworkAcls",
      "ec2:DescribeNetworkInterfaces",
      "ec2:DescribeRouteTables",
      "ec2:DescribeSecurityGroups",
      "ec2:DescribeSubnets",
      "ec2:DescribeVolumes",
      "ec2:DescribeVpcs",
      "ec2:DescribeVpcEndpoints",
      "ec2:DescribeVpcPeeringConnections",
      "ec2:DescribeAvailabilityZones",
      "ec2:DescribeVpcEndpointServiceConfigurations",
      "ec2:DescribeManagedPrefixLists",
      "outposts:ListOutposts",
      "rds:DescribeDBInstances",
      "rds:DescribeDBClusters",
      "s3:ListAllMyBuckets"
  ],
  "Resource": "*"
  }]
}
```

------

**使用 AWS 全局视图**  
登录 [AWS 全局视图控制台](https://console.aws.amazon.com/ec2globalview/home#RegionsAndZones)。

**重要**  
您不能在 Firefox 中使用私密窗口来访问 AWS 全局视图。

控制台由以下各项组成：
+ **区域资源管理器**：此页面包括以下各节：
  + **摘要** – 提供您在所有区域中的资源的简要概述。

    展开**显示所有资源摘要**以表示已启用 AWS 账户的区域数。剩余字段表示您当前在这些区域中拥有的资源数量。选择任何链接以查看所有区域该类型的资源。例如，如果 **Instances**（实例）标签以下的链接是 **29 in 10 Regions**（10 个区域中的 29 个），它表示您当前在 `10` 个区域有 `29` 个实例。选择该链接以查看所有 29 个实例的列表。
  + **区域资源管理器**：列出所有 AWS 区域（包括没有为其启用账户的那些区域），并提供每个区域的每种资源类型的总计。

    选择区域名称，以查看该特定区域所有类型的所有资源。例如，选择 **Africa (Cape Town) af-south-1**（非洲（开普敦）af-south-1）可查看该区域中的所有 VPC、子网、实例、安全组、卷和自动扩缩组。或者，选择一个区域，然后选择 **View resources for selected Region**（查看所选区域的资源）。

    选择特定区域中特定资源类型的值，以便仅查看该区域中该类型的资源。例如，选择 **Africa (Cape Town) af-south-1**（非洲（开普敦）af-south-1）实例的值，以仅查看该区域中的实例。
+ **全局搜索** – 在此页面上，您可以跨单个区域或跨多个区域搜索特定资源或特定资源类型。它还使您能够查看特定资源的详细信息。

  要搜索资源，请在网格前面的字段中输入搜索条件。您可以按区域、按资源类型以及按分配给资源的标签进行搜索。

  要查看特定资源的详细信息，请在网格中选中。您也可以选择资源的资源 ID，以在各自的控制台中打开该资源。例如，选择实例 ID 以在 Amazon EC2 控制台中打开实例，或选择子网 ID 以在 Amazon VPC 控制台中打开子网。
+ **区域和可用区** - 在此页面上，您可以查看和管理所有可用区域、可用区、本地区域和 Wavelength 区域。

  在**区域**选项卡中，可以查看所有 AWS 区域。**状态**列显示为您的 AWS 账户启用的区域。在此页面中，您可以选择一个区域来执行以下操作：
  + 查看区域的详细信息，例如区域代码、地理位置和每种区域的数量。

    您还可以查看可用区、本地区域和 Wavelength 区域的列表以及区域中的资源列表。
  + 启用或禁用区域。

  从每个区域选项卡中，您可以查看该区域类型的列表。在**本地区域**选项卡中，您可以选择加入某个本地区域。

**提示**  
如果您仅使用特定区域或资源类型，则可以自定义 AWS 全局视图，使其仅显示这些区域和资源类型。要自定义显示的区域和资源类型，请在导航面板中选择**设置**，然后在**资源**和**区域**选项卡上，选择不希望在 AWS 全局视图中显示的区域和资源类型。

# 标记 Amazon EC2 资源
<a name="Using_Tags"></a>

为了方便您管理实例、映像以及其他 Amazon EC2 资源，您可通过*标签* 的形式为每个资源分配元数据。标签可让您按各种标准（例如用途、所有者或环境）对 AWS 资源进行分类。这在您具有相同类型的很多资源时会很有用 – 您可以根据分配给特定资源的标签快速识别该资源。本主题介绍标签并说明如何创建标签。

**警告**  
很多不同的 API 调用返回标签键及其值。拒绝访问 `DescribeTags` 不会自动拒绝访问其他 API 返回的标签。作为最佳实践，我们建议您不要在标签中包含敏感数据。

**Topics**
+ [有关标签的基本知识](#tag-basics)
+ [标记 资源](#tag-resources)
+ [标签限制](#tag-restrictions)
+ [标签和访问管理](#tag-resources-access-management)
+ [为资源添加标签以便于进行计费](#tag-resources-for-billing)
+ [资源标记权限](supported-iam-actions-tagging.md)
+ [添加或删除标签](Using_Tags_Console.md)
+ [按标签筛选资源](filtering-the-list-by-tag.md)
+ [使用实例元数据来查看标签](work-with-tags-in-IMDS.md)

## 有关标签的基本知识
<a name="tag-basics"></a>

标签是为AWS资源分配的标记。每个标签都包含您定义的一个*键* 和一个可选*值*。

标签可让您按各种标准（例如用途、所有者或环境）对 AWS 资源进行分类。例如，您可以为账户中的 Amazon EC2 实例定义一组标签，以跟踪每个实例的所有者和堆栈级别。

下图说明了标签的工作方式。在此示例中，您为每个实例分配了两个标签 — 一个标签使用键 `Owner`，另一个使用键 `Stack`。每个标签都拥有相关的值。

![\[标签示例\]](http://docs.aws.amazon.com/zh_cn/AWSEC2/latest/UserGuide/images/Tag_Example.png)


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

标签对 Amazon EC2 没有任何语义意义，应严格按字符串进行解析。同时，标签不会自动分配至您的资源。您可以修改标签的密钥和值，还可以随时删除资源的标签。您可以将标签的值设为空的字符串，但是不能将其设为空值。如果您添加的标签的值与该实例上现有标签的值相同，新的值就会覆盖旧值。如果删除资源，资源的所有标签也会被删除。

**注意**  
删除资源后，其标签可能会在短时间内在控制台、API 和 CLI 输出中仍保持可见。这些标签将逐步解除与资源的关联，并永久删除。

## 标记 资源
<a name="tag-resources"></a>

当您使用 Amazon EC2 控制台时，可以使用相关资源屏幕上的**标签**选项卡或 AWS Resource Groups 控制台中的**标签编辑器**，将标签应用到资源。在您创建资源时，某些资源屏幕能让您为资源指定标签；例如，具有 `Name` 键并且具有您指定的值的标签。在大多数情况下，控制台会在资源创建后 (而不是在资源创建期间) 立即应用标签。控制台可能根据 `Name` 标签对资源进行组织，但此标签对于 Amazon EC2 服务没有任何语义意义。

如果使用的是 Amazon EC2 API、AWS CLI 或 AWS 软件开发工具包，则您可以使用 `CreateTags` EC2 API 操作向现有资源应用标签。此外，某些资源创建操作允许您在创建资源时为其指定标签。如果无法在资源创建期间应用标签，系统会回滚资源创建过程。这样可确保要么创建带有标签的资源，要么根本不创建资源，即任何时候都不会创建出未标记的资源。通过在创建时标记资源，您不需要在资源创建后运行自定义标记脚本。有关允许用户在创建时标记资源的更多信息，请参阅 [在创建过程中授予标记 Amazon EC2 资源的权限](supported-iam-actions-tagging.md)。

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

此外，您还可以在 IAM policies 中对 `CreateTags` 和 `DeleteTags` Amazon EC2 API 操作应用资源级权限，从而控制对现有资源设置哪些标签键和值。有关更多信息，请参阅[示例：标记资源](ExamplePolicies_EC2.md#iam-example-taggingresources)。

有关标记资源以便于计费的更多信息，请参阅 *AWS Billing 用户指南*中的[使用成本分配标签](https://docs.aws.amazon.com/awsaccountbilling/latest/aboutv2/cost-alloc-tags.html)。

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

下面是适用于标签的基本限制：
+ 每个资源的标签数上限：50
+ 对于每个资源，每个标签键都必须是唯一的，每个标签键只能有一个值。
+ 最大键长度：128 个 Unicode 字符（采用 UTF-8 格式）
+ 最大值长度：256 个 Unicode 字符 (采用 UTF-8 格式)
+ 允许使用的字符
  + 虽然 EC2 允许在其标签中使用任何字符，但其他 AWS 服务具有更严格的限制。允许在所有 AWS 服务中使用的字符包括：可以使用 UTF-8 表示的字母（`a-z`、`A-Z`）、数字（`0-9`）和空格以及以下字符：`+ - = . _ : / @`。
  + 如果在实例元数据中启用实例标签，实例标签*键*只能使用字母 (`a-z`、`A-Z`)、数字 (`0-9`) 及以下字符：`+ - = . , _ : @`。实例标签 *keys* 不能包含空格或 `/`，也不能只包含 `.`（一个句号）、`..`（两个句号）或 `_index`。有关更多信息，请参阅 [使用实例元数据来查看 EC2 实例的标签](work-with-tags-in-IMDS.md)。
+ 标签键和值区分大小写。
+ `aws:` 前缀专门预留供 AWS 使用。如果某个标签具有带有此标签键，则您无法编辑该标签的键或值。具有 `aws:` 前缀的标签不计入每个资源的标签数限制。

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

当您为公有或共享资源添加标签时，您分配的标签仅对您的 AWS 账户可用；其他 AWS 账户无权访问这些标签。为了对共享资源进行基于标签的访问控制，每个 AWS 账户必须分配自己的一组标签来控制对资源的访问。

## 标签和访问管理
<a name="tag-resources-access-management"></a>

如果您使用的是 AWS Identity and Access Management (IAM)，则可以控制AWS账户中的哪些用户拥有创建、编辑或删除标签的权限。有关更多信息，请参阅[在创建过程中授予标记 Amazon EC2 资源的权限](supported-iam-actions-tagging.md)。

您还可以使用资源标签来实现基于属性的控制 (ABAC)。您可以创建 IAM policies，基于资源标签允许操作。有关更多信息，请参阅[使用基于属性的访问控制访问权限](iam-policies-for-amazon-ec2.md#control-access-with-tags)。

## 为资源添加标签以便于进行计费
<a name="tag-resources-for-billing"></a>

您也可以使用标签来组织您的 AWS 账单，使其反映您的成本结构。要执行此操作，请注册以获取包含标签键值的 AWS 账户账单。有关设置带有标签的成本分配报告的更多信息，请参阅 *AWS Billing 用户指南*中的[月度成本分配报告](https://docs.aws.amazon.com/awsaccountbilling/latest/aboutv2/configurecostallocreport.html)。如需查看组合资源的成本，请按具有相同标签键值的资源组织您的账单信息。例如，您可以将特定的应用程序名称用作几个资源的标签，然后组织账单信息，以查看在数个服务中的使用该应用程序的总成本。有关更多信息，请参阅 *AWS Billing 用户指南*中的[使用成本分配标签](https://docs.aws.amazon.com/awsaccountbilling/latest/aboutv2/cost-alloc-tags.html)。

**注意**  
如果您已启用报告，则可以在 24 小时后查看当月的数据。

成本分配标签可指示哪些资源导致产生成本，而删除或停用资源并不总是能降低成本。例如，即使删除包含原始数据的快照，其他快照引用的快照数据也将保留。有关更多信息，请参阅 *AWS Billing 用户指南*中的 [Amazon Elastic Block Store 卷和快照](https://docs.aws.amazon.com/awsaccountbilling/latest/aboutv2/checklistforunwantedcharges.html#checkebsvolumes)。

**注意**  
标记的弹性 IP 地址不会显示在成本分配报告中。

# 在创建过程中授予标记 Amazon EC2 资源的权限
<a name="supported-iam-actions-tagging"></a>

某些资源创建 Amazon EC2 API 操作允许您在创建资源时指定标签。您可以使用资源标签来实现基于属性的控制 (ABAC)。有关更多信息，请参阅[标记 资源](Using_Tags.md#tag-resources)和[使用基于属性的访问控制访问权限](iam-policies-for-amazon-ec2.md#control-access-with-tags)。

为使用户能够在创建时为资源添加标签，他们必须具有使用创建该资源的操作（如 `ec2:RunInstances` 或 `ec2:CreateVolume`）的权限。如果在资源创建操作中指定了标签，则 Amazon 会对 `ec2:CreateTags` 操作执行额外的授权，以验证用户是否具备创建标签的权限。因此，用户还必须具有使用 `ec2:CreateTags` 操作的显式权限。

在 `ec2:CreateTags` 操作的 IAM 策略定义中，使用带有 `Condition` 条件键的 `ec2:CreateAction` 元素，为创建资源的操作授予添加标签的权限。

例如，下面的策略允许用户启动实例并在启动期间向实例和卷应用任何标签。用户无权标记任何现有资源 (他们无法直接调用 `ec2:CreateTags` 操作)。

```
{
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
         "ec2:RunInstances"
      ],
      "Resource": "*"
    },
    {
      "Effect": "Allow",
      "Action": [
         "ec2:CreateTags"
      ],
      "Resource": "arn:aws:ec2:us-east-1:111122223333:*/*",
      "Condition": {
         "StringEquals": {
             "ec2:CreateAction" : "RunInstances"
          }
       }
    }
  ]
}
```

同样，下面的策略允许用户创建卷并在创建卷期间向卷应用任何标签。用户无权标记任何现有资源 (他们无法直接调用 `ec2:CreateTags` 操作)。

```
{
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
         "ec2:CreateVolume"
      ],
      "Resource": "*"
    },
    {
      "Effect": "Allow",
      "Action": [
         "ec2:CreateTags"
      ],
      "Resource": "arn:aws:ec2:us-east-1:111122223333:*/*",
      "Condition": {
         "StringEquals": {
             "ec2:CreateAction" : "CreateVolume"
          }
       }
    }
  ]
}
```

仅当用户在资源创建操作中应用了标签时，系统才会评估 `ec2:CreateTags` 操作。因此，如果未在此请求中指定任何标签，则拥有创建资源权限（假定没有标记条件）的用户无需具备使用 `ec2:CreateTags` 操作的权限。但是，如果用户不具备使用 `ec2:CreateTags` 操作的权限而又试图创建带标签的资源，则请求将失败。

如果在启动模板中提供了标签，也会对 `ec2:CreateTags` 操作进行评估。有关策略示例，请参阅[启动模板中的标签](ExamplePolicies_EC2.md#iam-example-tags-launch-template)。

## 控制对特定标签的访问
<a name="control-tagging"></a>

您可以在 IAM 策略的 `Condition` 元素中使用其他条件来控制可应用到资源的标签键和值。

以下条件键可用于上一节中的示例：
+ `aws:RequestTag`：指示请求中必须存在特定的标签键或标签键和值。也可在此请求中指定其他标签。
  + 与 `StringEquals` 条件运算符配合使用，以强制实施特定的标签键和值组合，例如强制实施标签 `cost-center`=`cc123`：

    ```
    "StringEquals": { "aws:RequestTag/cost-center": "cc123" }
    ```
  + 与 `StringLike` 条件运算符配合使用，以在请求中强制实施特定的标签键；如强制实施标签键 `purpose`：

    ```
    "StringLike": { "aws:RequestTag/purpose": "*" }
    ```
+ `aws:TagKeys`：强制实施在请求中使用的标签键。
  + 与 `ForAllValues` 修饰符配合使用，以只强制实施请求中提供的特定标签键（如果在请求中指定了标签，则只允许特定的标签键；不允许任何其他标签）。例如，允许标签键 `environment` 或 `cost-center`：

    ```
    "ForAllValues:StringEquals": { "aws:TagKeys": ["environment","cost-center"] }
    ```
  + 与 `ForAnyValue` 修饰符配合使用，以强制请求中至少存在一个指定的标签键。例如，强制请求中至少存在标签键 `environment` 或 `webserver` 中的一个：

    ```
    "ForAnyValue:StringEquals": { "aws:TagKeys": ["environment","webserver"] }
    ```

上述条件键可应用于支持标记的资源创建操作，以及 `ec2:CreateTags` 和 `ec2:DeleteTags` 操作。要了解 Amazon EC2 API 操作是否支持添加标签，请参阅 [Amazon EC2 的操作、资源和条件建](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazonec2.html)。

为强制用户指定标签，在创建资源时，您必须使用 `aws:RequestTag` 条件键或 `aws:TagKeys` 条件键，并在资源创建操作中使用修饰符 `ForAnyValue`。如果用户没有为资源创建操作指定标签，则不会对 `ec2:CreateTags` 操作进行评估。

对于条件，条件键不区分大小写，条件值区分大小写。因此，要强制标签键区分大小写，请使用 `aws:TagKeys` 条件键，其中标签键指定为条件中的值。

有关示例 IAM policies，请参阅 [用于控制访问 Amazon EC2 API 的示例策略](ExamplePolicies_EC2.md)。有关更多信息，请参阅《IAM 用户指南》**中的[具有多个上下文键或值的条件](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-logic-multiple-context-keys-or-values.html)。

# 添加或删除 Amazon EC2 资源的标签
<a name="Using_Tags_Console"></a>

在创建 Amazon EC2 资源（例如 Amazon EC2 实例）时，可以指定要添加到资源的标签。Amazon EC2 控制台可用于显示特定 Amazon EC2 资源的标签。您也可以在现有的 Amazon EC2 资源中添加或删除标签。

使用 AWS Resource Groups 控制台中的**标签编辑器**，可以查看、添加或删除所有区域中所有 AWS 资源的标签。您可以同时将标签应用到多个类型的资源，也可以同时从多个类型的资源删除标签。有关更多信息，请参阅 [标记 AWS 资源用户指南](https://docs.aws.amazon.com/tag-editor/latest/userguide/tagging.html)。

**Topics**
+ [使用控制台添加标签](#adding-or-deleting-tags)
+ [使用 AWS CLI 添加标签](#create-tag-examples)
+ [使用 PowerShell 添加标签](#powershell-add-tag-specifications)
+ [使用 CloudFormation 添加标签](#cloudformation-add-tag-specifications)

## 使用控制台添加标签
<a name="adding-or-deleting-tags"></a>

您可以从资源页面直接为现有的资源添加标签。

**向现有资源添加标签**

1. 通过以下网址打开 Amazon EC2 控制台：[https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/)。

1. 从导航栏中选择资源所在的区域。

1. 在导航窗格中，选择资源类型 (例如，**Instances**)。

1. 从列表中选择相应资源。

1. 从**标签**选项卡中选择**管理标签**。

1. 选择**添加新标签**，然后输入标签键和标签值。

1. 选择**保存**。

## 使用 AWS CLI 添加标签
<a name="create-tag-examples"></a>

您可以在创建资源时添加标签，也可以向现有资源添加标签。

**在创建资源时添加标签**  
使用 `-tag-specifications` 选项在创建资源时标记资源。标签规范规定了要标记的资源类型、标签键和标签值。以下示例会创建一个标签并将其添加到标签规范中。

```
--tag-specifications 'ResourceType=instance,Tags=[{Key=stack,Value=production}]'
```

**向现有资源添加标签**  
以下示例演示了如何使用 [create-tags](https://docs.aws.amazon.com/cli/latest/reference/ec2/create-tags.html) 命令向现有资源添加标签。

**Example 示例：将标签添加到资源**  
以下示例将标签 **Stack=production** 添加到指定的映像，或者覆盖该 AMI 的现有标签（其中标签键为 stack）。如果命令成功，则不返回任何输出。  

```
aws ec2 create-tags \
    --resources ami-0abcdef1234567890 \
    --tags Key=stack,Value=production
```

**Example 示例：将标签添加到多个资源**  
此示例为 AMI 和实例添加（或覆盖）两个标签。其中一个标签仅包含键 (webserver)，不包含值（我们将值设置为空字符串）。另一个标签则包含键 (stack) 和值 (**Production**)。如果命令成功，则不返回任何输出。  

```
aws ec2 create-tags \
    --resources ami-0abcdef1234567890 i-1234567890abcdef0 \
    --tags Key=webserver,Value=  Key=stack,Value=Production
```

**Example 示例：使用特殊字符添加标签**  
此示例将标签 [Group]=test 添加到实例。方括号（[ 和 ]）是特殊字符，必须对其进行转义。  
如果您使用的是 Linux 或 OS X，要转义特殊字符，请用双引号 (") 将具有特殊字符的元素引起来，然后用单引号 (') 将整个键和值结构引起来。  

```
aws ec2 create-tags \
    --resources i-1234567890abcdef0 \
    --tags 'Key="[Group]",Value=test'
```
如果您使用的是 Windows，要转义特殊字符，请用双引号 (") 将具有特殊字符的元素引起来，然后在每个双引号字符前面添加反斜杠 (**\$1**)，如下所示：  

```
aws ec2 create-tags ^
    --resources i-1234567890abcdef0 ^
    --tags Key=\"[Group]\",Value=test
```
如果您使用的是 Windows PowerShell，要转义特殊字符，请用双引号 (**"**) 将具有特殊字符的值引起来，在每个双引号字符前面添加反斜杠 (**\$1**)，然后用单引号 (**'**) 将整个键和值结构引起来，如下所示：  

```
aws ec2 create-tags `
    --resources i-1234567890abcdef0 `
    --tags 'Key=\"[Group]\",Value=test'
```

## 使用 PowerShell 添加标签
<a name="powershell-add-tag-specifications"></a>

您可以在创建资源时添加标签，也可以向现有资源添加标签。

**在创建资源时添加标签**  
使用 `-TagSpecification` 参数在创建资源时标记资源。标签规范规定了要标记的资源类型、标签键和标签值。以下示例会创建一个标签并将其添加到标签规范中。

```
$tag = @{Key="stack"; Value="production"}
$tagspec = new-object Amazon.EC2.Model.TagSpecification
$tagspec.ResourceType = "instance"
$tagspec.Tags.Add($tag)
```

以下示例会在 `-TagSpecification` 参数中指定此标签。

```
-TagSpecification $tagspec
```

**向现有资源添加标签**  
使用 [New-EC2Tag](https://docs.aws.amazon.com/powershell/latest/reference/items/New-EC2Tag.html) cmdlet。您必须指定资源、标签键和标签值。

```
New-EC2Tag `
    -Resource i-1234567890abcdef0 `
    -Tag @{Key="purpose"; Value="production"}
```

## 使用 CloudFormation 添加标签
<a name="cloudformation-add-tag-specifications"></a>

对于 Amazon EC2 资源类型，您可以使用 `Tags` 或 `TagSpecifications` 属性指定标签。

以下示例使用其 `Tags` 属性将标签 **Stack=Production** 添加到 [AWS::EC2::Instance](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-instance.html)。

**Example 示例：YAML 中的 Tags**  

```
Tags:
  - Key: "Stack"
    Value: "Production"
```

**Example 示例：JSON 中的 Tags**  

```
"Tags": [
    {
        "Key": "Stack",
        "Value": "Production"
    }
]
```

以下示例使用其 `TagSpecifications` 属性将标签 **Stack=Production** 添加到 [AWS::EC2::LaunchTemplate LaunchTemplateData](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-launchtemplate-launchtemplatedata.html)。

**Example 示例：YAML 中的 TagSpecifications**  

```
TagSpecifications:
  - ResourceType: "instance"
    Tags:
    - Key: "Stack"
      Value: "Production"
```

**Example 示例：JSON 中的 TagSpecifications**  

```
"TagSpecifications": [
    {
        "ResourceType": "instance",
        "Tags": [
            {
                "Key": "Stack",
                "Value": "Production"
            }
        ]
    }
]
```

# 按标签筛选 Amazon EC2 资源
<a name="filtering-the-list-by-tag"></a>

添加标签后，即可基于标签键和标签值来筛选 Amazon EC2 资源。

------
#### [ Console ]

**按标签筛选资源**

1. 通过以下网址打开 Amazon EC2 控制台：[https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/)。

1. 在导航窗格中，选择资源类型 (例如，**Instances**)。

1. 选择搜索字段。

1. 在列表中的**标签**下，选择标签键。

1. 从列表中选择相应的标签值。

1. 完成后，删除筛选条件。

有关在 Amazon EC2 控制台中使用筛选条件的更多信息，请参阅 [查找 Amazon EC2 资源](Using_Filtering.md)。

------
#### [ AWS CLI ]

**描述具有指定标签键的单个类型的资源**  
将以下筛选条件添加到 `describe` 命令中，来描述具有 Stack 标签的该类型资源，无论标签值为何。

```
--filters Name=tag-key,Values=Stack
```

**描述具有指定标签的单个类型的资源**  
将以下筛选条件添加到 `describe` 命令中，来描述具有标签 Stack=production 的该类型资源。

```
--filters Name=tag:Stack,Values=production
```

**描述具有指定标签值的单个类型的资源**  
将以下筛选条件添加到 `describe` 命令中，来描述具有值为 production 的标签的该类型资源，无论标签键为何。

```
--filters Name=tag-value,Values=production
```

**描述具有指定标签的所有 EC2 资源**  
将以下筛选条件添加到 [describe-tags](https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-tags.html) 命令中，来描述具有标签 Stack=test 的所有 EC2 资源。

```
--filters Name=key,Values=Stack Name=value,Values=test
```

------
#### [ PowerShell ]

**按标签键筛选单个类型的资源**  
将以下筛选条件添加到 `Get` cmdlet 中，来描述具有 Stack 标签的该类型资源，无论标签值为何。

```
-Filter @{Name="tag-key"; Values="Stack"}
```

**按标签筛选单个类型的资源**  
将以下筛选条件添加到 `Get` cmdlet 中，来描述具有标签 Stack=production 的该类型资源。

```
-Filter @{Name="tag:Stack"; Values="production"}
```

**按标签值筛选单个类型的资源**  
将以下筛选条件添加到 `Get` 命令中，来描述具有值为 production 的标签的该类型资源，无论标签键的值为何。

```
-Filter @{Name="tag-value"; Values="production"}
```

**按标签筛选所有 EC2 资源**  
将以下筛选条件添加到 [Get-EC2Tag](https://docs.aws.amazon.com/powershell/latest/reference/items/Get-EC2Tag.html) cmdlet 中，来描述具有标签 Stack=test 的所有 EC2 资源。

```
-Filter @{Name="tag:Stack"; Values="test"}
```

------

# 使用实例元数据来查看 EC2 实例的标签
<a name="work-with-tags-in-IMDS"></a>

您可以从实例元数据访问实例的标签。通过从实例元数据访问标签，您无需再使用 `DescribeInstances` 或 `DescribeTags` API 调用来检索标签信息，这可以减少每秒的 API 事务量，并允许您的标签检索随您控制的实例数量扩展。此外，在实例上运行的本地进程可以直接从实例元数据中查看实例的标签信息。

默认情况下，实例元数据中不提供标签；您必须明确允许访问。您可以在实例启动时或启动后在正在运行或停止的实例上允许访问。您还可以通过在启动模板中指定标签来允许访问标签。使用模板启动的实例允许访问实例元数据中的标签。

如果您添加或移除实例标签，则实例元数据将在实例运行期间更新，无需停止后再启动实例。

**Topics**
+ [启用对实例元数据中标签的访问权限](#allow-access-to-tags-in-IMDS)
+ [从实例元数据中检索标签](#retrieve-tags-from-IMDS)
+ [禁用对实例元数据中标签的访问权限](#turn-off-access-to-tags-in-IMDS)

## 启用对实例元数据中标签的访问权限
<a name="allow-access-to-tags-in-IMDS"></a>

默认情况下，无法访问实例元数据中的实例标签。对于每个实例，您必须显式启用访问权限。

**注意**  
如果您允许访问实例元数据中的标签，则实例标签*键*存在特定的限制。不合规将导致新实例启动失败或现有实例出错。这些限制包括：  
只能包含字母（`a-z`、`A-Z`）、数字 (`0-9`) 和以下字符：`+ - = . , _ : @`。
不能包含空格或 `/`。
不能只包含 `.`（一个句点）、`..`（两个句点）或 `_index`。
有关更多信息，请参阅 [标签限制](Using_Tags.md#tag-restrictions)。

------
#### [ Console ]

**在实例启动期间启用对实例元数据中标签的访问权限**

1. 按照程序[启动实例](ec2-launch-instance-wizard.md)。

1. 展开**高级详细信息**，对于**允许元数据中的标签**，选择**启用**。

1. 在 **Summary**（摘要）面板中查看实例配置，然后选择 **Launch instance**（启动实例）。有关更多信息，请参阅 [使用控制台中的启动实例向导来启动 EC2 实例](ec2-launch-instance-wizard.md)。

**在实例启动后启用对实例元数据中标签的访问权限**

1. 通过以下网址打开 Amazon EC2 控制台：[https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/)。

1. 在导航窗格中，选择 **Instances (实例)**。

1. 选择实例，然后依次选择**操作**、**实例设置**、**允许实例元数据中的标签**。

1. 要允许访问实例元数据中的标签，请选择**允许**复选框。

1. 选择**保存**。

------
#### [ AWS CLI ]

**在实例启动期间启用对实例元数据中标签的访问权限**  
使用 [run-instances](https://docs.aws.amazon.com/cli/latest/reference/ec2/run-instances.html) 命令并添加以下 `--metadata-options` 选项。

```
--metadata-options "InstanceMetadataTags=enabled"
```

**在实例启动后启用对实例元数据中标签的访问权限**  
使用以下 [modify-instance-metadata-options](https://docs.aws.amazon.com/cli/latest/reference/ec2/modify-instance-metadata-options.html) 命令。

```
aws ec2 modify-instance-metadata-options \
    --instance-id i-1234567890abcdef0 \
    --instance-metadata-tags enabled
```

**验证对实例元数据中标签的访问权限已启用**  
使用 [describe-instances](https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-instances.html) 命令并检查 `InstanceMetadataTags` 的值。

```
aws ec2 describe-instances \
    --instance-ids i-1234567890abcdef0 \
    --query "Reservations[*].Instances[].MetadataOptions[].InstanceMetadataTags"
```

下面是示例输出。该值为 `enabled` 或 `disabled`。

```
[
    "enabled"
]
```

------
#### [ PowerShell ]

**在实例启动期间启用对实例元数据中标签的访问权限**  
使用 [New-EC2Instance](https://docs.aws.amazon.com/powershell/latest/reference/items/New-EC2Instance.html) cmdlet 并添加以下 `-MetadataOptions_InstanceMetadataTags` 参数。

```
-MetadataOptions_InstanceMetadataTags enabled
```

**在实例启动后启用对实例元数据中标签的访问权限**  
使用 [Edit-EC2InstanceMetadataOption](https://docs.aws.amazon.com/powershell/latest/reference/items/Edit-EC2InstanceMetadataOption.html) cmdlet。

```
Edit-EC2InstanceMetadataOption `
    -InstanceId i-1234567890abcdef0 `
    -InstanceMetadataTags enabled
```

**验证对实例元数据中标签的访问权限已启用**  
使用 [Get-EC2Instance](https://docs.aws.amazon.com/cli/latest/reference/ec2/Get-EC2Instance.html) cmdlet 并检查 `InstanceMetadataTags` 的值。

```
(Get-EC2Instance `
    -InstanceId i-1234567890abcdef0).Instances.MetadataOptions.InstanceMetadataTags.Value
```

下面是示例输出。该值为 `enabled` 或 `disabled`。

```
enabled
```

------

## 从实例元数据中检索标签
<a name="retrieve-tags-from-IMDS"></a>

在允许访问实例元数据中的实例标签后，您可以从实例元数据访问 `tags/instance` 类别。有关更多信息，请参阅 [访问 EC2 实例的实例元数据](instancedata-data-retrieval.md)。

------
#### [ IMDSv2 ]

**Linux**  
在 Linux 实例中运行以下命令，列出该实例的所有标签键。

```
TOKEN=`curl -X PUT "http://169.254.169.254/latest/api/token" -H "X-aws-ec2-metadata-token-ttl-seconds: 21600"` \
    && curl -H "X-aws-ec2-metadata-token: $TOKEN" http://169.254.169.254/latest/meta-data/tags/instance
```

此示例会获取上一示例中获取的键的值。IMDSv2 请求使用在前面的示例中使用命令中创建的存储令牌。令牌不得过期。

```
curl -H "X-aws-ec2-metadata-token: $TOKEN" http://169.254.169.254/latest/meta-data/tags/instance/tag-key
```

**Windows**  
在 Windows 实例中运行以下 cmdlet，列出该实例的所有标签键。

```
$token = Invoke-RestMethod `
    -Headers @{"X-aws-ec2-metadata-token-ttl-seconds" = "21600"} `
    -Method PUT -Uri http://169.254.169.254/latest/api/token
```

```
Invoke-RestMethod `
    -Headers @{"X-aws-ec2-metadata-token" = $token} `
    -Method GET -Uri http://169.254.169.254/latest/meta-data/tags/instance
```

此示例会获取上一示例中获取的键的值。IMDSv2 请求使用在前面的示例中使用命令中创建的存储令牌。令牌不得过期。

```
Invoke-RestMethod `
    -Headers @{"X-aws-ec2-metadata-token" = $token} `
    -Method GET -Uri http://169.254.169.254/latest/meta-data/tags/instance/tag-key
```

------
#### [ IMDSv1 ]

**Linux**  
在 Linux 实例中运行以下命令，列出该实例的所有标签键。

```
curl http://169.254.169.254/latest/meta-data/tags/instance
```

此示例会获取上一示例中获取的键的值。

```
curl http://169.254.169.254/latest/meta-data/tags/instance/tag-key
```

**Windows**  
在 Windows 实例中运行以下 cmdlet，列出该实例的所有标签键。

```
Invoke-RestMethod -Uri http://169.254.169.254/latest/meta-data/tags/instance
```

此示例会获取上一示例中获取的键的值。

```
Invoke-RestMethod -Uri http://169.254.169.254/latest/meta-data/tags/instance/tag-key
```

------

## 禁用对实例元数据中标签的访问权限
<a name="turn-off-access-to-tags-in-IMDS"></a>

您可以禁用对实例元数据中实例标签的访问权限。您无需在启动时禁用对实例元数据中实例标签的访问权限，因此在默认情况下已禁用此权限。

------
#### [ Console ]

**禁用对实例元数据中标签的访问权限**

1. 通过以下网址打开 Amazon EC2 控制台：[https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/)。

1. 在导航窗格中，选择 **Instances (实例)**。

1. 选择实例，然后依次选择** Actions**（操作）、**Instance settings**（实例设置）、**Allow tags in instance metadata**（允许实例元数据中的标签）。

1. 要关闭对实例元数据中的标签的访问，请清除**允许**复选框。

1. 选择**保存**。

------
#### [ AWS CLI ]

**禁用对实例元数据中标签的访问权限**  
使用以下 [modify-instance-metadata-options](https://docs.aws.amazon.com/cli/latest/reference/ec2/modify-instance-metadata-options.html) 命令。

```
aws ec2 modify-instance-metadata-options \
    --instance-id i-1234567890abcdef0 \
    --instance-metadata-tags disabled
```

------
#### [ PowerShell ]

**禁用对实例元数据中标签的访问权限**  
使用 [Edit-EC2InstanceMetadataOption](https://docs.aws.amazon.com/powershell/latest/reference/items/Edit-EC2InstanceMetadataOption.html) cmdlet。

```
Edit-EC2InstanceMetadataOption `
    -InstanceId i-1234567890abcdef0 `
    -InstanceMetadataTag disabled
```

------

# Amazon EC2 Service Quotas
<a name="ec2-resource-limits"></a>

在创建 AWS 账户 时，我们会根据区域设置 AWS 资源的默认*限额*（也称为限制）。如果超出资源的限额，请求会失败。例如，在某一区域中，可为按需型实例预置的 Amazon EC2 vCPU 数量存在最大数量限制。如果尝试在某一区域中启动实例，但此请求会导致使用量超出限额，则请求会失败。如果发生这种情况，可以减少资源使用量或请求增加限额。

您可以通过服务限额控制台集中查看和管理 AWS 服务限额，以及请求提高所使用各种资源的限额。使用我们提供的限制信息来管理您的 AWS 基础设施。请根据需要请提前计划以请求提高限额。

**相关配额文档**
+ [Amazon EC2 端点和配额](https://docs.aws.amazon.com/general/latest/gr/ec2-service.html)
+ [Amazon EC2 实例类型配额](https://docs.aws.amazon.com/ec2/latest/instancetypes/ec2-instance-quotas.html)
+ [Amazon EBS 的配额](https://docs.aws.amazon.com/ebs/latest/userguide/ebs-resource-quotas.html)
+ [Amazon VPC 配额](https://docs.aws.amazon.com/vpc/latest/userguide/amazon-vpc-limits.html)

## 查看当前限额
<a name="view-limits"></a>

您可以使用 服务限额控制台来查看您在每个区域的限额。

**使用服务限额控制台查看当前限额**

1. 访问 [https://console.aws.amazon.com/servicequotas/home/services/ec2/quotas/](https://console.aws.amazon.com/servicequotas/home/services/ec2/quotas/)，打开服务限额控制台。

1. 在导航栏（位于屏幕顶部）中，选择一个区域。

1. 在**管理配额**窗格上，选择一项服务；例如，**Amazon Elastic Compute Cloud（Amazon EC2）**。选择**查看配额**。

1. 使用筛选字段按资源名称筛选列表。例如，输入 **On-Demand** 即可查找按需型实例的限额。

1. 要查看更多信息，请选择限额名称以打开限额的详细信息页面。

## 请求提高
<a name="request-increase"></a>

您可以请求为每个区域提高限额。

**使用服务限额控制台请求提高限制**

1. 访问 [https://console.aws.amazon.com/servicequotas/home/services/ec2/quotas/](https://console.aws.amazon.com/servicequotas/home/services/ec2/quotas/)，打开服务限额控制台。

1. 在导航栏（位于屏幕顶部）中，选择一个区域。

1. 使用筛选字段按资源名称筛选列表。例如，输入 **On-Demand** 即可查找按需型实例的限额。

1. 如果限额可调，则选中该限额并选择**请求提高限额**。

1. 对于**更改限额值**，请输入新的限额值。

1. 选择**请求**。

1. 要在控制台中查看任何待处理或最近已解决的请求，请从导航窗格中选择**控制面板**。对于待处理的请求，请选择请求状态以打开收到的请求。请求的初始状态为 **Pending**（待处理）。状态更改为**已请求限额**后，您将在 支持 中看到工单编号。选择案例编号以打开请求服务单。

有关更多信息，包括如何使用 AWS CLI 或 SDK 请求提高限额的信息，请参阅《服务限额用户指南》中的 [请求提高限额](https://docs.aws.amazon.com/servicequotas/latest/userguide/request-quota-increase.html)**。

## 对使用端口 25 发送的电子邮件的限制
<a name="port-25-throttle"></a>

默认情况下，Amazon EC2 仅允许通过端口 25 的出站流量指向私有 IPv4 地址。通过端口 25 指向公有 IPv4 地址和 IPv6 地址的流量会被阻止。

您可以请求删除此限制。有关更多信息，请参阅[如何删除 Amazon EC2 实例或 Lambda 函数的端口 25 的限制？](https://repost.aws/knowledge-center/ec2-port-25-throttle)

此限制不适用于通过端口 25 指向下列地址的出站流量：
+ 存在原始网络接口的 VPC 主 CIDR 块中的 IP 地址。
+ [RFC 1918](https://datatracker.ietf.org/doc/html/rfc1918)、[RFC 6598](https://datatracker.ietf.org/doc/html/rfc6598) 和 [ RFC 4193](https://datatracker.ietf.org/doc/html/rfc4193) 中定义的 CIDR 中的 IP 地址。