Lambda@Edge 함수 테스트 및 디버깅 - 아마존 CloudFront

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

Lambda@Edge 함수 테스트 및 디버깅

이 주제에는 Lambda@Edge 함수 테스트 및 디버깅에 대한 전략을 설명하는 단원이 있습니다. Lambda @Edge 함수 코드를 독립적으로 테스트하여 의도한 작업을 완료하는지 확인하고 통합 테스트를 수행하여 함수가 올바르게 작동하는지 확인하는 것이 중요합니다. CloudFront

통합 테스트 중이나 함수를 배포한 후에는 HTTP 5xx 오류와 같은 CloudFront 오류를 디버깅해야 할 수 있습니다. Lambda 함수에서 반환되는 잘못된 응답, 함수 실행 시 발생하는 실행 오류 또는 Lambda 서비스의 실행 조절로 인한 오류 등이 있을 수 있습니다. 이 주제의 단원에서는 이러한 문제가 어떤 유형의 실패인지 확인한 다음 각 문제를 해결하기 위해 수행할 수 있는 단계에 대해 설명합니다.

참고

오류를 해결할 때 CloudWatch 로그 파일이나 지표를 검토할 때는 함수가 실행된 위치와 가장 가까운 지역에 표시되거나 저장된다는 점에 유의하세요. 따라서 영국에 사용자가 있는 웹 사이트 또는 웹 애플리케이션이 있고 배포와 연결된 Lambda 함수가 있는 경우, 런던 지역의 지표 또는 로그 파일을 보려면 CloudWatch 지역을 변경해야 합니다. AWS 자세한 내용은 이 주제 마지막 부분에 있는 Lambda@Edge 리전 확인을 참조하십시오.

Lambda@Edge 함수 테스트

Lambda 함수 테스트에는 독립 실행형 테스트와 통합 테스트, 이렇게 두 가지 단계가 있습니다.

독립 실행형 기능 테스트

Lambda 함수를 CloudFront 에 추가하기 전에 먼저 Lambda 콘솔의 테스트 기능을 사용하거나 다른 방법을 사용하여 기능을 테스트해야 합니다. Lambda 콘솔에서 테스트에 대한 자세한 내용은 AWS Lambda 개발자 안내서에서 콘솔로 Lambda 함수 생성Lambda 함수를 호출하고 결과, 로그 및 지표 확인 섹션을 참조하세요.

에서 함수 작업을 테스트하십시오. CloudFront

함수를 배포와 연결하고 CloudFront 이벤트를 기반으로 실행하는 통합 테스트를 완료하는 것이 중요합니다. 함수가 올바른 이벤트 발생 시 실행되고 CloudFront에 대해 올바른 응답을 반환하는지 확인합니다. 예를 들어, 이벤트 구조가 올바른지, 유효한 헤더만 포함되는지 등을 확인하십시오.

Lambda 콘솔에서 함수와의 통합 테스트를 반복하면서 코드를 수정하거나 함수를 호출하는 트리거를 변경할 때는 Lambda @Edge 자습서의 단계를 참조하십시오. CloudFront 예를 들어, 본 자습서의 단계(4단계: 함수를 실행할 CloudFront 트리거 추가)에서 설명하는 것처럼 다양한 버전의 함수에서 작동하는지 확인합니다.

변경하고 배포할 때 업데이트된 함수와 CloudFront 트리거를 모든 지역에 복제하는 데 몇 분 정도 걸릴 수 있다는 점에 유의하십시오. 일반적으로 몇 분이면 되지만 최대 15분까지 걸릴 수 있습니다.

CloudFront 콘솔로 이동하여 배포를 보면 복제가 완료되었는지 확인할 수 있습니다.

배포 상태가 진행 중에서 다시 배포 완료로 바뀌었는지 확인합니다. 이것은 함수가 복제되었다는 의미입니다. 이제 다음 단원의 단계에 따라 함수가 작동하는지 확인합니다.

콘솔의 테스트는 함수의 로직만 확인하며, Lambda@Edge에 고유한 모든 서비스 할당량(이전에는 제한이라고 함)은 적용하지 않습니다.

에서 Lambda @Edge 함수 오류 식별 CloudFront

