

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

# 自动化规则
<a name="automation-rules"></a>

自动化规则会根据您定义的条件和时间表自动实施建议的操作。自动化规则是全球资源，用于 AWS 区域 在计算优化器自动化可用的所有地方管理自动化操作。您可以在可用 “计算优化器自动化” 的任何 AWS 区域创建、更新和删除自动化规则。

## 规则类型
<a name="automation-rules-type"></a>

有两种类型的规则：
+ 账户规则：仅将建议操作应用于您的账户的规则。
+ 组织规则：在成员账户中集中应用建议操作的规则。

**注意**  
只有管理账号或委派管理员才能创建组织规则。您只能选择启用了自动化的成员帐户，并且可以选择允许组织规则来应用该规则。成员账户可以查看适用于其账户的组织规则的详细信息，但不能对其进行编辑。可以将组织规则配置为在成员账户规则之前或之后应用。

## 规则标准
<a name="automation-rules-criteria"></a>

配置规则时，选择您希望规则实施的推荐操作类型，例如快照和删除独立的 Amazon EBS 卷以及升级 Amazon EBS 卷类型。使用 AWS 区域和资源标签等标准细化您的选择。然后预览当前匹配的推荐操作以验证您的标准。

**重要**  
如果您未指定规则标准，Compute Optimizer 会将所有选定的推荐操作类型应用于您在规则范围内选择的帐户，包括在所有可用 Compute Optimizer Automation AWS 区域 的账户中应用推荐的操作。

自动化规则支持以下推荐的操作属性和比较运算符：


| 属性 | 运算符 | 字段类型 | 
| --- | --- | --- | 
| 当前音量大小 (GiB) | `NumericEquals \| NumericNotEquals \| NumericLessThan \| NumericLessThanEquals \| NumericGreaterThan \| NumericGreaterThanEquals \| NumericEqualsIfExists \| NumericNotEqualsIfExists \| NumericLessThanIfExists \| NumericLessThanEqualsIfExists \| NumericGreaterThanIfExists \| NumericGreaterThanEqualsIfExists` | 整数 | 
| 当前音量类型 | `StringEquals \| StringNotEquals \| StringEqualsIgnoreCase \| StringNotEqualsIgnoreCase \| StringLike \| StringNotLike \| StringEqualsIfExists \| StringNotEqualsIfExists \| StringEqualsIgnoreCaseIfExists \| StringNotEqualsIgnoreCaseIfExists \| StringLikeIfExists \| StringNotLikeIfExists` | 字符串 | 
| 预计可节省的费用 (美元) | `NumericEquals \| NumericNotEquals \| NumericLessThan \| NumericLessThanEquals \| NumericGreaterThan \| NumericGreaterThanEquals \| NumericEqualsIfExists \| NumericNotEqualsIfExists \| NumericLessThanIfExists \| NumericLessThanEqualsIfExists \| NumericGreaterThanIfExists \| NumericGreaterThanEqualsIfExists` | 双精度 | 
| 回顾期（天） | `NumericEquals \| NumericNotEquals \| NumericLessThan \| NumericLessThanEquals \| NumericGreaterThan \| NumericGreaterThanEquals \| NumericEqualsIfExists \| NumericNotEqualsIfExists \| NumericLessThanIfExists \| NumericLessThanEqualsIfExists \| NumericGreaterThanIfExists \| NumericGreaterThanEqualsIfExists` | 整数 | 
| AWS 区域 | `StringEquals \| StringNotEquals \| StringEqualsIgnoreCase \| StringNotEqualsIgnoreCase \| StringLike \| StringNotLike \| StringEqualsIfExists \| StringNotEqualsIfExists \| StringEqualsIgnoreCaseIfExists \| StringNotEqualsIgnoreCaseIfExists \| StringLikeIfExists \| StringNotLikeIfExists` | 字符串 | 
| 资源 ARN | `StringEquals \| StringNotEquals \| StringEqualsIgnoreCase \| StringNotEqualsIgnoreCase \| StringLike \| StringNotLike \| StringEqualsIfExists \| StringNotEqualsIfExists \| StringEqualsIgnoreCaseIfExists \| StringNotEqualsIgnoreCaseIfExists \| StringLikeIfExists \| StringNotLikeIfExists` | 字符串 | 
| 资源标签 | `StringEquals \| StringNotEquals \| StringEqualsIgnoreCase \| StringNotEqualsIgnoreCase \| StringLike \| StringNotLike \| StringEqualsIfExists \| StringNotEqualsIfExists \| StringEqualsIgnoreCaseIfExists \| StringNotEqualsIgnoreCaseIfExists \| StringLikeIfExists \| StringNotLikeIfExists` | 资源标签 | 
| 需要重启 | `StringEquals \| StringNotEquals \| StringEqualsIgnoreCase \| StringNotEqualsIgnoreCase \| StringLike \| StringNotLike \| StringEqualsIfExists \| StringNotEqualsIfExists \| StringEqualsIgnoreCaseIfExists \| StringNotEqualsIgnoreCaseIfExists \| StringLikeIfExists \| StringNotLikeIfExists` | 字符串 | 

