

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 了解驗證程式
<a name="appconfig-creating-configuration-and-profile-validators"></a>

當您建立組態描述檔時，您可以選擇指定最多兩個驗證程式。驗證器可確保您的組態資料在語法和語義上是正確的。如果您計劃使用驗證程式，您必須先建立它，才能建立組態描述檔。 AWS AppConfig 支援下列類型的驗證程式：
+ **AWS Lambda 函數**：支援特徵標記和自由格式組態。
+ **JSON 結構描述**：支援自由格式組態。（針對 JSON 結構描述AWS AppConfig 自動驗證功能旗標。)

**Topics**
+ [

## AWS Lambda 函數驗證程式
](#appconfig-creating-configuration-and-profile-validators-lambda)
+ [

## JSON 結構描述驗證程式
](#appconfig-creating-configuration-and-profile-validators-json-schema)

## AWS Lambda 函數驗證程式
<a name="appconfig-creating-configuration-and-profile-validators-lambda"></a>

Lambda 函數驗證程式必須使用下列事件結構描述進行設定。 AWS AppConfig 使用此結構描述來叫用 Lambda 函數。內容是一個 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"    
}
```

AWS AppConfig 驗證 Lambda `X-Amz-Function-Error`標頭是否已在回應中設定。如果函數擲回例外狀況，Lambda 會設定此標頭。如需 的詳細資訊`X-Amz-Function-Error`，請參閱《 *AWS Lambda 開發人員指南*》[中的錯誤處理和自動重試 AWS Lambda](https://docs.aws.amazon.com/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";
    }
}
```

AWS AppConfig 會在呼叫 `StartDeployment`和 `ValidateConfigurationActivity` API 操作時呼叫您的驗證 Lambda。您必須提供叫用 Lambda 的`appconfig.amazonaws.com`許可。如需詳細資訊，請參閱[授予函數存取 AWS Services](https://docs.aws.amazon.com/lambda/latest/dg/access-control-resource-based.html#permissions-resource-serviceinvoke)。將驗證 Lambda 執行時間 AWS AppConfig 限制為 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 文件建立組態時，系統會自動驗證組態是否符合結構描述要求。如果不符合， AWS AppConfig 會傳回驗證錯誤。

**重要**  
請注意下列有關 JSON 結構描述驗證程式的重要資訊：  
儲存在 SSM 文件中的組態資料必須先對相關的 JSON 結構描述進行驗證，才能將組態新增至系統。SSM 參數不需要驗證方法，但建議您使用 為新的或更新的 SSM 參數組態建立驗證檢查 AWS Lambda。
SSM 文件中的組態會使用 `ApplicationConfiguration` 文件類型。對應的 JSON 結構描述使用 `ApplicationConfigurationSchema` 文件類型。
AWS AppConfig 支援 JSON 結構描述 4.X 版的內嵌結構描述。如果您的應用程式組態需要不同版本的 JSON 結構描述，則必須建立 Lambda 驗證程式。