

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

# CloudFormation 挂钩概念
<a name="hooks-concepts"></a>

以下术语和概念对你理解和使用 CloudFormation Hooks 至关重要。

## Hook
<a name="hook-terms-hook"></a>

Hook 包含在 CloudFormation 创建、更新或删除堆栈或特定资源之前立即调用的代码。它也可以在创建更改集操作期间调用。Hooks 可以检查即将置备的 CloudFormation 模板、资源或变更集。此外，可以在 [Cloud Control API](https://docs.aws.amazon.com/cloudcontrolapi/latest/userguide/what-is-cloudcontrolapi.html) 创建、更新或删除特定资源之前立即调用 Hook。

如果 Hook 发现任何不符合 Hook 逻辑中定义的组织准则的配置，则您可以选择向`WARN`用户或`FAIL` CloudFormation 阻止配置资源。

挂钩具有以下特征：
+ **主动验证** — 通过在创建、更新或删除不合规资源之前识别出这些资源，从而降低风险、运营开销和成本。
+ **自动强制执行** — 在您的中提供强制执行 AWS 账户 ，以防止由配置不合规的资源。 CloudFormation

## 故障模式
<a name="hook-terms-failure-mode"></a>

你的 Hook 逻辑可以返回成功或失败。成功响应将允许操作继续。不合规的资源出现故障可能会导致以下结果：
+ `FAIL`— 停止配置操作。
+ `WARN`— 允许继续配置并显示警告消息。

在`WARN`模式下创建 Hook 是在不影响堆栈操作的情况下监控 Hook 行为的有效方法。首先，在`WARN`模式下激活 Hook 以了解哪些操作会受到影响。评估了潜在影响后，您可以将挂钩切换到`FAIL`模式以开始防止不合规的操作。

## 钩住目标
<a name="hook-terms-hook-target"></a>

挂钩目标指定挂钩将评估的操作。这些操作可以是：
+  CloudFormation (`RESOURCE`) 支持的资源 
+ 堆栈模板 (`STACK`)
+ 零钱套装 (`CHANGE_SET`)
+ [云控制 API](https://docs.aws.amazon.com/cloudcontrolapi/latest/userguide/what-is-cloudcontrolapi.html) 支持的资源 (`CLOUD_CONTROL`) 

您可以定义一个或多个目标，这些目标指定 Hook 将评估的最广泛的操作。例如，您可以创作一个 Hook 定位`RESOURCE`以定位所有 AWS 资源并`STACK`定位所有堆栈模板。

## 目标动作
<a name="hook-terms-target-action"></a>

目标操作定义了将调用 Hook 的特定操作（`CREATE``UPDATE`、或`DELETE`）。对于`RESOURCE``STACK`、和`CLOUD_CONTROL`目标，所有目标操作都适用。对于`CHANGE_SET`目标，只有`CREATE`操作才适用。

## Annotations
<a name="hook-annotations"></a>

[GetHookResult](https://docs.aws.amazon.com/AWSCloudFormation/latest/APIReference/API_GetHookResult.html)响应可以返回*注释*，为每个评估的资源提供详细的合规性检查结果和补救指导。有关 API 注解结构的详细信息，请参阅 *AWS CloudFormation API 参考*中的[注解](https://docs.aws.amazon.com/AWSCloudFormation/latest/APIReference/API_Annotation.html)。有关查看这些验证结果的说明，请参阅[查看 Hook 的调用 CloudFormation 结果](hooks-view-invocations.md)。

通过在配置挂钩时指定自己的 KMS 密钥，您可以根据需要对敏感合规性信息的注释进行加密。有关更多信息，请参阅 [挂钩配置架构语法参考](hook-configuration-schema.md)。有关设置在为 Hooks 指定 KMS 密钥时所需的密钥策略的信息，请参阅[AWS KMS 用于加密静态的 CloudFormation Hook 结果的密钥策略和权限](hooks-kms-key-policy.md)。

**重要**  
请注意，指定客户托管密钥的`KmsKeyId`选项目前仅在您使用配置挂钩时可用。 AWS CLI 

## 钩子处理器
<a name="hook-terms-hook-handler"></a>

对于自定义 Hook，这是处理评估的代码。它与目标调用点和目标操作相关联，后者标记 Hook 运行的确切点。你编写处理程序来托管这些特定点的逻辑。例如，带有`PRE`目标操作的目标调用`CREATE`点会生成一个 `preCreate` Hook 处理程序。当匹配的目标调用点和服务正在执行关联的目标操作时，Hook 处理程序中的代码就会运行。

*有效值*：(`preCreate`\$1 `preUpdate` \$1`preDelete`)

**重要**  
导致状态为的堆栈操作`UpdateCleanup`不会调用 Hook。例如，在以下两个场景中，不会调用 Hook 的`preDelete`处理程序：  
从模板中移除一个资源后，堆栈即会更新。
更新类型为[替换](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/using-cfn-updating-stacks-update-behaviors.html#update-replacement)的资源被删除。

## 超时和重试限制
<a name="hook-timeout-and-retry-limits"></a>

Hook 每次调用的超时限制为 30 秒，重试次数限制为 3 次。如果调用超过超时时间，我们将返回一条错误消息，指出 Hook 执行已超时。第三次重试后，将 Hook 执行 CloudFormation 标记为失败。