

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

# 在中创建自由表单配置文件 AWS AppConfig
<a name="appconfig-free-form-configurations-creating"></a>

*配置数据* 是一组会影响应用程序行为的设置。除其他外，*配置文件*包括一个 URI（ AWS AppConfig 允许在存储位置查找配置数据）和配置类型。使用自由格式配置文件，您可以将数据存储在 AWS AppConfig 托管配置存储区或以下任何工具 AWS 服务 和 Systems Manager 工具中：


****  

| 位置 | 支持的文件类型 | 
| --- | --- | 
|  AWS AppConfig 托管配置存储  |  YAML、JSON 和文本（如果使用添加）。 AWS 管理控制台任何文件类型（如果使用 AWS AppConfig [CreateHostedConfigurationVersion](https://docs.aws.amazon.com/appconfig/2019-10-09/APIReference/API_CreateHostedConfigurationVersion.html)API 操作添加）。  | 
|  [Amazon Simple Storage Service（Amazon S3）](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Welcome.html)  |  任何  | 
|  [AWS CodePipeline](https://docs.aws.amazon.com/codepipeline/latest/userguide/welcome.html)  |  管道（由服务定义）  | 
|  [AWS Secrets Manager](https://docs.aws.amazon.com/secretsmanager/latest/userguide/intro.html)  |  密钥（由服务定义）  | 
|  [AWS Systems Manager 参数存储](https://docs.aws.amazon.com/systems-manager/latest/userguide/systems-manager-parameter-store.html)  |  标准和安全字符串参数（由参数存储定义）  | 
|  [AWS Systems Manager 文档存储（SSM 文档）](https://docs.aws.amazon.com/systems-manager/latest/userguide/documents.html)  |  YAML、JSON、文本  | 

配置文件还可以包括可选的验证器，以确保您的配置数据在语法和语义上都是正确的。 AWS AppConfig 开始部署时使用验证器执行检查。在对配置目标进行任何更改之前，如果检测到任何错误，部署将会停止。

**注意**  
如果可能，我们建议将您的配置数据托管在 AWS AppConfig 托管配置存储中，因为它提供了最多的功能和增强功能。

对于存储在 AWS AppConfig 托管配置存储或 SSM 文档中的自由格式配置，您可以在创建配置文件时使用 Systems Manager 控制台创建自由格式配置。本主题稍后将介绍该过程。

对于存储在 Parameter Store、Secrets Manager 或 Amazon S3 中的自由格式配置，您必须先创建参数、密钥或对象，并将其存储在相关配置存储中。存储配置数据后，请使用本主题中的过程创建配置文件。

**Topics**
+ [

# 了解验证程序
](appconfig-creating-configuration-and-profile-validators.md)
+ [

# 了解配置存储配额和限制
](appconfig-creating-configuration-and-profile-quotas.md)
+ [

# 了解 AWS AppConfig 托管配置存储
](appconfig-creating-configuration-and-profile-about-hosted-store.md)
+ [

# 了解存储在 Amazon S3 中的配置
](appconfig-creating-configuration-and-profile-S3-source.md)
+ [

# 创建 AWS AppConfig 自由格式配置文件（控制台）
](appconfig-creating-free-form-configuration-and-profile-create-console.md)
+ [

# 创建 AWS AppConfig 自由格式配置文件（命令行）
](appconfig-creating-free-form-configuration-and-profile-create-commandline.md)

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

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

**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 函数。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"    
}
```

AWS AppConfig 验证响应中是否设置了 `X-Amz-Function-Error` Lambda 标头。如果函数抛出异常，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。您必须提供 `appconfig.amazonaws.com` 权限才能调用 Lambda。有关更多信息，请参阅[向 AWS 服务授予函数访问权限](https://docs.aws.amazon.com/lambda/latest/dg/access-control-resource-based.html#permissions-resource-serviceinvoke)。 AWS 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 文档创建配置时，系统会自动验证配置是否符合架构要求。如果不符合要求， AWS AppConfig 将返回验证错误。

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

# 了解配置存储配额和限制
<a name="appconfig-creating-configuration-and-profile-quotas"></a>

支持的配置存储 AWS AppConfig 具有以下配额和限制。


****  

|  | AWS AppConfig 托管配置存储 | Amazon S3 | Systems Manager Parameter Store | AWS Secrets Manager | Systems Manager 文档存储 | AWS CodePipeline | 
| --- | --- | --- | --- | --- | --- | --- | 
|  **配置大小限制**  | 默认值为 2 MB，最大值为 4 MB |  2 MB 由 S3 强制执行 AWS AppConfig，而不是 S3  |  4 KB（免费套餐）/8 KB（高级参数）  | 64 KB |  64 KB  | 2 MB由强制执行 AWS AppConfig，而不是 CodePipeline | 
|  **资源存储限制**  | 1 GB |  无限制  |  10000 个参数（免费套餐）/100000 个参数（高级参数）  | 500,000 |  500 个文档  | 受每个应用程序配置文件数量限制（每个应用程序 100 个配置文件） | 
|  **服务器端加密**  | 是 |  [SSE-S3](https://docs.aws.amazon.com/AmazonS3/latest/userguide/serv-side-encryption.html)、[SSE-KMS](https://docs.aws.amazon.com/AmazonS3/latest/userguide/UsingKMSEncryption.html)  |  支持  | 是 |  否  | 是 | 
|  **CloudFormation 支持**  | 是 |  不用于创建或更新数据  |  支持  | 是 |  否  | 是 | 
|  **定价**  | 免费 |  请参阅 [Amazon S3 定价](https://aws.amazon.com//s3/pricing/)  |  请参阅 [AWS Systems Manager 定价](https://aws.amazon.com//systems-manager/pricing/)  | 请参阅 [AWS Secrets Manager 定价](https://aws.amazon.com//secrets-manager/pricing/) |  免费  |  请参阅 [AWS CodePipeline 定价](https://aws.amazon.com//codepipeline/pricing/)  | 

# 了解 AWS AppConfig 托管配置存储
<a name="appconfig-creating-configuration-and-profile-about-hosted-store"></a>

AWS AppConfig 包括内部或托管的配置存储。配置必须为 2 MB 或更小。与其他配置存储选项相比， AWS AppConfig 托管配置存储具有以下优势。
+ 您无需设置和配置其他服务，如 Amazon Simple Storage Service (Amazon S3) 或参数存储。
+ 您无需配置 AWS Identity and Access Management (IAM) 权限即可使用配置存储。
+ 您可以按 YAML、JSON 或文本文档格式存储配置。
+ 使用存储不产生任何费用。
+ 您可以创建配置并在创建配置文件时将其添加到存储。

# 了解存储在 Amazon S3 中的配置
<a name="appconfig-creating-configuration-and-profile-S3-source"></a>

您可以将配置存储在 Amazon Simple Storage Service (Amazon S3) 存储桶中。在创建配置文件时，将指定存储桶中单个 S3 对象的 URI。您还可以指定授予获取对象 AWS AppConfig 权限的 (IAM) 角色的 Amazon 资源名称 AWS Identity and Access Management (ARN)。在为 Amazon S3 对象创建配置文件之前，请注意以下限制。


****  

| 限制 | Details | 
| --- | --- | 
|  Size  |  存储为 S3 对象的配置的最大大小可以为 1 MB。  | 
|  Object encryption  |  配置文件可以 SSE-S3 和 SSE-KMS 加密对象为目标。  | 
|  存储类  |  AWS AppConfig 支持以下 S3 存储类别：`STANDARD``INTELLIGENT_TIERING`、`REDUCED_REDUNDANCY`、`STANDARD_IA`、和`ONEZONE_IA`。不支持以下类别：所有 S3 Glacier 类别（`GLACIER` 和 `DEEP_ARCHIVE`）。  | 
|  版本控制  |  AWS AppConfig 要求 S3 对象使用版本控制。  | 

## 配置存储为 Amazon S3 对象的配置的权限
<a name="appconfig-creating-configuration-and-profile-S3-source-permissions"></a>

在为存储为 S3 对象的配置创建配置文件时，必须为授予获取对象 AWS AppConfig 权限的 IAM 角色指定 ARN。该角色必须包括以下权限。

对 S3 对象的访问权限
+ s3：GetObject
+ s3：GetObjectVersion

列出 S3 存储桶的权限

s3：ListAllMyBuckets

对用于存储对象的 S3 存储桶的访问权限
+ s3：GetBucketLocation
+ s3：GetBucketVersioning
+ s3：ListBucket
+ s3：ListBucketVersions

完成以下过程以创建允许 AWS AppConfig 获取存储在 S3 对象中的配置的角色。

**创建用于访问 S3 对象的 IAM 策略**  
使用以下过程创建 IAM 策略，该策略 AWS AppConfig 允许获取存储在 S3 对象中的配置。

**创建用于访问 S3 对象的 IAM 策略**

1. 使用 [https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/) 打开 IAM 控制台。

1. 在导航窗格中，选择 **策略**，然后选择 **创建策略**。

1. 在**创建策略**页面上，选择 **JSON** 选项卡。

1. 使用有关 S3 存储桶和配置对象的信息更新以下示例策略。然后将策略粘贴到 **JSON** 选项卡上的文本字段中。将 *placeholder values* 替换为您自己的信息。

------
#### [ JSON ]

****  

   ```
   {
     "Version":"2012-10-17",		 	 	 
     "Statement": [
       {
         "Effect": "Allow",
         "Action": [
           "s3:GetObject",
           "s3:GetObjectVersion"
         ],
         "Resource": "arn:aws:s3:::amzn-s3-demo-bucket/my-configurations/my-configuration.json"
       },
       {
         "Effect": "Allow",
         "Action": [
           "s3:GetBucketLocation",
           "s3:GetBucketVersioning",
           "s3:ListBucketVersions",
           "s3:ListBucket"
         ],
         "Resource": [
           "arn:aws:s3:::amzn-s3-demo-bucket"
         ]
       },
       {
         "Effect": "Allow",
         "Action": "s3:ListAllMyBuckets",
         "Resource": "*"
       } 
     ]
   }
   ```

------

1. 选择**查看策略**。

1. 在 **Review policy (查看策略)** 页面上，在 **Name (名称)** 框中键入名称，然后键入描述。

1. 选择**创建策略**。系统将让您返回到 **角色** 页面。

**创建用于访问 S3 对象的 IAM 角色**  
使用以下过程创建一个 IAM 角色，该角色 AWS AppConfig 允许获取存储在 S3 对象中的配置。

**创建一个用于访问 Amazon S3 的 IAM 角色**

1. 使用 [https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/) 打开 IAM 控制台。

1. 在导航窗格中，选择**角色**，然后选择**创建角色**。

1. 在 **选择受信任实体的类型** 部分中，选择 **AWS 服务**。

1. 在 **Choose a use case (选择使用案例)** 部分中，在 **Common use cases (常见使用案例)** 下，选择 **EC2**，然后选择 **Next: Permissions (下一步: 权限)**。

1. 在 **Attach permissions policy (附加权限策略)** 页面上的搜索框中，输入您在上一过程中创建的策略的名称。

1. 选择该策略，然后选择 **Next: Tags (下一步: 标签)**。

1. 在 **添加标签(可选)** 页面上，输入密钥和可选值，然后选择 **下一步: 审核**。

1. 在 **Review (审核)** 页面上，在 **Role name (角色名称)** 字段中键入名称，然后键入描述。

1. 选择 **Create role (创建角色)**。系统将让您返回到 **角色** 页面。

1. 在**角色**页面中，选择刚刚创建的角色以打开**摘要**页面。记下**角色名称**和**角色 ARN**。在本主题的后面部分中创建配置文件时，您将指定角色 ARN。

**创建信任关系**  
使用以下过程将您刚刚创建的角色配置为信任 AWS AppConfig。

**添加信任关系**

1. 在刚刚创建的角色的**摘要**页面上，选择**信任关系**选项卡，然后选择**编辑信任关系**。

1. 删除 `"ec2.amazonaws.com"` 并添加 `"appconfig.amazonaws.com"`，如以下示例所示。

------
#### [ JSON ]

****  

   ```
   {
     "Version":"2012-10-17",		 	 	 
     "Statement": [
       {
         "Effect": "Allow",
         "Principal": {
           "Service": "appconfig.amazonaws.com"
         },
         "Action": "sts:AssumeRole"
       }
     ]
   }
   ```

------

1. 选择**更新信任策略**。

# 创建 AWS AppConfig 自由格式配置文件（控制台）
<a name="appconfig-creating-free-form-configuration-and-profile-create-console"></a>

使用以下步骤使用控制台创建 AWS AppConfig 自由格式配置文件和（可选）自由格式配置。 AWS Systems Manager 

**创建自由格式配置文件**

1. 在 [https://console.aws.amazon.com/systems-manager/appconfig](https://console.aws.amazon.com/systems-manager/appconfig/)/上打开 AWS Systems Manager 控制台。

1. 在导航窗格中，选择**应用程序**，然后选择在[在中为您的应用程序创建命名空间 AWS AppConfig](appconfig-creating-namespace.md)中创建的应用程序。

1. 选择**配置文件和功能标志**选项卡，然后选择**创建配置**。

1. 在**配置选项**部分中，选择**自由格式配置**。

1. 对于**配置文件名称**，输入配置文件的名称。

1. （可选）展开**描述**并输入描述。

1. （可选）展开**其它选项**，并根据需要完成以下操作。

   1. 在**关联扩展**部分中，从列表中选择一个扩展。

   1. 在**标签**部分中，选择**添加新标签**，然后指定键和可选值。

1. 选择**下一步**。

1. 在**指定配置数据**页面的**配置定义**部分，选择一个选项。

1. 按照下表所述，填写所选选项的字段。  
****    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/appconfig/latest/userguide/appconfig-creating-free-form-configuration-and-profile-create-console.html)

1. 在**服务角色**部分中，选择**新建服务角色**以 AWS AppConfig 创建提供配置数据访问权限的 IAM 角色。 AWS AppConfig 根据您之前输入的**名称自动填充角色**名称字段。或者选择**现有服务角色**。使用 **Role ARN (角色 ARN)** 列表选择角色。

1. （可选）在**添加验证程序**页面上，选择 **JSON 架构**或 **AWS Lambda**。如果选择 **JSON Schema (JSON 架构)**，请在字段中输入 JSON 架构。如果您选择 **AWS Lambda**，请从列表中选择函数 Amazon 资源名称 (ARN) 和版本。
**重要**  
在可以将配置添加到系统之前，SSM 文档中存储的配置数据必须对照关联的 JSON 架构进行验证。SSM 参数不需要验证方法，但我们建议您使用为新的或更新的 SSM 参数配置创建验证检查。 AWS Lambda

1. 选择**下一步**。

1. 在**查看并保存**页面上，选择**保存并继续部署**。

**重要**  
如果您为创建了配置文件 AWS CodePipeline，则必须在中创建指定 CodePipeline AWS AppConfig 为*部署提供者的*管道。您不需要执行 [在中部署功能标志和配置数据 AWS AppConfig](deploying-feature-flags.md)。但是，您必须配置客户端以接收应用程序配置更新，如 [在没有代理的情况下 AWS AppConfig 检索配置数据](about-data-plane.md) 中所述。有关创建指定 AWS AppConfig 为部署提供者的管道的信息，请参阅《*AWS CodePipeline 用户指南》*中的[教程：创建 AWS AppConfig 用作部署提供者的管道](https://docs.aws.amazon.com/codepipeline/latest/userguide/tutorials-AppConfig.html)。

继续执行[在中部署功能标志和配置数据 AWS AppConfig](deploying-feature-flags.md)。

# 创建 AWS AppConfig 自由格式配置文件（命令行）
<a name="appconfig-creating-free-form-configuration-and-profile-create-commandline"></a>

以下过程介绍如何使用 AWS CLI （在 Linux 或 Windows 上）或 AWS Tools for PowerShell 如何创建 AWS AppConfig 自由格式配置文件。如果你愿意，你可以 AWS CloudShell 使用运行下面列出的命令。有关更多信息，请参阅《AWS CloudShell 用户指南》**中的[什么是 AWS CloudShell？](https://docs.aws.amazon.com//cloudshell/latest/userguide/welcome.html)。

**注意**  
对于托管在托管的配置存储中 AWS AppConfig 托管的自由格式配置，您可以指定`hosted`位置 URI。

**要创建配置文件，请使用 AWS CLI**

1. 打开 AWS CLI.

1. 运行以下命令以创建自由格式配置文件。

------
#### [ Linux ]

   ```
   aws appconfig create-configuration-profile \
     --application-id APPLICATION_ID \
     --name NAME \
     --description CONFIGURATION_PROFILE_DESCRIPTION \
     --location-uri CONFIGURATION_URI or hosted \
     --retrieval-role-arn IAM_ROLE_ARN \
     --tags TAGS \
     --validators "Content=SCHEMA_CONTENT or LAMBDA_FUNCTION_ARN,Type=JSON_SCHEMA or LAMBDA"
   ```

------
#### [ Windows ]

   ```
   aws appconfig create-configuration-profile ^
     --application-id APPLICATION_ID ^
     --name NAME ^
     --description CONFIGURATION_PROFILE_DESCRIPTION ^
     --location-uri CONFIGURATION_URI or hosted  ^
     --retrieval-role-arn IAM_ROLE_ARN ^
     --tags TAGS ^
     --validators "Content=SCHEMA_CONTENT or LAMBDA_FUNCTION_ARN,Type=JSON_SCHEMA or LAMBDA"
   ```

------
#### [ PowerShell ]

   ```
   New-APPCConfigurationProfile `
     -Name NAME `
     -ApplicationId APPLICATION_ID `
     -Description CONFIGURATION_PROFILE_DESCRIPTION `
     -LocationUri CONFIGURATION_URI or hosted `
     -RetrievalRoleArn IAM_ROLE_ARN `
     -Tag TAGS `
     -Validators "Content=SCHEMA_CONTENT or LAMBDA_FUNCTION_ARN,Type=JSON_SCHEMA or LAMBDA"
   ```

------

**重要**  
请注意以下重要信息。  
如果您为创建了配置文件 AWS CodePipeline，则必须在中创建指定 CodePipeline AWS AppConfig 为*部署提供者的*管道。您不需要执行 [在中部署功能标志和配置数据 AWS AppConfig](deploying-feature-flags.md)。但是，您必须配置客户端以接收应用程序配置更新，如 [在没有代理的情况下 AWS AppConfig 检索配置数据](about-data-plane.md) 中所述。有关创建指定 AWS AppConfig 为部署提供者的管道的信息，请参阅《*AWS CodePipeline 用户指南》*中的[教程：创建 AWS AppConfig 用作部署提供者的管道](https://docs.aws.amazon.com/codepipeline/latest/userguide/tutorials-AppConfig.html)。
如果您在 AWS AppConfig 托管配置存储中创建了配置，则可以使用 [CreateHostedConfigurationVersion](https://docs.aws.amazon.com//appconfig/2019-10-09/APIReference/API_CreateHostedConfigurationVersion.html)API 操作创建配置的新版本。要查看此 API 操作的 AWS CLI 详细信息和示例命令，请参阅《*AWS CLI 命令参考*》[create-hosted-configuration-version](https://docs.aws.amazon.com/cli/latest/reference/appconfig/create-hosted-configuration-version.html)中的。

继续执行[在中部署功能标志和配置数据 AWS AppConfig](deploying-feature-flags.md)。