자습서: 간단한 Lambda@Edge 함수 생성 - 아마존 CloudFront

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

자습서: 간단한 Lambda@Edge 함수 생성

이 자습서에서는 CloudFront에서 실행되는 샘플 Node.js 함수를 작성하고 추가하는 과정을 통해 Lambda@Edge 시작 방법을 보여줍니다. 여기서 살펴볼 예제에서는 응답에 HTTP 보안 헤더를 추가하여 웹 사이트의 보안 및 개인 정보 보호를 강화합니다. 이 연습에는 웹 사이트가 필요하지 않습니다. 여기서는 파일을 검색할 때 응답에 보안 헤더를 추가하기만 하면 됩니다. CloudFront

이 예제에서는 Lambda@Edge 함수를 만들고 구성하는 단계를 설명합니다. 자체 Lambda@Edge 솔루션을 만드는 경우 비슷한 단계를 따르고 동일한 옵션 중에서 선택합니다.

1단계: AWS 계정 가입

아직 Amazon Web Services에 가입하지 않았다면 https://aws.amazon.com/에서 가입하세요. Sign Up Now(지금 가입)를 선택하고 필요한 정보를 입력합니다.

2단계: CloudFront 배포 만들기

예제 Lambda @Edge 함수를 생성하기 전에 콘텐츠를 제공할 오리진이 포함된 작업 환경이 있어야 CloudFront 합니다.

처음 사용하시나요? CloudFront CloudFront 전 세계 엣지 로케이션 네트워크를 통해 콘텐츠를 제공합니다. CloudFront로 Lambda 함수를 설정하면 함수가 최종 사용자와 가까운 위치에서 콘텐츠를 사용자 지정하여 성능을 개선할 수 있습니다. CloudFront익숙하지 않은 경우 자습서를 완료하기 전에 잠시 시간을 내어 간략한 개요를 읽고 콘텐츠를 CloudFront 캐싱하고 제공하는 방법에 대해 조금 알아보십시오.

이 예시에서는 Amazon S3 버킷을 CloudFront 배포의 오리진으로 사용하는 배포를 생성합니다. 사용할 환경이 이미 있는 경우 이 단계를 건너뛸 수 있습니다.

Amazon S3 오리진을 사용하여 CloudFront 배포를 생성하려면
  1. 이미지 파일 등 샘플 콘텐츠가 될 파일 한두 개로 Amazon S3 버킷을 만듭니다. Amazon S3에 콘텐츠 업로드의 단계를 따르면 됩니다. 버킷의 객체에 대한 퍼블릭 읽기 액세스를 허용하는 권한을 설정해야 합니다.

  2. CloudFront 웹 CloudFront 배포 생성의 단계에 따라 배포를 생성하고 S3 버킷을 오리진으로 추가합니다. 이미 배포가 있다면 버킷을 그 배포의 오리진으로 추가할 수 있습니다.

    작은 정보

    배포 ID를 기록해 둡니다. 이 자습서의 뒷부분에서 함수에 CloudFront 트리거를 추가할 때 드롭다운 목록에서 배포용 ID (예: E653W22221KDDL) 를 선택해야 합니다.

3단계: 함수 생성

이 단계에서는 Lambda 콘솔에 있는 블루프린트 템플릿으로 시작하여 Lambda 함수를 생성합니다. 함수는 배포의 보안 헤더를 업데이트하는 코드를 추가합니다. CloudFront

Lambda 또는 Lambda@Edge를 처음 사용하십니까? Lambda @Edge 를 사용하면 트리거를 CloudFront 사용하여 Lambda 함수를 호출할 수 있습니다. CloudFront 배포를 Lambda 함수와 연결하면 엣지 CloudFront 로케이션에서 요청 및 응답을 가로채고 함수를 CloudFront 실행합니다. Lambda 함수로 보안을 강화하거나 더 관련성 있는 정보가 표시되도록 사용자 지정하여 성능을 높일 수 있습니다. 이 자습서에서 만드는 함수는 CloudFront 응답의 보안 헤더를 업데이트합니다.

