

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

# 在中创建功能标志和自由格式配置数据 AWS AppConfig
<a name="creating-feature-flags-and-configuration-data"></a>

本节中的主题有助于您在 AWS AppConfig中完成以下任务。这些任务用于创建部署配置数据所需的重要构件。

**1. [创建应用程序命名空间](https://docs.aws.amazon.com/appconfig/latest/userguide/appconfig-creating-namespace.html)**  
要创建应用程序命名空间，您需要创建一个名为应用程序的 AWS AppConfig 构件。应用程序只是一个像文件夹一样的组织构造。

**2. [创建环境](https://docs.aws.amazon.com/appconfig/latest/userguide/appconfig-creating-environment.html)**  
您可以为每个 AWS AppConfig 应用程序定义一个或多个环境。环境是由 AWS AppConfig 目标组成的逻辑部署组，例如`Beta`或`Production`环境中的应用程序。您也可以为应用程序子组件定义环境，例如 `AWS Lambda functions`、`Containers`、`Web`、`Mobile` 和 `Back-end`。  
您可以为每个环境配置 Amazon CloudWatch 警报，以自动回滚有问题的配置更改。系统在部署配置期间监控警报。如果触发警报，系统将回滚配置。

**3. [创建配置文件](https://docs.aws.amazon.com/appconfig/latest/userguide/appconfig-creating-configuration-profile.html)**  
*配置数据* 是一组会影响应用程序行为的设置。除其他外，*配置文件*包括一个 URI（ AWS AppConfig 允许在存储位置查找配置数据）和配置类型。 AWS AppConfig 支持以下类型的配置文件：  
+ **功能标志**：您可以使用功能标志来启用或禁用应用程序中的功能，或者使用标志属性配置应用程序功能的不同特性。 AWS AppConfig 以功能标志格式将功能标志配置存储在 AWS AppConfig 托管配置存储中，该格式包含有关您的标志和旗帜属性的数据和元数据。功能标志配置的 URI 就是 `hosted`。
+ **自由格式配置**：自由格式配置可以在以下任一工具 AWS 服务 和 Systems Manager 工具中存储数据：
  + AWS AppConfig 托管配置存储
  + Amazon Simple Storage Service
  + AWS CodePipeline
  + AWS Secrets Manager
  + AWS Systems Manager (SSM) 参数存储
  + SSM 文档存储
如果可能，我们建议将您的配置数据托管在 AWS AppConfig 托管配置存储中，因为它提供了最多的功能和增强功能。

**4. （可选，但建议执行）[Create multi-variant feature flags](https://docs.aws.amazon.com/appconfig/latest/userguide/appconfig-creating-multi-variant-feature-flags.html)**  
AWS AppConfig 提供基本功能标志，这些标志（如果启用）会为每个请求返回一组特定的配置数据。为了更好地支持用户分段和流量拆分用例， AWS AppConfig 还提供了多变体功能标志，使您可以定义一组可能的标志值以供请求返回。还可以为多变体标志配置不同的状态（已启用或已禁用）。当请求配置有变体的标志时，您的应用程序会提供根据一组用户定义的规则 AWS AppConfig 进行评估的上下文。根据请求中指定的上下文和为变体定义的规则，向应用程序 AWS AppConfig 返回不同的标志值。

**Topics**
+ [

# 了解配置文件 IAM 角色
](appconfig-creating-configuration-and-profile-iam-role.md)
+ [

# 在中为您的应用程序创建命名空间 AWS AppConfig
](appconfig-creating-namespace.md)
+ [

# 在中为您的应用程序创建环境 AWS AppConfig
](appconfig-creating-environment.md)
+ [

# 在中创建配置文件 AWS AppConfig
](appconfig-creating-configuration-profile.md)

# 了解配置文件 IAM 角色
<a name="appconfig-creating-configuration-and-profile-iam-role"></a>

可以使用 AWS AppConfig创建一个 IAM 角色，该角色提供对配置数据的访问权限。或者您可以自行创建 IAM 角色。如果您使用创建角色 AWS AppConfig，则系统将创建该角色并根据您选择的配置源类型指定以下权限策略之一。

 **配置源为 Secrets Manager 密钥** 

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "secretsmanager:GetSecretValue"
             ],
            "Resource": [
                "arn:aws:secretsmanager:us-east-1:111122223333:secret:secret_name-a1b2c3"
            ]
        }
    ]
}
```

------

 **配置源是 Parameter Store 参数** 

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "ssm:GetParameter"
            ],
            "Resource": [
                "arn:aws:ssm:us-east-1:111122223333:parameter/parameter_name"
            ]
        }
    ]
    }
```

------

 **配置源是 SSM 文档** 

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

****  

```
{

    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "ssm:GetDocument"
            ],
            "Resource": [
                "arn:aws:ssm:us-east-1:111122223333:document/document_name"
            ]
        }
    ]
}
```

------

如果您使用创建角色 AWS AppConfig，则系统还会为该角色创建以下信任关系。

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

****  

```
{

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

------

# 在中为您的应用程序创建命名空间 AWS AppConfig
<a name="appconfig-creating-namespace"></a>

本节中的过程可帮助您创建名为 AWS AppConfig 应用程序的构件。应用程序只是一种组织构造，就像文件夹一样，用于标识应用程序的命名空间。此组织构造与某些可执行代码单元有关。例如，您可以创建一个名为的应用程序 MyMobileApp 来组织和管理用户安装的移动应用程序的配置数据。必须先创建这些工件，然后 AWS AppConfig 才能使用部署和检索功能标志或自由格式配置数据。

以下过程为您提供了将扩展与功能标志配置文件关联的选项。在创建或部署配置 AWS AppConfig 的工作流程中，*扩展*可以增强您在不同时刻注入逻辑或行为的能力。有关更多信息，请参阅 [了解 AWS AppConfig 扩展](working-with-appconfig-extensions-about.md)。

**注意**  
您可以使用 AWS CloudFormation 创建 AWS AppConfig 项目，包括应用程序、环境、配置配置文件、部署、部署策略和托管配置版本。有关更多信息，请参阅《AWS CloudFormation 用户指南》**中的 [AWS AppConfig 资源类型参考](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/AWS_AppConfig.html)。

**Topics**
+ [

## 创建 AWS AppConfig 应用程序（控制台）
](#appconfig-creating-application-console)
+ [

## 创建 AWS AppConfig 应用程序（命令行）
](#appconfig-creating-application-commandline)

## 创建 AWS AppConfig 应用程序（控制台）
<a name="appconfig-creating-application-console"></a>

使用以下步骤通过 AWS Systems Manager 控制台创建 AWS AppConfig 应用程序。

**创建应用程序**

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

1. 在导航窗格中，选择**应用程序**，然后选择**创建应用程序**。

1. 对于 **Name (名称)**，请输入应用程序的名称。

1. 对于 **Description (描述)**，请输入有关应用程序的信息。

1. （可选）在**扩展**部分中，从列表中选择一个扩展。有关更多信息，请参阅 [了解 AWS AppConfig 扩展](working-with-appconfig-extensions-about.md)。

1. （可选）在**标签**部分中，输入键和可选的值。您最多可以为一个资源指定 50 个标签。

1. 选择**创建应用程序**。

AWS AppConfig 创建应用程序，然后显示 “**环境**” 选项卡。继续执行[在中为您的应用程序创建环境 AWS AppConfig](appconfig-creating-environment.md)。

## 创建 AWS AppConfig 应用程序（命令行）
<a name="appconfig-creating-application-commandline"></a>

以下过程介绍如何使用 AWS CLI （在 Linux 或 Windows 上）或 AWS Tools for PowerShell 如何创建 AWS AppConfig 应用程序。

**分步创建应用程序**

1. 打开 AWS CLI.

1. 运行以下命令以创建应用程序。

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

   ```
   aws appconfig create-application \
     --name A_name_for_the_application \
     --description A_description_of_the_application \  
     --tags User_defined_key_value_pair_metadata_for_the_application
   ```

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

   ```
   aws appconfig create-application ^
     --name A_name_for_the_application ^
     --description A_description_of_the_application ^
     --tags User_defined_key_value_pair_metadata_for_the_application
   ```

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

   ```
   New-APPCApplication `
     -Name Name_for_the_application `
     -Description Description_of_the_application `
     -Tag Hashtable_type_user_defined_key_value_pair_metadata_for_the_application
   ```

