Amazon CloudFront
개발자 안내서 (API 버전 2016-09-29)

Lambda 함수에 대한 요구 사항 및 제한 사항

CloudFront에서 Lambda 함수를 사용할 경우 요구 사항 및 제한 사항은 다음 단원을 참조하십시오.

CloudFront 배포 및 연결

  • 또 다른 AWS 계정이 소유한 CloudFront 배포에는 Lambda 함수를 연결할 수 없습니다.

Lambda 함수에 대한 CloudFront 트리거

  • 트리거는 $LATEST 또는 별칭이 아니라 번호가 지정된 버전에 대해서만 추가할 수 있습니다.

  • 트리거는 미국 동부(버지니아 북부) 리전의 함수에 대해서만 추가할 수 있습니다.

  • 트리거를 추가하려면 서비스 보안 주체 lambda.amazonaws.comedgelambda.amazonaws.com에서 Lambda 함수와 연결된 IAM 실행 역할을 수임할 수 있어야 합니다. 자세한 내용은 Lambda@Edge에 대한 IAM 권한 및 역할 설정 단원을 참조하십시오.

CloudWatch Logs

Amazon CloudWatch Logs 제한에 대한 자세한 정보는 Amazon CloudWatch 사용 설명서CloudWatch Logs 제한 단원을 참조하십시오.

헤더

Lambda@Edge에 헤더를 사용할 경우 다음과 같은 요구 사항과 제한 사항에 주의하십시오.

블랙리스트 헤더

블랙리스트에 등록된 헤더는 밖으로 표시되지 않으며 Lambda@Edge 함수가 추가할 수 없습니다. Lambda 함수가 블랙리스트에 등록된 헤더를 추가하는 경우 요청은 CloudFront 확인에 실패하고 CloudFront는 HTTP 상태 코드 502(잘못된 게이트웨이)를 최종 사용자에게 반환합니다.

  • Connection

  • Expect

  • Keep-alive

  • Proxy-Authenticate

  • Proxy-Authorization

  • Proxy-Connection

  • Trailer

  • Upgrade

  • X-Accel-Buffering

  • X-Accel-Charset

  • X-Accel-Limit-Rate

  • X-Accel-Redirect

  • X-Amz-Cf-*

  • X-Amzn-*

  • X-Cache

  • X-Edge-*

  • X-Forwarded-Proto

  • X-Real-IP

읽기 전용 헤더

읽기 전용 헤더는 읽을 수는 있지만 편집할 수 없는 헤더입니다. 이러한 헤더는 CloudFront 캐싱 로직에 대한 입력으로 사용할 수 있으며, Lambda 함수가 헤더 값을 읽을 수 있지만 값을 변경할 수는 없습니다. Lambda 함수가 읽기 전용 헤더를 추가 또는 편집하는 경우 요청은 CloudFront 확인에 실패하고 CloudFront는 HTTP 상태 코드 502(잘못된 게이트웨이)를 최종 사용자에게 반환합니다.

CloudFront 최종 사용자 요청 이벤트의 읽기 전용 헤더

  • Content-Length

  • Host

  • Transfer-Encoding

  • Via

CloudFront 오리진 요청 이벤트의 읽기 전용 헤더

  • Accept-Encoding

  • Content-Length

  • If-Modified-Since

  • If-None-Match

  • If-Range

  • If-Unmodified-Since

  • Transfer-Encoding

  • Via

CloudFront 오리진 응답 이벤트의 읽기 전용 헤더

  • Transfer-Encoding

  • Via

CloudFront 최종 사용자 응답 이벤트의 읽기 전용 헤더

  • Content-Encoding

  • Content-Length

  • Transfer-Encoding

  • Warning

  • Via

CloudFront-* 헤더

Lambda 함수는 다음 헤더를 읽거나, 편집, 제거 또는 추가할 수 있습니다.

  • CloudFront-Forwarded-Proto

  • CloudFront-Is-Desktop-Viewer

  • CloudFront-Is-Mobile-Viewer

  • CloudFront-Is-SmartTV-Viewer

  • CloudFront-Is-Tablet-Viewer

  • CloudFront-Viewer-Country