Lambda 함수를 만들려면 몇 가지 단계를 거쳐야 합니다. 이 자습서에서는 블루프린트 템플릿을 함수의 토대로 사용한 다음, 보안 헤더를 설정하는 코드로 함수를 업데이트합니다. 마지막으로 함수를 CloudFront 실행하기 위한 트리거를 추가하고 배포합니다.

Lambda 함수를 생성하는 방법
  1. AWS Management Console에 로그인한 다음 AWS Lambda에서 https://console.aws.amazon.com/lambda/ 콘솔을 엽니다.

    중요

    현재 US-East-1(버지니아 북부) 리전(us-east-1)에 있는지 확인합니다. 이 리전에 있어야 Lambda@Edge 함수를 만들 수 있습니다.

  2. 함수 생성을 선택합니다.

  3. 함수 만들기 페이지에서 블루프린트 사용을 선택한 다음 검색 cloudfront 필드에 입력하여 CloudFront 블루프린트를 필터링합니다. 키워드: cloudfront가 표시되고 태그가 지정된 모든 블루프린트가 나열됩니다. CloudFront

    참고

    CloudFront 블루프린트는 미국 동부-1 (버지니아 북부) 지역 (us-east-1) 에서만 사용할 수 있습니다.

  4. 블루프린트를 함수의 템플릿으로 선택하세요. cloudfront-modify-response-header

  5. 다음과 같이 함수에 대한 정보를 입력합니다.

    이름

    함수 이름을 입력합니다.

    실행 역할

    함수에 대한 권한 설정 방법을 선택합니다. 권장되는 기본 Lambda@Edge 권한 정책 템플릿을 사용하려면 AWS 정책 템플릿에서 새 역할 생성(Create a new role from AWS policy templates)을 선택합니다.

    역할 이름

    정책 템플릿이 생성하는 역할 이름을 입력합니다.

    정책 템플릿

    블루프린트를 함수의 기반으로 CloudFront 선택했기 때문에 Lambda는 정책 템플릿 Basic Edge Lambda 권한을 자동으로 추가합니다. 이 정책 템플릿은 전 세계 위치에서 Lambda 함수를 실행할 수 CloudFront 있는 실행 역할 권한을 추가합니다. CloudFront 자세한 설명은 Lambda@Edge에 대한 IAM 권한 및 역할 설정 섹션을 참조하세요.

  6. 함수 생성을 선택합니다. Lambda가 함수를 만들면 다음 페이지에서 함수 구성을 확인할 수 있습니다.

  7. 해당 페이지의 Designer(디자이너) 섹션에서 다음 그림과 같이 함수 이름을 선택합니다. 이 예제에서 함수 이름은 입니다. ExampleFunction

    
								Lambda 콘솔의 Lambda 함수 페이지에 선택한 함수 이름과 함께 디자이너 섹션이 표시됩니다.
  8. 다음 그림과 같이 페이지를 아래로 스크롤하여 Function code(함수 코드) 섹션을 찾습니다.

    
								Lambda 콘솔의 Lambda 함수 페이지에 함수 코드 섹션이 표시됩니다.

    템플릿 코드를 오리진에서 반환하는 보안 헤더를 수정하는 함수로 바꿉니다. 예를 들면 다음과 비슷한 코드를 사용할 수 있습니다.

    'use strict'; exports.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); };
  9. 저장을 선택하여 업데이트된 코드를 저장합니다.

함수를 실행하기 위한 CloudFront 트리거를 추가하려면 다음 섹션으로 진행하십시오.

4단계: 함수를 실행할 CloudFront 트리거 추가

이제 Lambda 함수를 사용하여 보안 헤더를 업데이트했으니, 함수를 실행하여 배포를 위해 오리진에서 수신하는 모든 CloudFront 응답에 헤더를 추가하도록 트리거를 CloudFront 구성하십시오.

