

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

# 확장을 사용하여 AWS AppConfig 워크플로 확장
<a name="working-with-appconfig-extensions"></a>

확장은 구성을 생성하거나 배포하는 AWS AppConfig 워크플로 중에 여러 시점에 로직 또는 동작을 주입하는 기능을 강화합니다. 예를 들어 확장 작업을 사용하여 다음 유형의 작업을 수행할 수 있습니다.
+ 구성 프로파일이 배포되면 Amazon Simple Notification Service(SNS) 주제에 알림을 전송합니다.
+ 배포를 시작하기 전에 민감한 데이터의 구성 프로필 내용을 스크러빙합니다.
+ 기능 플래그가 변경될 때마다 Atlassian Jira 이슈를 생성하거나 업데이트합니다.
+ 배포를 시작할 때 서비스 또는 데이터 소스의 콘텐츠를 구성 데이터에 병합합니다.
+ 구성이 배포될 때마다 Amazon Simple Storage Service(S3) 버킷으로 구성을 백업합니다.

이러한 유형의 작업을 AWS AppConfig 애플리케이션, 환경 및 구성 프로필과 연결할 수 있습니다.

**Topics**
+ [AWS AppConfig 확장 이해](working-with-appconfig-extensions-about.md)
+ [AWS 작성된 확장 작업](working-with-appconfig-extensions-about-predefined.md)
+ [연습: 사용자 지정 AWS AppConfig 확장 생성](working-with-appconfig-extensions-creating-custom.md)

# AWS AppConfig 확장 이해
<a name="working-with-appconfig-extensions-about"></a>

이 주제에서는 AWS AppConfig 확장 개념과 용어를 소개합니다. 이 정보는 AWS AppConfig 확장을 설정하고 사용하는 데 필요한 각 단계의 컨텍스트에서 설명합니다.