다음을 참조하십시오.

  • CloudFront에서 이러한 헤더를 추가하려는 경우 이러한 헤더를 기반으로 캐시하도록 CloudFront를 구성해야 합니다. 지정된 헤더를 기반으로 캐시하도록 CloudFront를 구성하는 방법에 대한 자세한 내용은 배포를 만들거나 업데이트할 때 지정하는 값 주제의 선택한 요청 헤더 기반의 캐시 단원을 참조하십시오.

  • CloudFront는 최종 사용자 요청 이벤트 뒤에 헤더를 추가합니다.

  • 최종 사용자가 이러한 이름이 있는 헤더를 추가하면 CloudFront는 헤더 값을 덮어씁니다.

  • 최종 사용자 이벤트에 대해 CloudFront-Viewer-Country가 블랙리스트에 등록되었습니다. 블랙리스트에 등록된 헤더는 밖으로 표시되지 않으며 Lambda@Edge 함수가 추가할 수 없습니다. Lambda 함수가 블랙리스트에 등록된 헤더를 추가하는 경우 요청은 CloudFront 확인에 실패하고 CloudFront는 HTTP 상태 코드 502(잘못된 게이트웨이)를 최종 사용자에게 반환합니다.

자세한 내용은 다음 예를 참조하십시오.

HTTP Status Codes

오리진이 400 이상의 HTTP 상태 코드를 반환하는 경우 CloudFront는 최종 사용자 응답 이벤트에 대해 Lambda 함수를 실행하지 않습니다. 또한 요청이 성공하면 뷰어 응답 이벤트에서 HTTP 상태 코드를 수정할 수 없습니다.

그러나 HTTP 상태 코드 4xx와 5xx를 포함한 오리진 응답 오류의 경우 Lambda 함수를 실행할 수 있습니다. 자세한 내용은 오리진 응답 트리거에서 HTTP 응답 업데이트 단원을 참조하십시오.

Lambda 함수 구성 및 실행 환경

  • nodejs8.10, nodejs10.x 또는 python3.7 실행 시간 속성을 사용하여 함수를 생성해야 합니다.

    참고

    nodejs6.10 속성의 함수가 있는 경우 계속 해당 함수를 편집하고 CloudFront 배포에 연결할 수 있습니다. 자세한 내용은 AWS Lambda Developer Guide 실행 시간 지원 정책 단원을 참조하십시오.

  • Lambda 함수가 VPC 내의 리소스에 액세스하도록 구성할 수는 없습니다.

  • 또 다른 AWS 계정이 소유한 CloudFront 배포에는 Lambda 함수를 연결할 수 없습니다.

  • 배달 못한 편지 대기열(DLQ)은 지원되지 않습니다.

  • 환경 변수는 지원되지 않습니다.

  • 계층이 있는 함수는 지원되지 않습니다.

  • AWS X-Ray는 지원되지 않습니다.

제한

이 단원의 제한은 Lambda@Edge에 적용됩니다. 이러한 제한은 기본 CloudFront 및 Lambda 제한에 추가하여 적용됩니다. 기본 제한은 이 가이드의 한도AWS Lambda Developer Guide제한을 참조하십시오.

참고

Lambda는 계정의 제한 내에서 트래픽 증가에 응답하여 용량을 동적으로 확장합니다. 자세한 내용은 AWS Lambda Developer Guide함수 규모 조정을 참조하십시오.

추가로 Lambda@Edge 함수 사용 시 기타 제한 사항이 있습니다. 자세한 내용은 Lambda 함수에 대한 요구 사항 및 제한 사항 단원을 참조하십시오.

이벤트 유형에 따라 다른 제한

엔터티

오리진 요청 및 응답 이벤트 제한

최종 사용자 요청 및 응답 이벤트 제한

함수 메모리 크기

Lambda 제한과 동일

128MB