------

   系统将返回类似于以下内容的信息。

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

   ```
   {
      "Id": "Application ID",
      "Name": "Application name",
      "Description": "Description of the application"
   }
   ```

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

   ```
   {
      "Id": "Application ID",
      "Name": "Application name",
      "Description": "Description of the application"
   }
   ```

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

   ```
   ContentLength    : Runtime of the command
   Description      : Description of the application
   HttpStatusCode   : HTTP Status of the runtime
   Id               : Application ID
   Name             : Application name
   ResponseMetadata : Runtime Metadata
   ```

------

# 在中为您的应用程序创建环境 AWS AppConfig
<a name="appconfig-creating-environment"></a>

您可以为每个 AWS AppConfig 应用程序定义一个或多个环境。环境是由 AppConfig 目标组成的逻辑部署组，例如`Production`环境中的应用程序、 AWS Lambda 函数或容器。`Beta`您也可以为应用程序子组件定义环境，例如应用程序的 `Web`、`Mobile` 和 `Back-end`。您可以为每个环境配置 Amazon CloudWatch 警报。系统在部署配置期间监控警报。如果触发警报，系统将回滚配置。

**开始前的准备工作**  
如果您想启用回滚配置 AWS AppConfig 以响应 CloudWatch 警报，则必须为一个 AWS Identity and Access Management (IAM) 角色配置一个 AWS AppConfig 允许响应 CloudWatch 警报的权限。您可以在以下过程中选择该角色。有关更多信息，请参阅 [配置自动回滚的权限](setting-up-appconfig.md#getting-started-with-appconfig-cloudwatch-alarms-permissions)。

**Topics**
+ [

## 创建 AWS AppConfig 环境（控制台）
](#appconfig-creating-environment-console)
+ [

## 创建 AWS AppConfig 环境（命令行）
](#appconfig-creating-environment-commandline)

## 创建 AWS AppConfig 环境（控制台）
<a name="appconfig-creating-environment-console"></a>

使用以下过程通过 AWS Systems Manager 控制台创建 AWS AppConfig 环境。

**创建环境**

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

1. 在导航窗格中，选择**应用程序**，然后选择应用程序的名称来打开详细信息页面。

1. 选择**环境**选项卡，然后选择**创建环境**。

1. 对于 **Name (名称)**，请输入环境的名称。

1. 对于 **Description (描述)**，请输入有关环境的信息。

1. （可选）在**监控**部分，选择 **IAM 角色**字段，然后选择一个有权对您要监控相关警报的指标调用 `cloudwatch:DescribeAlarms` 的 IAM 角色。

1. 在**CloudWatch 警报**列表中，输入 Amazon 资源名称 (ARNs) 一个或多个要监控的指标。 AWS AppConfig 如果其中一个指标进入`ALARM`状态，则回滚您的配置部署。有关建议的指标的信息，请参阅[监控部署以实现自动回滚](monitoring-deployments.md)。

1. （可选）在**关联扩展**部分中，从列表中选择一个扩展。有关更多信息，请参阅 [了解 AWS AppConfig 扩展](working-with-appconfig-extensions-about.md)。

1. （可选）在**标签**部分中，输入键和可选的值。您最多可以为一个资源指定 50 个标签。

1. 选择**创建环境**。

AWS AppConfig 创建环境，然后显示**环境详细信息**页面。继续执行[在中创建配置文件 AWS AppConfig](appconfig-creating-configuration-profile.md)。

## 创建 AWS AppConfig 环境（命令行）
<a name="appconfig-creating-environment-commandline"></a>

以下过程介绍如何使用 AWS CLI （在 Linux 或 Windows 上）或 AWS Tools for PowerShell 如何创建 AWS AppConfig 环境。

**分步创建环境**

1. 打开 AWS CLI.

1. 运行以下命令以创建环境。

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

   ```
   aws appconfig create-environment \
     --application-id The_application_ID \
     --name A_name_for_the_environment \
     --description A_description_of_the_environment \
     --monitors "AlarmArn=ARN_of_the_Amazon_CloudWatch_alarm,AlarmArnRole=ARN_of_the_IAM role_for_AWS AppConfig_to_monitor_AlarmArn" \
     --tags User_defined_key_value_pair_metadata_of_the_environment
   ```

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

   ```
   aws appconfig create-environment ^
     --application-id The_application_ID ^
     --name A_name_for_the_environment ^
     --description A_description_of_the_environment ^
     --monitors "AlarmArn=ARN_of_the_Amazon_CloudWatch_alarm,AlarmArnRole=ARN_of_the_IAM role_for_AWS AppConfig_to_monitor_AlarmArn" ^
     --tags User_defined_key_value_pair_metadata_of_the_environment
   ```

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

   ```
   New-APPCEnvironment `
     -Name Name_for_the_environment `
     -ApplicationId The_application_ID
     -Description Description_of_the_environment `
     -Monitors @{"AlarmArn=ARN_of_the_Amazon_CloudWatch_alarm,AlarmArnRole=ARN_of_the_IAM role_for_AWS AppConfig_to_monitor_AlarmArn"} `
     -Tag Hashtable_type_user_defined_key_value_pair_metadata_of_the_environment
   ```

------

   系统将返回类似于以下内容的信息。

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

   ```
   {
      "ApplicationId": "The application ID",
      "Id": "The_environment ID",
      "Name": "Name of the environment",
      "State": "The state of the environment",
      "Description": "Description of the environment",
      
      "Monitors": [ 
         { 
            "AlarmArn": "ARN of the Amazon CloudWatch alarm",
            "AlarmRoleArn": "ARN of the IAM role for AppConfig to monitor AlarmArn"
         }
      ]  
   }
   ```

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

   ```
   {
      "ApplicationId": "The application ID",
      "Id": "The environment ID",
      "Name": "Name of the environment",
      "State": "The state of the environment"
      "Description": "Description of the environment",
      
      "Monitors": [ 
         { 
            "AlarmArn": "ARN of the Amazon CloudWatch alarm",
            "AlarmRoleArn": "ARN of the IAM role for AppConfig to monitor AlarmArn"
         }
      ] 
   }
   ```

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

   ```
   ApplicationId     : The application ID
   ContentLength     : Runtime of the command
   Description       : Description of the environment
   HttpStatusCode    : HTTP Status of the runtime
   Id                : The environment ID
   Monitors          : {ARN of the Amazon CloudWatch alarm, ARN of the IAM role for AppConfig to monitor AlarmArn}
   Name              : Name of the environment
   Response Metadata : Runtime Metadata
   State             : State of the environment
   ```

------

继续执行[在中创建配置文件 AWS AppConfig](appconfig-creating-configuration-profile.md)。

# 在中创建配置文件 AWS AppConfig
<a name="appconfig-creating-configuration-profile"></a>

*配置数据* 是一组会影响应用程序行为的设置。除其他外，*配置文件*包括一个 URI（ AWS AppConfig 允许在存储位置查找配置数据）和配置类型。 AWS AppConfig 支持以下类型的配置文件：
+ **功能标志**：您可以使用功能标志来启用或禁用应用程序中的功能，或者使用标志属性配置应用程序功能的不同特性。 AWS AppConfig 以功能标志格式将功能标志配置存储在 AWS AppConfig 托管配置存储中，该格式包含有关您的标志和旗帜属性的数据和元数据。功能标志配置的 URI 就是 `hosted`。
+ **自由格式配置**：自由格式配置可以在以下任一工具 AWS 服务 和 Systems Manager 工具中存储数据：
  + AWS AppConfig 托管配置存储
  + Amazon Simple Storage Service
  + AWS CodePipeline
  + AWS Secrets Manager
  + AWS Systems Manager (SSM) 参数存储
  + SSM 文档存储

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

以下是一些配置数据示例，可帮助您更好地了解不同类型的配置数据以及如何在功能标志或自由形式配置配置文件中使用它们。

 **功能标志配置数据** 

以下功能标志配置数据可按区域启用或禁用移动支付和默认付款方式。

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

```
{
  "allow_mobile_payments": {
    "enabled": false
  },
  "default_payments_per_region": {
    "enabled": true
  }
}
```

------
#### [ YAML ]

```
---
allow_mobile_payments:
  enabled: false
default_payments_per_region:
  enabled: true
```

------

 **操作配置数据** 

以下自由格式配置数据对应用程序处理请求的方式施加了限制。

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

```
{
  "throttle-limits": {
    "enabled": "true",
    "throttles": [
      {
        "simultaneous_connections": 12
      },
      {
        "tps_maximum": 5000
      }
    ],
    "limit-background-tasks": [
      true
    ]
  }
}
```

------
#### [ YAML ]

```
---
throttle-limits:
  enabled: 'true'
  throttles:
  - simultaneous_connections: 12
  - tps_maximum: 5000
  limit-background-tasks:
  - true
```

------

 **访问控制列表配置数据** 

以下访问控制列表自由格式配置数据指定了哪些用户或组可以访问应用程序。

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

```
{
  "allow-list": {
    "enabled": "true",
    "cohorts": [
      {
        "internal_employees": true
      },
      {
        "beta_group": false
      },
      {
        "recent_new_customers": false
      },
      {
        "user_name": "Jane_Doe"
      },
      {
        "user_name": "John_Doe"
      }
    ]
  }
}
```

------
#### [ YAML ]

```
---
allow-list:
  enabled: 'true'
  cohorts:
  - internal_employees: true
  - beta_group: false
  - recent_new_customers: false
  - user_name: Jane_Doe
  - user_name: Ashok_Kumar
```

------

**Topics**
+ [

# 在中创建功能标志配置文件 AWS AppConfig
](appconfig-creating-configuration-and-profile-feature-flags.md)
+ [

# 在中创建自由表单配置文件 AWS AppConfig
](appconfig-free-form-configurations-creating.md)
+ [

# 为非原生数据来源创建配置配置文件
](appconfig-creating-configuration-profile-other-data-sources.md)

# 在中创建功能标志配置文件 AWS AppConfig
<a name="appconfig-creating-configuration-and-profile-feature-flags"></a>

您可以使用功能标志来启用或禁用应用程序中的功能，也可以使用标志属性配置应用程序功能的不同特性。 AWS AppConfig 以功能标志格式将功能标志配置存储在 AWS AppConfig 托管配置存储中，该格式包含有关您的标志和旗帜属性的数据和元数据。

**注意**  
创建功能标志配置文件时，可以创建基本功能标志作为配置文件工作流程的一部分。 AWS AppConfig 还支持多变体功能标志。*多变体功能标志*使您可以定义要对请求返回的一组可能的标志值。当请求配置有变体的标志时，您的应用程序会提供根据一组用户定义的规则 AWS AppConfig 进行评估的上下文。根据请求中指定的上下文和为变体定义的规则，向应用程序 AWS AppConfig 返回不同的标志值。  
要创建多变体功能标志，请先创建配置文件，然后编辑配置文件中的任何标志以添加变体。有关更多信息，请参阅 [创建多变体功能标志](appconfig-creating-multi-variant-feature-flags.md)。

**Topics**
+ [

## 了解功能标志属性
](#appconfig-creating-configuration-profile-feature-flag-attributes)
+ [

# 创建功能标志配置文件（控制台）
](appconfig-creating-feature-flag-configuration-create-console.md)
+ [

# 创建功能标志配置文件（命令行）
](appconfig-creating-feature-flag-configuration-commandline.md)
+ [

# 创建多变体功能标志
](appconfig-creating-multi-variant-feature-flags.md)
+ [

# 了解 AWS.AppConfig.FeatureFlags 的类型参考
](appconfig-type-reference-feature-flags.md)
+ [

# 将先前的功能标志版本保存为新版本
](appconfig-creating-configuration-profile-feature-flags-editing-version.md)

## 了解功能标志属性
<a name="appconfig-creating-configuration-profile-feature-flag-attributes"></a>

创建功能标志配置文件或在现有配置文件中创建新标志时，可以为该标志指定属性和相应的约束。属性是与功能标志关联的字段，用于表示与功能标志相关的属性。属性将使用标志键和标志的 `enable` 或 `disable` 值传递到应用程序。

约束可确保不会将任何意外的属性值部署到应用程序。下图显示了一个示例。

![\[AWS AppConfig 功能旗帜的旗帜属性示例\]](http://docs.aws.amazon.com/zh_cn/appconfig/latest/userguide/images/appconfig-flag-attributes.png)


**注意**  
请注意有关标志属性的以下信息。  
对于属性名称，保留了“启用”一词。无法创建名为“已启用”的功能标志属性。没有其他保留字。
仅当启用了功能标志时，该标志的属性才包含在 `GetLatestConfiguration` 响应中。
给定标志的标志属性键必须是唯一的。

AWS AppConfig 支持以下类型的标志属性及其相应的约束。

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/appconfig/latest/userguide/appconfig-creating-configuration-and-profile-feature-flags.html)

# 创建功能标志配置文件（控制台）
<a name="appconfig-creating-feature-flag-configuration-create-console"></a>

使用以下步骤使用 AWS AppConfig 控制台创建 AWS AppConfig 功能标志配置文件。在创建配置文件时，也可以创建基本功能标志。

**创建配置文件**

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. 在**加密**列表中，从列表中选择一个 AWS Key Management Service (AWS KMS) 密钥。此客户托管密钥使您能够加密 AWS AppConfig 托管配置存储库中的新配置数据版本。有关此密钥的更多信息，请参阅 [安全性 AWS AppConfig](appconfig-security.md)中的 **AWS AppConfig 支持客户自主管理型密钥**。

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

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

1. 在**功能标志定义**部分中，对于**标志名称**输入名称。

1. 对于**标志键**，输入一个标志标识符来区分同一配置文件中的标志。相同配置文件中的标志不能具有相同的键。创建标志后，可以编辑标志名称，但不能编辑标志键。

1. （可选）展开**描述**，并输入有关此标志的信息。

1. 选择 “**这是短期标志**”，也可以选择应禁用或删除该标志的日期。 AWS AppConfig *不会*在弃用日期禁用该标志。

1. （可选）在**功能标志属性**部分中，选择**定义属性**。属性使您能够在标志中提供其他值。有关属性和约束的更多信息，请参阅[了解功能标志属性](appconfig-creating-configuration-and-profile-feature-flags.md#appconfig-creating-configuration-profile-feature-flag-attributes)。

   1. 对于**键**，指定一个标志键并从**类型**列表中选择其类型。有关**值**和**约束**字段支持的选项的信息，请参阅前面引用的有关属性的部分。

   1. 选择**必需值**以指定属性值是否为必需值。

   1. 选择**定义属性**来添加其它属性。

1. 在**功能标志值**部分中，选择**已启用**来启用该标志。如果适用，请使用同一个开关在标志到达指定的弃用日期时将其禁用。

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

1. 在**查看并保存**页面上，验证标志的详细信息，然后单击**保存并继续部署**。

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

# 创建功能标志配置文件（命令行）
<a name="appconfig-creating-feature-flag-configuration-commandline"></a>

以下过程介绍如何使用 AWS Command Line Interface （在 Linux 或 Windows 上）或适用于 Windows 的工具 PowerShell 来创建 AWS AppConfig 功能标志配置文件。在创建配置文件时，也可以创建基本功能标志。

**创建功能标志配置**

1. 打开 AWS CLI.

1. 创建一个功能标志配置文件，将其**类型**指定为 `AWS.AppConfig.FeatureFlags`。配置文件必须使用 `hosted` 作为位置 URI。

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

   ```
   aws appconfig create-configuration-profile \
     --application-id APPLICATION_ID \
     --name CONFIGURATION_PROFILE_NAME \
     --location-uri hosted \
     --type AWS.AppConfig.FeatureFlags
   ```

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

   ```
   aws appconfig create-configuration-profile ^
     --application-id APPLICATION_ID ^
     --name CONFIGURATION_PROFILE_NAME ^
     --location-uri hosted ^
     --type AWS.AppConfig.FeatureFlags
   ```

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

   ```
   New-APPCConfigurationProfile `
     -Name CONFIGURATION_PROFILE_NAME `
     -ApplicationId APPLICATION_ID `
     -LocationUri hosted `
     -Type AWS.AppConfig.FeatureFlags
   ```

------

1. 创建功能标志配置数据。您的数据必须采用 JSON 格式，并符合 `AWS.AppConfig.FeatureFlags` JSON 架构。有关架构的更多信息，请参阅 [了解 AWS.AppConfig.FeatureFlags 的类型参考](appconfig-type-reference-feature-flags.md)。

1. 使用 `CreateHostedConfigurationVersion` API 将功能标志配置数据保存到 AWS AppConfig。

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

   ```
   aws appconfig create-hosted-configuration-version \
     --application-id APPLICATION_ID \
     --configuration-profile-id CONFIGURATION_PROFILE_ID \
     --content-type "application/json" \
     --content file://path/to/feature_flag_configuration_data.json \
     --cli-binary-format raw-in-base64-out
   ```

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

   ```
   aws appconfig create-hosted-configuration-version ^
     --application-id APPLICATION_ID ^
     --configuration-profile-id CONFIGURATION_PROFILE_ID ^
     --content-type "application/json" ^
     --content file://path/to/feature_flag_configuration_data.json ^
     --cli-binary-format raw-in-base64-out
   ```

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

   ```
   New-APPCHostedConfigurationVersion `
     -ApplicationId APPLICATION_ID `
     -ConfigurationProfileId CONFIGURATION_PROFILE_ID `
     -ContentType "application/json" `
     -Content file://path/to/feature_flag_configuration_data.json
   ```

------

   该命令从磁盘加载为 `Content` 参数指定的内容。内容必须类似于以下示例。

   ```
   {
       "flags": {
           "ui_refresh": {
               "name": "UI Refresh"
           }
       },
       "values": {
           "ui_refresh": {
               "enabled": false,
               "attributeValues": {
                   "dark_mode_support": true
               }
           }
       },
       "version": "1"
   }
   ```

   系统将返回类似于以下内容的信息。

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

   ```
   {
      "ApplicationId"          : "ui_refresh",
      "ConfigurationProfileId" : "UI Refresh",
      "VersionNumber"          : "1",
      "ContentType"            : "application/json"
   }
   ```

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

   ```
   {
      "ApplicationId"          : "ui_refresh",
      "ConfigurationProfileId" : "UI Refresh",
      "VersionNumber"          : "1",
      "ContentType"            : "application/json"
   }
   ```

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

   ```
   ApplicationId          : ui_refresh
   ConfigurationProfileId : UI Refresh
   VersionNumber          : 1
   ContentType            : application/json
   ```

------

   `service_returned_content_file`包含您的配置数据，其中包括一些 AWS AppConfig 生成的元数据。
**注意**  
创建托管配置版本时，请 AWS AppConfig 验证您的数据是否符合 `AWS.AppConfig.FeatureFlags` JSON 架构。 AWS AppConfig 此外，还会验证数据中的每个要素标志属性是否满足您为这些属性定义的约束条件。

# 创建多变体功能标志
<a name="appconfig-creating-multi-variant-feature-flags"></a>

功能标志变体使您可以定义要对请求返回的一组可能的标志值。还可以为多变体标志配置不同的状态（已启用或已禁用）。当请求配置有变体的标志时，您的应用程序会提供根据一组用户定义的规则 AWS AppConfig 进行评估的上下文。根据请求中指定的上下文和为变体定义的规则，向应用程序 AWS AppConfig 返回不同的标志值。

以下屏幕截图展示了具有三个用户定义变体和默认变体的功能标志示例。

![\[带有变体的功能标志的屏幕截图示例。\]](http://docs.aws.amazon.com/zh_cn/appconfig/latest/userguide/images/flag-variant-example.png)


**Topics**
+ [

# 了解多变体功能标志概念和常见使用案例
](appconfig-creating-multi-variant-feature-flags-concepts.md)
+ [

# 了解多变体功能标志规则
](appconfig-creating-multi-variant-feature-flags-rules.md)
+ [

# 创建多变体功能标志
](appconfig-creating-multi-variant-feature-flags-procedures.md)

# 了解多变体功能标志概念和常见使用案例
<a name="appconfig-creating-multi-variant-feature-flags-concepts"></a>

为了协助您更好地理解功能标志变体，本节解释了标志变体的概念和常见使用案例。

**概念**
+ **功能标志**：一种 AWS AppConfig 配置类型，用于控制应用程序中某项功能的行为。标志具有状态（已启用或已禁用）和一组可选的属性，其中包含任意字符串、数值、布尔值或数组值。
+ **功能标志变体**：属于功能标志的状态和属性值的特定组合。一个功能标志可能有多个变体。
+ **变体规则**：用于选择功能标志变体的用户定义表达式。每个变体都有自己的规则，该规则 AWS AppConfig 会进行评估以确定是否将其返回。
+ **默认变体**：未选择任何其它变体时返回的特殊变体。所有多变体功能标志都有一个默认变体。

  请注意，默认变体必须在变体排序中排在最后，并且不能有与之关联的规则。如果上次未定义，则在尝试创建多变体标志`BadRequestException`时 AWS AppConfig 返回 a。
+ **上下文**：在配置检索时间传递给 AWS AppConfig 的用户定义的键和值。在规则评估期间使用上下文值来选择要返回的功能标志变体。

**注意**  
AWS AppConfig 代理评估变体规则，并根据提供的上下文确定哪条规则适用于请求。有关检索多变体功能标志的更多信息，请参阅 [检索基本和多变体功能标志](appconfig-integration-retrieving-feature-flags.md)。

**常见使用案例**

本节介绍功能标志变体的两个常见使用案例。

*用户细分*

用户细分是根据特定属性划分用户的过程。例如，可以使用标志变体，来根据用户 ID、地理位置、设备类型或购买频率向某些用户公开某项功能，但不向其他用户公开该功能。

以购买频率为例，假设商务应用程序支持一项旨在提高客户忠诚度的功能。可以使用标志变体来配置不同的激励类型，以便根据用户上次购买商品的时间向其显示。可能会向新用户提供少量折扣来鼓励他们成为客户，而如果回头客购买新类别的商品，则可能会获得更大的折扣。

*流量拆分*

流量拆分是根据您定义的上下文值选择随机但一致的标志变体的过程。例如，您可能想进行一项实验，来让一小部分用户（由其用户 ID 标识）看到特定的变体。或者，您可能希望逐步推出一项功能，即首先向 5% 的用户公开一项功能，然后依次向 15%、40%、100% 的用户公开此功能，同时在整个推出过程中保持一致的用户体验。

通过该实验示例，可以使用标志变体来测试应用程序主页上主要操作的新按钮样式，来查看它是否能带来更多点击量。对于您的实验，可以创建一个带有流量拆分规则的标志变体，该规则选择 5% 的用户可看到新样式，而默认变体表示应继续看到现有样式的用户。如果实验成功，您可以增加百分比值，甚至可以将该变体转变为默认变体。

# 了解多变体功能标志规则
<a name="appconfig-creating-multi-variant-feature-flags-rules"></a>

在创建功能标志变体时，可以为其指定规则。规则是将上下文值作为输入并生成布尔结果作为输出的表达式。例如，可以定义一条规则来为测试版用户（由其账户 ID 标识）选择标志变体，同时测试用户界面刷新。对于此场景，请执行以下操作：

1. 创建一个名为 *UI Refresh* 的新功能标志配置文件。

1. 创建一个名为 *ui\$1refresh* 的新功能标志。

1. 在创建功能标志后，对其进行编辑来添加变体。

1. 创建并启用名为的新变体*BetaUsers*。

1. 定义一条规则 *BetaUsers*，如果请求上下文中的账户 ID 位于 IDs 获准查看新 Beta 版体验的账户列表中，则选择变体。

1. 确认默认变体的状态设置为**禁用**。

**注意**  
根据在控制台中定义的顺序，将变体作为有序列表进行评估。将首先评估列表顶部的变体。如果没有规则与提供的上下文匹配，则 AWS AppConfig 返回 Default 变体。

在 AWS AppConfig 处理功能标志请求时，它会先将提供的上下文（包括账户 ID（在本例中）与变体进行比较。 BetaUsers 如果上下文符合规则 BetaUsers，则 AWS AppConfig 返回测试版体验的配置数据。如果上下文不包含账户 ID 或者账户 ID 以 123 以外的任意值结尾，则会 AWS AppConfig 返回默认规则的配置数据，这意味着用户在生产环境中查看当前的体验。

**注意**  
有关检索多变体功能标志的信息，请参阅 [检索基本和多变体功能标志](appconfig-integration-retrieving-feature-flags.md)。

# 为多变体功能标志定义规则
<a name="appconfig-creating-multi-variant-feature-flags-rules-operators"></a>

变体规则是由一个或多个操作数和一个运算符组成的表达式。操作数是在规则评估期间使用的特定值。操作数的值可以是静态的，例如文本数字或字符串；也可以是变量，例如在上下文中找到的值或其它表达式的结果。运算符（例如“大于”）是应用于其操作数并产生值的测试或操作。变体规则表达式必须生成“true”或“false”才有效。

**操作数**


****  

| Type | 说明 | 示例 | 
| --- | --- | --- | 
|  字符串  |  UTF-8 字符序列，用双引号括起来。  |  <pre>"apple", "Ḽơᶉëᶆ ȋṕšᶙṁ"</pre>  | 
|  整数  |  64 位整数值。  |  <pre>-7, 42 </pre>  | 
|  浮点型  |  64 位 IEEE-754 浮点值。  |  <pre>3.14, 1.234e-5</pre>  | 
|  Timestamp  |  特定时刻，如 [W3C note on date and time formats](https://www.w3.org/TR/NOTE-datetime) 所述。  |  <pre>2012-03-04T05:06:07-08:00, 2024-01</pre>  | 
|  布尔值  |  True 或 false 值。  |  <pre>true, false</pre>  | 
|  上下文值  |  \$1 *key* 形式的参数化值，在规则评估期间从上下文中检索。  |  <pre>$country, $userId</pre>  | 

**比较运算符**


****  

| 运算符 | 描述 | 示例 | 
| --- | --- | --- | 
|  eq  |  确定上下文值是否等于给定值。  |  <pre>(eq $state "Virginia")</pre>  | 
|  gt  |  确定上下文值是否大于给定值。  |  <pre>(gt $age 65)</pre>  | 
|  gte  |  确定上下文值是否大于或等于给定值。  |  <pre>(gte $age 65)</pre>  | 
|  lt  |  确定上下文值是否小于给定值。  |  <pre>(lt $age 65)</pre>  | 
|  lte  |  确定上下文值是否小于或等于给定值。  |  <pre>(lte $age 65)</pre>  | 

**逻辑运算符**


****  

| 运算符 | 描述 | 示例 | 
| --- | --- | --- | 
|  and  |  确定两个操作数是否为 true。  |  <pre>(and <br />    (eq $state "Virginia") <br />    (gt $age 65)<br />)</pre>  | 
|  或者  |  确定是否至少有一个操作数为 true。  |  <pre>(or<br />    (eq $state "Virginia") <br />    (gt $age 65)<br />)</pre>  | 
|  not  |  反转表达式的值。  |  <pre>(not (eq $state "Virginia"))</pre>  | 

**自定义运算符**


****  

| 运算符 | 描述 | 示例 | 
| --- | --- | --- | 
|  begins\$1with  |  确定上下文值是否以给定前缀开头。  |  <pre>(begins_with $state "A")</pre>  | 
|  ends\$1with  |  确定上下文值是否以给定前缀结尾。  |  <pre>(ends_with $email "amazon.com")</pre>  | 
|  contains  |  确定上下文值是否包含给定的子字符串。  |  <pre>(contains $promoCode "WIN")</pre>  | 
|  in  |  确定上下文值是否包含在常量列表中。  |  <pre>(in $userId ["123", "456"])</pre>  | 
|  matches  |  确定上下文值是否与给定的正则表达式模式匹配。  |  <pre>(matches in::$greeting pattern::"h.*y")</pre>  | 
|  exists  |  确定是否为上下文键提供了任何值。  |  <pre>(exists key::"country")</pre>  | 
|  split  |  根据所提供上下文值的一致哈希值，对于给定百分比的流量计算为 `true`。有关 `split` 工作原理的详细说明，请参阅本主题的下一节 [了解拆分运算符](appconfig-creating-multi-variant-feature-flags-rules.md#appconfig-creating-multi-variant-feature-flags-rules-operators-split)。 请注意，`seed` 是一个可选属性。如果您不指定 `seed`，则哈希值是*本地*一致的，这意味着该标志的流量将被一致地拆分，但接收相同上下文值的其它标志可能会以不同的方式拆分流量。如果提供了 `seed`，则每个唯一值都可以保证在功能标志、配置文件和 AWS 账户之间一致地拆分流量。  |  <pre>(split pct::10 by::$userId seed::"abc")</pre>  | 

## 了解拆分运算符
<a name="appconfig-creating-multi-variant-feature-flags-rules-operators-split"></a>

以下部分描述了 `split` 运算符在不同场景中使用时的行为。提醒一下，`split` 基于所提供上下文值的一致哈希，对给定百分比的流量评估为 `true`。为了更好地理解这一点，请考虑以下对两个变体使用拆分运算符的基准场景：

```
A: (split by::$uniqueId pct::20)
C: <no rule>
```

正常情况下，提供一组随机的 `uniqueId` 值会产生大致如下的分布：

```
A: 20%
C: 80%
```

如果您添加第三个变体，但使用与此相同的同一拆分百分比：

```
A: (split by::$uniqueId pct::20)
B: (split by::$uniqueId pct::20)
C: <default>
```

您将得到以下分布：

```
A: 20%
B: 0%
C: 80%
```

之所以发生这种可能意外的分布，是因为每个变体规则会按顺序评估，而第一个匹配项将决定返回的变体。当评估规则 A 时，20% 的 `uniqueId` 值与之匹配，因此返回第一个变体。接着，评估规则 B。然而，所有本应匹配第二个拆分语句的 `uniqueId` 值已由变体规则 A 匹配，因此没有与 B 匹配的值。此时，系统会返回默认变体。

现在考虑第三个例子。

```
A: (split by::$uniqueId pct::20)
B: (split by::$uniqueId pct::25)
C: <default>
```

如上一个示例所示，前 20% 的 `uniqueId` 值匹配规则 A。对于变体规则 B，本应匹配全部 `uniqueId` 值中的 25%，但其中大部分先前已匹配规则 A，这样就给变体 B 留下总量的 5%，而其余部分接收变体 C。分布情况如下所示：

```
A: 20%
B: 5%
C: 75%
```

**使用 `seed` 属性**  
您可以使用 `seed` 属性来确保对于给定的上下文值，无论拆分运算符在何处使用，流量拆分都能保持一致。如果您不指定 `seed`，则哈希值是*本地*一致的，这意味着该标志的流量将被一致地拆分，但接收相同上下文值的其它标志可能会以不同的方式拆分流量。如果提供了 `seed`，则每个唯一值都可以保证在功能标志、配置文件和 AWS 账户之间一致地拆分流量。

通常，客户在对同一上下文属性进行流量拆分时会在一个标志内的各个变体之间使用相同的 `seed` 值。然而，有时使用不同的种子值可能更有意义。以下是一个对规则 A 和 B 使用不同种子值的示例：

```
A: (split by::$uniqueId pct::20 seed::"seed_one")
B: (split by::$uniqueId pct::25 seed::"seed_two")
C: <default>
```

如前所述，20% 的匹配 `uniqueId` 值匹配规则 A。这意味着 80% 的值会落入后续流程，并针对变体规则 B 进行测试。由于种子值不同，匹配 A 的值与匹配 B 的值之间没有关联。然而，此时仅剩下 80% 的 `uniqueId` 值用于拆分，其中 25% 匹配规则 B，75% 不匹配。最终计算出以下分布：

```
A: 20%
B: 20% (25% of what falls through from A, or 25% of 80%) 
C: 60%
```

# 创建多变体功能标志
<a name="appconfig-creating-multi-variant-feature-flags-procedures"></a>

使用本节中的过程创建功能标志的变体。

**开始前的准备工作**  
请注意以下重要信息。
+ 可以通过编辑现有功能标志来创建其变体。*创建新的配置文件时*，无法创建新功能标志的变体。首先必须完成创建新配置文件的工作流程。创建配置文件后，可以向配置文件中的任何标志添加变体。有关如何创建新的配置文件的信息，请参阅[在中创建功能标志配置文件 AWS AppConfig](appconfig-creating-configuration-and-profile-feature-flags.md)。
+ 要检索亚马逊 EC2、Amazon ECS 和 Amazon EKS 计算平台的功能标志变体数据，必须使用 AWS AppConfig 代理版本 2.0.4416 或更高版本。
+ 出于性能原因 AWS CLI ，SDK 调用时 AWS AppConfig 不要检索变体数据。有关 AWS AppConfig Agent 的更多信息，请参阅[如何使用 AWS AppConfig 代理检索配置数据](appconfig-agent-how-to-use.md)。
+ 在创建功能标志变体时，可以为其指定规则。规则是将请求上下文作为输入并生成布尔结果作为输出的表达式。在创建变体之前，请查看标志变体规则支持的操作数和运算符。可以在创建变体之前创建规则。有关更多信息，请参阅 [了解多变体功能标志规则](appconfig-creating-multi-variant-feature-flags-rules.md)。

**Topics**
+ [

## 创建多变体功能标志（控制台）
](#appconfig-creating-multi-variant-feature-flags-procedures-console)
+ [

## 创建多变体功能标志（命令行）
](#appconfig-creating-multi-variant-feature-flags-procedures-commandline)

## 创建多变体功能标志（控制台）
<a name="appconfig-creating-multi-variant-feature-flags-procedures-console"></a>

以下过程介绍如何使用 AWS AppConfig 控制台为现有配置文件创建多变体功能标志。也可以编辑现有功能标志来创建变体。

**创建多变体功能标志**

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

1. 在导航窗格中，选择**应用程序**，然后选择一个应用程序。

1. 在**配置文件和功能标志**选项卡上，选择现有的功能标志配置文件。

1. 在**标志**部分中，选择**添加新标志**。

1. 在**功能标志定义**部分中，对于**标志名称**输入名称。

1. 对于**标志键**，输入一个标志标识符来区分同一配置文件中的标志。相同配置文件中的标志不能具有相同的键。创建标志后，可以编辑标志名称，但不能编辑标志键。

1. （可选）在**描述**字段中，输入有关此标志的信息。

1. 在**变体**部分中，选择**多变体标志**。

1. （可选）在**功能标志属性**部分中，选择**定义属性**。属性使您能够在标志中提供其他值。有关属性和约束的更多信息，请参阅[了解功能标志属性](appconfig-creating-configuration-and-profile-feature-flags.md#appconfig-creating-configuration-profile-feature-flag-attributes)。

   1. 对于**键**，指定一个标志键并从**类型**列表中选择其类型。有关**值**和**约束**字段支持的选项的信息，请参阅前面引用的有关属性的部分。

   1. 选择**必需值**以指定属性值是否为必需值。

   1. 选择**定义属性**来添加其它属性。

   1. 选择**应用**以保存属性更改。

1. 在**功能标志变体**部分中，选择**创建变体**。

   1. 对于**变体名称**，输入名称。

   1. 使用**已启用值**开关来启用该变体。

   1. 在**规则**文本框中，输入规则。

   1. 使用**创建变体** > **在上面创建变体**或**在下面创建变体**选项，来为该标志创建其它变体。

   1. 在**默认变体**部分中，使用**已启用值**开关来启用默认变体。（可选）为在步骤 10 中定义的属性提供值。

   1. 选择**应用**。

1. 验证标志及其变体的详细信息，然后选择**创建标志**。

有关部署带有变体的新功能标志的信息，请参阅[在中部署功能标志和配置数据 AWS AppConfig](deploying-feature-flags.md)。

## 创建多变体功能标志（命令行）
<a name="appconfig-creating-multi-variant-feature-flags-procedures-commandline"></a>

以下过程介绍如何使用 AWS Command Line Interface （在 Linux 或 Windows 上）或适用于 Windows PowerShell 的工具为现有配置文件创建多变体功能标志。也可以编辑现有功能标志来创建变体。

**开始前的准备工作**  
在使用 AWS CLI创建多变体功能标志之前，请完成以下任务。
+ 创建功能标志配置文件。有关更多信息，请参阅 [在中创建功能标志配置文件 AWS AppConfig](appconfig-creating-configuration-and-profile-feature-flags.md)。
+ 更新到 AWS CLI的最新版本。有关更多信息，请参阅《AWS Command Line Interface 用户指南》**中的 [Install or update to the latest version of the AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html)。

**创建多变体功能标志**

1. 在本地计算机上创建配置文件，该配置文件将指定要创建的多变体标志的详细信息。使用 `.json` 文件扩展名保存该文件。该文件必须符合 [https://docs.aws.amazon.com/appconfig/latest/userguide/appconfig-type-reference-feature-flags.html](https://docs.aws.amazon.com/appconfig/latest/userguide/appconfig-type-reference-feature-flags.html) JSON 架构。配置文件的架构内容将类似于以下内容。

   ```
   {
     "flags": {
       "FLAG_NAME": {
         "attributes": {
             "ATTRIBUTE_NAME": {
             "constraints": {
               "type": "CONSTRAINT_TYPE"
             }
           }
         },
         "description": "FLAG_DESCRIPTION",
         "name": "VARIANT_NAME"
       }
     },
     "values": {
       "VARIANT_VALUE_NAME": {
         "_variants": [
           {
             "attributeValues": {
               "ATTRIBUTE_NAME": BOOLEAN
             },
             "enabled": BOOLEAN,
             "name": "VARIANT_NAME",
             "rule": "VARIANT_RULE"
           },
           {
             "attributeValues": {
               "ATTRIBUTE_NAME": BOOLEAN
             },
             "enabled": BOOLEAN,
             "name": "VARIANT_NAME",
             "rule": "VARIANT_RULE"
           },
           {
             "attributeValues": {
               "ATTRIBUTE_NAME": BOOLEAN
             },
             "enabled": BOOLEAN,
             "name": "VARIANT_NAME",
             "rule": "VARIANT_RULE"
           },
           {
             "attributeValues": {
               "ATTRIBUTE_NAME": BOOLEAN
             },
             "enabled": BOOLEAN,
             "name": "VARIANT_NAME",
             "rule": "VARIANT_RULE"
           }
         ]
       }
     },
     "version": "VERSION_NUMBER"
   }
   ```

   以下是包含三个变体和默认变体的示例。

   ```
   {
     "flags": {
       "ui_refresh": {
         "attributes": {
           "dark_mode_support": {
             "constraints": {
               "type": "boolean"
             }
           }
         },
         "description": "A release flag used to release a new UI",
         "name": "UI Refresh"
       }
     },
     "values": {
       "ui_refresh": {
         "_variants": [
           {
             "attributeValues": {
               "dark_mode_support": true
             },
             "enabled": true,
             "name": "QA",
             "rule": "(ends_with $email \"qa-testers.mycompany.com\")"
           },
           {
             "attributeValues": {
               "dark_mode_support": true
             },
             "enabled": true,
             "name": "Beta Testers",
             "rule": "(exists key::\"opted_in_to_beta\")"
           },
           {
             "attributeValues": {
               "dark_mode_support": false
             },
             "enabled": true,
             "name": "Sample Population",
             "rule": "(split pct::10 by::$email)"
           },
           {
             "attributeValues": {
               "dark_mode_support": false
             },
             "enabled": false,
             "name": "Default Variant"
           }
         ]
       }
     },
     "version": "1"
   }
   ```

1. 使用 `CreateHostedConfigurationVersion` API 将功能标志配置数据保存到 AWS AppConfig。

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

   ```
   aws appconfig create-hosted-configuration-version \
     --application-id APPLICATION_ID \
     --configuration-profile-id CONFIGURATION_PROFILE_ID \
     --content-type "application/json" \
     --content file://path/to/feature_flag_configuration_data.json \
     --cli-binary-format raw-in-base64-out \
     outfile
   ```

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

   ```
   aws appconfig create-hosted-configuration-version ^
     --application-id APPLICATION_ID ^
     --configuration-profile-id CONFIGURATION_PROFILE_ID ^
     --content-type "application/json" ^
     --content file://path/to/feature_flag_configuration_data.json ^
     --cli-binary-format raw-in-base64-out ^
     outfile
   ```

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

   ```
   New-APPCHostedConfigurationVersion `
     -ApplicationId APPLICATION_ID `
     -ConfigurationProfileId CONFIGURATION_PROFILE_ID `
     -ContentType "application/json" `
     -Content file://path/to/feature_flag_configuration_data.json `
     -Raw
   ```

------

   `service_returned_content_file`包含您的配置数据，其中包括一些 AWS AppConfig 生成的元数据。
**注意**  
创建托管配置版本时，请 AWS AppConfig 验证您的数据是否符合 [https://docs.aws.amazon.com/appconfig/latest/userguide/appconfig-type-reference-feature-flags.html](https://docs.aws.amazon.com/appconfig/latest/userguide/appconfig-type-reference-feature-flags.html)JSON 架构。 AWS AppConfig 此外，还会验证数据中的每个要素标志属性是否满足您为这些属性定义的约束条件。

# 了解 AWS.AppConfig.FeatureFlags 的类型参考
<a name="appconfig-type-reference-feature-flags"></a>

使用 `AWS.AppConfig.FeatureFlags` JSON 架构作为参考来创建功能标志配置数据。

```
{
  "$schema": "http://json-schema.org/draft-07/schema#",
  "definitions": {
    "flagSetDefinition": {
      "type": "object",
      "properties": {
        "version": {
          "$ref": "#/definitions/flagSchemaVersions"
        },
        "flags": {
          "$ref": "#/definitions/flagDefinitions"
        },
        "values": {
          "$ref": "#/definitions/flagValues"
        }
      },
      "required": ["version"],
      "additionalProperties": false
    },
    "flagDefinitions": {
      "type": "object",
      "patternProperties": {
        "^[a-z][a-zA-Z\\d_-]{0,63}$": {
          "$ref": "#/definitions/flagDefinition"
        }
      },
      "additionalProperties": false
    },
    "flagDefinition": {
      "type": "object",
      "properties": {
        "name": {
          "$ref": "#/definitions/customerDefinedName"
        },
        "description": {
          "$ref": "#/definitions/customerDefinedDescription"
        },
        "_createdAt": {
          "type": "string"
        },
        "_updatedAt": {
          "type": "string"
        },
        "_deprecation": {
          "type": "object",
          "properties": {
            "status": {
              "type": "string",
              "enum": ["planned"]
            },
            "date": {
              "type": "string",
              "format": "date"
            }
          },
         "additionalProperties": false
        },
        "attributes": {
          "$ref": "#/definitions/attributeDefinitions"
        }
      },
      "additionalProperties": false
    },
    "attributeDefinitions": {
      "type": "object",
      "patternProperties": {
        "^[a-z][a-zA-Z\\d_-]{0,63}$": {
          "$ref": "#/definitions/attributeDefinition"
        }
      },
      "maxProperties": 25,
      "additionalProperties": false
    },
    "attributeDefinition": {
      "type": "object",
      "properties": {
        "description": {
          "$ref": "#/definitions/customerDefinedDescription"
        },
        "constraints": {
          "oneOf": [
            { "$ref": "#/definitions/numberConstraints" },
            { "$ref": "#/definitions/stringConstraints" },
            { "$ref": "#/definitions/arrayConstraints" },
            { "$ref": "#/definitions/boolConstraints" }
          ]
        }
      },
      "additionalProperties": false
    },
    "flagValues": {
      "type": "object",
      "patternProperties": {
        "^[a-z][a-zA-Z\\d_-]{0,63}$": {
          "$ref": "#/definitions/flagValue"
        }
      },
      "additionalProperties": false
    },
    "flagValue": {
      "type": "object",
      "properties": {
        "enabled": {
          "type": "boolean"
        },
        "_createdAt": {
          "type": "string"
        },
        "_updatedAt": {
          "type": "string"
        },
        "_variants": {
          "type": "array",
          "maxLength": 32,
          "items": {
            "$ref": "#/definitions/variant"
          }
        }
      },
      "patternProperties": {
        "^[a-z][a-zA-Z\\d_-]{0,63}$": {
          "$ref": "#/definitions/attributeValue",
          "maxProperties": 25
        }
      },
      "additionalProperties": false
    },
    "attributeValue": {
      "oneOf": [
        { "type": "string", "maxLength": 1024 },
        { "type": "number" },
        { "type": "boolean" },
        {
          "type": "array",
          "oneOf": [
            {
              "items": {
                "type": "string",
                "maxLength": 1024
              }
            },
            {
              "items": {
                "type": "number"
              }
            }
          ]
        }
      ],
      "additionalProperties": false
    },
    "stringConstraints": {
      "type": "object",
      "properties": {
        "type": {
          "type": "string",
          "enum": ["string"]
        },
        "required": {
          "type": "boolean"
        },
        "pattern": {
          "type": "string",
          "maxLength": 1024
        },
        "enum": {
          "type": "array",
          "maxLength": 100,
          "items": {
            "oneOf": [
              {
                "type": "string",
                "maxLength": 1024
              },
              {
                "type": "integer"
              }
            ]
          }
        }
      },
      "required": ["type"],
      "not": {
        "required": ["pattern", "enum"]
      },
      "additionalProperties": false
    },
    "numberConstraints": {
      "type": "object",
      "properties": {
        "type": {
          "type": "string",
          "enum": ["number"]
        },
        "required": {
          "type": "boolean"
        },
        "minimum": {
          "type": "integer"
        },
        "maximum": {
          "type": "integer"
        }
      },
      "required": ["type"],
      "additionalProperties": false
    },
    "arrayConstraints": {
      "type": "object",
      "properties": {
        "type": {
          "type": "string",
          "enum": ["array"]
        },
        "required": {
          "type": "boolean"
        },
        "elements": {
          "$ref": "#/definitions/elementConstraints"
        }
      },
      "required": ["type"],
      "additionalProperties": false
    },
    "boolConstraints": {
      "type": "object",
      "properties": {
        "type": {
          "type": "string",
          "enum": ["boolean"]
        },
        "required": {
          "type": "boolean"
        }
      },
      "required": ["type"],
      "additionalProperties": false
    },
    "elementConstraints": {
      "oneOf": [
        { "$ref": "#/definitions/numberConstraints" },
        { "$ref": "#/definitions/stringConstraints" }
      ]
    },
    "variant": {
      "type": "object",
      "properties": {
        "enabled": {
          "type": "boolean"
        },
        "name": {
          "$ref": "#/definitions/customerDefinedName"
        },
        "rule": {
          "type": "string",
          "maxLength": 16384
        },
        "attributeValues": {
          "type": "object", 
          "patternProperties": {
            "^[a-z][a-zA-Z\\d_-]{0,63}$": {
              "$ref": "#/definitions/attributeValue"
            }
          },
          "maxProperties": 25,
          "additionalProperties": false
        }
      },
      "required": ["name", "enabled"],
      "additionalProperties": false
    },
    "customerDefinedName": {
      "type": "string",
      "pattern": "^[^\\n]{1,64}$"
    },
    "customerDefinedDescription": {
      "type": "string",
      "maxLength": 1024
    },
    "flagSchemaVersions": {
      "type": "string",
      "enum": ["1"]
    }
  },
  "type": "object",
  "$ref": "#/definitions/flagSetDefinition",
  "additionalProperties": false
}
```

**重要**  
若要检索功能标志配置数据，应用程序必须调用 `GetLatestConfiguration` API。无法通过调用 `GetConfiguration` 来检索功能标志配置数据，该数据已弃用。有关更多信息，请参阅《AWS AppConfig API Reference》**中的 [GetLatestConfiguration](https://docs.aws.amazon.com/appconfig/2019-10-09/APIReference/API_GetLatestConfiguration.html)。

当您的应用程序调用[GetLatestConfiguration](https://docs.aws.amazon.com/appconfig/2019-10-09/APIReference/API_GetLatestConfiguration.html)并收到新部署的配置时，定义您的功能标志和属性的信息将被删除。简化的 JSON 包含与您指定的每个标志键匹配的键映射。简化的 JSON 还包含 `enabled` 属性的 `true` 或 `false` 映射值。如果标志将 `enabled` 设置为 `true`，则该标志的任何属性也将存在。以下 JSON 架构描述了 JSON 输出的格式。

```
{
  "$schema": "http://json-schema.org/draft-07/schema#",
  "type": "object",
  "patternProperties": {
    "^[a-z][a-zA-Z\\d_-]{0,63}$": {
      "$ref": "#/definitions/attributeValuesMap"
    }
  },
  "additionalProperties": false,
  "definitions": {
    "attributeValuesMap": {
      "type": "object",
      "properties": {
        "enabled": {
          "type": "boolean"
        }
      },
      "required": ["enabled"],
      "patternProperties": {
        "^[a-z][a-zA-Z\\d_-]{0,63}$": {
          "$ref": "#/definitions/attributeValue"
        }
      },
      "maxProperties": 25,
      "additionalProperties": false
    },
    "attributeValue": {
      "oneOf": [
        { "type": "string","maxLength": 1024 },
        { "type": "number" },
        { "type": "boolean" },
        {
          "type": "array",
          "oneOf": [
            {
              "items": {
                "oneOf": [
                  {
                    "type": "string",
                    "maxLength": 1024
                  }
                ]
              }
            },
            {
              "items": {
                "oneOf": [
                  {
                    "type": "number"
                  }
                ]
              }
            }
          ]
        }
      ],
      "additionalProperties": false
    }
  }
}
```

# 将先前的功能标志版本保存为新版本
<a name="appconfig-creating-configuration-profile-feature-flags-editing-version"></a>

更新功能标志时， AWS AppConfig 会自动将更改保存到新版本。如果要使用先前的功能标志版本，必须将其复制到草稿版本，然后保存。您无法编辑先前的标志版本并保存更改，除非将其另存为新版本。

**编辑先前的功能标志版本并将其保存为新版本**

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

1. 在导航窗格中，选择**应用程序**，然后选择包含要编辑并保存为新版本的功能标志的应用程序。

1. 在**配置配置文件和功能标志**选项卡上，选择包含要编辑并保存为新版本的功能标志的配置配置文件。

1. 在**功能标志**选项卡上，使用**版本**列表选择要编辑并保存为新版本的版本。

1. 选择**复制到草稿版本**。

1. 在**版本标签**字段中，输入新标签（可选，但建议）。

1. 在**版本描述**字段中，输入新描述（可选，但建议）。

1. 选择**保存版本**。

1. 选择**开始部署**以部署新版本。

# 在中创建自由表单配置文件 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)。

# 为非原生数据来源创建配置配置文件
<a name="appconfig-creating-configuration-profile-other-data-sources"></a>

AWS AppConfig 支持从大多数数据存储中部署配置数据。原生支持方面， AWS AppConfig 支持部署存储在以下服务中的配置数据：
+  AWS AppConfig 托管的配置存储
+ Amazon S3
+ AWS Secrets Manager
+ AWS Systems Manager 参数存储
+ Systems Manager 文档存储
+ AWS CodePipeline

如果您的配置数据存储在原生不支持的位置 AWS AppConfig，则可以创建一个[AWS AppConfig 扩展程序](https://docs.aws.amazon.com/appconfig/latest/userguide/working-with-appconfig-extensions.html)来从其源中检索数据。例如，通过使用 AWS AppConfig 扩展，您可以检索存储在亚马逊关系数据库服务 (Amazon RDS)、亚马逊 DynamoDB (DynamoDB GitHub) 或本地存储库中的配置数据 GitLab，仅举几例。通过实施扩展，您可以利用应用程序和计算环境 AWS AppConfig 的安全性和 DevOps 增强功能。在将配置数据从遗留系统迁移到 AWS AppConfig时，您也可以使用此方法。

为 AWS AppConfig 中非原生支持的数据来源创建配置配置文件涉及以下过程或操作：

1. 创建一个 [AWS Lambda 函数](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html)，用于从您的数据来源获取数据。只要 Lambda 函数可以访问数据源，您的 AWS AppConfig 扩展程序就可以检索数据。

1. 创建用于调用您的 Lambda 函数的自定义 AWS AppConfig 扩展。有关更多信息，请参阅 [演练：创建自定义扩展 AWS AppConfig](working-with-appconfig-extensions-creating-custom.md)。

1. 创建 AWS AppConfig 自由格式的配置文件。具体来说，创建一个使用 **AWS AppConfig 托管配置**定义的配置配置文件。配置配置文件在您的 Lambda 函数从源检索配置后充当临时数据存储。您的应用程序将从 AWS AppConfig 托管配置存储中检索配置数据。有关更多信息，请参阅 [在中创建自由表单配置文件 AWS AppConfig](appconfig-free-form-configurations-creating.md)。

1. 创建一个扩展关联，使用 `PRE_CREATE_HOSTED_CONFIGURATION_VERSION` 操作点触发。有关更多信息，请参阅 [步骤 4：为自定义扩展程序创建 AWS AppConfig 扩展关联](working-with-appconfig-extensions-creating-custom-association.md)。

一旦配置完成，当您的应用程序请求新版本的配置数据时，Lambda 会获取您的配置数据并将其拉入配置配置文件。 AWS AppConfig 然后保存配置配置文件和您的第三方数据。

当您准备好时，您可以将配置配置文件部署到您的应用程序，就像任何其他类型的配置数据一样。

**注意**  
您可以选择将第三方数据插入到现有配置数据中，或者使配置数据的全部内容仅包含第三方数据。如果您希望数据与其他现有数据一致，该逻辑应作为从第三方源导入数据的 Lambda 函数的一部分。

## AWS AppConfig 从传统和本土配置服务迁移到本土配置服务
<a name="appconfig-creating-configuration-profile-other-data-sources-migrating"></a>

如果您已开始使用 AWS AppConfig 旧版配置数据或功能标志，但仍有其他系统中的旧配置数据或功能标志，则可以使用本主题前面所述的过程从旧系统迁移到旧系统上 AWS AppConfig。你可以构建一个扩展程序，将数据从旧系统中提取出来并通过它进行部署。 AWS AppConfig以这种 AWS AppConfig 方式使用可以为你提供所有的安全护栏控制和好处，同时仍然使用你的传统数据存储。