함수의 CloudFront 트리거를 구성하려면
  1. 해당 페이지의 Designer(디자이너) 섹션에서 다음 그림과 같이 CloudFront를 선택합니다.

    
								Lambda 콘솔의 Lambda 함수 페이지. 선택한 디자이너 섹션이 표시됩니다.  CloudFront
  2. 페이지를 아래로 스크롤하여 Configure triggers(트리거 구성) 섹션을 찾은 다음 Deploy to Lambda@Edge(Lambda@Edge로 배포)를 선택합니다.

  3. Deploy to Lambda@Edge(Lambda@Edge로 배포) 페이지에서 CloudFront 트리거 구성 아래에 다음 정보를 입력합니다.

    배포

    함수와 연결할 CloudFront 배포 ID. 드롭다운 목록에서 배포 ID를 선택합니다.

    캐시 동작

    트리거에 사용할 캐시 동작입니다. 이 예제에서는 *로 설정된 값을 그대로 둡니다. 이 값은 해당 배포의 기본 캐시 동작을 의미합니다. 자세한 내용은 캐시 동작 설정 주제에서 배포를 만들거나 업데이트할 때 지정하는 값 단원을 참조하세요.

    CloudFront 이벤트

    언제 함수를 실행할지 지정하는 트리거입니다. 오리진으로부터 응답을 CloudFront 반환할 때마다 보안 헤더 함수가 실행되기를 원합니다. 드롭다운 목록에서 오리진 응답을 선택합니다. 자세한 설명은 Lambda@Edge 함수에 대한 트리거 추가 섹션을 참조하세요.

  4. Confirm deploy to Lambda@Edge(Lambda@Edge로 배포 확인)에서 확인란을 선택하여 트리거가 배포되어 모든 AWS 위치에서 함수를 실행함을 확인합니다.

  5. 배포를 선택하여 트리거를 추가하고 함수를 전 세계 AWS 위치에 복제합니다. 그러면 Deploy to Lambda@Edge(Lambda@Edge로 배포) 페이지를 닫아도 됩니다.

  6. 함수가 복제될 때까지 기다립니다. 일반적으로 몇 분 정도 걸립니다.

    CloudFront 콘솔로 이동하여 배포를 보면 복제가 완료되었는지 확인할 수 있습니다. 배포 상태가 진행 중에서 다시 배포 완료로 바뀌었는지 확인합니다. 이것은 함수가 복제되었다는 의미입니다. 함수가 작동하는지 확인하려면 다음 단원의 단계를 따릅니다.

5단계: 함수 실행 확인

이제 Lambda 함수를 생성하고 배포를 위해 이를 실행하도록 트리거를 구성했으니 함수가 CloudFront 예상한 대로 수행되는지 확인하십시오. 이 예시에서는 CloudFront 반환되는 HTTP 헤더를 검사하여 보안 헤더가 추가되었는지 확인합니다.

Lambda@Edge 함수가 보안 헤더를 추가하는지 확인하려면
  1. 브라우저에서 S3 버킷에 있는 파일의 URL을 입력합니다. 예를 들면 https://d111111abcdef8.cloudfront.net/image.jpg와 비슷한 URL을 사용할 수 있습니다.

    파일 URL에 사용할 CloudFront 도메인 이름에 대한 자세한 내용은 을 참조하십시오. 파일의 URL 형식 사용자 지정 CloudFront

  2. 브라우저에서 웹 개발자 도구 모음을 엽니다. 예를 들어 Chrome 브라우저 창에서는 컨텍스트(마우스 오른쪽 버튼 클릭) 메뉴를 연 다음 Inspect(검사)를 선택합니다.

  3. 네트워크 탭을 선택합니다.

  4. 페이지를 새로 고쳐 이미지를 확인한 다음 왼쪽 창에서 HTTP 요청을 선택합니다. HTTP 헤더가 별도의 창에 표시됩니다.

  5. HTTP 헤더 목록을 살펴보면서 원하는 보안 헤더가 목록에 포함되어 있는지 확인합니다. 예를 들어 다음 스크린샷에 표시된 것과 비슷한 헤더가 보일 것입니다.

    
								원하는 보안 헤더가 강조 표시된 HTTP 헤더 목록.