함수 로직이 제대로 작동하는지 확인한 후에도 함수가 실행될 때 여전히 HTTP 5xx 오류가 표시될 수 있습니다. CloudFront HTTP 5xx 오류는 다양한 이유로 반환될 수 있으며, 여기에는 Lambda 함수 오류 또는 기타 문제가 포함될 수 있습니다. CloudFront

  • Lambda @Edge 함수를 사용하는 경우 콘솔에서 CloudFront 그래프를 사용하여 오류의 원인을 추적한 다음 수정 작업을 수행할 수 있습니다. 예를 들어 HTTP 5xx 오류가 Lambda 함수에 의해 발생했는지 CloudFront 또는 Lambda 함수로 인한 것인지 확인한 다음, 특정 함수의 경우 관련 로그 파일을 보고 문제를 조사할 수 있습니다.

  • 에서 CloudFront 일반적인 HTTP 오류 문제를 해결하려면 다음 항목의 문제 해결 단계를 참조하십시오. 오리진의 오류 응답 문제 해결

에서 Lambda @Edge 함수 오류가 발생하는 원인은 무엇입니까? CloudFront

Lambda 함수가 HTTP 5xx 오류를 일으키는 원인에는 여러 가지가 있으며, 수행해야 할 문제 해결 단계는 오류 유형에 따라 달라집니다. 오류는 다음과 같이 분류할 수 있습니다.

Lambda 함수 실행 오류

함수에 처리되지 않은 예외가 있거나 코드에 오류가 있어 Lambda로부터 응답을 받지 CloudFront 못하면 실행 오류가 발생합니다. 예: 코드에 콜백이 포함된 경우(오류) 자세한 내용은 AWS Lambda 개발자 안내서의 Lambda 함수 오류를 참조하세요.

유효하지 않은 Lambda 함수 응답이 다음으로 반환되었습니다. CloudFront

함수가 실행된 후 Lambda로부터 응답을 CloudFront 받습니다. 응답의 객체 구조가 Lambda@Edge 이벤트 구조를 따르지 않거나 응답에 잘못된 헤더 또는 기타 잘못된 필드가 포함되어 있는 경우 오류가 반환됩니다.

Lambda 서비스 할당량 (이전에는 CloudFront 한도라고 함) 으로 인해 의 실행이 제한됩니다.

Lambda 서비스는 각 리전에서 실행을 조절하는데 할당량을 초과하면 오류를 반환합니다.

실패 유형을 결정하는 방법

에서 반환된 오류를 디버깅하고 해결하기 위해 작업할 때 어디에 집중할지 결정하는 데 도움이 되도록 HTTP 오류가 반환되는 이유를 CloudFront 파악하면 도움이 됩니다. CloudFront 시작하려면 CloudFront 콘솔의 모니터링 섹션에 제공된 그래프를 사용할 수 있습니다. AWS Management Console CloudFront 콘솔의 모니터링 섹션에서 그래프를 보는 방법에 대한 자세한 내용은 을 참조하십시오 CloudFront Amazon을 통한 지표 모니터링 CloudWatch.

다음 그래프는 오리진 또는 Lambda 함수로 오류를 반환하는지 여부를 추적하고 Lambda 함수의 오류일 경우 문제 유형의 범위를 좁히려 할 때 특히 유용합니다.

오류 발생율 그래프

각 배포의 개요 탭에서 볼 수 있는 그래프 중에는 오류 발생율 그래프가 있습니다. 이 그래프는 배포에 들어오는 총 요청의 백분율로 오류 발생율을 표시합니다. 그래프는 총 오류 발생율, 총 4xx 오류, 총 5xx 오류 및 Lambda 함수의 총 5xx 오류를 보여줍니다. 오류 유형 및 볼륨에 따라 원인을 조사하고 문제를 해결할 수 있는 단계를 수행할 수 있습니다.


								 CloudFront 분포에 대한 오류율 그래프
  • Lambda 오류가 표시되면 함수가 반환하는 특정 유형의 오류를 확인하여 추가 조사를 수행할 수 있습니다. Lambda@Edge errors(Lambda@Edge 오류) 탭에는 함수 오류를 유형별로 분류하여 특정 함수에 대한 문제를 찾아낼 수 있는 그래프가 포함되어 있습니다.

  • 오류가 발견되면 문제를 해결하고 원본 CloudFront 오류를 수정하거나 CloudFront 구성을 변경할 수 있습니다. 자세한 설명은 오리진의 오류 응답 문제 해결 섹션을 참조하세요.

