

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

# 了解验证程序
<a name="appconfig-creating-configuration-and-profile-validators"></a>

创建配置文件时，最多可以指定两个验证程序。验证程序可确保您的配置数据在语法和语义上是正确的。如果您计划使用验证器，则必须在创建配置文件之前创建验证器。 Amazon AppConfig 支持以下类型的验证器：
+ **Amazon Lambda 函数**：支持功能标志和自由格式配置。
+ **JSON 架构**：支持自由表单配置。 （Amazon AppConfig 根据 JSON 架构自动验证功能标志。）

**Topics**
+ [Amazon Lambda 函数验证器](#appconfig-creating-configuration-and-profile-validators-lambda)
+ [JSON 架构验证程序](#appconfig-creating-configuration-and-profile-validators-json-schema)

## Amazon Lambda 函数验证器
<a name="appconfig-creating-configuration-and-profile-validators-lambda"></a>

Lambda 函数验证程序必须配置了以下事件架构。 Amazon AppConfig 使用该架构调用 Lambda 函数。content 是 base64 编码的字符串，而 URI 是字符串。

```
{
    "applicationId": "The application ID of the configuration profile being validated", 
    "configurationProfileId": "The ID of the configuration profile being validated",
    "configurationVersion": "The version of the configuration profile being validated",
    "content": "Base64EncodedByteString", 
    "uri": "The configuration uri"    
}
```

Amazon AppConfig 验证响应中是否设置了 `X-Amz-Function-Error` Lambda 标头。如果函数抛出异常，Lambda 会设置该标头。有关 `X-Amz-Function-Error` 的详细信息，请参阅*《Amazon Lambda 开发人员指南》*中的 Amazon Lambda中的[错误处理和自动重试](https://docs.amazonaws.cn/lambda/latest/dg/retries-on-errors.html)。

这里是一个成功验证 Lambda 响应代码的简单示例。

```
import json

def handler(event, context):
     #Add your validation logic here
     print("We passed!")
```

这里是一个不成功验证 Lambda 响应代码的简单示例。

```
def handler(event, context):
     #Add your validation logic here
     raise Exception("Failure!")
```

下面是另一个示例，仅在配置参数是质数时才验证。

```
function isPrime(value) {
    if (value < 2) {
        return false;
    }

    for (i = 2; i < value; i++) {
        if (value % i === 0) {
            return false;
        }
    }

    return true;
}

exports.handler = async function(event, context) {
    console.log('EVENT: ' + JSON.stringify(event, null, 2));
    const input = parseInt(Buffer.from(event.content, 'base64').toString('ascii'));
    const prime = isPrime(input);
    console.log('RESULT: ' + input + (prime ? ' is' : ' is not') + ' prime');
    if (!prime) {
        throw input + "is not prime";
    }
}
```

Amazon AppConfig 在调用`StartDeployment`和 `ValidateConfigurationActivity` API 操作时，会调用您的验证 Lambda。您必须提供 `appconfig.amazonaws.com` 权限才能调用 Lambda。有关更多信息，请参阅[向 Amazon 服务授予函数访问权限](https://docs.amazonaws.cn/lambda/latest/dg/access-control-resource-based.html#permissions-resource-serviceinvoke)。 Amazon AppConfig 将验证 Lambda 运行时间限制为 15 秒，包括启动延迟。

## JSON 架构验证程序
<a name="appconfig-creating-configuration-and-profile-validators-json-schema"></a>

如果在 SSM 文档中创建配置，则必须为该配置指定或创建 JSON 架构。JSON 架构定义每个应用程序配置设置允许的属性。JSON 架构的作用类似于一组规则，用于确保新配置设置或更新的配置设置符合应用程序所需的最佳实践。见下列。

```
    {
      "$schema": "http://json-schema.org/draft-04/schema#",
      "title": "$id$",
      "description": "BasicFeatureToggle-1",
      "type": "object",
      "additionalProperties": false,
      "patternProperties": {
          "[^\\s]+$": {
              "type": "boolean"
          }
      },
      "minProperties": 1
    }
```

当您从 SSM 文档创建配置时，系统会自动验证配置是否符合架构要求。如果不符合要求， Amazon AppConfig 将返回验证错误。

**重要**  
请注意有关 JSON 架构验证程序的以下重要信息：  
在可以将配置添加到系统之前，SSM 文档中存储的配置数据必须对照关联的 JSON 架构进行验证。SSM 参数不需要验证方法，但我们建议您使用为新的或更新的 SSM 参数配置创建验证检查。 Amazon Lambda
SSM 文档中的配置使用 `ApplicationConfiguration` 文档类型。相应的 JSON 架构使用 `ApplicationConfigurationSchema` 文档类型。
Amazon AppConfig 支持 JSON 架构 4.X 版本的内联架构。如果您的应用程序配置需要不同的 JSON 架构版本，则必须创建 Lambda 验证程序。