您可以为每个属性指定最多 20 个条件，每个条件最多可以指定 20 个值。有关更多信息，请参阅《 AWS Compute Optimizer 自动化 API 参考》[中的](https://docs.aws.amazon.com/compute-optimizer/latest/APIReference/API_automation_Criteria.html)标准。

### 比较运算符
<a name="automation-rules-comparison-operators"></a>

在规则条件中使用比较运算符将建议的操作属性与您指定的值进行匹配。

**重要**  
如果建议的操作中不存在您在规则条件中指定的属性，则这些值不匹配，条件为假，并且建议的操作将从规则中排除。此逻辑适用于除运算符之外的所有比较`...IfExists`运算符，当属性不存在时，运算符的计算结果为真。`...IfExists`操作员测试建议的操作中该属性是否存在（存在）。

#### 字符串条件运算符
<a name="automation-rules-string-operators"></a>

字符串条件运算符允许您定义规则标准，将推荐的操作属性与您指定的字符串进行比较。


| 条件运算符 | 说明 | 
| --- | --- | 
| `StringEquals` | 精确匹配，区分大小写。 | 
| `StringNotEquals` | 否定精确匹配，区分大小写。 | 
| `StringEqualsIgnoreCase` | 精确匹配，忽略大小写。 | 
| `StringNotEqualsIgnoreCase` | 否定匹配，忽略大小写。 | 
| `StringLike` | Case-sensitive 匹配。这些值可以包括字符串中任何位置的多字符匹配通配符 (`*`)。您必须指定通配符才能实现部分字符串匹配。 | 
| `StringNotLike` | 不区分大小写的无效匹配。这些值可以包括字符串中任何位置的多字符匹配通配符 (`*`)。 | 

**注意**  
`*`单独使用作为值与任何存在的值相`StringLike`匹配。与组合时`StringNotLike`，值`*`表示 “与任何内容都不匹配”，实际上排除该属性存在的所有推荐操作。例如，在`Application`带有值的标签密钥`StringNotLike`上使用会`*`排除任何带有该`Application`标签的推荐操作，无论该标签的值如何。

#### 数字条件运算符
<a name="automation-rules-numeric-operators"></a>

数字条件运算符允许您定义规则标准，将建议的操作属性与整数或十进制数字进行比较。


| 条件运算符 | 说明 | 
| --- | --- | 
| `NumericEquals` | 精确的数字匹配。 | 
| `NumericNotEquals` | 否定数值匹配。 | 
| `NumericLessThan` | “小于” 匹配。 | 
| `NumericLessThanEquals` | “小于或等于” 匹配。 | 
| `NumericGreaterThan` | “大于” 匹配。 | 
| `NumericGreaterThanEquals` | “大于或等于” 匹配。 | 

例如，您可以与 “**回顾周期**” 属性`NumericGreaterThanEquals`一起使用来创建一条规则，该规则仅在用于生成建议的回顾期至少为 32 天的情况下自动执行建议的操作。

### IfExists 运营商
<a name="automation-rules-ifexists-operators"></a>

附加`IfExists`到任何比较运算符（例如`StringLikeIfExists`），以更改推荐操作**中**不存在您指定的属性时条件的评估方式：
+ 使用基本运算符，缺席属性的计算结果为 ** false**，并且建议的操作不**包括在**规则中。
+ 对于`...IfExists`变体，缺席属性的计算结果为**真**，并且**包括**建议的操作。

`IfExists`当你想从规则中排除一组特定的资源，但仍要包括不带有你筛选标签的资源时，这很有用。例如，您可能希望包括除一个团队拥有的资源之外的所有内容。基`StringNotEquals`于 `team` = `TeamA` 排除 TeaMA 的资源，但它也排除了所有根本不带有`team`标签的资源——省略了你打算包含的资源。添加`IfExists`以将这些未标记的资源保留在范围内：
+ **StringNotEquals**仅匹配`team`标签设置为非值的资源`TeamA`。未加标签的资源不包括在内。
+ **StringNotEqualsIfExists**匹配没有`team`标签的*资源*和将其设置为除以外的任何值的资源`TeamA`。仅排除标记为 `team` = `TeamA` 的资源。

`IfExists`当你想让资源所有者将自己的资源排除在自动化之外时，这也很有用。您可以指定一个专用的选择退出标签，例如`automation-opt-out`，所有者将其应用于他们想要排除的任何资源。在这种情况下，标签的存在与其值无关紧要，因此请`StringNotLikeIfExists`与`automation-opt-out`标签键`*`上的值一起使用。`*`通配符匹配任何值，因此计算优化器会排除所有带有该标签的资源。该`IfExists`变体将不带标签的资源保留在范围内；没有该变体，所有未标记的资源也将被排除在外。

### 规则标准示例
<a name="automation-rules-criteria-examples"></a>

#### 示例：仅包括特定区域的建议操作
<a name="automation-rules-criteria-examples-regions"></a>

以下规则标准使用 `StringEquals` ** “**AWS 区域” 属性来匹配`us-east-1`或中资源的建议操作`us-west-2`。当您为条件指定多个值时，这些值具有 OR 关系——如果推荐操作的属性值与其中任何一个值相匹配，则建议的操作与条件相匹配。

标准配置：


| 属性 | 运算符 | 值 | 
| --- | --- | --- | 
| AWS 区域 | `StringEquals` | `us-east-1`, `us-west-2` | 

评估：


| 属性值 | 结果 | 
| --- | --- | 
| `us-east-1` | 匹配 | 
| `us-west-2` | 匹配 | 
| `eu-west-1` | 不匹配 | 

#### 示例：仅包括在最短回顾周期内生成的推荐操作
<a name="automation-rules-criteria-examples-lookback"></a>

以下规则标准使用`NumericGreaterThanEquals`**回顾周期（天）**属性，仅在用于生成建议的回顾期至少为 32 天的情况下自动执行建议的操作。这使您需要更长的观察窗口，然后才能自动执行建议的操作。

标准配置：


| 属性 | 运算符 | 值 | 
| --- | --- | --- | 
| 回顾期（天） | `NumericGreaterThanEquals` | `32` | 

评估：


| 属性值 | 结果 | 
| --- | --- | 
| `32` | 匹配 | 
| `14` | 不匹配 | 

#### 示例：包括建议的操作，除非资源属于特定团队
<a name="automation-rules-criteria-examples-team"></a>

以一个平台团队为例，该团队在多个账户上启用了计算优化器自动化，但又想将一个团队的资源排除在规则之外。该团队已经使用标签`team`标记资源以用于其他目的，但并非所有资源都带有标签。他们希望广泛应用自动化，同时排除任何标记为 `team` = 的资源`TeamA`。

以下规则标准使用`StringNotEqualsIfExists`**资源标签**属性，包括标签密钥`team`和值`TeamA`。当资源根本没有标签时，或者将`team`标签设置为除之外的任何值时，将包括建议的操作`TeamA`。因为许多资源不会带有标签，`IfExists`这就是它们保持在范围内的原因——没有标签，所有未标记的资源都将被排除在外。

标准配置：


| 属性 | 运算符 | 标签键 | 值 | 
| --- | --- | --- | --- | 
| 资源标签 | `StringNotEqualsIfExists` | `team` | `TeamA` | 

评估：


| 建议的操作状态 | 结果 | 说明 | 
| --- | --- | --- | 
| 资源没有`team`标签 | 匹配 | 该属性不存在，将缺失的属性`IfExists`评估为 true。 | 
| 资源的标签为 `team` = `web` | 匹配 | 标签存在且值不匹配`TeamA`。 | 
| 资源的标签为 `team` = `TeamA` | 不匹配 | 标签存在且值匹配`TeamA`，因此不包括推荐的操作。 | 

#### 示例：包括建议的操作，除非资源有选择退出标签
<a name="automation-rules-criteria-examples-optout"></a>

您可以通过应用专用的选择退出标签，让资源所有者将单个资源排除在自动化之外。在此示例中，所有者将`automation-opt-out`标签添加到他们想要遗漏的任何资源中。

以下规则标准使用`StringNotLikeIfExists`**资源标签**属性，包括标签密钥`automation-opt-out`和值`*`。`*`通配符匹配任何值，因此任何带有该标签的资源都不包括在内。当资源没有`automation-opt-out`标签时，将包括建议的操作。

标准配置：


| 属性 | 运算符 | 标签键 | 值 | 
| --- | --- | --- | --- | 
| 资源标签 | `StringNotLikeIfExists` | `automation-opt-out` | `*` | 

评估：


| 建议的操作状态 | 结果 | 说明 | 
| --- | --- | --- | 
| 资源没有`automation-opt-out`标签 | 匹配 | 该属性不存在，将缺失的属性`IfExists`评估为 true。 | 
| 资源的标签为 `automation-opt-out` = `true` | 不匹配 | 该标签存在且与任何值`*`相匹配，因此不包括推荐的操作。 | 
| 资源的标签为 `automation-opt-out` = `temporary` | 不匹配 | 该标签存在且与任何值`*`相匹配，因此不包括推荐的操作。 | 

#### 示例：排除对基础架构即代码 (IaC) 托管资源的建议操作
<a name="automation-rules-criteria-examples-iac"></a>

如果您使用基础设施即代码 (IaC) 工具（例如 CloudFormation 或）管理资源Terraform，则可以创建排除规则，根据资源标签筛选出 IaC-managed 资源。

##### CloudFormation
<a name="automation-rules-criteria-examples-iac-cfn"></a>

使用管理的资源 CloudFormation 具有系统标签`aws:cloudformation:stack-id``aws:cloudformation:stack-name`、和`aws:cloudformation:logical-id`。您可以筛选其中一个标签来识别 CloudFormation-managed 资源。此示例已启用`aws:cloudformation:stack-id`。

以下规则标准使用`StringNotLikeIfExists`**资源标签**属性，包括标签密钥`aws:cloudformation:stack-id`和值`*`。`*`通配符匹配任何值，因此任何带有该标签的资源都不包括在内。当资源没有`aws:cloudformation:stack-id`标签时，将包括建议的操作。

标准配置：


| 属性 | 运算符 | 标签键 | 值 | 
| --- | --- | --- | --- | 
| 资源标签 | `StringNotLikeIfExists` | `aws:cloudformation:stack-id` | `*` | 

评估：


| 建议的操作状态 | 结果 | 说明 | 
| --- | --- | --- | 
| 资源的标签为 `aws:cloudformation:stack-id` = `arn:aws:cloudformation:us-east-1:123456789012:stack/my-stack/2ac98f30-5bdd-11e4-949b-50fa5262a838` | 不匹配 | 该标签存在且与任何值`*`相匹配，因此不包括推荐的操作。 | 
| 资源没有`aws:cloudformation:stack-id`标签 | 匹配 | 该属性不存在，将缺失的属性`IfExists`评估为 true。 | 
| 资源的标签为 `Environment` =`production`，但`aws:cloudformation:stack-id`标签不是 | 匹配 | 该属性不存在，将缺失的属性`IfExists`评估为 true。 | 

##### Terraform
<a name="automation-rules-criteria-examples-iac-terraform"></a>

要从自动操作中排除 Terraform-managed 资源，请在Terraform配置中为这些资源添加用户标签（例如，`ManagedBy`=`terraform`）。标记后，您可以应用基于标签的规则条件将其排除，与前面的示例 CloudFormation 类似。

#### 示例：合并多个标准
<a name="automation-rules-criteria-examples-combine"></a>

您可以组合多个条件来缩小规则的范围。所有条件都必须匹配才能将建议的操作包含在规则中（AND 逻辑）。

以下配置可自动执行 EBS 音量建议的操作，以便：

1. 位于 us-east-1 和 us-west-2

1. 生成的回顾期至少为 32 天；以及

1. 未选择退出自动化（无`automation-opt-out`标签）。

仅当同时满足所有三个条件时，此规则才包括建议的操作。

标准配置：


| 属性 | 运算符 | 值 | 
| --- | --- | --- | 
| AWS 区域 | `StringEquals` | `us-east-1`, `us-west-2` | 
| 回顾期（天） | `NumericGreaterThanEquals` | `32` | 
| 资源标签（密钥:`automation-opt-out`） | `StringNotLikeIfExists` | `*` | 

## Schedule
<a name="automation-rules-schedule"></a>

通过指定频率（每天、每周或每月）、开始时间、结束时间和时区，为规则的运行时间设置时间表。在此窗口中，计算优化器将开始实施符合您指定标准的推荐操作。启动的操作数量取决于计划的时间窗的持续时间、Compute Optimizer Automation 的并发限制以及完成每项操作所需的时间。在自动化工作流程中的所有步骤完全完成之前，自动操作将显示为 In-Progress “”。每个区域的每个 AWS 账户最多可以同时进行 100 项操作。

## 规则顺序
<a name="automation-rules-order"></a>

默认情况下，规则在其规则组中按规则顺序 1（最高优先级）创建。例如，当管理账户创建配置为在成员账户规则之后应用的组织规则时，它收到的规则顺序为 1，这是该组中所有规则中最高的优先级。规则组和规则顺序决定了当账户中的建议操作与多个规则匹配时适用哪条规则。Compute Optimizer 会将操作分配给规则顺序值最低（最高优先级）的活动规则，无论该规则计划何时运行。

例如，如果推荐的操作与下表中的所有规则相匹配，Compute Optimizer 会将其分配给 Rule-C 并根据的时间表 Rule-C来实现。



- ** 先评估组织规则，然后再评估成员账户规则 **
  - **规则顺序:** 1 / **规则名称:** Rule-A / **Status:** 非活动 / **Schedule:** 每周一 12:00 至 13:00 UTC
  - **规则顺序:** 2 / **规则名称:** Rule-B / **Status:** 非活动 / **Schedule:** 每天 12:00 至 13:00 UTC

- ** 会员账户规则 **
  - **规则顺序:** 1 / **规则名称:** Rule-C / **Status:** 活动 / **Schedule:** 每月 15 日 12:00 至 13:00 UTC
  - **规则顺序:** 2 / **规则名称:** Rule-D / **Status:** 非活动 / **Schedule:** 每月 15 日 12:00 至 13:00 UTC

- ** 之前的成员账户规则之后的组织规则 **
  - **规则顺序:** 1 / **规则名称:** Rule-E / **Status:** 非活动 / **Schedule:** 每周一 12:00 至 13:00 UTC
  - **规则顺序:** 2 / **规则名称:** Rule-F / **Status:** 活动 / **Schedule:** 每天 12:00 至 13:00 UTC

