

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

# 故障排除 AWS CloudFormation Guard
<a name="troubleshooting"></a>

如果您在使用时遇到问题 AWS CloudFormation Guard，请查阅本节的主题。

**Topics**
+ [当选定类型的资源不存在时，子句失败](#troubleshooting-when-conditions-filters)
+ [Guard 不评估带有简短引用的 CloudFormation 模板 Fn::GetAtt](#troubleshooting-cfn-intrinsic-functions)
+ [一般疑难解答主题](#troubleshooting-general)

## 当选定类型的资源不存在时，子句失败
<a name="troubleshooting-when-conditions-filters"></a>

当查询使用过滤器时`Resources.*[ Type == 'AWS::ApiGateway::RestApi' ]`，如果输入中没有`AWS::ApiGateway::RestApi`资源，则子句的计算结果为。`FAIL`

```
%api_gws.Properties.EndpointConfiguration.Types[*] == "PRIVATE"
```

为避免出现这种结果，请为变量分配过滤器并使用`when`条件检查。

```
let api_gws = Resources.*[ Type == 'AWS::ApiGateway::RestApi' ]
    when %api_gws !empty { ...}
```

## Guard 不评估带有简短引用的 CloudFormation 模板 Fn::GetAtt
<a name="troubleshooting-cfn-intrinsic-functions"></a>

Guard 不支持内部函数的简短形式。例如，不支持`!Sub`在 YAML 格式的 CloudFormation 模板中使用`!Join`。相反，请使用 CloudFormation 内部函数的扩展形式。例如，在根据 Guard 规则评估 CloudFormation 模板时`Fn::Join`，`Fn::Sub`在 YAML 格式的模板中使用。

*有关内部函数的更多信息，请参阅《用户指南》中的[内部函数参考](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/intrinsic-function-reference.html)。AWS CloudFormation *

## 一般疑难解答主题
<a name="troubleshooting-general"></a>
+ 确认`string`文字不包含嵌入的转义字符串。Guard 不支持在`string`文字中嵌入转义字符串。如果要解析内联 JSON 字符串，请使用 Guard 3.0.0 及更高版本中提供的`json_parse()`函数。有关更多信息，请参阅 [使用内置函数](writing-rules.md#built-in-functions)。
+ 验证您的`!=`比较是否比较了兼容的数据类型。例如，a `string` 和 a `int` 是不兼容的数据类型，无法进行比较。执行`!=`比较时，如果值不兼容，则内部会发生错误。当前，错误被抑制并`false`转换为满足 Rus [PartialEq](https://doc.rust-lang.org/std/cmp/trait.PartialEq.html)t 中的特征。