

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

# 에서 구성 프로필 생성 AWS AppConfig
<a name="appconfig-creating-configuration-profile"></a>

*구성 데이터*는 애플리케이션의 동작에 영향을 미치는 설정 모음입니다. *구성 프로파일*에는 무엇보다도가 저장된 위치에서 구성 데이터를 AWS AppConfig 찾을 수 있는 URI와 구성 유형이 포함됩니다.는 다음과 같은 유형의 구성 프로파일을 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/ko_kr/appconfig/latest/userguide/images/appconfig-flag-attributes.png)


**참고**  
플래그 속성에 대해 다음 사항에 유의하세요.  
속성 이름에서, “활성화”라는 단어는 예약어입니다. “활성화”라는 기능 플래그 속성은 생성할 수 없습니다. 다른 예약어는 없습니다.
기능 플래그의 속성은 해당 플래그가 활성화된 경우에만 `GetLatestConfiguration` 응답에 포함됩니다.
지정된 플래그의 플래그 속성 키는 고유해야 합니다.

AWS AppConfig 는 다음과 같은 유형의 플래그 속성과 해당 제약 조건을 지원합니다.

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/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) 또는 Tools for Windows PowerShell을 사용하여 AWS AppConfig 기능 플래그 구성 프로필을 생성하는 방법을 설명합니다. 구성 프로필을 생성할 때 기본 기능 플래그를 생성할 수도 있습니다.

**기능 플래그 구성을 생성하려면**

1. 를 엽니다 AWS CLI.

1. **유형**을 `AWS.AppConfig.FeatureFlags`로 지정하여 기능 플래그 구성 프로필을 생성합니다. 구성 프로필은 위치 URI에 대해 `hosted`을 사용해야 합니다.

------
#### [ 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.FeatureFlags` JSON 스키마를 준수하는지 AWS AppConfig 확인합니다.는 데이터의 각 기능 플래그 속성이 해당 속성에 대해 정의한 제약 조건을 충족하는지 AWS AppConfig 추가로 검증합니다.

# 다중 변형 기능 플래그 생성
<a name="appconfig-creating-multi-variant-feature-flags"></a>

기능 플래그 변형을 사용하면 요청에 대해 반환할 수 있는 플래그 값 세트를 정의할 수 있습니다. 다중 변형 플래그에 대해 다양한 상태(활성화 또는 비활성화)를 구성할 수도 있습니다. 변형으로 구성된 플래그를 요청할 때 애플리케이션은 사용자 정의 규칙 세트를 기준으로 AWS AppConfig 평가하는 컨텍스트를 제공합니다. 요청에 지정된 컨텍스트와 변형에 대해 정의된 규칙에 따라는 애플리케이션에 다른 플래그 값을 AWS AppConfig 반환합니다.

다음 스크린샷은 세 가지 사용자 정의 변형과 기본 변형이 있는 기능 플래그의 예를 보여줍니다.