실행 오류 및 잘못된 함수 응답 그래프

Lambda@Edge errors(Lambda@Edge 오류) 탭에는 특정 배포에 대한 Lambda@Edge 오류를 유형별로 분류하는 그래프가 포함되어 있습니다. 예를 들어, 한 그래프는 모든 실행 오류를 AWS 리전별로 표시합니다. 동일한 페이지에서 문제를 쉽게 해결할 수 있도록 특정 함수에 대한 로그 파일을 열고 리전별로 검토하여 특정 문제를 찾을 수 있습니다. View execution error logs(실행 오류 로그 보기) 또는 View invalid function response(잘못된 함수 응답 보기) 로그에서 리전(및 실행 오류의 경우 함수)을 선택한 다음 로그 보기를 선택합니다.


								Lambda@Edge 함수 실행에 대한 오류 발생율 그래프

								Lambda@Edge 함수 실행에 대한 오류 발생율 그래프

또한 이 장의 다음 단원에서 오류 해결 및 수정에 대한 추가 권장 사항을 읽으십시오.

제한 그래프

Lambda@Edge errors(Lambda@Edge 오류) 탭에는 제한 그래프도 있습니다. 경우에 따라 리전 동시성 할당량(이전에는 제한이라고 함)에 도달하면 Lambda 서비스가 리전별로 함수 호출을 제한합니다. 제한 초과 오류가 발생한 경우는 리전에서의 실행에 대해 Lambda 서비스가 부과한 할당량에 도달한 것입니다. 이러한 할당량을 늘리기 위한 요청 방법을 비롯한 자세한 내용은 Lambda@Edge에 대한 할당량 단원을 참조하세요.


								Lambda@Edge 함수 실행에 대한 제한 그래프

이 정보를 사용하여 HTTP 오류 문제를 해결하는 방법에 대한 예제는 AWS에서 콘텐츠 전송을 디버깅하기 위한 네 가지 단계를 참조하세요.

잘못된 Lambda@Edge 함수 응답(확인 오류) 문제 해결

문제가 Lambda 검증 오류인 것으로 확인되면 Lambda 함수가 잘못된 응답을 반환하고 있음을 의미합니다. CloudFront 이 섹션의 지침에 따라 단계를 수행하여 함수를 검토하고 응답이 요구 사항을 준수하는지 확인하십시오. CloudFront

CloudFront 다음과 같은 두 가지 방법으로 Lambda 함수의 응답을 검증합니다.

  • Lambda 응답은 필수 객체 구조를 따라야 합니다. 잘못된 객체 구조의 예에는 구문 분석이 불가능한 JSON, 필수 필드 누락 및 응답에 포함된 잘못된 객체 등이 있습니다. 자세한 내용은 Lambda@Edge 이벤트 구조 섹션을 참조하십시오.

  • 응답에는 올바른 객체만 포함되어 있어야 합니다. 응답에 올바른 객체가 포함되어 있는데 그 값이 지원되지 않는 경우에는 오류가 발생합니다. 등록된 헤더 또는 읽기 전용 헤더를 추가 또는 업데이트하는 경우(엣지 함수에 대한 제한 사항 참조), 최대 본문 크기 초과(Lambda@Edge Errors 주제에서 생성된 응답 크기 제한 참조) 및 잘못된 문자 또는 값(Lambda@Edge 이벤트 구조 참조) 등을 예로 들 수 있습니다.

Lambda가 잘못된 응답을 CloudFront 반환하면 Lambda 함수가 실행된 리전으로 CloudFront CloudWatch 푸시되는 로그 파일에 오류 메시지가 기록됩니다. 잘못된 응답이 있는 경우 CloudWatch로 로그 파일을 보내는 것은 기본 동작입니다. 그러나 기능이 출시되기 전에 Lambda 함수를 CloudFront 연결한 경우 함수가 활성화되지 않을 수 있습니다. 자세한 내용은 이 주제 뒷 부분에 나오는 계정이 CloudWatch로 로그를 푸시하는지 확인을 참조하십시오.