**Topics**
+ [1단계: 확장으로 수행할 작업 결정](#working-with-appconfig-extensions-how-it-works-step-1)
+ [2단계: 확장 실행 시기 결정](#working-with-appconfig-extensions-how-it-works-step-2)
+ [3단계: 확장 연결 생성](#working-with-appconfig-extensions-how-it-works-step-3)
+ [4단계: 구성 배포 및 확장 액션이 수행되었는지 확인](#working-with-appconfig-extensions-how-it-works-step-4)

## 1단계: 확장으로 수행할 작업 결정
<a name="working-with-appconfig-extensions-how-it-works-step-1"></a>

 AWS AppConfig 배포가 완료될 때마다 Slack에 메시지를 보내는 알림을 웹후크에 수신하시겠습니까? 구성을 배포하기 전에 Amazon Simple Storage Service(S3) 버킷에 구성 프로필을 백업하시겠습니까? 구성을 배포하기 전에 민감한 정보의 구성 데이터를 스크러빙 하시겠습니까? 확장을 사용하여 이러한 유형의 작업 등을 수행할 수 있습니다. 사용자 지정 확장을 생성하거나 AWS 에 포함된 작성된 확장을 사용할 수 있습니다 AWS AppConfig.

**참고**  
대부분의 사용 사례에서 사용자 지정 확장을 생성하려면 확장에 정의된 계산 및 처리를 수행하는 AWS Lambda 함수를 생성해야 합니다. 자세한 내용은 [연습: 사용자 지정 AWS AppConfig 확장 생성](working-with-appconfig-extensions-creating-custom.md) 단원을 참조하십시오.

다음 AWS 작성 확장은 구성 배포를 다른 서비스와 빠르게 통합하는 데 도움이 될 수 있습니다. AWS AppConfig 콘솔에서 또는 또는 SDK에서 직접 확장 [API 작업을](https://docs.aws.amazon.com/appconfig/2019-10-09/APIReference/API_Operations.html) 호출하여 이러한 확장을 사용할 수 AWS CLI AWS Tools for PowerShell있습니다.


****  

| 확장 | 설명 | 
| --- | --- | 
|  [AWS AppConfig EventBridge에 이벤트 배포](https://docs.aws.amazon.com/appconfig/latest/userguide/working-with-appconfig-extensions-about-predefined-notification-eventbridge.html)  |  이 확장은 구성이 배포될 때 EventBridge 기본 이벤트 버스로 이벤트를 전송합니다.  | 
|  [AWS AppConfig Amazon Simple Notification Service(Amazon SNS)에 배포 이벤트](https://docs.aws.amazon.com/appconfig/latest/userguide/working-with-appconfig-extensions-about-predefined-notification-sns.html)  |  이 확장은 구성을 배포할 때 지정한 Amazon SNS 주제로 메시지를 전송합니다.  | 
|  [AWS AppConfig Amazon Simple Queue Service(Amazon SQS)에 배포 이벤트](https://docs.aws.amazon.com/appconfig/latest/userguide/working-with-appconfig-extensions-about-predefined-notification-sqs.html)  |  이 확장은 구성이 배포될 때 메시지를 Amazon SQS 대기열에 넣습니다.  | 
|  [통합 확장-Atlassian Jira](https://docs.aws.amazon.com/appconfig/latest/userguide/working-with-appconfig-extensions-about-jira.html)  |  이 확장을 사용하면 [기능 플래그](https://docs.aws.amazon.com/appconfig/latest/userguide/appconfig-creating-configuration-and-profile.html#appconfig-creating-configuration-and-profile-feature-flags) AWS AppConfig 를 변경할 때마다에서 문제를 생성하고 업데이트할 수 있습니다.  | 

## 2단계: 확장 실행 시기 결정
<a name="working-with-appconfig-extensions-how-it-works-step-2"></a>

확장은 AWS AppConfig 워크플로 중에 수행하는 하나 이상의 작업을 정의합니다. 예를 들어 작성 AWS `AWS AppConfig deployment events to Amazon SNS` 확장에는 Amazon SNS 주제에 알림을 보내는 작업이 포함됩니다. 각 작업은와 상호 작용 AWS AppConfig 하거나가 사용자를 대신하여 프로세스를 AWS AppConfig 수행할 때 호출됩니다. 이를 *작업 포인트* AWS AppConfig 확장이라고 하며 다음 작업 포인트를 지원합니다.

**PRE\$1\$1 액션 포인트**: `PRE_*` 액션 포인트에 구성된 확장 액션은 요청 유효성 검사 후, AWS AppConfig 가 액션 포인트 이름에 해당하는 활동을 수행하기 전에 적용됩니다. 이러한 액션은 요청과 동시에 처리됩니다. 요청이 두 개 이상 이루어진 경우 액션 간접 호출은 순차적으로 실행됩니다. 또한 `PRE_*` 액션 포인트는 구성 내용을 수신하고 변경할 수 있다는 점에 유의하십시오. `PRE_*` 액션 포인트는 오류에 대응하여 조치가 취해지는 것을 방지할 수도 있습니다.
+ `PRE_CREATE_HOSTED_CONFIGURATION_VERSION`
+ `PRE_START_DEPLOYMENT`

**ON\$1\$1 작업 포인트**: 확장은 `ON_*` 작업 포인트를 사용하여 AWS AppConfig 워크플로와 병렬로 실행할 수도 있습니다. `ON_*` 작업 포인트는 비동기적으로 호출됩니다. `ON_*` 작업 포인트는 구성의 콘텐츠를 수신하지 않습니다. `ON_*` 액션 포인트 중에 확장에 오류가 발생하는 경우 서비스는 오류를 무시하고 워크플로우를 계속합니다.
+ `ON_DEPLOYMENT_START`
+ `ON_DEPLOYMENT_STEP`
+ `ON_DEPLOYMENT_BAKING`
+ `ON_DEPLOYMENT_COMPLETE`
+ `ON_DEPLOYMENT_ROLLED_BACK`

**AT\$1\$1 액션 포인트**: `AT_*` 액션 포인트에 구성된 확장 작업은 동기적으로 간접 호출되며 이는 AWS AppConfig 워크플로와 병렬로 수행됩니다. `AT_*` 액션 포인트 중에 확장에 오류가 발생하는 경우 서비스는 워크플로를 중단하고 배포를 롤백합니다.
+ `AT_DEPLOYMENT_TICK`

## 3단계: 확장 연결 생성
<a name="working-with-appconfig-extensions-how-it-works-step-3"></a>

확장을 생성하거나 AWS 작성된 확장을 구성하려면 특정 AWS AppConfig 리소스가 사용될 때 확장을 호출하는 작업 지점을 정의합니다. 예를 들어, 특정 애플리케이션에 대한 구성 배포가 시작될 때마다 `AWS AppConfig deployment events to Amazon SNS` 확장을 실행하고 Amazon SNS 주제에 대한 알림을 수신하도록 선택할 수 있습니다. 특정 AWS AppConfig 리소스에 대한 확장을 호출하는 작업 지점을 정의하는 것을 *확장 연결*이라고 합니다. 확장 연결은 확장과 애플리케이션 또는 구성 프로필과 같은 AWS AppConfig 리소스 간의 지정된 관계입니다.

단일 AWS AppConfig 애플리케이션에는 여러 환경과 구성 프로필이 포함될 수 있습니다. 확장을 애플리케이션 또는 환경에 연결하는 경우는 해당하는 경우 애플리케이션 또는 환경 리소스와 관련된 모든 워크플로에 대해 확장을 AWS AppConfig 호출합니다.

예를 들어 AccessList라는 구성 프로필을 포함하는 MobileApps라는 AWS AppConfig 애플리케이션이 있다고 가정해 보겠습니다. MobileApps 애플리케이션에 베타, 통합 및 프로덕션 환경이 포함되어 있다고 가정해 보겠습니다. AWS 작성된 Amazon SNS 알림 확장에 대한 확장 연결을 생성하고 확장을 MobileApps 애플리케이션에 연결합니다. Amazon SNS 알림 확장은 애플리케이션 구성이 세 가지 환경 중 하나에 배포될 때마다 간접적으로 호출됩니다.

**참고**  
 AWS 작성된 확장을 사용하기 위해 확장을 생성할 필요는 없지만 확장 연결을 생성해야 합니다.

## 4단계: 구성 배포 및 확장 액션이 수행되었는지 확인
<a name="working-with-appconfig-extensions-how-it-works-step-4"></a>

연결을 생성한 후 호스팅 구성이 생성되거나 구성이 배포되면가 확장을 AWS AppConfig 호출하고 지정된 작업을 수행합니다. 확장이 호출될 때 `PRE-*` 작업 지점 중에 시스템에 오류가 발생하면는 해당 오류에 대한 정보를 AWS AppConfig 반환합니다.

# AWS 작성된 확장 작업
<a name="working-with-appconfig-extensions-about-predefined"></a>

AWS AppConfig 에는 다음과 같은 AWS 작성 확장이 포함되어 있습니다. 이러한 확장은 AWS AppConfig 워크플로를 다른 서비스와 통합하는 데 도움이 될 수 있습니다. AWS Management Console 또는 SDK에서 직접 확장 [API 작업을](https://docs.aws.amazon.com/appconfig/2019-10-09/APIReference/API_Operations.html) 호출하여 AWS CLI AWS Tools for PowerShell에서 이러한 확장을 사용할 수 있습니다.


****  

| 확장 | 설명 | 
| --- | --- | 
|  [AWS AppConfig EventBridge에 이벤트 배포](https://docs.aws.amazon.com/appconfig/latest/userguide/working-with-appconfig-extensions-about-predefined-notification-eventbridge.html)  |  이 확장은 구성이 배포될 때 EventBridge 기본 이벤트 버스로 이벤트를 전송합니다.  | 
|  [AWS AppConfig Amazon Simple Notification Service(Amazon SNS)에 배포 이벤트](https://docs.aws.amazon.com/appconfig/latest/userguide/working-with-appconfig-extensions-about-predefined-notification-sns.html)  |  이 확장은 구성을 배포할 때 지정한 Amazon SNS 주제로 메시지를 전송합니다.  | 
|  [AWS AppConfig Amazon Simple Queue Service(Amazon SQS)에 배포 이벤트](https://docs.aws.amazon.com/appconfig/latest/userguide/working-with-appconfig-extensions-about-predefined-notification-sqs.html)  |  이 확장은 구성이 배포될 때 메시지를 Amazon SQS 대기열에 넣습니다.  | 
|  [통합 확장-Atlassian Jira](https://docs.aws.amazon.com/appconfig/latest/userguide/working-with-appconfig-extensions-about-jira.html)  |  이 확장을 사용하면 [기능 플래그](https://docs.aws.amazon.com/appconfig/latest/userguide/appconfig-creating-configuration-and-profile.html#appconfig-creating-configuration-and-profile-feature-flags) AWS AppConfig 를 변경할 때마다에서 문제를 생성하고 업데이트할 수 있습니다.  | 

# Amazon EventBridge 확장에 AWS AppConfig 배포 이벤트 사용
<a name="working-with-appconfig-extensions-about-predefined-notification-eventbridge"></a>

`AWS AppConfig deployment events to Amazon EventBridge` 확장은 AWS AppConfig 구성 배포 워크플로를 모니터링하고 조치를 취하는 데 도움이 AWS 되는 작성 확장입니다. 확장은 구성이 배포될 때마다 EventBridge 기본 이벤트 버스에 이벤트 알림을 보냅니다. 확장을 애플리케이션, 환경 또는 구성 프로필 중 AWS AppConfig 하나에 연결한 후는 모든 구성 배포가 시작, 종료 및 롤백된 후 이벤트 버스에 이벤트 알림을 AWS AppConfig 보냅니다.

EventBridge 알림을 전송할 액션 포인트를 더 잘 제어하려면 사용자 지정 확장을 만들고 URI 필드에 EventBridge 기본 이벤트 버스 Amazon 리소스 이름(ARN)을 입력하면 됩니다. 확장 생성에 대한 자세한 내용은 [연습: 사용자 지정 AWS AppConfig 확장 생성](working-with-appconfig-extensions-creating-custom.md) 섹션을 참조하십시오.

**중요**  
이 확장은 EventBridge 기본 이벤트 버스만 지원합니다.

## 확장 사용
<a name="working-with-appconfig-extensions-about-predefined-notification-ev-using"></a>

`AWS AppConfig deployment events to Amazon EventBridge` 확장을 사용하려면 먼저 확장 연결을 생성하여 AWS AppConfig 리소스 중 하나에 확장을 연결합니다. AWS AppConfig 콘솔 또는 [CreateExtensionAssociation](https://docs.aws.amazon.com/appconfig/2019-10-09/APIReference/API_CreateExtensionAssociation.html) API 작업을 사용하여 연결을 생성합니다. 연결을 생성할 때 AWS AppConfig 애플리케이션, 환경 또는 구성 프로필의 ARN을 지정합니다. 확장을 애플리케이션 또는 환경에 연결하는 경우 지정된 애플리케이션 또는 환경에 포함된 모든 구성 프로필에 대한 이벤트 알림이 전송됩니다.

연결을 생성한 후 지정된 AWS AppConfig 리소스에 대한 구성이 배포되면가 확장을 AWS AppConfig 호출하고 확장에 지정된 작업 지점에 따라 알림을 보냅니다.

**참고**  
이 확장은 다음 액션 포인트에서 간접적으로 호출됩니다.  
`ON_DEPLOYMENT_START`
`ON_DEPLOYMENT_COMPLETE`
`ON_DEPLOYMENT_ROLLED_BACK`
이 확장의 액션 포인트는 사용자 지정할 수 없습니다. 자체 확장을 생성하여 다른 액션 포인트를 간접적으로 호출할 수 있습니다. 자세한 내용은 [연습: 사용자 지정 AWS AppConfig 확장 생성](working-with-appconfig-extensions-creating-custom.md) 단원을 참조하십시오.

다음 절차에 따라 AWS Systems Manager 콘솔 또는를 사용하여 AWS AppConfig 확장 연결을 생성합니다 AWS CLI.

**확장 연결을 생성하려면(콘솔)**

1. [https://console.aws.amazon.com/systems-manager/appconfig/](https://console.aws.amazon.com/systems-manager/appconfig/) AWS Systems Manager 콘솔을 엽니다.

1. 탐색 창에서 **AWS AppConfig**를 선택합니다.

1. **확장** 탭에서 **리소스에 추가**를 선택합니다.

1. **확장 리소스 세부 정보** 섹션의 **리소스 유형**에서 AWS AppConfig 리소스 유형을 선택합니다. 선택한 리소스에 따라는 다른 리소스를 선택하라는 AWS AppConfig 메시지를 표시합니다.

1. **리소스에 연결 만들기**를 선택합니다.

다음은 확장이 간접적으로 호출될 때 EventBridge로 전송되는 샘플 이벤트입니다.

```
{
   "version":"0",
   "id":"c53dbd72-c1a0-2302-9ed6-c076e9128277",
   "detail-type":"On Deployment Complete",
   "source":"aws.appconfig",
   "account":"111122223333",
   "time":"2022-07-09T01:44:15Z",
   "region":"us-east-1",
   "resources":[
      "arn:aws:appconfig:us-east-1:111122223333:extensionassociation/z763ff5"
   ],
   "detail":{
      "InvocationId":"5tfjcig",
       "Parameters":{
         
      },
      "Type":"OnDeploymentComplete",
      "Application":{
         "Id":"ba8toh7",
         "Name":"MyApp"
      },
      "Environment":{
         "Id":"pgil2o7",
         "Name":"MyEnv"
      },
      "ConfigurationProfile":{
         "Id":"ga3tqep",
         "Name":"MyConfigProfile"
      },
      "DeploymentNumber":1,
      "ConfigurationVersion":"1"
   }
}
```

# Amazon SNS 확장에 AWS AppConfig 배포 이벤트 사용
<a name="working-with-appconfig-extensions-about-predefined-notification-sns"></a>

`AWS AppConfig deployment events to Amazon SNS` 확장은 AWS AppConfig 구성 배포 워크플로를 모니터링하고 조치를 취하는 데 도움이 AWS 되는 작성 확장입니다. 확장 기능은 구성이 배포될 때마다 Amazon SNS 주제에 메시지를 게시합니다. 확장을 AWS AppConfig 애플리케이션, 환경 또는 구성 프로필 중 하나에 연결하면는 모든 구성 배포가 시작, 종료 및 롤백된 후 주제에 메시지를 AWS AppConfig 게시합니다.

Amazon SNS 알림을 보내는 액션 포인트를 더 세밀하게 제어하려면 사용자 지정 확장을 만들고 URI 필드에 Amazon SNS 주제 Amazon 리소스 이름(ARN) 을 입력하면 됩니다. 확장 생성에 대한 자세한 내용은 [연습: 사용자 지정 AWS AppConfig 확장 생성](working-with-appconfig-extensions-creating-custom.md) 섹션을 참조하십시오.

## 확장 사용
<a name="working-with-appconfig-extensions-about-predefined-notification-sns-using"></a>

이 섹션에서는 `AWS AppConfig deployment events to Amazon SNS` 확장 작업 방법에 대해 설명합니다.

**1단계: 주제에 메시지를 게시 AWS AppConfig 하도록 구성**  
Amazon SNS 주제에 액세스 제어 정책을 추가하여 AWS AppConfig (`appconfig.amazonaws.com`) 게시 권한(`sns:Publish`)을 부여합니다. 자세한 내용은 [Amazon SNS 액세스 제어의 예제 사례](https://docs.aws.amazon.com/sns/latest/dg/sns-access-policy-use-cases.html)를 참조하십시오.

**2단계: 확장 연결 생성**  
확장 연결을 생성하여 AWS AppConfig 리소스 중 하나에 확장을 연결합니다. AWS AppConfig 콘솔 또는 [CreateExtensionAssociation](https://docs.aws.amazon.com/appconfig/2019-10-09/APIReference/API_CreateExtensionAssociation.html) API 작업을 사용하여 연결을 생성합니다. 연결을 생성할 때 AWS AppConfig 애플리케이션, 환경 또는 구성 프로필의 ARN을 지정합니다. 확장을 애플리케이션 또는 환경에 연결하는 경우 지정된 애플리케이션 또는 환경에 포함된 구성 프로필에 대한 알림이 전송됩니다. 연결을 생성할 때, 사용하려는 Amazon SNS 주제의 ARN이 포함된 `topicArn` 파라미터 값을 입력해야 합니다.

연결을 생성한 후 지정된 AWS AppConfig 리소스에 대한 구성이 배포되면가 확장을 AWS AppConfig 호출하고 확장에 지정된 작업 지점에 따라 알림을 보냅니다.

**참고**  
이 확장은 다음 액션 포인트에서 간접적으로 호출됩니다.  
`ON_DEPLOYMENT_START`
`ON_DEPLOYMENT_COMPLETE`
`ON_DEPLOYMENT_ROLLED_BACK`
이 확장의 액션 포인트는 사용자 지정할 수 없습니다. 자체 확장을 생성하여 다른 액션 포인트를 간접적으로 호출할 수 있습니다. 자세한 내용은 [연습: 사용자 지정 AWS AppConfig 확장 생성](working-with-appconfig-extensions-creating-custom.md) 단원을 참조하십시오.

다음 절차에 따라 AWS Systems Manager 콘솔 또는를 사용하여 AWS AppConfig 확장 연결을 생성합니다 AWS CLI.

**확장 연결을 생성하려면(콘솔)**

1. [https://console.aws.amazon.com/systems-manager/appconfig/](https://console.aws.amazon.com/systems-manager/appconfig/) AWS Systems Manager 콘솔을 엽니다.

1. 탐색 창에서 **AWS AppConfig**를 선택합니다.

1. **확장** 탭에서 **리소스에 추가**를 선택합니다.

1. **확장 리소스 세부 정보** 섹션의 **리소스 유형**에서 AWS AppConfig 리소스 유형을 선택합니다. 선택한 리소스에 따라는 다른 리소스를 선택하라는 AWS AppConfig 메시지를 표시합니다.

1. **리소스에 연결 만들기**를 선택합니다.

다음은 확장이 간접적으로 호출될 때 Amazon SNS 주제로 전송되는 메시지의 샘플입니다.

```
{
    "Type": "Notification",
    "MessageId": "ae9d702f-9a66-51b3-8586-2b17932a9f28",
    "TopicArn": "arn:aws:sns:us-east-1:111122223333:MySNSTopic",
    "Message": {
        "InvocationId": "7itcaxp",
        "Parameters": {
            "topicArn": "arn:aws:sns:us-east-1:111122223333:MySNSTopic"
        },
        "Application": {
            "Id": "1a2b3c4d",
            "Name": MyApp
        },
        "Environment": {
            "Id": "1a2b3c4d",
            "Name": MyEnv
        },
        "ConfigurationProfile": {
            "Id": "1a2b3c4d",
            "Name": "MyConfigProfile"
        },
        "Description": null,
        "DeploymentNumber": "3",
        "ConfigurationVersion": "1",
        "Type": "OnDeploymentComplete"
    },
    "Timestamp": "2022-06-30T20:26:52.067Z",
    "SignatureVersion": "1",
    "Signature": "<...>",
    "SigningCertURL": "<...>",
    "UnsubscribeURL": "<...>",
    "MessageAttributes": {
        "MessageType": {
            "Type": "String",
            "Value": "OnDeploymentStart"
        }
    }
}
```

# Amazon SQS 확장에 AWS AppConfig 배포 이벤트 사용
<a name="working-with-appconfig-extensions-about-predefined-notification-sqs"></a>

`AWS AppConfig deployment events to Amazon SQS` 확장은 AWS AppConfig 구성 배포 워크플로를 모니터링하고 조치를 취하는 데 도움이 AWS 되는 작성 확장입니다. 확장은 구성이 배포될 때마다 메시지를 Amazon Simple Queue Service(Amazon SQS) 대기열에 추가합니다. 확장을 AWS AppConfig 애플리케이션, 환경 또는 구성 프로필 중 하나에 연결하면는 모든 구성 배포가 시작, 종료 및 롤백된 후 대기열에 메시지를 AWS AppConfig 대기열에 넣습니다.

Amazon SQS 알림을 보내는 액션 포인트를 더 세밀하게 제어하려면 사용자 지정 확장을 생성하고 URI 필드에 Amazon SQS 대기열 Amazon 리소스 이름(ARN)을 입력하면 됩니다. 확장 생성에 대한 자세한 내용은 [연습: 사용자 지정 AWS AppConfig 확장 생성](working-with-appconfig-extensions-creating-custom.md) 섹션을 참조하십시오.

## 확장 사용
<a name="working-with-appconfig-extensions-about-predefined-notification-sqs-using"></a>

이 섹션에서는 `AWS AppConfig deployment events to Amazon SQS` 확장 작업 방법에 대해 설명합니다.

**1단계: 메시지 대기열에 추가 AWS AppConfig 하도록 구성**  
Amazon SQS 대기열에 메시지 전송 권한(`sqs:SendMessage`)을 부여하는 AWS AppConfig (`appconfig.amazonaws.com`) Amazon SQS 정책을 추가합니다. 자세한 내용은 [Amazon SQ 정책의 기본 예](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-basic-examples-of-sqs-policies.html)를 참조하십시오.

**2단계: 확장 연결 생성**  
확장 연결을 생성하여 AWS AppConfig 리소스 중 하나에 확장을 연결합니다. AWS AppConfig 콘솔 또는 [CreateExtensionAssociation](https://docs.aws.amazon.com/appconfig/2019-10-09/APIReference/API_CreateExtensionAssociation.html) API 작업을 사용하여 연결을 생성합니다. 연결을 생성할 때 AWS AppConfig 애플리케이션, 환경 또는 구성 프로필의 ARN을 지정합니다. 확장을 애플리케이션 또는 환경에 연결하는 경우 지정된 애플리케이션 또는 환경에 포함된 구성 프로필에 대한 알림이 전송됩니다. 연결을 생성할 때, 사용하려는 Amazon SQS 대기열의 ARN이 포함된 `Here` 파라미터를 입력해야 합니다.

연결을 생성한 후 지정된 AWS AppConfig 리소스에 대한 구성이 생성되거나 배포되면가 확장을 AWS AppConfig 호출하고 확장에 지정된 작업 지점에 따라 알림을 보냅니다.

**참고**  
이 확장은 다음 액션 포인트에서 간접적으로 호출됩니다.  
`ON_DEPLOYMENT_START`
`ON_DEPLOYMENT_COMPLETE`
`ON_DEPLOYMENT_ROLLED_BACK`
이 확장의 액션 포인트는 사용자 지정할 수 없습니다. 자체 확장을 생성하여 다른 액션 포인트를 간접적으로 호출할 수 있습니다. 자세한 내용은 [연습: 사용자 지정 AWS AppConfig 확장 생성](working-with-appconfig-extensions-creating-custom.md) 단원을 참조하십시오.

다음 절차에 따라 AWS Systems Manager 콘솔 또는를 사용하여 AWS AppConfig 확장 연결을 생성합니다 AWS CLI.

**확장 연결을 생성하려면(콘솔)**

1. [https://console.aws.amazon.com/systems-manager/appconfig/](https://console.aws.amazon.com/systems-manager/appconfig/) AWS Systems Manager 콘솔을 엽니다.

1. 탐색 창에서 **AWS AppConfig**를 선택합니다.

1. **확장** 탭에서 **리소스에 추가**를 선택합니다.

1. **확장 리소스 세부 정보** 섹션의 **리소스 유형**에서 AWS AppConfig 리소스 유형을 선택합니다. 선택한 리소스에 따라는 다른 리소스를 선택하라는 AWS AppConfig 메시지를 표시합니다.

1. **리소스에 연결 만들기**를 선택합니다.

다음은 확장이 간접적으로 호출될 때 Amazon SQS 대기열로 전송되는 메시지의 예입니다.

```
{
   "InvocationId":"7itcaxp",
   "Parameters":{
      "queueArn":"arn:aws:sqs:us-east-1:111122223333:MySQSQueue"
   },
   "Application":{
      "Id":"1a2b3c4d",
      "Name":MyApp
   },
   "Environment":{
      "Id":"1a2b3c4d",
      "Name":MyEnv
   },
   "ConfigurationProfile":{
      "Id":"1a2b3c4d",
      "Name":"MyConfigProfile"
   },
   "Description":null,
   "DeploymentNumber":"3",
   "ConfigurationVersion":"1",
   "Type":"OnDeploymentComplete"
}
```

# 에 Atlassian Jira 확장 사용 AWS AppConfig
<a name="working-with-appconfig-extensions-about-jira"></a>

Atlassian Jira와 통합하여 AWS AppConfig 는 지정된에 AWS 계정 대해의 [기능 플래그](https://docs.aws.amazon.com/appconfig/latest/userguide/appconfig-creating-configuration-and-profile.html#appconfig-creating-configuration-and-profile-feature-flags)를 변경할 때마다 Atlassian 콘솔에서 문제를 생성하고 업데이트할 수 있습니다 AWS 리전. 각 Jira 이슈에는 플래그 이름, 애플리케이션 ID, 구성 프로필 ID 및 플래그 값이 포함됩니다. 플래그 변경 사항을 업데이트, 저장 및 배포한 후 Jira는 변경 세부 정보와 함께 기존 이슈를 업데이트합니다.

**참고**  
기능 플래그를 생성하거나 업데이트할 때마다 Jira에서 이슈를 업데이트합니다. Jira는 상위 수준 플래그에서 하위 수준 플래그 속성을 삭제할 때도 문제를 업데이트합니다. 상위 수준 플래그를 삭제하면 Jira는 정보를 기록하지 않습니다.

통합을 구성하려면 다음을 수행하여야 합니다.
+ [AWS AppConfig Jira 통합에 대한 권한 구성](#working-with-appconfig-extensions-about-jira-permissions)
+ [AWS AppConfig Jira 통합 애플리케이션 구성](#working-with-appconfig-extensions-about-jira-configure)

## AWS AppConfig Jira 통합에 대한 권한 구성
<a name="working-with-appconfig-extensions-about-jira-permissions"></a>

Jira와의 AWS AppConfig 통합을 구성할 때 사용자의 자격 증명을 지정합니다. 특히 **Jira 애플리케이션을 위한AWS AppConfig **에 사용자의 액세스 키 ID와 암호 키를 입력합니다. 이 사용자는 Jira에와 통신할 수 있는 권한을 부여합니다 AWS AppConfig.는 이러한 자격 증명을 한 번 AWS AppConfig 사용하여와 Jira 간의 AWS AppConfig 연결을 설정합니다. 자격 증명은 저장되지 않습니다. AWS AppConfig for Jira 애플리케이션을 제거하여 연결을 제거할 수 있습니다.

사용자 계정에는 다음 액션이 포함된 권한 정책이 필요합니다.
+ `appconfig:CreateExtensionAssociation`
+ `appconfig:GetConfigurationProfile`
+ `appconfig:ListApplications`
+ `appconfig:ListConfigurationProfiles`
+ `appconfig:ListExtensionAssociations`
+ `sts:GetCallerIdentity`

다음 작업을 완료하여 AWS AppConfig 및 Jira의 통합을 위한 IAM 권한 정책과 사용자를 생성하십시오.

**업무**
+ [작업 1: AWS AppConfig 및 Jira 통합에 대한 IAM 권한 정책 생성](#working-with-appconfig-extensions-about-jira-permissions-policy)
+ [작업 2: AWS AppConfig 및 Jira 통합을 위한 사용자 생성](#working-with-appconfig-extensions-about-jira-permissions-user)

### 작업 1: AWS AppConfig 및 Jira 통합에 대한 IAM 권한 정책 생성
<a name="working-with-appconfig-extensions-about-jira-permissions-policy"></a>

다음 절차에 따라 Atlassian Jira가 통신할 수 있도록 허용하는 IAM 권한 정책을 생성합니다 AWS AppConfig. 새 정책을 생성한 후 이 정책을 새 IAM 역할에 연결하는 것이 좋습니다. 기존 IAM 정책 및 역할에 필요한 권한을 추가하는 것은 최소 권한 원칙에 위배되므로 권장되지 않습니다.

**AWS AppConfig 및 Jira 통합에 대한 IAM 정책을 생성하려면**

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

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

1. **정책 생성** 페이지에서 **JSON** 탭을 선택하고, 기본 콘텐츠를 다음 정책으로 바꿉니다. 다음 정책에서 *리전*, *account\$1ID*, *application\$1ID*, *configuration\$1profile\$1ID*를 AWS AppConfig 기능 플래그 환경 정보로 대체하세요.

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

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Effect": "Allow",
               "Action": [
                   "appconfig:CreateExtensionAssociation",
                   "appconfig:ListExtensionAssociations",
                   "appconfig:GetConfigurationProfile"
               ],
               "Resource": [
                   "arn:aws:appconfig:us-east-1:111122223333:application/application_ID",
                   "arn:aws:appconfig:us-east-1:111122223333:application/application_ID/configurationprofile/configuration_profile_ID"
               ]
           },
           {
               "Effect": "Allow",
               "Action": [
                   "appconfig:ListApplications"
               ],
               "Resource": [
                   "arn:aws:appconfig:us-east-1:111122223333:*"
               ]
           },
           {
               "Effect": "Allow",
               "Action": [
                   "appconfig:ListConfigurationProfiles"
               ],
               "Resource": [
                   "arn:aws:appconfig:us-east-1:111122223333:application/application_ID"
               ]
           },
           {
               "Effect": "Allow",
               "Action": "sts:GetCallerIdentity",
               "Resource": "*"
           }
       ]
   }
   ```

------

1. **다음: 태그(Next: Tags)**를 선택합니다.

1. (선택 사항) 이 정책에 대한 액세스를 구성, 추적 또는 제어할 태그-키 값 페어를 하나 이상 추가한 후 [**다음: 검토**]를 선택합니다.

1. **정책 검토** 페이지에서 **이름** 상자에 **AppConfigJiraPolicy** 등의 이름을 입력한 다음 설명을 입력합니다(선택 사항).

1. **정책 생성**을 선택합니다.

### 작업 2: AWS AppConfig 및 Jira 통합을 위한 사용자 생성
<a name="working-with-appconfig-extensions-about-jira-permissions-user"></a>

다음 절차에 따라 AWS AppConfig 및 Atlassian Jira 통합을 위한 사용자를 생성합니다. 사용자를 생성한 후 통합 완료 시 지정할 액세스 키 ID와 암호 키를 복사할 수 있습니다.

**AWS AppConfig 및 Jira 통합을 위한 사용자를 생성하려면**

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

1. 탐색 창에서 **사용자**와 **사용자 추가**를 차례로 선택합니다.

1. **사용자 이름** 필드에 이름(예:**AppConfigJiraUser**)을 입력합니다.

1. ** AWS 자격 증명 유형 선택**에서 **액세스 키 - 프로그래밍 방식 액세스를** 선택합니다.

1. **다음: 권한**을 선택합니다.

1. **권한 설정** 페이지에서 **기존 정책을 직접 연결**을 선택합니다. [작업 1: AWS AppConfig 및 Jira 통합에 대한 IAM 권한 정책 생성](#working-with-appconfig-extensions-about-jira-permissions-policy)에서 생성한 정책을 검색하고 확인란을 선택한 다음 **다음: 태그**를 선택하십시오.

1. **태그 추가(선택 사항)** 페이지에서 이 사용자에 대한 액세스를 구성, 추적 또는 제어할 태그-키 값 페어를 하나 이상 추가합니다. **다음: 검토**를 선택합니다.

1. **검토** 페이지에서 사용자 세부 정보를 확인합니다.

1. **사용자 생성**을 선택합니다. 시스템은 사용자의 액세스 키 ID와 암호 키를 표시합니다. .csv 파일을 다운로드하거나 이러한 자격 증명을 별도의 위치에 복사하십시오. 통합을 구성할 때 이러한 자격 증명을 지정해야 합니다.

## AWS AppConfig Jira 통합 애플리케이션 구성
<a name="working-with-appconfig-extensions-about-jira-configure"></a>

다음 절차에 따라 Jira 애플리케이션 AWS AppConfig 용에서 필수 옵션을 구성합니다. 이 절차를 완료하면 Jira는 지정된에 대해의 각 기능 플래그에 AWS 계정 대해 새 문제를 생성합니다 AWS 리전. 에서 기능 플래그를 변경하면 AWS AppConfig Jira는 기존 문제에 세부 정보를 기록합니다.

**참고**  
 AWS AppConfig 기능 플래그에는 여러 하위 수준 플래그 속성이 포함될 수 있습니다. Jira는 각 상위 수준 기능 플래그에 대해 하나의 이슈를 생성합니다. 하위 수준 플래그 속성을 변경하는 경우 상위 수준 플래그에 대한 Jira 이슈에서 해당 변경의 세부 정보를 볼 수 있습니다.

**통합을 구성하려면**

1. [Atlassian 마켓플레이스](https://marketplace.atlassian.com/)에 로그인하십시오.

1. 검색 필드에 **AWS AppConfig**를 입력하고 **Enter(입력)**을 누릅니다.

1. Jira 인스턴스에 애플리케이션을 설치합니다.

1. Atlassian 콘솔에서 **앱 관리**를 선택한 다음 **Jira용AWS AppConfig **를 선택합니다.

1. **구성**을 선택합니다.

1. **구성 세부 정보**에서 **Jira 프로젝트**를 선택한 다음 AWS AppConfig 기능 플래그와 연결할 프로젝트를 선택합니다.

1. **AWS 리전**을 선택한 다음 AWS AppConfig 기능 플래그가 있는 리전을 선택합니다.

1. **애플리케이션 ID** 필드에 기능 플래그가 포함된 AWS AppConfig 애플리케이션의 이름을 입력합니다.

1. **구성 프로필 ID** 필드에 기능 플래그의 AWS AppConfig 구성 프로필 이름을 입력합니다.

1. **액세스 키 ID** 및 **암호 키** 필드에 [작업 2: AWS AppConfig 및 Jira 통합을 위한 사용자 생성](#working-with-appconfig-extensions-about-jira-permissions-user)에 복사한 자격 증명을 입력합니다. 선택적으로 세션 토큰을 지정할 수도 있습니다.

1. **제출**을 선택합니다.

1. Atlassian 콘솔에서 **프로젝트를** 선택한 다음 AWS AppConfig 통합을 위해 선택한 프로젝트를 선택합니다. **문제** 페이지에는 지정된 AWS 계정 및의 각 기능 플래그에 대한 문제가 표시됩니다 AWS 리전.

## Jira 애플리케이션 및 데이터에 AWS AppConfig 대한 삭제
<a name="working-with-appconfig-extensions-about-jira-delete"></a>

 AWS AppConfig 기능 플래그와 Jira 통합을 더 이상 사용하지 않으려면 Atlassian 콘솔에서 AWS AppConfig for Jira 애플리케이션을 삭제하면 됩니다. 통합 애플리케이션을 삭제하면 다음 동작을 수행합니다.
+ Jira 인스턴스와 간의 연결을 삭제합니다. AWS AppConfig
+ 에서 Jira 인스턴스 세부 정보를 삭제합니다. AWS AppConfig

**AWS AppConfig Jira용 애플리케이션을 삭제하려면**

1. Atlassian 콘솔에서 **앱 관리**를 선택합니다.

1. **Jira용AWS AppConfig **를 선택합니다.

1. **제거**를 선택합니다.

# 연습: 사용자 지정 AWS AppConfig 확장 생성
<a name="working-with-appconfig-extensions-creating-custom"></a>

사용자 지정 AWS AppConfig 확장을 생성하려면 다음 작업을 완료합니다. 각 작업에 대해서는 이후 주제에 자세히 설명되어 있습니다.

**참고**  
GitHub에서 사용자 지정 AWS AppConfig 확장의 샘플을 볼 수 있습니다.  
[Systems Manager 변경 캘린더를 사용하여 `blocked day` 유예 기간 캘린더로 배포를 방지하는 샘플 확장](https://github.com/aws-samples/aws-appconfig-change-calendar-extn)
[git-secrets를 사용하여 보안 암호가 구성 데이터로 유출되는 것을 방지하는 샘플 확장](https://github.com/aws-samples/aws-appconfig-git-secrets-extn)
[Amazon Comprehend를 사용하여 개인 식별 정보(PII)가 구성 데이터로 유출되는 것을 방지하는 샘플 확장](https://github.com/aws-samples/aws-appconfig-pii-extn)

**1. [AWS Lambda 함수 생성](https://docs.aws.amazon.com/appconfig/latest/userguide/working-with-appconfig-extensions-creating-custom-lambda.html)**  
대부분의 사용 사례에서 사용자 지정 확장을 생성하려면 확장에 정의된 계산 및 처리를 수행하는 AWS Lambda 함수를 생성해야 합니다. 이 규칙의 예외는 액션 포인트를 추가하거나 제거하기 위해 [AWS 작성 알림 확장의](https://docs.aws.amazon.com/appconfig/latest/userguide/working-with-appconfig-extensions-about-predefined.html) *사용자 지정* 버전을 만드는 경우입니다. 이 예외에 대한 자세한 정보는 [3단계: 사용자 지정 AWS AppConfig 확장 생성](working-with-appconfig-extensions-creating-custom-extensions.md) 섹션을 참조하십시오.

**2. [사용자 지정 확장에 대한 권한 구성](https://docs.aws.amazon.com/appconfig/latest/userguide/working-with-appconfig-extensions-creating-custom-permissions.html)**  
사용자 지정 확장 권한을 구성하려면 다음 중 한 가지 방법을 시도하면 됩니다.  
+ `InvokeFunction` 권한이 포함된 AWS Identity and Access Management (IAM) 서비스 역할을 생성합니다.
+ Lambda [AddPermission](https://docs.aws.amazon.com/lambda/latest/dg/API_AddPermission.html) API 작업을 사용하여 리소스 정책을 생성합니다.
이 연습은 IAM 서비스 역할 생성 방법에 대해서 설명합니다.

**3. [확장 생성](https://docs.aws.amazon.com/appconfig/latest/userguide/working-with-appconfig-extensions-creating-custom-extensions.html)**  
 AWS AppConfig 콘솔을 사용하거나 AWS CLI AWS Tools for PowerShell또는 SDK에서 [CreateExtension](https://docs.aws.amazon.com/appconfig/2019-10-09/APIReference/API_CreateExtension.html) API 작업을 호출하여 확장을 생성할 수 있습니다. 이 연습에서는 콘솔을 사용합니다.

**4. [확장 연결 생성](https://docs.aws.amazon.com/appconfig/latest/userguide/working-with-appconfig-extensions-creating-custom-association.html)**  
 AWS AppConfig 콘솔을 사용하거나 AWS CLI AWS Tools for PowerShell또는 SDK에서 [CreateExtensionAssociation](https://docs.aws.amazon.com/appconfig/2019-10-09/APIReference/API_CreateExtensionAssociation.html) API 작업을 호출하여 확장 연결을 생성할 수 있습니다. 이 연습에서는 콘솔을 사용합니다.

**5. 확장을 간접적으로 호출하는 액션 수행**  
연결을 생성한 후는 해당 리소스에 대해 확장에 의해 정의된 작업 지점이 발생할 때 확장을 AWS AppConfig 호출합니다. 예를 들어 `PRE_CREATE_HOSTED_CONFIGURATION_VERSION` 액션이 포함된 확장을 연결하면 호스팅된 구성 버전을 새로 만들 때마다 확장이 간접적으로 호출됩니다.

이 섹션의 주제에서는 사용자 지정 AWS AppConfig 확장 생성과 관련된 각 작업을 설명합니다. 각 작업은 고객이 Amazon Simple Storage Service(S3) 버킷에 자동으로 백업하는 확장을 생성하려는 사용 사례의 맥락에서 설명됩니다. 확장은 호스팅된 구성을 생성(`PRE_CREATE_HOSTED_CONFIGURATION_VERSION`)하거나 배포(`PRE_START_DEPLOYMENT`)할 때마다 실행됩니다.

**Topics**
+ [1단계: 사용자 지정 AWS AppConfig 확장을 위한 Lambda 함수 생성](working-with-appconfig-extensions-creating-custom-lambda.md)
+ [2단계: 사용자 지정 AWS AppConfig 확장에 대한 권한 구성](working-with-appconfig-extensions-creating-custom-permissions.md)
+ [3단계: 사용자 지정 AWS AppConfig 확장 생성](working-with-appconfig-extensions-creating-custom-extensions.md)
+ [4단계: 사용자 지정 확장에 대한 AWS AppConfig 확장 연결 생성](working-with-appconfig-extensions-creating-custom-association.md)

# 1단계: 사용자 지정 AWS AppConfig 확장을 위한 Lambda 함수 생성
<a name="working-with-appconfig-extensions-creating-custom-lambda"></a>

대부분의 사용 사례에서 사용자 지정 확장을 생성하려면 확장에 정의된 계산 및 처리를 수행하는 AWS Lambda 함수를 생성해야 합니다. 이 섹션에는 사용자 지정 AWS AppConfig 확장에 대한 Lambda 함수 샘플 코드가 포함되어 있습니다. 이 섹션에는 페이로드 요청 및 응답 참조 세부 정보도 포함되어 있습니다. Lambda 함수 생성에 대한 자세한 내용은 *AWS Lambda 개발자 안내서*의 [Lambda 시작하기](https://docs.aws.amazon.com/lambda/latest/dg/getting-started.html)를 참조하십시오.

## 샘플 코드
<a name="working-with-appconfig-extensions-creating-custom-lambda-code-sample"></a>

Lambda 함수에 대한 다음 샘플 코드는 호출될 때 Amazon S3 버킷에 AWS AppConfig 구성을 자동으로 백업합니다. 구성은 새 구성이 생성되거나 배포될 때마다 백업됩니다. 샘플은 확장 파라미터를 사용하므로 Lambda 함수에서 버킷 이름을 하드코딩할 필요가 없습니다. 확장 파라미터를 사용하여 사용자는 확장을 여러 애플리케이션에 연결하고 구성을 다른 버킷에 백업할 수 있습니다. 코드 샘플에는 함수를 더 자세히 설명하는 주석이 포함되어 있습니다.

** AWS AppConfig 확장에 대한 샘플 Lambda 함수**

```
from datetime import datetime
import base64
import json

import boto3


def lambda_handler(event, context):
    print(event)
    
    # Extensions that use the PRE_CREATE_HOSTED_CONFIGURATION_VERSION and PRE_START_DEPLOYMENT 
    # action points receive the contents of AWS AppConfig configurations in Lambda event parameters.
    # Configuration contents are received as a base64-encoded string, which the lambda needs to decode 
    # in order to get the configuration data as bytes. For other action points, the content 
    # of the configuration isn't present, so the code below will fail.
    config_data_bytes = base64.b64decode(event["Content"])
    
    # You can specify parameters for extensions. The CreateExtension API action lets you define  
    # which parameters an extension supports. You supply the values for those parameters when you 
    # create an extension association by calling the CreateExtensionAssociation API action.
    # The following code uses a parameter called S3_BUCKET to obtain the value specified in the 
    # extension association. You can specify this parameter when you create the extension 
    # later in this walkthrough.
    extension_association_params = event.get('Parameters', {})
    bucket_name = extension_association_params['S3_BUCKET']
    write_backup_to_s3(bucket_name, config_data_bytes)
    
    # The PRE_CREATE_HOSTED_CONFIGURATION_VERSION and PRE_START_DEPLOYMENT action points can 
    # modify the contents of a configuration. The following code makes a minor change 
    # for the purposes of a demonstration.
    old_config_data_string = config_data_bytes.decode('utf-8')
    new_config_data_string = old_config_data_string.replace('hello', 'hello!')
    new_config_data_bytes = new_config_data_string.encode('utf-8')
    
    # The lambda initially received the configuration data as a base64-encoded string 
    # and must return it in the same format.
    new_config_data_base64string = base64.b64encode(new_config_data_bytes).decode('ascii')
    
    return {
        'statusCode': 200,
        # If you want to modify the contents of the configuration, you must include the new contents in the 
        # Lambda response. If you don't want to modify the contents, you can omit the 'Content' field shown here.
        'Content': new_config_data_base64string
    }


def write_backup_to_s3(bucket_name, config_data_bytes):
    s3 = boto3.resource('s3')
    new_object = s3.Object(bucket_name, f"config_backup_{datetime.now().isoformat()}.txt")
    new_object.put(Body=config_data_bytes)
```

이 연습에서 이 샘플을 사용하려면 이름 **MyS3ConfigurationBackUpExtension**과 함께 저장하고 함수의 Amazon 리소스 이름(ARN)을 복사합니다. 다음 섹션에서 AWS Identity and Access Management (IAM) 수임 역할을 생성할 때 ARN을 지정합니다. 확장을 생성할 때 ARN과 이름을 지정합니다.

## 페이로드 참조
<a name="working-with-appconfig-extensions-creating-custom-lambda-payload"></a>

이 섹션에는 사용자 지정 AWS AppConfig 확장 작업을 위한 페이로드 요청 및 응답 참조 세부 정보가 포함되어 있습니다.

**요청 구조**  
*AtDeploymentTick*

```
{
    'InvocationId': 'o2xbtm7',
    'Parameters': {
        'ParameterOne': 'ValueOne',
        'ParameterTwo': 'ValueTwo'
    },
    'Type': 'OnDeploymentStart',
    'Application': {
        'Id': 'abcd123'
    },
    'Environment': {
        'Id': 'efgh456'
    },
    'ConfigurationProfile': {
        'Id': 'ijkl789',
        'Name': 'ConfigurationName'
    },
    'DeploymentNumber': 2,
    'Description': 'Deployment description',
    'ConfigurationVersion': '2',
    'DeploymentState': 'DEPLOYING',
    'PercentageComplete': '0.0'
}
```

**요청 구조**  
*PreCreateHostedConfigurationVersion*

```
{
    'InvocationId': 'vlns753', // id for specific invocation
    'Parameters': {
        'ParameterOne': 'ValueOne',
        'ParameterTwo': 'ValueTwo'
    },
    'ContentType': 'text/plain',
    'ContentVersion': '2',
    'Content': 'SGVsbG8gZWFydGgh', // Base64 encoded content
    'Application': {
        'Id': 'abcd123',
        'Name': 'ApplicationName'
    },
    'ConfigurationProfile': {
        'Id': 'ijkl789',
        'Name': 'ConfigurationName'
    },
    'Description': '',
    'Type': 'PreCreateHostedConfigurationVersion',
    'PreviousContent': {
        'ContentType': 'text/plain',
        'ContentVersion': '1',
        'Content': 'SGVsbG8gd29ybGQh'
    }
}
```

*PreStartDeployment*

```
{
    'InvocationId': '765ahdm',
    'Parameters': {
        'ParameterOne': 'ValueOne',
        'ParameterTwo': 'ValueTwo'
    },
    'ContentType': 'text/plain',
    'ContentVersion': '2',
    'Content': 'SGVsbG8gZWFydGgh',
    'Application': {
        'Id': 'abcd123',
        'Name': 'ApplicationName'
    },
    'Environment': {
        'Id': 'ibpnqlq',
        'Name': 'EnvironmentName'
    },
    'ConfigurationProfile': {
        'Id': 'ijkl789',
        'Name': 'ConfigurationName'
    },
    'DeploymentNumber': 2,
    'Description': 'Deployment description',
    'Type': 'PreStartDeployment'
}
```

**비동기 이벤트**  


*OnStartDeployment, OnDeploymentStep, OnDeployment*

```
{
    'InvocationId': 'o2xbtm7',
    'Parameters': {
        'ParameterOne': 'ValueOne',
        'ParameterTwo': 'ValueTwo'
    },
    'Type': 'OnDeploymentStart',
    'Application': {
        'Id': 'abcd123'
    },
    'Environment': {
        'Id': 'efgh456'
    },
    'ConfigurationProfile': {
        'Id': 'ijkl789',
        'Name': 'ConfigurationName'
    },
    'DeploymentNumber': 2,
    'Description': 'Deployment description',
    'ConfigurationVersion': '2'
}
```

**응답 구조**  
다음 예제는 사용자 지정 AWS AppConfig 확장의 요청에 대한 응답으로 Lambda 함수가 반환하는 내용을 보여줍니다.

*PRE\$1\$1 동기 이벤트 - 성공적인 응답*

콘텐츠를 변환하려면 다음을 사용하십시오.

```
"Content": "SomeBase64EncodedByteArray"
```

*AT\$1\$1 동기 이벤트 - 성공적인 응답*

배포의 다음 단계(배포 계속 또는 롤백)를 제어하려면 응답의 `Directive` 및 `Description` 속성을 설정합니다.

```
"Directive": "ROLL_BACK"
"Description" "Deployment event log description"
```

`Directive`는 `CONTINUE` 또는 `ROLL_BACK`의 두 가지 값을 지원합니다. 페이로드 응답에 이러한 열거형 값을 사용하여 배포의 다음 단계를 제어하세요.

*동기 이벤트 - 성공적인 응답*

콘텐츠를 변환하려면 다음을 사용하십시오.

```
"Content": "SomeBase64EncodedByteArray"
```

콘텐츠를 변환하고 싶지 않으면 아무것도 반환하지 않습니다.

*비동기 이벤트 - 성공적인 응답*

아무것도 반환하지 않습니다.

*모든 오류 이벤트*

```
{
        "Error": "BadRequestError",
        "Message": "There was malformed stuff in here",
        "Details": [{
            "Type": "Malformed",
            "Name": "S3 pointer",
            "Reason": "S3 bucket did not exist"
        }]
    }
```

# 2단계: 사용자 지정 AWS AppConfig 확장에 대한 권한 구성
<a name="working-with-appconfig-extensions-creating-custom-permissions"></a>

다음 절차에 따라 AWS Identity and Access Management (IAM) 서비스 역할(또는 수*임 역할*)을 생성하고 구성합니다.는이 역할을 AWS AppConfig 사용하여 Lambda 함수를 호출합니다.

**IAM 서비스 역할을 생성하고가 이를 수임 AWS AppConfig 하도록 허용하려면**

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

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

1. **신뢰할 수 있는 엔터티 유형 선택**에서 **사용자 지정 신뢰 정책**을 선택합니다.

1. **사용자 지정 신뢰 정책** 필드에 다음의 JSON 정책을 붙여 넣습니다.

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

****  

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

------

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

1. **권한 추가** 페이지에서 **정책 생성**을 선택합니다. **정책 생성** 페이지가 새 탭에서 열립니다.

1. **JSON** 탭을 선택한 후 다음과 같은 권한 정책을 편집기에 붙여 넣습니다. `lambda:InvokeFunction` 액션은 `PRE_*` 액션 포인트에 사용됩니다. `lambda:InvokeAsync` 액션은 `ON_*` 액션 포인트에 사용됩니다. *Lambda ARN*을 Lambda의 Amazon 리소스 이름(ARN)으로 바꿉니다.

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

****  

   ```
   {
     "Version":"2012-10-17",		 	 	 
     "Statement": [
       {
         "Sid": "VisualEditor0",
         "Effect": "Allow",
         "Action": [
           "lambda:InvokeFunction",
           "lambda:InvokeAsync"
         ],
         "Resource": "arn:aws:lambda:us-east-1:111122223333:function:function-name"
       }
     ]
   }
   ```

------

1. **다음: 태그**를 선택합니다.

1. **태그 추가(선택 사항)** 페이지에서 하나 이상의 키-값 페어를 추가한 후 **다음: 검토**를 선택합니다.

1. **정책 검토** 페이지에 이름과 설명을 입력한 다음 **정책 생성**을 선택합니다.

1. 사용자 지정 신뢰 정책의 브라우저 탭에서 새로 고침 아이콘을 선택한 다음 방금 만든 권한 정책을 검색합니다.

1. 권한 정책의 확인란을 선택하고 **다음**을 선택합니다.

1. **이름, 검토, 생성** 페이지에서 **역할 이름** 상자에 이름을 입력한 후 설명을 입력합니다.

1. **역할 생성**을 선택합니다. 그러면 **역할** 페이지로 돌아갑니다. 배너에서 **역할 보기**를 선택합니다.

1. ARN을 복사합니다. 확장 생성 시 이 ARN을 지정합니다.

# 3단계: 사용자 지정 AWS AppConfig 확장 생성
<a name="working-with-appconfig-extensions-creating-custom-extensions"></a>



확장은 AWS AppConfig 워크플로 중에 수행하는 하나 이상의 작업을 정의합니다. 예를 들어 작성 AWS `AWS AppConfig deployment events to Amazon SNS` 확장에는 Amazon SNS 주제에 알림을 보내는 작업이 포함됩니다. 각 작업은와 상호 작용 AWS AppConfig 하거나가 사용자를 대신하여 프로세스를 AWS AppConfig 수행할 때 호출됩니다. 이를 *작업 포인트* AWS AppConfig 확장이라고 하며 다음 작업 포인트를 지원합니다.

**PRE\$1\$1 액션 포인트**: `PRE_*` 액션 포인트에 구성된 확장 액션은 요청 유효성 검사 후, AWS AppConfig 가 액션 포인트 이름에 해당하는 활동을 수행하기 전에 적용됩니다. 이러한 액션은 요청과 동시에 처리됩니다. 요청이 두 개 이상 이루어진 경우 액션 간접 호출은 순차적으로 실행됩니다. 또한 `PRE_*` 액션 포인트는 구성 내용을 수신하고 변경할 수 있다는 점에 유의하십시오. `PRE_*` 액션 포인트는 오류에 대응하여 조치가 취해지는 것을 방지할 수도 있습니다.
+ `PRE_CREATE_HOSTED_CONFIGURATION_VERSION`
+ `PRE_START_DEPLOYMENT`

**ON\$1\$1 작업 포인트**: 확장은 `ON_*` 작업 포인트를 사용하여 AWS AppConfig 워크플로와 병렬로 실행할 수도 있습니다. `ON_*` 작업 포인트는 비동기적으로 호출됩니다. `ON_*` 작업 포인트는 구성의 콘텐츠를 수신하지 않습니다. `ON_*` 액션 포인트 중에 확장에 오류가 발생하는 경우 서비스는 오류를 무시하고 워크플로우를 계속합니다.
+ `ON_DEPLOYMENT_START`
+ `ON_DEPLOYMENT_STEP`
+ `ON_DEPLOYMENT_BAKING`
+ `ON_DEPLOYMENT_COMPLETE`
+ `ON_DEPLOYMENT_ROLLED_BACK`

**AT\$1\$1 액션 포인트**: `AT_*` 액션 포인트에 구성된 확장 작업은 동기적으로 간접 호출되며 이는 AWS AppConfig 워크플로와 병렬로 수행됩니다. `AT_*` 액션 포인트 중에 확장에 오류가 발생하는 경우 서비스는 워크플로를 중단하고 배포를 롤백합니다.
+ `AT_DEPLOYMENT_TICK`

`AT_DEPLOYMENT_TICK` 액션 포인트는 서드 파티 모니터링 통합을 지원합니다. `AT_DEPLOYMENT_TICK`은 구성 배포 처리 오케스트레이션 중에 간접적으로 호출됩니다. 타사 모니터링 솔루션(예: Datadog 또는 New Relic)을 사용하는 경우 `AT_DEPLOYMENT_TICK` 작업 지점에서 경보를 확인하는 AWS AppConfig 확장을 생성하고, 안전 가드레일로 경보를 트리거한 경우 배포를 롤백할 수 있습니다.

Datadog 또는 New Relic과 같은 타사 모니터링 솔루션을 사용하는 경우 `AT_DEPLOYMENT_TICK` 작업 지점에서 경보를 확인하는 AWS AppConfig 확장을 생성하고 안전 가드레일로 경보를 트리거한 경우 배포를 롤백할 수 있습니다. 자세한 내용은 GitHub에서 다음 Datadog 및 New Relic 통합 예제를 참조하세요.
+ [Datadog](https://github.com/aws-samples/aws-appconfig-tick-extn-for-datadog)
+ [New Relic](https://github.com/aws-samples/sample-aws-appconfig-tick-extn-for-newrelic)

 AWS AppConfig 확장에 대한 자세한 내용은 다음 주제를 참조하세요.
+ [확장을 사용하여 AWS AppConfig 워크플로 확장](working-with-appconfig-extensions.md)
+ [연습: 사용자 지정 AWS AppConfig 확장 생성](working-with-appconfig-extensions-creating-custom.md)

**샘플 확장**  
다음 샘플 확장은 `PRE_CREATE_HOSTED_CONFIGURATION_VERSION` 액션 포인트를 호출하는 하나의 액션을 정의합니다. `Uri` 필드에서, 액션은 이 연습의 앞부분에서 생성한 `MyS3ConfigurationBackUpExtension` Lambda 함수의 Amazon 리소스 이름(ARN)을 지정합니다. 또한이 작업은이 연습의 앞부분에서 생성된 AWS Identity and Access Management (IAM) 수임 역할 ARN을 지정합니다.

**샘플 AWS AppConfig 확장**

```
{
    "Name": "MySampleExtension",
    "Description": "A sample extension that backs up configurations to an S3 bucket.",
    "Actions": {
        "PRE_CREATE_HOSTED_CONFIGURATION_VERSION": [
            {
                "Name": "PreCreateHostedConfigVersionActionForS3Backup",
                "Uri": "arn:aws:lambda:aws-region:111122223333:function:MyS3ConfigurationBackUpExtension",
                "RoleArn": "arn:aws:iam::111122223333:role/ExtensionsTestRole"
            }
        ]
    },
    "Parameters" : {
        "S3_BUCKET": {
            "Required": false
        }
    }
}
```

**참고**  
확장을 만들 때 요청 구문과 필드 설명을 보려면 *AWS AppConfig API* 참조의 [CreateExtension](https://docs.aws.amazon.com/appconfig/2019-10-09/APIReference/API_CreateExtension.html) 주제를 참조하십시오.

**확장을 만들려면(콘솔)**

1. [https://console.aws.amazon.com/systems-manager/appconfig/](https://console.aws.amazon.com/systems-manager/appconfig/) AWS Systems Manager 콘솔을 엽니다.

1. 탐색 창에서 **AWS AppConfig**를 선택합니다.

1. **확장** 탭에서 **확장 생성**을 선택합니다.

1. **확장 이름**에 고유한 이름을 입력합니다. 이 연습에서는 **MyS3ConfigurationBackUpExtension**을 입력합니다. 필요한 경우 설명을 입력합니다.

1. **액션** 섹션에서 **새 액션 추가**를 선택합니다.

1. **액션 이름**에 고유한 이름을 입력합니다. 이 연습에서는 **PreCreateHostedConfigVersionActionForS3Backup**을 입력합니다. 이 이름은 액션에서 사용하는 액션 포인트와 확장 용도를 설명합니다.

1. **액션 포인트** 목록에서 **PRE\$1CREATE\$1HOSTED\$1CONFIGURATION\$1VERSION**을 선택합니다.

1. **Uri**의 경우, **Lambda 함수**를 선택한 다음 **Lambda 함수** 목록에서 함수를 선택합니다. 함수가 표시되지 않으면 함수를 생성한 AWS 리전 위치와 동일한에 있는지 확인합니다.

1. **IAM 역할**의 경우, 이 연습의 앞부분에서 생성한 역할을 선택하십시오.

1. **확장 파라미터(선택 사항)** 섹션에서 **새 파라미터 추가**를 선택합니다.

1. **파라미터 이름**에 이름을 입력합니다. 이 연습에서는 **S3\$1BUCKET**을 입력합니다.

1. 5\$111단계를 반복하여 `PRE_START_DEPLOYMENT` 액션 포인트에 사용할 두 번째 액션을 생성합니다.

1. **확장 생성**을 선택합니다.

# AWS 승인된 알림 확장 사용자 지정
<a name="working-with-appconfig-extensions-creating-custom-notification"></a>

Lambda 또는 확장을 생성하지 않아도 [AWS 작성 알림 확장](https://docs.aws.amazon.com/appconfig/latest/userguide/working-with-appconfig-extensions-about-predefined.html)을 사용할 수 있습니다. 확장 연결을 생성한 다음 지원되는 액션 포인트 중 하나를 호출하는 작업을 수행하기만 하면 됩니다. 기본적으로 AWS 작성된 알림 확장은 다음 작업 포인트를 지원합니다.
+ `ON_DEPLOYMENT_START`
+ `ON_DEPLOYMENT_COMPLETE`
+ `ON_DEPLOYMENT_ROLLED_BACK`

`AWS AppConfig deployment events to Amazon SQS` 확장 및 `AWS AppConfig deployment events to Amazon SNS` 확장의 사용자 지정 버전을 생성하는 경우 알림을 받을 액션 포인트를 지정할 수 있습니다.

**참고**  
`AWS AppConfig deployment events to EventBridge` 확장은 `PRE_*` 액션 포인트를 지원하지 않습니다. AWS 작성 버전에 할당된 일부 기본 작업 지점을 제거하려면 사용자 지정 버전을 생성할 수 있습니다.

 AWS 작성 알림 확장의 사용자 지정 버전을 생성하는 경우 Lambda 함수를 생성할 필요가 없습니다. 새 확장 버전의 `Uri` 필드에 Amazon 리소스 이름(ARN)을 지정하기만 하면 됩니다.
+ 사용자 지정 EventBridge 알림 확장의 경우 `Uri` 필드에 EventBridge 기본 이벤트의 ARN을 입력하십시오.
+ 사용자 지정 Amazon SNS 알림 확장의 경우 `Uri` 필드에 Amazon SNS 주제의 ARN을 입력합니다.
+ 사용자 지정 Amazon SQS 알림 확장의 경우 `Uri` 필드에 Amazon SQS 메시지 대기열의 ARN을 입력합니다.

# 4단계: 사용자 지정 확장에 대한 AWS AppConfig 확장 연결 생성
<a name="working-with-appconfig-extensions-creating-custom-association"></a>

확장을 생성하거나 AWS 작성된 확장을 구성하려면 특정 AWS AppConfig 리소스가 사용될 때 확장을 호출하는 작업 지점을 정의합니다. 예를 들어, 특정 애플리케이션에 대한 구성 배포가 시작될 때마다 `AWS AppConfig deployment events to Amazon SNS` 확장을 실행하고 Amazon SNS 주제에 대한 알림을 수신하도록 선택할 수 있습니다. 특정 AWS AppConfig 리소스에 대한 확장을 호출하는 작업 지점을 정의하는 것을 *확장 연결*이라고 합니다. 확장 연결은 확장과 애플리케이션 또는 구성 프로필과 같은 AWS AppConfig 리소스 간의 지정된 관계입니다.

단일 AWS AppConfig 애플리케이션에는 여러 환경과 구성 프로필이 포함될 수 있습니다. 확장을 애플리케이션 또는 환경에 연결하는 경우는 해당하는 경우 애플리케이션 또는 환경 리소스와 관련된 모든 워크플로에 대해 확장을 AWS AppConfig 호출합니다.

예를 들어 AccessList라는 구성 프로필을 포함하는 MobileApps라는 AWS AppConfig 애플리케이션이 있다고 가정해 보겠습니다. MobileApps 애플리케이션에 베타, 통합 및 프로덕션 환경이 포함되어 있다고 가정해 보겠습니다. AWS 작성된 Amazon SNS 알림 확장에 대한 확장 연결을 생성하고 확장을 MobileApps 애플리케이션에 연결합니다. Amazon SNS 알림 확장은 애플리케이션 구성이 세 가지 환경 중 하나에 배포될 때마다 간접적으로 호출됩니다.

다음 절차에 따라 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**를 선택합니다.

1. **확장** 탭에서 확장의 옵션 버튼을 선택한 다음 **리소스에 추가**를 선택합니다. 이 연습에서는 **MyS3ConfigurationBackUpExtension**을 선택합니다.

1. **확장 리소스 세부 정보** 섹션의 **리소스 유형**에서 AWS AppConfig 리소스 유형을 선택합니다. 선택한 리소스에 따라는 다른 리소스를 선택하라는 AWS AppConfig 메시지를 표시합니다. 이 연습에서는 **애플리케이션**을 선택합니다.

1. 목록에서 애플리케이션을 선택합니다.

1. **매개변수** 섹션에서 **S3\$1BUCKET**이 **키** 필드에 나열되어 있는지 확인합니다. **값** 필드에 Lambda 확장의 ARN을 붙여 넣습니다. 예를 들어 `arn:aws:lambda:aws-region:111122223333:function:MyS3ConfigurationBackUpExtension`입니다.

1. **리소스에 연결 만들기**를 선택합니다.

연결을 만든 후 `SourceUri`에 대한 `hosted`를 지정하는 새 구성 프로필을 만들어 `MyS3ConfigurationBackUpExtension` 확장을 간접적으로 호출할 수 있습니다. 새 구성을 생성하는 워크플로의 일부로는 `PRE_CREATE_HOSTED_CONFIGURATION_VERSION` 작업 지점에 AWS AppConfig 직면합니다. 이 액션 포인트가 발생하면 `MyS3ConfigurationBackUpExtension` 확장이 간접적으로 호출되어 새로 생성된 구성을 확장 연결 `Parameter` 섹션에 지정된 S3 버킷에 자동으로 백업합니다.