

# Lambda@Edge 함수에 대한 트리거 추가
<a name="lambda-edge-add-triggers"></a>

Lambda@Edge 트리거는 CloudFront 배포, 캐시 동작, 그리고 함수 실행을 유도하는 이벤트를 하나로 조합한 것입니다. 예를 들어, 최종 사용자가 해당 배포에 설정된 특정 캐시 동작을 CloudFront에 요청하면 함수가 실행되도록 하는 트리거를 생성할 수 있습니다. 하나 이상의 CloudFront 트리거를 지정할 수 있습니다.

**작은 정보**  
CloudFront 배포를 생성할 때 다른 요청을 수신할 때 응답하는 방법을 CloudFront에게 알려주는 설정을 지정합니다. 기본 설정을 배포에 대한 *기본 캐시 동작*이라고 합니다. CloudFront가 특정한 상황(예를 들어, 특정 파일 유형에 대한 요청을 수신할 때)에서 응답하는 방법을 정의하는 추가 캐시 동작을 설정할 수 있습니다. 자세한 내용은 [캐시 동작 설정](DownloadDistValuesCacheBehavior.md) 섹션을 참조하세요.

Lambda 함수를 처음 생성할 때는 트리거를 *하나*만 지정할 수 있습니다. 나중에 Lambda 콘솔을 사용하거나 CloudFront 콘솔에서 배포를 편집하여 동일한 함수에 더 많은 트리거를 추가할 수 있습니다.
+ Lambda 콘솔을 사용하는 방법은 동일한 CloudFront 배포에 대한 함수에 트리거를 더 추가하려는 경우에 적합합니다.
+ CloudFront 콘솔을 사용하는 방법은 업데이트하려는 배포를 쉽게 찾을 수 있기 때문에 여러 배포에 대한 트리거를 추가하려는 경우에 더 적합할 수 있습니다. 또한 동시에 다른 CloudFront 설정을 업데이트할 수 있습니다.

**Topics**
+ [Lambda@Edge 함수를 트리거할 수 있는 CloudFront 이벤트](lambda-cloudfront-trigger-events.md)
+ [함수를 트리거할 이벤트를 선택합니다.](lambda-how-to-choose-event.md)
+ [Lambda@Edge 함수에 트리거 추가](lambda-edge-add-triggers-console.md)

# Lambda@Edge 함수를 트리거할 수 있는 CloudFront 이벤트
<a name="lambda-cloudfront-trigger-events"></a>

특정한 CloudFront 이벤트가 발생하면 Lambda 함수가 실행되도록 하는 트리거(연결)를 Amazon CloudFront 배포의 각 캐시 동작에 대해 4개까지 추가할 수 있습니다. CloudFront 트리거는 아래 그림의 네 가지 CloudFront 이벤트 중 하나를 토대로 합니다.