CloudFront 배포와 관련된 로그 그룹에서 함수가 실행된 지역에 해당하는 리전으로 로그 파일을 푸시합니다. 로그 그룹의 형식은 다음과 같습니다/aws/cloudfront/LambdaEdge/DistributionId. 여기서 DistributionId는 배포의 ID입니다. CloudWatch 로그 파일을 찾을 수 있는 지역을 확인하려면 이 주제 뒷부분의 Lambda @Edge 지역 결정을 참조하십시오.

오류가 재현될 수 있는 경우 오류가 발생하는 새 요청을 생성한 다음 실패한 CloudFront 응답 (X-Amz-Cf-Id헤더) 에서 요청 ID를 찾아 로그 파일에서 단일 실패를 찾을 수 있습니다. 로그 파일 항목에는 오류가 반환된 이유를 파악하는 데 도움이 되는 정보가 포함되어 있고 해당하는 Lambda 요청 ID가 나열되어 있기 때문에 단일 요청의 컨텍스트 내에서 근본 원인을 분석할 수 있습니다.

오류가 간헐적으로 발생하는 경우 CloudFront 액세스 로그를 사용하여 실패한 요청의 요청 ID를 찾은 다음 로그에서 해당 오류 메시지를 검색할 CloudWatch 수 있습니다. 자세한 내용은 앞의 실패 유형 확인 단원을 참조하십시오.

Lambda@Edge 함수 실행 오류 문제 해결

문제가 Lambda 실행 오류인 경우, Lambda 함수에 대한 로깅 문을 생성하고, 함수의 실행을 모니터링하는 메시지를 로그 파일에 기록하고, 예상대로 작동하는지 확인하는 CloudWatch 것이 유용할 수 있습니다. CloudFront 그런 다음 CloudWatch 로그 파일에서 해당 명령문을 검색하여 함수가 작동하는지 확인할 수 있습니다.

참고

Lambda@Edge 함수를 변경하지 않은 경우에도 Lambda 함수 실행 환경에 대한 업데이트가 영향을 줄 수 있으며, 실행 오류가 반환될 수 있습니다. 테스트 및 이후 버전으로의 마이그레이션에 대한 자세한 내용은 AWS Lambda 및 AWS Lambda@Edge 실행 환경에 대해 예정된 업데이트를 참조하세요.

Lambda@Edge 리전 확인

Lambda@Edge 함수가 트래픽을 수신하는 리전을 보려면 AWS Management Console에서 CloudFront 콘솔의 함수에 대한 지표를 확인하십시오. 지표는 각 AWS 리전별로 표시됩니다. 동일한 페이지에서 리전을 선택하고 해당 리전의 로그 파일을 확인하여 문제를 조사할 수 있습니다. CloudWatch Lambda 함수를 CloudFront 실행할 때 생성된 로그 파일을 보려면 AWS 해당 지역의 로그 파일을 검토해야 합니다.

CloudFront 콘솔의 모니터링 섹션에서 그래프를 보는 방법에 대한 자세한 내용은 을 참조하십시오. CloudFront Amazon을 통한 지표 모니터링 CloudWatch

계정이 로그를 푸시하는지 여부 확인 CloudWatch

기본적으로 잘못된 Lambda 함수 응답의 로깅을 CloudFront 활성화하고 다음 중 하나를 CloudWatch 사용하여 로그 파일을 푸시합니다. Lambda@Edge의 서비스 연결 역할 유효하지 않은 Lambda 함수 응답 로그 기능이 CloudFront 출시되기 전에 Lambda @Edge 함수를 추가한 경우, 다음에 Lambda @Edge 구성을 업데이트할 때 (예: 트리거 추가) 로깅이 활성화됩니다. CloudFront

다음을 수행하여 계정에서 로그 파일 푸시가 CloudWatch 활성화되었는지 확인할 수 있습니다.

  • 에 로그가 나타나는지 확인하세요. CloudWatch Lambda@Edge 함수가 실행된 리전에서 로그 파일을 확인해야 합니다. 자세한 설명은 Lambda@Edge 리전 확인 섹션을 참조하세요.

  • IAM의 계정에 관련 서비스 연결 역할이 있는지 확인. 이렇게 하려면 https://console.aws.amazon.com/iam/에서 IAM 콘솔을 연 다음 역할(Roles)을 선택해 계정에 대한 서비스 연결 역할 목록을 봅니다. AWSServiceRoleForCloudFrontLogger 역할을 찾습니다.