

# 배포에 함수 연결
<a name="associate-function"></a>

배포에 함수를 사용하려면 함수를 배포의 하나 이상의 캐시 동작과 연결합니다. 여러 배포에서 여러 캐시 동작과 함수를 연결할 수 있습니다.

함수는 다음 중 무엇과도 연결할 수 있습니다.
+ 기존 캐시 동작
+ 기존 배포의 새로운 캐시 동작
+ 새 배포의 새로운 캐시 동작

함수를 캐시 동작과 연결할 때는 *이벤트 유형*(event type)을 선택해야 합니다. 이벤트 유형에 따라 CloudFront가 함수를 실행하는 시기가 결정됩니다.

다음과 같은 이벤트 유형을 선택할 수 있습니다.
+ **최종 사용자 요청** – 이 함수는 CloudFront가 최종 사용자의 요청을 수신할 때 실행됩니다.
+ **최종 사용자 응답** – 이 함수는 CloudFront가 최종 사용자에게 응답을 반환하기 전에 실행됩니다.

CloudFront Functions와 함께 오리진 관련 이벤트 유형(*오리진 요청* 및 *오리진 응답*)을 사용할 수 없습니다. 대신 Lambda@Edge를 사용할 수 있습니다. 자세한 내용은 [Lambda@Edge 함수를 트리거할 수 있는 CloudFront 이벤트](lambda-cloudfront-trigger-events.md) 단원을 참조하십시오.

**참고**  
함수를 연결하기 전에 [`LIVE` 스테이지에 게시](publish-function.md)해야 합니다.

CloudFront 콘솔 또는 AWS Command Line Interface(AWS CLI)를 사용하여 배포에 함수를 연결할 수 있습니다. 다음 절차에서는 함수를 기존 캐시 동작에 연결하는 방법을 보여 줍니다.

------
#### [ Console ]

**기존 캐시 동작에 함수를 연결하려면**

1. CloudFront 콘솔([https://console.aws.amazon.com/cloudfront/v4/home#/functions](https://console.aws.amazon.com/cloudfront/v4/home#/functions))에 로그인하고 **함수** 페이지를 엽니다.

1. 연결할 함수를 선택합니다.

1. **함수** 페이지에서 **게시** 탭을 선택합니다.

1. **Publish 함수**를 선택합니다.

1. **연결 추가**를 선택합니다. 표시되는 대화 상자에서 배포, 이벤트 유형 및/또는 캐시 동작을 선택합니다.

   이벤트 유형에서 함수를 실행할 시기를 선택합니다.
   + **뷰어 요청** - CloudFront가 요청을 수신할 때마다 이 함수를 실행합니다.
   + **뷰어 응답** - CloudFront가 응답을 반환할 때마다 이 함수를 실행합니다.

1. 구성을 저장하려면 **연결 추가**를 선택합니다.

CloudFront가 배포를 함수와 연결합니다. 연결된 배포가 배포될 때까지 몇 분 정도 기다립니다. 함수 세부 정보 페이지에서 **배포 보기**를 선택하여 진행 상황을 확인할 수 있습니다.

------
#### [ CLI ]

**기존 캐시 동작에 함수를 연결하려면**

1. 명령줄 창을 엽니다.

1. 함수에 연결할 캐시 동작을 가진 배포에 대한 배포 구성을 저장하려면 다음 명령을 입력합니다. 이 명령은 배포 구성을 `dist-config.yaml`이라는 이름의 파일에 저장합니다. 이 명령을 사용하려면 다음을 수행합니다.
   + *`DistributionID`*를 해당 배포의 ID로 바꿉니다.
   + 한 줄로 명령을 실행합니다. 이 예에서는 예제를 보다 읽기 쉽도록 줄 바꿈이 제공됩니다.

   ```
   aws cloudfront get-distribution-config \
       --id DistributionID \
       --output yaml > dist-config.yaml
   ```

   명령이 성공하면 AWS CLI는 출력을 반환하지 않습니다.

1. 생성한 `dist-config.yaml`이라는 파일을 엽니다. 파일을 편집하여 다음과 같이 변경합니다.

   1. `ETag` 필드의 이름을 `IfMatch`로 바꾸지만 필드 값은 변경하지 마세요.

   1. 캐시 동작에서 `FunctionAssociations`(이)라는 이름의 객체를 찾습니다. 함수 연결을 추가하려면 이 객체를 업데이트합니다. 함수 연결에 대한 YAML 구문은 다음 예제와 같습니다.
      + 다음 예제에서는 최종 사용자 요청 이벤트 객체를 보여줍니다. 최종 사용자 응답 이벤트 유형을 사용하려면 `viewer-request`을(를)`viewer-response`(으)로 바꿉니다.
      + *`arn:aws:cloudfront::111122223333:function/ExampleFunction`*을 이 캐시 동작에 연결하려는 함수의 Amazon 리소스 이름(ARN)으로 바꿉니다. 함수 ARN을 얻으려면 **aws cloudfront list-functions** 명령을 사용할 수 있습니다.

      ```
      FunctionAssociations:
        Items:
          - EventType: viewer-request
            FunctionARN: arn:aws:cloudfront::111122223333:function/ExampleFunction
        Quantity: 1
      ```

   1. 이러한 변경을 수행한 후 파일을 저장합니다.

1. 다음 명령을 사용하여 배포를 업데이트하고 함수 연결을 추가합니다. 이 명령을 사용하려면 다음을 수행합니다.
   + *`DistributionID`*를 해당 배포의 ID로 바꿉니다.
   + 한 줄로 명령을 실행합니다. 이 예에서는 예제를 보다 읽기 쉽도록 줄 바꿈이 제공됩니다.

   ```
   aws cloudfront update-distribution \
       --id DistributionID \
       --cli-input-yaml file://dist-config.yaml
   ```

   명령이 성공하면 함수 연결로 방금 업데이트된 배포를 설명하는 다음과 같은 출력이 표시됩니다. 다음 예제 출력은 가독성을 위해 잘립니다.

   ```
   Distribution:
     ARN: arn:aws:cloudfront::111122223333:distribution/EBEDLT3BGRBBW
     ... truncated ...
     DistributionConfig:
       ... truncated ...
       DefaultCacheBehavior:
         ... truncated ...
         FunctionAssociations:
           Items:
           - EventType: viewer-request
             FunctionARN: arn:aws:cloudfront::111122223333:function/ExampleFunction
           Quantity: 1
         ... truncated ...
     DomainName: d111111abcdef8.cloudfront.net
     Id: EDFDVBD6EXAMPLE
     LastModifiedTime: '2021-04-19T22:39:09.158000+00:00'
     Status: InProgress
   ETag: E2VJGGQEG1JT8S
   ```

------

배포가 재배포되는 동안 배포의 `Status`가 `InProgress`로 변경됩니다. 새 배포 구성이 CloudFront 엣지 로케이션에 도달하면 해당 엣지 로케이션에 연결된 함수를 사용하기 시작합니다. 배포가 완전히 완료되면 `Status`가 다시 `Deployed`로 바뀝니다. 이는 연결된 CloudFront 함수가 전 세계의 모든 CloudFront 엣지 로케이션에서 작동함을 나타냅니다. 이 작업은 일반적으로 몇 분 정도 걸립니다.