![\[Lambda 함수의 CloudFront 트리거 이벤트가 CloudFront와 통합되는 방법을 보여 주는 개념 그림.\]](http://docs.aws.amazon.com/ko_kr/AmazonCloudFront/latest/DeveloperGuide/images/cloudfront-events-that-trigger-lambda-functions.png)


Lambda@Edge 함수를 트리거하는 데 사용할 수 있는 CloudFront 이벤트는 다음과 같습니다.

**최종 사용자 요청**  
이 함수는 CloudFront가 최종 사용자로부터 요청을 수신하면 실행되며, 요청된 객체가 CloudFront 캐시에 있는지를 확인합니다.  
다음과 같은 경우에는 함수가 실행되지 않습니다.  
+ 사용자 지정 오류 페이지를 가져오는 경우.
+ CloudFront가 자동으로 HTTP 요청을 HTTPS로 리디렉션하는 경우([뷰어 프로토콜 정책](DownloadDistValuesCacheBehavior.md#DownloadDistValuesViewerProtocolPolicy) 값이 **Redirect HTTP to HTTPS**일 경우).

**오리진 요청**  
이 함수는 CloudFront가 오리진으로 요청을 전달할 *경우에만* 실행됩니다. 요청된 객체가 CloudFront 캐시에 저장되어 있으면 함수는 실행되지 않습니다.

**오리진 응답**  
이 함수는 CloudFront가 오리진으로부터 응답을 수신한 후 실행되어 응답의 객체를 캐싱합니다. 오리진에서 오류가 반환되는 경우에도 함수는 실행됩니다.  
다음과 같은 경우에는 함수가 실행되지 않습니다.  
+ 요청된 파일이 CloudFront 캐시에 있고 만료되지 않은 경우.
+ 오리진 요청 이벤트가 트리거한 함수로부터 응답이 생성되는 경우.

**최종 사용자 응답**  
요청된 파일을 최종 사용자에게 반환하기 전에 함수가 실행됩니다. 이때 함수는 해당 파일이 이미 CloudFront 캐시에 있는지 여부와 상관없이 실행됩니다.  
다음과 같은 경우에는 함수가 실행되지 않습니다.  
+ 오리진이 400 이상의 HTTP 상태 코드 반환하는 경우
+ 사용자 지정 오류 페이지가 반환될 때.
+ 최종 사용자 요청 이벤트가 트리거한 함수로부터 응답이 생성되는 경우.
+ CloudFront가 자동으로 HTTP 요청을 HTTPS로 리디렉션하는 경우([뷰어 프로토콜 정책](DownloadDistValuesCacheBehavior.md#DownloadDistValuesViewerProtocolPolicy) 값이 **Redirect HTTP to HTTPS**일 경우).

한 캐시 동작에 여러 트리거를 추가하는 경우, 이를 사용하여 동일한 함수를 실행하거나 트리거마다 다른 함수를 실행할 수 있습니다. 또한 복수의 배포에 동일한 함수를 연결할 수도 있습니다.

**참고**  
CloudFront 이벤트가 Lambda 함수의 실행을 트리거하면 CloudFront가 계속되기 **전에 함수가 완료되어야 합니다.  
예를 들어, CloudFront 최종 사용자 요청 이벤트에 따라 Lambda 함수가 트리거되면 CloudFront는 Lambda 함수 실행이 완료될 때까지 최종 사용자에게 응답을 반환하거나 오리진에 요청을 전달하지 않습니다.  
다시 말해, Lambda 함수를 트리거하는 각 요청은 요청 지연 시간을 증가시키므로 최대한 빨리 함수가 실행되도록 해야 합니다.

# 함수를 트리거할 이벤트를 선택합니다.
<a name="lambda-how-to-choose-event"></a>

Lambda 함수를 트리거하는 데 사용할 CloudFront 이벤트를 결정할 때 다음 사항을 고려해야 합니다.

**CloudFront에서 Lambda 함수가 변경한 객체를 캐싱하고자 함**  
CloudFront가 Lambda 함수로 수정된 객체를 캐싱하여 다음에 해당 객체가 요청될 경우 엣지 로케이션의 객체에 CloudFront가 서비스를 제공할 수 있게 하려면 **오리진 요청 또는 **오리진 응답 이벤트를 사용합니다.  
그러면 오리진에 대한 로드가 감소하고, 이후 요청의 지연 시간이 단축되며, 이후 요청에서 Lambda@Edge를 호출하는 비용이 절감됩니다.  
예를 들어, 오리진에 의해 반환되는 객체의 헤더를 추가, 제거 또는 변경하고 CloudFront에서 해당 결과를 캐싱하게 하려는 경우 오리진 응답 이벤트를 사용합니다.

**모든 요청에 대해 함수를 실행하고자 함**  
CloudFront가 배포에 대해 수신하는 모든 요청에서 함수를 실행하려면 **뷰어 요청 또는 **뷰어 응답 이벤트를 사용합니다.  
오리진 요청 및 오리진 응답 이벤트는 요청된 객체가 엣지 로케이션에 캐싱되지 않고 CloudFront가 오리진으로 요청을 전달하는 경우에만 발생합니다.

**함수가 캐시 키를 변경하고자 함**  
함수가 캐싱의 기준으로 사용되는 값을 변경하게 하려면 **뷰어 요청 이벤트를 사용합니다.  
예를 들어, 함수가 URL을 변경하여 경로에 언어 약자를 포함시키는 경우(예를 들어, 사용자가 드롭다운 목록에서 언어를 선택했기 때문) 최종 사용자 요청 이벤트를 사용합니다.  
+ **최종 사용자 요청 내 URL** - https://example.com/en/index.html
+ **요청이 독일 내 IP 주소로부터 온 경우의 URL** - https://example.com/de/index.html
쿠키 또는 요청 헤더를 기준으로 캐싱하는 경우에도 최종 사용자 요청 이벤트를 사용합니다.  
함수가 쿠키 또는 헤더를 변경하는 경우 CloudFront가 요청의 해당 부분을 오리진으로 전달하도록 구성합니다. 자세한 내용은 다음 항목을 참조하세요.  
+ [쿠키 기반의 콘텐츠 캐싱](Cookies.md)
+ [요청 헤더 기반의 콘텐츠 캐싱](header-caching.md)

**함수가 오리진의 응답에 영향을 미침**  
함수가 오리진의 응답에 영향을 미치는 방식으로 요청을 변경하려면 **오리진 요청 이벤트를 사용합니다.  
일반적으로 대부분의 뷰어 요청 이벤트는 오리진으로 전달되지 않습니다. CloudFront는 이미 엣지 캐시에 저장된 객체를 사용하여 요청에 응답합니다. 함수가 오리진 요청 이벤트를 기준으로 요청을 변경하는 경우 CloudFront가 변경된 오리진 요청에 대한 응답을 캐싱합니다.

# Lambda@Edge 함수에 트리거 추가
<a name="lambda-edge-add-triggers-console"></a>

Lambda@Edge 함수에 트리거를 추가하기 위해 AWS Lambda 콘솔 또는 Amazon CloudFront 콘솔을 사용할 수 있습니다.

**중요**  
번호가 매겨진 함수 버전에 대해서만 트리거를 생성할 수 있습니다(**\$1LATEST** 제외).

------
#### [ Lambda console ]<a name="lambda-edge-add-triggers-procedure"></a>

**Lambda@Edge 함수에 CloudFront 이벤트에 대한 트리거를 추가하려면**

1. AWS Management Console에 로그인하고 AWS Lambdahttps://console.aws.amazon.com/lambda/[에서 ](https://console.aws.amazon.com/lambda/) 콘솔을 엽니다.

1. 페이지 상단의 리전 목록에서 **미국 동부(버지니아 북부)(US East (N. Virginia))**를 선택합니다.

1. **함수** 페이지에서 트리거를 추가할 함수의 이름을 선택합니다.

1. **함수 개요** 페이지에서 **버전** 탭을 선택합니다.

1. 트리거를 추가할 버전을 선택합니다.

   버전을 선택한 후 버튼의 이름이 **버전: \$1LATEST** 또는 **버전:** *버전 번호*로 변경됩니다.

1. **트리거** 탭을 선택합니다.

1. **트리거 추가**를 선택합니다.

1. **트리거 구성**에서 **소스 선택**을 선택하고 **cloudfront**를 입력한 다음 **CloudFront**를 선택합니다.
**참고**  
하나 이상의 트리거를 이미 만든 경우 CloudFront가 기본 서비스입니다.

1. 다음 값을 지정하여 Lambda 함수를 실행할 시기를 나타냅니다.

   1. **배포** – 트리거를 추가할 배포를 선택합니다.

   1. **캐시 동작** – 함수를 실행할 객체를 지정하는 캐시 동작을 선택합니다.
**참고**  
캐시 동작에 `*`를 지정하는 경우 Lambda 함수는 기본 캐시 동작으로 배포됩니다.

   1. **CloudFront 이벤트** – 함수를 실행시키는 CloudFront 이벤트를 선택합니다.

   1. **본문 포함** – 함수의 요청 본문에 액세스하려는 경우 이 확인란을 선택합니다.

   1. **Lambda@Edge로 배포 확인** - 이 확인란을 선택하면 AWS Lambda가 전 세계 AWS 리전으로 함수를 복제합니다.

1. **추가**를 선택합니다.

   업데이트된 CloudFront 배포가 배포되면 함수가 지정된 CloudFront 이벤트에 대한 요청을 처리하기 시작합니다. 배포가 배포되었는지 확인하려면 탐색 창에서 **배포**를 선택합니다. 배포가 되면 배포에 대한 **상태** 열의 값이 **배포 중**에서 배포 날짜 및 시간으로 변경됩니다.

------
#### [ CloudFront console ]<a name="lambda-create-functions-add-triggers-cloudfront-console-procedure"></a>

**Lambda@Edge 함수에 CloudFront 이벤트에 대한 트리거를 추가하려면**

1. 트리거를 추가하려는 Lambda 함수의 ARN을 얻습니다.

   1. AWS Management Console에 로그인하고 AWS Lambdahttps://console.aws.amazon.com/lambda/[에서 ](https://console.aws.amazon.com/lambda/) 콘솔을 엽니다.

   1. 페이지 상단의 리전 목록에서 **미국 동부(버지니아 북부)(US East (N. Virginia))**를 선택합니다.

   1. 함수 목록에서 트리거를 추가하려는 함수의 이름을 선택합니다.

   1. **함수 개요** 페이지에서 **버전** 탭을 선택하고 트리거를 추가할 번호가 매겨진 버전을 선택합니다.

   1. **ARN 복사** 버튼을 선택하여 ARN을 클립보드에 복사합니다. Lambda 함수의 ARN은 다음과 같은 형태입니다.

      `arn:aws:lambda:us-east-1:123456789012:function:TestFunction:2`

      끝부분의 숫자(이 예제에서는 **2**)가 함수의 버전 번호입니다.

1. [https://console.aws.amazon.com/cloudfront/v4/home](https://console.aws.amazon.com/cloudfront/v4/home)에서 CloudFront 콘솔을 엽니다.

1. 배포 목록에서 트리거를 추가하려는 배포의 ID를 선택합니다.

1. **동작** 탭을 선택합니다.

1. 트리거를 추가하려는 캐시 동작을 선택한 다음 **편집**을 클릭합니다.

1. **함수 연결**에서, **함수 유형** 목록에서 함수를 실행할 시점, 즉 최종 사용자 요청, 최종 사용자 응답, 오리진 요청 또는 오리진 응답 중에 **Lambda@Edge**를 선택합니다.

   자세한 내용은 [함수를 트리거할 이벤트를 선택합니다.](lambda-how-to-choose-event.md) 섹션을 참조하세요.

1. **함수 ARN/이름** 텍스트 상자에 선택한 이벤트가 발생할 때 실행하려는 Lambda 함수의 ARN을 붙여넣습니다. Lambda 콘솔에서 복사한 값입니다.

1. 함수의 요청 본문에 액세스하려는 경우 **본문 포함**을 선택합니다.

   요청 본문을 바꾸기만 하려는 경우에는 이 옵션을 선택할 필요가 없습니다.

1. 더 많은 이벤트 유형에 대해 동일한 함수를 실행하려면 6 및 7단계를 반복합니다.

1. **변경 사항 저장**을 선택합니다.

1. 이 배포에 대한 다른 캐시 동작에 트리거를 추가하려면 5\$110단계를 반복합니다.

   업데이트된 CloudFront 배포가 배포되면 함수가 지정된 CloudFront 이벤트에 대한 요청을 처리하기 시작합니다. 배포가 배포되었는지 확인하려면 탐색 창에서 **배포**를 선택합니다. 배포판이 배포되면 배포에 대한 **상태** 열의 값이 **배포 중**에서 배포 시간 및 날짜로 변경됩니다.

------