자습서: 기본 Lambda@Edge 함수 생성
이 자습서에서는 CloudFront에서 실행되는 샘플 Node.js 함수를 생성하고 구성하는 과정을 통해 Lambda@Edge를 시작하는 방법을 보여줍니다. 이 예시에서는 CloudFront가 파일을 검색할 때 HTTP 보안 헤더를 응답에 추가합니다. (이를 통해 웹 사이트의 보안 및 개인 정보 보호를 개선할 수 있음)
이 자습서에는 자체 웹 사이트가 필요하지 않습니다. 그러나 자체 Lambda@Edge 솔루션을 생성하는 경우 비슷한 단계를 따르고 동일한 옵션 중에서 선택합니다.
주제
1단계: AWS 계정 가입
아직 계정에 가입하지 않았다면 AWS 계정에 가입하세요. 자세한 내용은 AWS 계정에 등록 단원을 참조합니다.
2단계: CloudFront 배포 생성
예제 Lambda@Edge 함수를 만들려면 먼저 콘텐츠를 제공할 오리진이 있는 CloudFront 환경부터 갖춰야 합니다.
이 예제에서는 Amazon S3 버킷을 배포의 오리진으로 사용하는 CloudFront 배포를 만듭니다. 사용할 환경이 이미 있는 경우 이 단계를 건너뛸 수 있습니다.
Amazon S3 오리진을 사용하여 CloudFront 배포를 생성하려면
-
이미지 파일 등 샘플 콘텐츠가 될 파일 한두 개로 Amazon S3 버킷을 만듭니다. Amazon S3에 콘텐츠 업로드의 단계를 따르면 됩니다. 버킷의 객체에 대한 퍼블릭 읽기 액세스를 허용하는 권한을 설정해야 합니다.
-
CloudFront 웹 배포 생성의 단계에 따라 CloudFront 배포를 만들고 오리진으로 S3 버킷을 추가합니다. 이미 배포가 있다면 버킷을 그 배포의 오리진으로 추가할 수 있습니다.
작은 정보
배포 ID를 기록해 둡니다. 이 자습서 후반부에서 함수의 CloudFront 트리거를 추가할 때 드롭다운 목록에서 배포 ID(예:
E653W22221KDDL
)를 선택해야 합니다.
3단계: 함수 생성
이 단계에서는 Lambda 콘솔에 있는 청사진 템플릿에서 Lambda 함수를 생성합니다. 이 함수는 CloudFront 배포의 보안 헤더를 업데이트하는 코드를 추가합니다.
Lambda 함수를 생성하는 방법
-
AWS Management Console에 로그인한 다음 AWS Lambda에서 https://console.aws.amazon.com/lambda/
콘솔을 엽니다. 중요
현재 US-East-1(버지니아 북부) AWS 리전(us-east-1)에 있는지 확인합니다. 이 리전에 있어야 Lambda@Edge 함수를 만들 수 있습니다.
-
함수 생성을 선택합니다.
-
함수 생성 페이지에서 청사진 사용을 선택한 다음 검색 필드에
cloudfront
를 입력하여 CloudFront 청사진을 필터링합니다.참고
CloudFront 청사진은 US-East-1(버지니아 북부) 리전(us-east-1)에서만 사용 가능합니다.
-
함수에 대한 템플릿으로 HTTP 응답 헤더 수정 청사진을 선택합니다.
-
다음과 같이 함수에 대한 정보를 입력합니다.
-
함수 이름 - 함수의 이름을 입력합니다.
-
실행 역할 - 함수에 대한 권한 설정 방법을 선택합니다. 권장되는 기본 Lambda@Edge 권한 정책 템플릿을 사용하려면 AWS 정책 템플릿에서 새 역할 생성(Create a new role from AWS policy templates)을 선택합니다.
-
역할 이름 - 정책 템플릿이 생성하는 역할 이름을 입력합니다.
-
정책 템플릿 - CloudFront 청사진을 함수의 기본으로 선택했으므로 Lambda는 정책 템플릿 기본 Lambda@Edge 권한을 자동으로 추가합니다. 이 정책 템플릿은 CloudFront가 전 세계 CloudFront 로케이션에서 Lambda 함수를 실행할 수 있도록 하는 실행 역할 권한을 추가합니다. 자세한 내용은 Lambda@Edge에 대한 IAM 권한 및 역할 설정 단원을 참조하십시오.
-
-
페이지 하단에서 함수 생성을 선택합니다.
-
Lambda@Edge에 배포 창이 나타나면 취소를 선택합니다. (이 자습서에서는 함수를 Lambda@Edge에 배포하기 전에 함수 코드를 수정해야 합니다.)
-
아래로 스크롤하여 페이지의 코드 소스 섹션으로 이동합니다.
-
템플릿 코드를 오리진에서 반환하는 보안 헤더를 수정하는 함수로 바꿉니다. 예를 들면 다음과 비슷한 코드를 사용할 수 있습니다.
'use strict'; export const handler = (event, context, callback) => { //Get contents of response const response = event.Records[0].cf.response; const headers = response.headers; //Set new headers headers['strict-transport-security'] = [{key: 'Strict-Transport-Security', value: 'max-age= 63072000; includeSubdomains; preload'}]; headers['content-security-policy'] = [{key: 'Content-Security-Policy', value: "default-src 'none'; img-src 'self'; script-src 'self'; style-src 'self'; object-src 'none'"}]; headers['x-content-type-options'] = [{key: 'X-Content-Type-Options', value: 'nosniff'}]; headers['x-frame-options'] = [{key: 'X-Frame-Options', value: 'DENY'}]; headers['x-xss-protection'] = [{key: 'X-XSS-Protection', value: '1; mode=block'}]; headers['referrer-policy'] = [{key: 'Referrer-Policy', value: 'same-origin'}]; //Return modified response callback(null, response); };
-
파일을 선택하여 저장하고 업데이트된 코드를 저장합니다.
배포를 선택합니다.
다음 섹션으로 이동하여 함수를 실행할 CloudFront 트리거를 추가합니다.
4단계: 함수를 실행할 CloudFront 트리거 추가
이제 보안 헤더를 업데이트할 Lambda 함수가 생성되었으므로, 그 함수를 실행하여 오리진에서 해당 배포에 대해 CloudFront로 보내는 모든 응답에 헤더를 추가할 CloudFront 트리거를 구성해야 합니다.
함수의 CloudFront 트리거를 구성하려면
-
Lambda 콘솔의 함수 개요 페이지에서 해당 함수에 대한 함수 개요 페이지에서 트리거 추가를 선택합니다.
-
트리거 구성에서 CloudFront를 선택합니다.
-
Lambda@Edge에 배포를 선택합니다.
-
Lambda@Edge 배포 창에서 CloudFront 트리거 구성 아래에 다음 정보를 입력합니다.
-
배포 - 함수와 연결할 CloudFront 배포 ID입니다. 드롭다운 목록에서 배포 ID를 선택합니다.
-
캐시 동작 - 트리거에 사용할 캐시 동작입니다. 이 예제에서는 *로 설정된 값을 그대로 둡니다. 이 값은 해당 배포의 기본 캐시 동작을 의미합니다. 자세한 내용은 캐시 동작 설정 주제에서 배포 설정 참조 단원을 참조하세요.
-
CloudFront 이벤트 - 언제 함수를 실행할지 지정하는 트리거입니다. 여기서는 CloudFront가 오리진에서 응답을 반환할 때마다 보안 헤더 함수가 실행되도록 하겠습니다. 드롭다운 목록에서 오리진 응답을 선택합니다. 자세한 내용은 Lambda@Edge 함수에 대한 트리거 추가 단원을 참조하십시오.
-
-
Lambda@Edge로의 배포 확인의 확인란을 선택합니다.
-
배포를 선택하여 트리거를 추가하고 함수를 전 세계 AWS 위치에 복제합니다.
-
함수가 복제될 때까지 기다립니다. 일반적으로 몇 분 정도 걸립니다.
CloudFront 콘솔로 이동
하여 해당 배포를 보고 복제가 완료되었는지 확인할 수 있습니다. 배포 상태가 배포 중에서 날짜 및 시간으로 변경될 때까지 기다립니다. 이는 함수가 복제되었음을 의미합니다. 함수가 작동하는지 확인하려면 다음 단원의 단계를 따릅니다.
5단계: 함수 실행 확인
Lambda 함수를 만들고 CloudFront 배포에 대해 이를 실행하는 트리거를 구성했으니 이제 이 함수가 원하는 결과를 달성하는지 확인해야 합니다. 이 예제에서는 CloudFront가 반환하는 HTTP 헤더를 확인하여 보안 헤더가 추가되었는지 알아봅니다.
Lambda@Edge 함수가 보안 헤더를 추가하는지 확인하려면
-
브라우저에서 S3 버킷에 있는 파일의 URL을 입력합니다. 예를 들면
https://d111111abcdef8.cloudfront.net/image.jpg
와 비슷한 URL을 사용할 수 있습니다.파일 URL에 사용할 CloudFront 도메인 이름에 대한 자세한 내용은 CloudFront에서 파일에 대한 URL 형식 사용자 지정 단원을 참조하세요.
-
브라우저에서 웹 개발자 도구 모음을 엽니다. 예를 들어 Chrome 브라우저 창에서는 컨텍스트(마우스 오른쪽 버튼 클릭) 메뉴를 연 다음 Inspect(검사)를 선택합니다.
-
네트워크 탭을 선택합니다.
-
페이지를 새로 고쳐 이미지를 확인한 다음 왼쪽 창에서 HTTP 요청을 선택합니다. HTTP 헤더가 별도의 창에 표시됩니다.
-
HTTP 헤더 목록을 살펴보면서 원하는 보안 헤더가 목록에 포함되어 있는지 확인합니다. 예를 들어 다음 스크린샷에 표시된 것과 비슷한 헤더가 보일 것입니다.
추가한 보안 헤더가 헤더 목록에 있으면 완료된 것입니다. 첫 번째 Lambda@Edge 함수가 생성되었습니다. CloudFront에서 오류를 반환하거나 다른 문제가 있는 경우에는 계속해서 다음 단계로 넘어가 문제를 해결하세요.
6단계: 문제 해결
CloudFront가 오류를 반환하거나 원하는 보안 헤더를 추가하지 않는 경우, CloudWatch Logs를 조사하여 함수의 실행 상태를 확인할 수 있습니다. 함수를 실행한 위치와 가장 가까운 AWS 위치에 저장된 로그를 사용해야 합니다.
예를 들어, 런던에서 파일을 볼 때는 CloudWatch 콘솔에서 리전을 유럽(런던)으로 변경해야 합니다.
Lambda@Edge 함수에 대한 CloudWatch 로그를 검사하려면
AWS Management Console에 로그인하고 https://console.aws.amazon.com/cloudwatch/
에서 CloudWatch 콘솔을 엽니다. -
리전을 브라우저에서 파일을 볼 때 표시되는 위치로 변경합니다. 이는 함수가 실행되고 있는 리전입니다.
-
왼쪽 창에서 로그를 선택하여 해당 배포의 로그를 봅니다.
자세한 내용은 Amazon CloudWatch를 사용한 CloudFront 지표 모니터링 단원을 참조하십시오.
7단계: 예제 리소스 정리
이 자습서에 사용할 용도로만 Amazon S3 버킷과 CloudFront 배포를 만들었다면 할당한 AWS 리소스를 삭제하여 더 이상 요금이 발생하지 않도록 하세요. AWS 리소스를 삭제한 뒤에는 추가한 콘텐츠를 이용할 수 없게 됩니다.
작업
S3 버킷 삭제
Amazon S3 버킷을 삭제하기 전에 버킷에 대한 로깅이 비활성화되어 있는지 확인하세요. 그렇지 않으면 삭제해도 AWS이(가) 해당 버킷에 계속 로그를 기록합니다.
버킷에 대한 로깅 사용 중지
https://console.aws.amazon.com/s3/
에서 Amazon S3 콘솔을 엽니다. -
버킷을 선택한 다음, 속성를 선택합니다.
-
속성에서 로깅을 선택합니다.
-
사용(Enabled) 확인란의 선택을 취소합니다.
-
저장을 선택합니다.
이제 버킷을 삭제할 수 있습니다. 자세한 내용은 Amazon Simple Storage Service Console 사용 설명서의 버킷 삭제를 참조하십시오.
Lambda 함수 삭제
Lambda 함수 연결 및 선택적으로 함수 자체를 삭제하는 지침은 Lambda@Edge 함수 및 복제본 삭제 단원을 참조합니다.
CloudFront 배포 삭제
CloudFront 배포를 삭제하기 전에 반드시 배포를 비활성화해야 합니다. 비활성화된 배포가 작동하지 않아 요금이 발생하지 않습니다. 언제든지 비활성화된 배포를 활성화할 수 있습니다. 비활성화된 배포를 삭제한 뒤에는 사용할 수 없습니다.
CloudFront 배포를 사용하지 않도록 설정하고 삭제하려면
에서 CloudFront 콘솔을 엽니다https://console.aws.amazon.com/cloudfront/v4/home
-
사용 중지하려는 배포를 선택한 후 사용 중지를 선택합니다.
-
확인 메시지가 표시되면 예, 사용 중지를 선택합니다.
-
사용 중지된 배포를 선택한 후 삭제를 선택합니다.
-
확인 메시지가 나타나면 예, 삭제합니다를 선택합니다.
관련 정보
Lambda@Edge 함수의 작동 방식에 대한 기본적인 내용을 배웠습니다. 이제 다음 자료를 읽고 자세히 알아보십시오.