

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

# 를 사용하여 Amazon S3 이벤트 처리 AWS SAM
<a name="serverless-example-s3"></a>

이 예제 애플리케이션을 사용하면 이전 예제에서 학습한 내용을 기반으로 더 복잡한 애플리케이션을 설치합니다. 이 애플리케이션은 Amazon S3 객체 업로드 이벤트 소스에서 간접 호출되는 Lambda 함수로 구성되어 있습니다. 이 연습에서는 Lambda 함수를 통해 AWS 리소스에 액세스하고 AWS 서비스를 호출하는 방법을 보여줍니다.

이 샘플 서버리스 애플리케이션은 Amazon S3에서 객체 생성 이벤트를 처리합니다. Amazon S3는 버킷에 업로드된 각 이미지에 대해 객체 생성 이벤트를 감지하고 Lambda 함수를 간접 호출합니다. Lambda 함수는 Amazon Rekognition을 간접 호출하여 이미지에 있는 텍스트를 탐지합니다. 그런 다음 Amazon Rekognition에서 반환한 결과를 DynamoDB 테이블에 저장합니다.

**참고**  
이 예제 애플리케이션에서는 이전 예제와 약간 다른 순서로 단계를 수행합니다. 이 예제에서는 로컬에서 Lambda 함수를 테스트하기 *전에* AWS 리소스를 생성하고 IAM 권한을 구성해야 하기 때문입니다. 를 활용하여 리소스를 CloudFormation 생성하고 권한을 구성합니다. 그렇지 않으면 Lambda 함수를 로컬에서 테스트하기 전에 이 작업을 수동으로 수행해야 합니다.  
이 예제는 더 복잡하므로 이 예제를 실행하기 전에 이전 예제 애플리케이션을 설치하는 데 익숙해야 합니다.

## 시작하기 전 준비 사항
<a name="serverless-example-s3-prereq"></a>

[AWS SAM CLI 설치](install-sam-cli.md)에서 필요한 설정을 완료했는지 확인하십시오.

## 1단계: 애플리케이션 초기화
<a name="serverless-example-s3-setup-local-app"></a>

이 섹션에서는 AWS SAM 템플릿과 애플리케이션 코드로 구성된 샘플 애플리케이션을 다운로드합니다.

**애플리케이션의 초기화**

1.  AWS SAM CLI 명령 프롬프트에서 다음 명령을 실행합니다.

   ```
   sam init \
   --location https://github.com/aws-samples/cookiecutter-aws-sam-s3-rekognition-dynamodb-python \
   --no-input
   ```

1. 명령을 통해 생성된 디렉터리(`aws_sam_ocr/`)의 내용을 검토합니다.
   + `template.yaml` - Amazon S3 애플리케이션에 필요한 세 가지 AWS 리소스, 즉 Lambda 함수, Amazon S3 버킷 및 DynamoDB 테이블을 정의합니다. 또한 템플릿은 이 리소스들 간의 매핑 및 권한을 정의합니다.
   + `src/` 디렉터리 – Amazon S3 애플리케이션 코드를 포함합니다.
   + `SampleEvent.json` – 로컬 테스트에 사용되는 샘플 이벤트 소스.

## 2단계: 애플리케이션 패키징
<a name="serverless-example-s3-package-serverless-app"></a>

이 애플리케이션을 로컬에서 테스트하려면 먼저를 AWS SAM CLI 사용하여 애플리케이션을 AWS 클라우드에 배포하는 데 사용하는 배포 패키지를 생성해야 합니다. 이 배포는 애플리케이션을 로컬에서 테스트하는 데 필요한 AWS 리소스와 권한을 생성합니다.

**Lambda 배포 패키지 생성하기**

1. 패키징된 코드를 저장할 위치에 S3 버킷을 생성합니다. 기존 S3 버킷을 사용하려면 이 단계를 건너뜁니다.

   ```
   aws s3 mb s3://bucketname
   ```

1. 다음 `package` CLI 명령을 명령 프롬프트에서 실행하여 배포 패키지를 생성합니다.

   ```
   sam package \
       --template-file template.yaml \
       --output-template-file packaged.yaml \
       --s3-bucket bucketname
   ```

   귀하는 다음 단계에서 애플리케이션을 배포할 때 새 템플릿 파일인 `packaged.yaml`을 지정합니다.

## 3단계: 애플리케이션 배포
<a name="serverless-example-s3-deploy-serverless-app"></a>

이제 배포 패키지를 생성했으므로 이를 사용하여 애플리케이션을 AWS 클라우드에 배포합니다. 그런 다음 AWS 클라우드에서 애플리케이션을 호출하여 애플리케이션을 테스트합니다.

**서버리스 애플리케이션을 AWS 클라우드에 배포하려면**
+ 에서 `deploy` 명령을 AWS SAM CLI사용하여 템플릿에 정의한 모든 리소스를 배포합니다.

  

  ```
  sam deploy \
      --template-file packaged.yaml \
      --stack-name aws-sam-ocr \
      --capabilities CAPABILITY_IAM \
      --region us-east-1
  ```

  명령에서 `--capabilities` 파라미터는가 IAM 역할을 생성 CloudFormation 하도록 허용합니다.

  CloudFormation 는 템플릿에 정의된 AWS 리소스를 생성합니다. CloudFormation 콘솔에서 이러한 리소스의 이름에 액세스할 수 있습니다.

**AWS 클라우드에서 서버리스 애플리케이션을 테스트하려면**

1. 이 샘플 애플리케이션용으로 생성한 Amazon S3 버킷에 이미지를 업로드합니다.

1. DynamoDB 콘솔을 열고 생성된 테이블을 찾습니다. Amazon Rekognition에서 반환한 결과는 표를 잠조하세요.

1. Amazon Rekognition이 업로드한 이미지에서 찾은 텍스트를 포함하는 새 기록이 DynamoDB 테이블에 포함되어 있는지 확인하십시오.

## 2단계: 애플리케이션 로컬 테스트
<a name="serverless-example-s3-test-locally"></a>

애플리케이션을 로컬에서 테스트하려면 먼저에서 생성한 AWS 리소스의 이름을 검색해야 합니다 CloudFormation.
+ Amazon S3 키 이름과 버킷 이름을 검색합니다 CloudFormation. 객체 키, 버킷 이름, 버킷 ARN의 값을 대체하여 `SampleEvent.json` 파일을 수정합니다.
+ DynamoDB 테이블 이름을 검색합니다. 이 이름은 다음 `sam local invoke` 명령에 사용됩니다.

 AWS SAMCLI를 사용하여 샘플 Amazon S3 이벤트를 생성하고 Lambda 함수를 간접 호출합니다.

```
TABLE_NAME=Table name obtained from CloudFormation console sam local invoke --event SampleEvent.json
```

이 `TABLE_NAME=` 부분은 DynamoDB 테이블 이름을 설정합니다. `--event` 파라미터는 Lambda 함수에 전달할 테스트 이벤트 메시지가 들어 있는 파일을 지정합니다.

이제 Amazon Rekognition에서 반환한 결과를 기반으로 예상 DynamoDB 기록이 생성되었는지 확인할 수 있습니다.

## 다음 단계
<a name="serverless-example-s3-next-steps"></a>

계속 알아보려면 다음 리소스를 AWS SAM참조하세요.
+ **[서버리스 랜드](https://serverlessland.com/patterns?framework=AWS+SAM)** - AWS SAM 애플리케이션 전용 서버리스 패턴, 코드 예제 및 학습 리소스를 결합하는 사이트입니다.