![\[변형이 있는 기능 플래그의 스크린샷 예시입니다.\]](http://docs.aws.amazon.com/ko_kr/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 반환됩니다.
+ **컨텍스트**: 구성 검색 시 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 새로 고침*이라는 새로운 기능 플래그 구성 프로필을 생성합니다.

1. *ui\$1refresh*라는 새로운 기능 플래그를 생성합니다.

1. 기능 플래그를 생성한 후 편집하여 변형을 추가합니다.

1. *BetaUsers*라는 새 변형을 생성하고 활성화합니다.

1. 요청 컨텍스트의 계정 ID가 새 베타 환경을 보도록 승인된 계정 ID 목록에 있는 경우 변형을 선택하는 *BetaUsers*에 대한 규칙을 정의합니다.

1. 기본 변형의 상태가 **비활성화**로 설정되어 있는지 확인합니다.

**참고**  
변형은 콘솔에 정의된 순서에 따라 정렬된 목록으로 평가됩니다. 목록 맨 위에 있는 변형이 먼저 평가됩니다. 제공된 컨텍스트와 일치하는 규칙이 없는 경우는 기본 변형을 AWS AppConfig 반환합니다.

가 기능 플래그 요청을 AWS AppConfig 처리할 때 AccountID(이 예제의 경우)를 먼저 포함하는 제공된 컨텍스트를 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>  | 
|  Integer  |  64비트 정수 값입니다.  |  <pre>-7, 42 </pre>  | 
|  Float  |  64비트 IEEE-754 부동 소수점 값입니다.  |  <pre>3.14, 1.234e-5</pre>  | 
|  타임스탬프  |  [날짜 및 시간 형식에 대한 W3C 노트](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>  | 
|  or  |  피연산자 중 하나 이상이 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` 작동 방식에 대한 자세한 설명은 이 주제의 다음 섹션인 [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>  | 

## split 연산자 이해
<a name="appconfig-creating-multi-variant-feature-flags-rules-operators-split"></a>

다음 섹션에서는 다양한 시나리오에서 사용 시 `split` 연산자의 동작 방식을 설명합니다. 참고로, `split`은 제공된 콘텍스트 값의 일관된 해시를 기준으로 지정된 비율만큼의 트래픽을 `true`로 평가합니다. 이를 더 잘 이해하기 위해 두 개의 변형으로 split 연산자를 사용하는 다음 기준 시나리오를 살펴봅니다.

```
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를 평가하면 `uniqueId` 값의 20%가 일치하므로 첫 번째 변형이 반환됩니다. 다음으로 규칙 B가 평가됩니다. 그러나 두 번째 분할 명령문과 일치를 이루는 모든 `uniqueId` 값은 변형 규칙 A와 이미 일치했으므로 B에는 아무 값도 일치하지 않습니다. 대신 남은 기본 변형이 반환됩니다.

이제 세 번째 예를 살펴보겠습니다.

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

앞의 예시와 마찬가지로 `uniqueId` 값의 처음 20%는 규칙 A와 일치합니다. 변형 규칙 B의 경우 모든 `uniqueId` 값의 25%가 일치하지만 이 중 대부분은 이미 규칙 A와 일치된 값입니다. 결과적으로 전체 값 중 5%만이 변형 B와 일치하게 되고, 나머지는 변형 C가 받게 됩니다. 결과 분포는 다음과 같습니다.

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

**`seed` 속성 사용**  
`seed` 속성을 사용하면 split 연산자가 사용되는 위치에 관계없이 지정된 콘텍스트 값에 대해 트래픽이 일관되게 분할되도록 할 수 있습니다. `seed`를 지정하지 않으면 해시는 *로컬에서* 일관되게 동작하므로 해당 플래그에 대해서는 트래픽이 일관되게 분할됩니다. 그러나 동일한 컨텍스트 값을 수신하는 다른 플래그의 경우 트래픽이 다르게 분할될 수 있습니다. `seed`를 제공하면 각 고유 값은 기능 플래그, 구성 프로파일 및 AWS 계정계정 전반에 걸쳐 트래픽을 일관되게 분할할 수 있습니다.

일반적으로 고객은 동일한 콘텍스트 속성에서 트래픽을 분할할 때 하나의 플래그 안에서 모든 변형 간에 동일한 `seed` 값을 사용합니다. 그러나 상황에 따라 다른 seed 값을 사용하는 것이 더 합리적일 수 있습니다. 다음은 규칙 A와 B에서 서로 다른 seed를 사용하는 예제입니다.

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

앞에서와 마찬가지로, 일치하는 `uniqueId` 값의 20%가 규칙 A와 일치합니다. 따라서 값의 나머지 80%는 변형 규칙 B로 넘어와 테스트됩니다. 여기서 seed가 다르기 때문에 A와 일치하는 값과 B와 일치하는 값 간에는 상관관계가 없습니다. 그러나 일치 규칙 B의 25%로 분할할 수 있는 `uniqueId` 값은 원래의 80%에 불과하므로 결과는 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) 단원을 참조하세요.
+ Amazon EC2, Amazon ECS 및 Amazon EKS 컴퓨팅 플랫폼에 대한 기능 플래그 변형 데이터를 검색하려면 AWS AppConfig 에이전트 버전 2.0.4416 이상을 사용해야 합니다.
+ 성능상의 이유로 AWS CLI 및 SDK는 변형 데이터를 검색 AWS AppConfig 하지 않도록를 호출합니다. AWS AppConfig 에이전트에 대한 자세한 내용은 섹션을 참조하세요[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) 또는 Tools for Windows PowerShell을 사용하여 기존 구성 프로파일에 대한 다중 변형 기능 플래그를 생성하는 방법을 설명합니다. 기존 기능 플래그를 편집하여 변형을 생성할 수도 있습니다.

**시작하기 전 준비 사항**  
 AWS CLI를 사용하여 다중 변형 기능 플래그를 생성하기 전에 다음 작업을 완료합니다.
+ 기능 플래그 구성 프로필을 생성합니다. 자세한 내용은 [에서 기능 플래그 구성 프로필 생성 AWS AppConfig](appconfig-creating-configuration-and-profile-feature-flags.md) 단원을 참조하십시오.
+  AWS CLI의 최신 버전으로 업데이트합니다. 자세한 내용은 *AWS Command Line Interface 사용 설명서*에서 [최신 버전의 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 생성된 메타데이터가 포함된 구성 데이터가 포함되어 있습니다.
**참고**  
호스팅 구성 버전을 생성할 때는 데이터가 [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 또한는 데이터의 각 기능 플래그 속성이 해당 속성에 대해 정의한 제약 조건을 충족하는지 확인합니다.

# 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 참조*의 [GetRelationalDatabase](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>

*구성 데이터*는 애플리케이션의 동작에 영향을 미치는 설정 모음입니다. *구성 프로파일*에는 무엇보다도가 저장된 위치에서 구성 데이터를 AWS AppConfig 찾을 수 있는 URI와 구성 유형이 포함됩니다. 자유 형식 구성 프로파일을 사용하면 AWS AppConfig 호스팅 구성 저장소 또는 다음 AWS 서비스 및 Systems Manager 도구에 데이터를 저장할 수 있습니다.


****  

| Location | 지원되는 파일 형식 | 
| --- | --- | 
|  AWS AppConfig 호스팅 구성 스토어  |  를 사용하여 추가된 경우 YAML, JSON 및 텍스트입니다 AWS Management Console. 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 콘솔을 사용하여 자유 형식 구성을 생성할 수 있습니다. 이 프로세스는 이 주제의 뒷부분에서 설명합니다.

파라미터 스토어, 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 스키마**: 자유 형식 구성에 대해 지원됩니다. (는 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 서비스에 대한 함수 액세스 권한 부여](https://docs.aws.amazon.com/lambda/latest/dg/access-control-resource-based.html#permissions-resource-serviceinvoke)를 참조하세요. 시작 지연 시간을 포함하여 검증 Lambda 실행 시간을 15초로 AWS AppConfig 제한합니다.

## 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 파라미터 구성 또는 업데이트된 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 Document 저장소 | AWS CodePipeline | 
| --- | --- | --- | --- | --- | --- | --- | 
|  **구성 크기 제한**  | 2MB(기본값), 4MB(최대값) |  2MB S3가 AWS AppConfig아닌에서 적용  |  4KB(프리 티어)/8KB(고급 파라미터)  | 64KB |  64KB  | 2MBCodePipeline이 AWS AppConfig아닌에서 적용 | 
|  **리소스 스토리지 제한**  | 1GB |  무제한  |  10,000개 파라미터(프리 티어)/100,000개 파라미터(고급 파라미터)  | 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 에는 내부 또는 호스팅 구성 저장소가 포함되어 있습니다. 구성은 2MB 이하여야 합니다. AWS AppConfig 호스팅 구성 스토어는 다른 구성 스토어 옵션에 비해 다음과 같은 이점을 제공합니다.
+ Amazon Simple Storage Service(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(S3) 버킷에 저장할 수 있습니다. 구성 프로필을 만들 때 URI를 버킷의 단일 S3 객체에 지정합니다. 또한 객체를 가져올 수 있는 권한을 부여하는 AWS AppConfig (IAM) 역할의 Amazon 리소스 이름 AWS Identity and Access Management (ARN)을 지정합니다. Amazon S3 객체에 대한 구성 프로필을 만들기 전에 다음 제한 사항에 유의하십시오.


****  

| 제한 | 세부 정보 | 
| --- | --- | 
|  용량  |  S3 객체로 저장된 구성의 용량은 최대 1MB입니다.  | 
|  객체 암호화  |  구성 프로필은 SSE-S3 및 SSE-KMS로 암호화된 객체를 대상으로 할 수 있습니다.  | 
|  스토리지 클래스  |  AWS AppConfig 는 `STANDARD`, , `INTELLIGENT_TIERING`, 및 S3 스토리지 클래스를 지원합니다`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

다음 절차를 완료하여가 S3 객체에 저장된 구성을 가져올 수 AWS AppConfig 있는 역할을 생성합니다.

**S3 객체 액세스를 위한 IAM 정책 생성**  
다음 절차에 따라가 S3 객체에 저장된 구성을 가져올 수 AWS AppConfig 있도록 하는 IAM 정책을 생성합니다.

**S3 객체 액세스를 위한 IAM 정책을 생성하려면**

1. [https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/)에서 IAM 콘솔을 엽니다.

1. 탐색 창에서 **정책**을 선택한 후 **정책 생성**을 선택합니다.

1. **정책 생성** 페이지에서 **JSON** 탭을 선택합니다.

1. 다음 샘플 정책을 S3 버킷 및 구성 객체에 대한 정보로 업데이트합니다. 그런 다음 **JSON** 탭의 텍스트 필드에 정책을 붙여 넣습니다. *자리 표시자*를 자신의 정보로 바꿉니다.

------
#### [ 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. **정책 검토** 페이지에서 **이름** 상자에 이름을 입력한 후 설명을 입력합니다.

1. **정책 생성**을 선택합니다. 그러면 **역할** 페이지로 돌아갑니다.

**S3 객체 액세스를 위한 IAM 역할 생성**  
다음 절차에 따라가 S3 객체에 저장된 구성을 가져올 수 AWS AppConfig 있는 IAM 역할을 생성합니다.

**Amazon S3 객체 액세스를 위한 IAM 역할을 생성하려면**

1. [https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/)에서 IAM 콘솔을 엽니다.

1. 탐색 창에서 **역할(Roles)**을 선택한 후 **역할 생성(Create role)**을 선택합니다.

1. **신뢰할 수 있는 유형의 엔터티 선택** 섹션에서 **AWS 서비스**를 선택합니다.

1. **사용 사례 선택** 섹션의 **일반 사용 사례**에서 **EC2**를 선택하고 **다음: 권한**을 선택합니다.

1. **권한 정책 연결** 페이지의 검색 상자에 이전 절차에서 만든 정책의 이름을 입력합니다.

1. 정책을 선택한 후 **다음: 태그**를 선택합니다.

1. **태그 추가(선택 사항)** 페이지에서 키와 선택적 값을 입력하고 **다음: 검토**를 선택합니다.

1. **검토** 페이지에서 **역할 이름** 필드에 이름을 입력한 후 설명을 입력합니다.

1. **역할 생성**을 선택합니다. 그러면 **역할** 페이지로 돌아갑니다.

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 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. 탐색 창에서 **애플리케이션**을 선택한 다음 [에서 애플리케이션의 네임스페이스 생성 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/ko_kr/appconfig/latest/userguide/appconfig-creating-free-form-configuration-and-profile-create-console.html)

1. **서비스 역할** 섹션에서 **새 서비스 역할을** 선택하여 구성 데이터에 대한 액세스를 제공하는 IAM 역할을 AWS AppConfig 생성합니다.는 이전에 입력한 **이름을 기반으로 역할** 이름 필드를 AWS AppConfig 자동으로 채웁니다. 또는 **기존 서비스 역할**을 선택합니다. **역할 ARN** 목록을 사용하여 역할을 선택합니다.

1. (선택 사항) **검사기 추가** 페이지에서 **JSON 스키마** 또는 **AWS Lambda**를 선택합니다. **JSON 스키마**를 선택하는 경우, 필드에 JSON 스키마를 입력합니다. **AWS Lambda**를 선택한 경우 목록에서 함수의 Amazon 리소스 이름(ARN)과 버전을 선택합니다.
**중요**  
SSM 문서에 저장된 구성 데이터는 시스템에 구성을 추가하기 전에 연결된 JSON 스키마에 대해 유효성을 검사해야 합니다. SSM 파라미터에는 검증 방법이 필요하지 않지만를 사용하여 새 SSM 파라미터 구성 또는 업데이트된 SSM 파라미터 구성에 대한 검증 검사를 생성하는 것이 좋습니다 AWS Lambda.

1. **다음**을 선택합니다.

1. **검토 및 저장** 페이지에서 **저장하고 계속 배포하기**를 선택합니다.

**중요**  
에 대한 구성 프로파일을 생성한 경우 AWS CodePipeline를 *배포 공급자* AWS AppConfig 로 지정하는 파이프라인을 CodePipeline에 생성해야 합니다. [에서 기능 플래그 및 구성 데이터 배포 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 AppConfig 자유 형식 구성 프로파일을 AWS Tools for PowerShell 생성하는 방법을 설명합니다. 원하는 경우 AWS CloudShell 를 사용하여 아래 나열된 명령을 실행할 수 있습니다. 자세한 내용은 * AWS CloudShell사용 설명서*의 [AWS CloudShell 이란?](https://docs.aws.amazon.com//cloudshell/latest/userguide/welcome.html)을 참조하세요.

**참고**  
 AWS AppConfig 호스팅된 구성 스토어에서 호스팅되는 자유 형식 구성의 경우 위치 URI`hosted`에를 지정합니다.

**를 사용하여 구성 프로파일을 생성하려면 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 AppConfig 로 지정하는 파이프라인을 CodePipeline에 생성 AWS CodePipeline해야 합니다. [에서 기능 플래그 및 구성 데이터 배포 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 세부 정보 및 샘플 명령을 보려면 명령 참조의 [create-hosted-configuration-version](https://docs.aws.amazon.com/cli/latest/reference/appconfig/create-hosted-configuration-version.html)을 *AWS CLI 참조*하세요.

[에서 기능 플래그 및 구성 데이터 배포 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 확장](https://docs.aws.amazon.com/appconfig/latest/userguide/working-with-appconfig-extensions.html)을 생성하여 소스에서 데이터를 검색할 AWS AppConfig수 있습니다. 예를 들어 AWS AppConfig 확장을 사용하면 Amazon Relational Database Service(Amazon RDS), Amazon 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 를 사용하면 레거시 데이터 스토어를 계속 사용하면서 모든 안전 가드레일 제어 및 이점을 얻을 수 있습니다.