함수 제한 시간. 이 함수는 AWS 리전에서 Amazon S3 버킷, DynamoDB 테이블 또는 Amazon EC2 인스턴스와 같은 리소스에 대한 네트워크 호출을 수행할 수 있습니다.

30초

5초

헤더 및 본문을 포함하여 Lambda 함수에서 생성되는 응답의 크기입니다.

1MB

40KB

Lambda 함수 및 포함된 라이브러리의 최대 압축 크기

50MB

1MB

기타 제한

엔터티

제한

트리거를 생성할 수 있는 AWS 계정당 배포 수입니다.

25

더 높은 제한을 요청합니다

배포당 트리거 수

100

더 높은 제한을 요청합니다

초당 요청

10,000(각 리전에서)

더 높은 제한을 요청합니다

동시 실행

자세한 내용은 AWS Lambda Developer Guide함수 규모 조정을 참조하십시오.

1000(각 리전에서)

더 높은 제한을 요청합니다

URI 및 쿼리 문자열의 크기 제한

Lambda@Edge 함수에서 URI 또는 쿼리 문자열에 액세스하거나 업데이트할 때 URI의 총 길이는 쿼리 문자열을 포함하여 8,192자 미만이어야 합니다.

본문 포함 옵션이 적용된 요청 본문에 대한 크기 제한

Include Body(본문 포함) 옵션을 선택해 Lambda@Edge 함수에 요청 본문을 노출하면 노출 또는 교체된 본문 부분에 다음 크기 제한이 적용됩니다.

참고

본문은 노출 전 항상 Lambda@Edge로 base64 인코딩됩니다.

본문을 Lambda 함수에 노출 시 크기 제한

요청 본문이 크면 노출되기 전에 Lambda@Edge가 다음과 같이 자릅니다.

  • 최종 사용자 요청의 경우 본문은 40KB에서 잘립니다.

  • 오리진 요청의 경우 본문은 1MB에서 잘립니다.

Lambda 함수에서 요청 본문 반환 시 크기 제한

요청 본문에 읽기 전용으로 액세스하는 경우 전체 원본 요청 본문이 오리진으로 반환됩니다. 그러나 요청 본문을 바꾸도록 선택한 경우 Lambda 함수에서 반환 시 다음 본문 크기 제한이 적용됩니다.

본문 인코딩 유형 허용되는 본문 크기: 최종 사용자 요청 허용되는 본문 크기: 오리진 요청

text

40KB

1MB

base64

53.2KB

1.33MB

Microsoft Smooth Streaming

Microsoft Smooth Streaming 형식으로 트랜스코딩한 미디어 파일의 온디맨드 스트리밍에 사용하는 CloudFront 배포에 대해서는 트리거를 생성할 수 없습니다.

네트워크 액세스

오리진 요청 및 응답 이벤트는 물론 최종 사용자 요청 및 응답 이벤트가 트리거한 함수는 인터넷 상 리소스 및 AWS 서비스(예: Amazon S3 버킷, DynamoDB 테이블, Amazon EC2 인스턴스)에 대해 네트워크 호출을 생성할 수 있습니다.