추가한 보안 헤더가 헤더 목록에 있으면 완료된 것입니다. 첫 번째 Lambda@Edge 함수가 생성되었습니다. 오류가 CloudFront 반환되거나 다른 문제가 있는 경우 다음 단계를 계속 진행하여 문제를 해결하십시오.

6단계: 문제 해결

오류가 CloudFront 반환되거나 예상대로 보안 헤더를 추가하지 않는 경우 로그를 확인하여 함수 실행을 조사할 수 있습니다. CloudWatch 함수를 실행한 위치와 가장 가까운 AWS 위치에 저장된 로그를 사용해야 합니다.

예를 들어 런던에서 파일을 보는 경우 CloudWatch 콘솔에서 지역을 유럽 (런던) 으로 변경해 보세요.

Lambda @Edge 함수에 대한 CloudWatch 로그를 검사하려면
  1. https://console.aws.amazon.com/cloudwatch/ 에서 AWS Management Console 로그인하고 CloudWatch 콘솔을 엽니다.

  2. 리전을 브라우저에서 파일을 볼 때 표시되는 위치로 변경합니다. 이는 함수가 실행되고 있는 리전입니다.

  3. 왼쪽 창에서 로그를 선택하여 해당 배포의 로그를 봅니다.

자세한 설명은 CloudFront Amazon을 통한 지표 모니터링 CloudWatch 섹션을 참조하세요.

7단계: 예제 리소스 정리

이 자습서만을 위해 Amazon S3 버킷을 생성하고 CloudFront 배포한 경우, 더 이상 요금이 발생하지 않도록 할당한 AWS 리소스를 삭제하십시오. AWS 리소스를 삭제한 뒤에는 추가한 콘텐츠를 이용할 수 없게 됩니다.

작업

S3 버킷 삭제

Amazon S3 버킷을 삭제하기 전에 버킷에 대한 로깅이 비활성화되어 있는지 확인하세요. 그렇지 않으면 삭제해도 AWS이(가) 해당 버킷에 계속 로그를 기록합니다.

버킷에 대한 로깅 사용 중지
  1. https://console.aws.amazon.com/s3/에서 Amazon S3 콘솔을 엽니다.

  2. 버킷을 선택한 다음, 속성를 선택합니다.

  3. 속성에서 로깅을 선택합니다.

  4. 사용(Enabled) 확인란의 선택을 취소합니다.

  5. 저장을 선택합니다.

이제 버킷을 삭제할 수 있습니다. 자세한 내용은 Amazon Simple Storage Service Console 사용 설명서 버킷 삭제를 참조하십시오.

배포를 삭제합니다. CloudFront

CloudFront 배포를 삭제하려면 먼저 해당 배포를 비활성화해야 합니다. 사용 중지된 배포가 작동하지 않아 요금이 발생하지 않습니다. 언제든지 비활성화된 배포를 활성화할 수 있습니다. 비활성화된 배포를 삭제한 뒤에는 사용할 수 없습니다.

CloudFront 배포를 비활성화 및 삭제하는 방법
  1. 에서 CloudFront 콘솔을 https://console.aws.amazon.com/cloudfront/v4/home 여십시오.

  2. 사용 중지하려는 배포를 선택한 후 사용 중지를 선택합니다.

  3. 확인 메시지가 표시되면 예, 사용 중지를 선택합니다.

  4. 사용 중지된 배포를 선택한 후 삭제를 선택합니다.

  5. 확인 메시지가 나타나면 예, 삭제합니다를 선택합니다.

추가 정보 리소스

Lambda@Edge 함수의 작동 방식에 대한 기본적인 내용을 배웠습니다. 이제 다음 자료를 읽고 자세히 알아보십시오.