

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

# Amazon SNS Event Fork Pipelines 샘플 애플리케이션 배포 및 테스트
<a name="sns-deploy-test-fork-pipelines-sample-application"></a>

이벤트 기반 애플리케이션의 개발을 가속화하기 위해 AWS Event Fork Pipelines 기반 이벤트 처리 파이프라인에서 Amazon SNS 주제를 구독할 수 있습니다. AWS Event Fork Pipelines은 [AWS 서버리스 애플리케이션 모델](https://aws.amazon.com/serverless/sam/)(AWS SAM)을 기반으로 하는 오픈 소스 [중첩](https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/serverless-sam-template-nested-applications.html) 애플리케이션 제품군으로, [AWS Event Fork Pipelines 제품군](https://serverlessrepo.aws.amazon.com/applications?query=aws-event-fork-pipelines)(사용자 **지정 IAM 역할 또는 리소스 정책을 생성하는 앱 표시** 선택)에서 AWS 계정에 직접 배포할 수 있습니다. 자세한 내용은 [AWS Event Fork Pipelines 작동 방식](sns-fork-pipeline-as-subscriber.md#how-sns-fork-works) 단원을 참조하십시오.

이 페이지에서는 AWS Management Console 를 사용하여 AWS Event Fork Pipelines 샘플 애플리케이션을 배포하고 테스트하는 방법을 보여줍니다.

**중요**  
 AWS Event Fork Pipelines 샘플 애플리케이션 배포를 완료한 후 원치 않는 비용이 발생하지 않도록 CloudFormation 스택을 삭제합니다. 자세한 정보는 *AWS CloudFormation 사용 설명서*의 [CloudFormation 콘솔에서 스택 삭제](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/cfn-console-delete-stack.html)를 참조하세요.

# AWS Event Fork Pipelines 사용 사례 예제
<a name="example-sns-fork-use-case"></a>

다음 시나리오에서는 Event Fork Pipelines을 사용하는 AWS 이벤트 기반 서버리스 전자 상거래 애플리케이션을 설명합니다. 에서이 [예제 전자 상거래 애플리케이션을](https://serverlessrepo.aws.amazon.com/applications/arn:aws:serverlessrepo:us-east-1:077246666028:applications~fork-example-ecommerce-checkout-api) 사용한 AWS Serverless Application Repository 다음 AWS Lambda 콘솔을 AWS 계정 사용하여에 배포할 수 있습니다. 콘솔에서 이를 테스트하고 GitHub에서 소스 코드를 검사할 수 있습니다.

![\[AWS 서비스를 통합하는 서버리스 전자 상거래 애플리케이션의 아키텍처입니다. 이 그림은 API Gateway를 통해 주문을 하는 전자 상거래 사용자의 흐름을 주문 스토리지, 검색 분석 및 재생을 포함한 다양한 처리 파이프라인으로 묘사하여 Amazon SNS, Lambda, Amazon SQS, DynamoDB 및 Kibana를 통해 이벤트를 관리하고 분석하는 방법을 보여줍니다.\]](http://docs.aws.amazon.com/ko_kr/sns/latest/dg/images/sns-fork-example-use-case.png)


이 전자 상거래 애플리케이션은 API Gateway에서 호스팅하고 AWS Lambda 함수에서 지원하는 RESTful API를 통해 구매자로부터 주문을 받습니다`CheckoutApiBackendFunction`. 이 함수는 모든 수신된 주문을 `CheckoutEventsTopic`이라는 Amazon SNS 주제 에 게시하고, 이 주제는 주문을 4가지 파이프라인으로 분산합니다.

첫 번째 파이프라인은 전자 상거래 애플리케이션의 소유자가 설계 및 구현한 정규 체크아웃 처리 파이프라인입니다. 이 파이프라인에는 수신된 모든 주문을 버퍼링`CheckoutQueue`하는 Amazon SQS 대기열, 이러한 주문을 처리하기 위해 대기열을 폴링`CheckoutFunction`하는 라는 AWS Lambda 함수, 제출된 모든 주문을 안전하게 저장하는 DynamoDB 테이블`CheckoutTable`이 있습니다.

## AWS Event Fork 파이프라인 적용
<a name="applying-sns-fork-pipelines"></a>

전자 상거래 애플리케이션의 구성 요소가 핵심 비즈니스 로직을 처리합니다. 그러나 전자 상거래 애플리케이션 소유자도 다음을 처리해야 합니다.
+ **규정 준수**—안전한 압축 백업(저장 시 암호화) 및 민감한 정보의 폐기
+ **복원성**—이행 프로세스 중단 시 최근 주문 다시 보기
+ **검색 가능성**—접수된 주문에 대한 분석 실행 및 지표 생성

애플리케이션 소유자는이 이벤트 처리 로직을 구현하는 대신 AWS Event Fork Pipelines에서 `CheckoutEventsTopic` Amazon SNS 주제를 구독할 수 있습니다.
+ [이벤트 저장 및 백업 파이프라인](sns-fork-pipeline-as-subscriber.md#sns-fork-event-storage-and-backup-pipeline)은 데이터를 변환하여 신용카드 세부 정보를 제거하고, 데이터를 60초간 버퍼링하고, GZIP을 사용하여 데이터를 압축하고, Amazon S3용 기본 고객 관리형 키를 사용하여 암호화하도록 구성되어 있습니다. 이 키는 AWS Key Management Service ()에서 관리 AWS 및 구동됩니다AWS KMS.

  자세한 정보는 *Amazon Data Firehose 개발자 안내서*의 [대상에 대해 Amazon S3 선택](https://docs.aws.amazon.com/firehose/latest/dev/create-destination.html#create-destination-s3), [Amazon Data Firehose 데이터 변환](https://docs.aws.amazon.com/firehose/latest/dev/data-transformation.html) 및 [설정 구성](https://docs.aws.amazon.com/firehose/latest/dev/create-configure.html)을 참조하세요.
+ [이벤트 검색 및 분석 파이프라인](sns-fork-pipeline-as-subscriber.md#sns-fork-event-search-and-analytics-pipeline)은 인덱스 재시도 지속시간 30초, 검색 도메인에서 인덱싱되지 않은 주문을 저장할 버킷, 인덱싱할 주문을 제한하는 필터 정책으로 구성되어 있습니다.

  자세한 정보는 *Amazon Data Firehose 개발자 가이드*의 [대상에 대한 OpenSearch Service 선택](https://docs.aws.amazon.com/firehose/latest/dev/create-destination.html#create-destination-elasticsearch)을 참조하세요.
+ [이벤트 다시 보기 파이프라인](sns-fork-pipeline-as-subscriber.md#sns-fork-event-replay-pipeline)은 전자 상거래 애플리케이션 소유자가 설계 및 구현한 일반 체크아웃 처리 파이프라인의 Amazon SQS 대기열 부분으로 구성되어 있습니다.

  자세한 정보는 *Amazon Simple Queue Service 개발자 안내서*의 [대기열 이름 및 URL](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-general-identifiers.html#queue-name-url)을 참조하세요.

다음 JSON filter 필터 정책은 이벤트 검색 및 분석 파이프라인의 구성에 설정되었습니다. 수신 주문 중 전체 금액이 \$1100 이상인 주문만 일치됩니다. 자세한 내용은 [Amazon SNS 메시지 필터링](sns-message-filtering.md) 단원을 참조하십시오.

```
{				
   "amount": [{ "numeric": [ ">=", 100 ] }]
}
```

전자 상거래 애플리케이션 소유자는 AWS Event Fork Pipelines 패턴을 사용하여 이벤트 처리를 위한 차별화되지 않는 로직 코딩을 따르는 개발 오버헤드를 피할 수 있습니다. 대신에서 AWS Serverless Application Repository 로 직접 AWS Event Fork Pipelines을 배포할 수 있습니다 AWS 계정.

# 1단계: 샘플 Amazon SNS 애플리케이션 배포
<a name="deploy-sample-application"></a>

1. [AWS Lambda 콘솔](https://console.aws.amazon.com/lambda/)에 로그인합니다.

1. 탐색 창에서 **함수**를 선택한 후 **함수 생성**을 선택합니다.

1. **함수 생성** 페이지에서 다음을 수행합니다.

   1. **서버리스 앱 리포지토리 찾아보기**, **퍼블릭 애플리케이션**, **사용자 지정 IAM 역할 또는 리소스 정책을 생성하는 앱 표시**를 선택합니다.

   1. `fork-example-ecommerce-checkout-api`을 검색하여 이 애플리케이션을 선택합니다.

1. **fork-example-ecommerce-checkout-api** 페이지에서 다음을 수행합니다.

   1. **Application settings(애플리케이션 설정)** 섹션에서 **애플리케이션 이름**을 입력합니다(예: `fork-example-ecommerce-my-app`).
**참고**  
나중에 손쉽게 리소스를 찾을 수 있도록 접두사 `fork-example-ecommerce`를 유지하세요.
각 배포에서 애플리케이션 이름이 고유해야 합니다. 애플리케이션 이름을 재사용하면 배포는 (새 스택을 생성하는 대신) 이전에 배포된 CloudFormation 스택만 업데이트합니다.

   1. (선택 사항) 애플리케이션의 Lambda 함수 실행을 위해 다음 **LogLevel** 설정 중 하나를 입력합니다.
      + `DEBUG`
      + `ERROR`
      + `INFO`(기본값)
      + `WARNING`

1. **I acknowledge that this app creates custom IAM roles, resource policies and deploys nested applications.(본인은 이 앱이 사용자 지정 IAM 역할, 리소스 정책을 생성하고 중첩 애플리케이션을 배포함을 확인합니다.)**를 선택하고 페이지 맨 아래에서 **배포**를 선택합니다.

**Deployment status for fork-example-ecommerce-*my-app*(fork-example-ecommerce-my-app 배포 상태)** 페이지에서 Lambda가 **Your application is being deployed(애플리케이션을 배포 중)** 상태를 표시합니다.

**리소스** 섹션에서는 스택 생성을 CloudFormation 시작하고 각 리소스에 대한 **CREATE\$1IN\$1PROGRESS** 상태를 표시합니다. 프로세스가 완료되면 **CREATE\$1COMPLETE** 상태가 CloudFormation 표시됩니다.

**참고**  
모든 리소스를 배포하는 데 20\$130분 정도 걸릴 수 있습니다.

배포가 완료되면 Lambda가 **Your application has been deployed(애플리케이션이 배포됨)** 상태를 표시합니다.

# 2단계: SNS 연결 샘플 애플리케이션 실행
<a name="execute-sample-application"></a>

1.  AWS Lambda 콘솔의 탐색 패널에서 **애플리케이션을** 선택합니다.

1. **애플리케이션** 페이지의 검색란에서 `serverlessrepo-fork-example-ecommerce-my-app`을 검색하여 이 애플리케이션을 선택합니다.

1. **리소스** 섹션에서 다음을 수행합니다.

   1. 유형이 **ApiGateway RestApi**인 리소스를 찾으려면 **유형**(예: `ServerlessRestApi`)별로 리소스를 정렬한 다음 리소스를 확장합니다.

   1. 유형이 각각 **ApiGateway Deployment** 및 **ApiGateway Stage**인 2개의 중첩 리소스가 표시됩니다.

   1. **Prod API endpoint(Prod API 엔드포인트)** 링크를 복사하고 여기에 `/checkout`를 추가합니다. 예: 

      ```
      https://abcdefghij.execute-api.us-east-2.amazonaws.com/Prod/checkout
      ```

1. 다음 JSON을 `test_event.json` 파일에 복사합니다.

   ```
   {
      "id": 15311,
      "date": "2019-03-25T23:41:11-08:00",
      "status": "confirmed",
      "customer": {
         "id": 65144,		
   	 "quantity": 2,
         "price": 25.00,
         "subtotal": 50.00
      }]
   }
   ```

1. HTTPS 요청을 API 엔드포인트로 전송하려면 `curl` 명령을 실행하여 샘플 이벤트 페이로드를 입력으로 전달합니다. 예:

   ```
   curl -d "$(cat test_event.json)" https://abcdefghij.execute-api.us-east-2.amazonaws.com/Prod/checkout
   ```

   API가 다음과 같이 실행 성공을 나타내는 빈 응답을 반환합니다.

   ```
   { }
   ```

# 3단계: Amazon SNS 애플리케이션 및 파이프라인 성능 확인
<a name="verify-sample-application-pipelines"></a>

## 1단계: 샘플 체크아웃 애플리케이션의 실행을 확인
<a name="verify-execution-checkout-pipeline"></a>

1. [Amazon DynamoDB 콘솔](https://console.aws.amazon.com/dynamodb/)에 로그인합니다.

1. 탐색 창에서 **테이블**을 선택합니다.

1. `serverlessrepo-fork-example`을 검색하고 `CheckoutTable`을 선택합니다.

1. 테이블 세부 정보에서 **항목**을 선택한 다음 생성된 항목을 선택합니다.

   저장된 속성이 표시됩니다.

## 2단계: 이벤트 저장 및 백업 파이프라인의 실행을 확인
<a name="verify-execution-event-storage-backup-pipeline"></a>

1. [Amazon S3 콘솔](https://console.aws.amazon.com/s3/)에 로그인합니다.

1. 탐색 창에서 **버킷**을 선택합니다.

1. `serverlessrepo-fork-example`을 검색하고 `CheckoutBucket`을 선택합니다.

1. 확장명이 `.gz`인 파일을 찾을 때까지 디렉터리 계층을 탐색합니다.

1. 파일을 다운로드하려면 **작업**, **열기**를 선택합니다.

1. 이 파이프라인은 규정 준수를 위해 신용카드 정보를 폐기하는 Lambda 함수로 구성되어 있습니다.

   저장된 JSON 페이로드가 신용카드 정보를 포함하지 않는지 확인하려면 파일을 압축합니다.

## 3단계: 이벤트 검색 및 분석 파이프라인의 실행을 확인
<a name="verify-execution-event-search-analytics-pipeline"></a>

1. [OpenSearch Service 콘솔](https://console.aws.amazon.com/aos/)에 로그인합니다.

1. 탐색 창의 **My domains(내 도메인)**에서 접두사가 `serverl-analyt`인 도메인을 선택합니다.

1. 이 파이프라인은 숫자 일치 조건을 설정하는 Amazon SNS 구독 필터 정책으로 구성되어 있습니다.

   이벤트가 금액이 USD \$1100를 초과하는 주문을 참조하기 때문에 인덱싱되는지 확인하려면, **serverl-analyt-*abcdefgh1ijk*** 페이지에서 **Indices(인덱스)**, **checkout\$1events(체크아웃 이벤트)**를 선택합니다.

## 4단계: 이벤트 다시 보기 애플리케이션의 실행을 확인
<a name="verify-execution-event-replay-pipeline"></a>

1. [Amazon SQS 콘솔](https://console.aws.amazon.com/sqs/)에 로그인합니다.

1. 대기열 목록에서 `serverlessrepo-fork-example`을 검색하고 `ReplayQueue`를 선택합니다.

1. [**메시지 전송 및 수신(Send and receive messages)**]을 선택합니다.

1. **Send and receive messages in fork-example-ecommerce-*my-app*...ReplayP-ReplayQueue-*123ABCD4E5F6***(fork-example-ecommerce-my-app...ReplayP-ReplayQueue-123ABCD4E5F6에서 메시지 보내기 및 받기) 대화 상자에서 **Poll for messages**(메시지 폴링)를 선택합니다.

1. 이벤트가 대기 상태로 전환되는지 확인하려면 대기열에 표시되는 메시지 옆의 **추가 정보**를 선택합니다.

# 4단계: 문제를 시뮬레이션하고 복구를 위해 이벤트를 다시 보기
<a name="simulate-issue-replay-events-for-recovery"></a>

## 1단계: 시뮬레이션된 문제를 활성화하고 두 번째 API 요청을 전송
<a name="enable-simulated-issue-send-second-api-request"></a>

1. [AWS Lambda 콘솔](https://console.aws.amazon.com/lambda/)에 로그인합니다.

1. 탐색 창에서 **함수**를 선택합니다.

1. `serverlessrepo-fork-example`을 검색하고 `CheckoutFunction`을 선택합니다.

1. **fork-example-ecommerce-*my-app*-CheckoutFunction-*ABCDEF*...** 페이지의 **환경 변수** 섹션에서 **BUG\$1ENABLED** 변수를 **true**로 설정하고 **저장**을 선택합니다.

1. 다음 JSON을 `test_event_2.json` 파일에 복사합니다.

   ```
   {
   	   "id": 9917,
   	   "date": "2019-03-26T21:11:10-08:00",
   	   "status": "confirmed",
   	   "customer": {
   	      "id": 56999,
   "quantity": 1,
   	      "price": 75.00,
   	      "subtotal": 75.00
   	   }]
   	}
   ```

1. HTTPS 요청을 API 엔드포인트로 전송하려면 `curl` 명령을 실행하여 샘플 이벤트 페이로드를 입력으로 전달합니다. 예:

   ```
   curl -d "$(cat test_event_2.json)" https://abcdefghij.execute-api.us-east-2.amazonaws.com/Prod/checkout
   ```

   API가 다음과 같이 실행 성공을 나타내는 빈 응답을 반환합니다.

   ```
   { }
   ```

## 2단계: 시뮬레이션된 데이터 손상 확인
<a name="verify-simulated-data-corruption"></a>

1. [Amazon DynamoDB 콘솔](https://console.aws.amazon.com/dynamodb/)에 로그인합니다.

1. 탐색 창에서 **테이블**을 선택합니다.

1. `serverlessrepo-fork-example`을 검색하고 `CheckoutTable`을 선택합니다.

1. 테이블 세부 정보에서 **항목**을 선택한 다음 생성된 항목을 선택합니다.

   저장된 속성이 표시되고 일부가 **CORRUPTED\$1(손상됨\$1)**으로 표시됩니다.

## 3단계: 시뮬레이션된 문제 비활성화
<a name="disable-simulated-issue"></a>

1. [AWS Lambda 콘솔](https://console.aws.amazon.com/lambda/)에 로그인합니다.

1. 탐색 창에서 **함수**를 선택합니다.

1. `serverlessrepo-fork-example`을 검색하고 `CheckoutFunction`을 선택합니다.

1. **fork-example-ecommerce-*my-app*-CheckoutFunction-*ABCDEF*...** 페이지의 **환경 변수** 섹션에서 **BUG\$1ENABLED** 변수를 **false**로 설정하고 **저장**을 선택합니다.

## 4단계: 문제로부터 복구하기 위해 다시 보기 활성화
<a name="enable-replay-recover-from-simulated-issue"></a>

1.  AWS Lambda 콘솔의 탐색 패널에서 **함수**를 선택합니다.

1. `serverlessrepo-fork-example`을 검색하고 `ReplayFunction`을 선택합니다.

1. **Designer(디자이너)** 섹션을 확장하고, **SQS** 타일을 선택한 다음, **SQS** 섹션에서 **활성**을 선택합니다.
**참고**  
Amazon SQS 이벤트 소스 트리거가 활성화되려면 약 1분 정도 걸립니다.

1. **저장**을 선택합니다.

1. 복구된 속성을 보려면 Amazon DynamoDB 콘솔로 돌아갑니다.

1. 재생을 비활성화하려면 AWS Lambda 콘솔로 돌아가에 대한 Amazon SQS 이벤트 소스 트리거를 비활성화합니다`ReplayFunction`.