쿼리 문자열 매개 변수

  • Lambda 함수의 쿼리 문자열에 액세스하려면 event.Records[0].cf.request.querystring을 사용합니다.

  • 함수는 최종 사용자 및 오리진 요청 이벤트에 대한 쿼리 문자열을 업데이트할 수 있습니다. 업데이트된 쿼리 문자열에는 공백, 제어 문자 또는 조각 ID(#)가 포함될 수 없습니다.

  • 함수는 오리진 및 최종 사용자 응답 이벤트에 대한 쿼리 문자열만 읽을 수 있습니다.

  • 쿼리 문자열 파라미터를 기반으로 캐시하도록 CloudFront를 구성하면 함수가 쿼리 문자열에 액세스할 수 있는지 여부에 영향을 미칩니다.

    • 최종 사용자 요청 및 응답 이벤트Query String Forwarding and Caching에 대한 설정과 상관없이 함수가 쿼리 문자열에 액세스할 수 있습니다.

    • 오리진 요청 및 응답 이벤트Query String Forwarding and CachingForward All, Cache Based on Whitelist(모두 전달, 화이트리스트를 기반으로 캐싱) 또는 Forward All, Cache Based on All(모두 전달, 모두를 기반으로 캐싱)로 설정된 경우에만 함수가 쿼리 문자열에 액세스할 수 있습니다.

  • URI 및 쿼리 문자열에 퍼센트 인코딩을 사용하는 것이 좋습니다. 자세한 내용은 URI 및 쿼리 문자열 인코딩 단원을 참조하십시오.

  • URI(event.Records[0].cf.request.uri) 및 쿼리 문자열(event.Records[0].cf.request.querystring)의 총 크기는 8,192자 미만이어야 합니다.

자세한 내용은 쿼리 문자열 파라미터 기반의 콘텐츠 캐싱 단원을 참조하십시오.

본문 포함 옵션이 적용된 본문에 대한 크기 제한

크기 제한을 포함한 모든 Lambda@Edge 제한은 제한 단원을 참조하십시오.

태그 지정

Amazon CloudFront 및 AWS Lambda을 포함한 일부 AWS 서비스는 서비스 내의 리소스에 태그 추가를 지원합니다. 하지만 지금은 Lambda@Edge 리소스에 태그를 적용할 수 없습니다. CloudFront의 태깅에 대해 자세히 알아보려면 Amazon CloudFront 배포에 태그 지정 단원을 참조하십시오.

URI

함수가 요청의 URI를 변경하는 경우 이로 인해 요청 또는 요청이 전달되는 오리진에 대한 캐시 동작이 변경되지 않습니다.

URI 및 쿼리 문자열 인코딩

Lambda 함수에서는 URI 및 쿼리 문자열을 UTF-8으로 인코딩해야 합니다. (퍼센트 인코딩은 UTF-8 인코딩과 호환됩니다.) CloudFront 및 Lambda 의 동작은 다음에 따라 결정됩니다.

  • CloudFront가 최종 사용자의 요청에서 수신하는 URI 및 쿼리 문자열의 인코딩

  • 최종 사용자 요청 또는 오리진 요청 이벤트에서 트리거되는 함수에 따라 URI 또는 쿼리 문자열이 변경되는지 여부

값이 UTF-8으로 인코딩됨

CloudFront는 값을 변경하지 않고 Lambda 함수에 전달합니다.

값이 ISO 8859-1으로 인코딩됨

CloudFront는 ISO 8859-1 문자 인코딩을 UTF-8 인코딩으로 변환한 후 값을 Lambda 함수에 전달합니다.

다른 특정 문자 인코딩을 사용하여 값이 인코딩됨

다른 문자 인코딩을 사용하여 값이 인코딩되는 경우 CloudFront는 값이 ISO 8859-1으로 인코딩된 것으로 가정하고 ISO 8859-1 인코딩에서 UTF-8 인코딩으로 변환하려고 시도합니다.

중요

변환된 버전은 원래 요청에 있는 값의 부정확한 해석일 수 있습니다. 이 경우 Lambda 함수 또는 오리진에서 의도하지 않은 결과가 생성될 수 있습니다.

CloudFront가 오리진 서버에 전달하는 값은 최종 사용자 요청 또는 오리진 요청 이벤트에서 트리거된 함수가 URI 또는 쿼리 문자열을 변경하는지 여부에 따라 결정됩니다.

  • 함수가 URI 또는 쿼리 문자열을 변경하지 않는 경우 – CloudFront는 CloudFront가 최종 사용자의 요청에서 수신한 값을 오리진 서버에 전달합니다.

  • 함수가 URI 또는 쿼리 문자열을 변경하는 경우 – CloudFront는 UTF-8으로 인코딩된 값을 전달합니다.

두 경우 모두 동작은 최종 사용자 요청의 문자 인코딩에 따라 영향을 받습니다.