View a markdown version of this page

일반 헬퍼 메서드 - Amazon CloudFront

일반 헬퍼 메서드

이 페이지에서는 CloudFront Functions 내의 추가 헬퍼 메서드를 제공합니다. 이러한 메서드를 사용하려면 JavaScript 런타임 2.0을 사용하여 CloudFront Functions를 생성합니다.

import cf from 'cloudfront';

자세한 내용은 CloudFront Functions를 위한 JavaScript 런타임 2.0 기능 섹션을 참조하세요.

edgeLocation 메타데이터

이 메서드를 사용하려면 cloudfront 모듈을 사용해야 합니다.

참고

뷰어 요청 함수에만 이 방법을 사용할 수 있습니다. 뷰어 응답 함수의 경우 이 메서드는 비어 있습니다.

이 JavaScript 객체를 사용하여 요청을 처리하는 데 사용되는 엣지 로케이션 공항 코드, 예상 리전 엣지 캐시 리전 또는 CloudFront 서버 IP 주소를 가져옵니다. 이 메타데이터는 뷰어 요청 이벤트 트리거만 사용할 수 있습니다.

cf.edgeLocation = { name: SEA serverIp: 1.2.3.4 region: us-west-2 }

cf.edgeLocation 객체에는 다음 사항이 포함될 수 있습니다.

이름

요청을 처리한 엣지 로케이션의 세 글자 IATA 코드입니다.

serverIp

요청을 처리한 서버의 IPv4 또는 IPv6 주소입니다.

region

캐시 누락이 있는 경우 요청이 사용할 것으로 예상되는 CloudFront 리전 엣지 캐시(REC)입니다. 이 값은 예상 REC를 사용할 수 없고 백업 REC가 요청에 사용되는 경우 업데이트되지 않습니다. 여기에는 사용 중인 Origin Shield 위치가 포함되지 않습니다. 단, 기본 REC와 Origin Shield가 동일한 위치인 경우는 예외입니다.

참고

CloudFront가 오리진 장애 조치를 사용하도록 구성된 경우 CloudFront Functions는 두 번째로 간접 호출되지 않습니다. 자세한 내용은 CloudFront 오리진 장애 조치를 통한 고가용성 최적화 섹션을 참조하세요.

rawQueryString() 메서드

이 메서드에는 cloudFront 모듈이 필요하지 않습니다.

rawQueryString() 메서드를 사용하여 구문 분석되지 않은 쿼리 문자열과 변경되지 않은 쿼리 문자열을 문자열로 검색합니다.

요청

function handler(event) { var request = event.request; const qs = request.rawQueryString(); }

응답

수신 요청의 전체 쿼리 문자열을 선행 ? 없이 문자열 값으로 반환합니다.

  • 쿼리 문자열이 없지만 ?가 있는 경우 함수는 빈 문자열을 반환합니다.

  • 쿼리 문자열이 없고 ?가 없는 경우 함수는 undefined를 반환합니다.

사례 1: 반환된 전체 쿼리 문자열(선행 ? 없음)

수신 요청 URL: https://example.com/page?name=John&age=25&city=Boston

rawQueryString()에서 를 반환합니다."name=John&age=25&city=Boston"

사례 2: 빈 문자열 반환됨(?가 있지만 파라미터가 없는 경우)

수신 요청 URL: https://example.com/page?

rawQueryString()에서 를 반환합니다.""

사례 3: undefined 반환됨(쿼리 문자열 및 ? 없음)

수신 요청 URL: https://example.com/page

rawQueryString()에서 를 반환합니다.undefined

logCustomData() 메서드

이 방법을 사용하려면 cloudfront 모듈을 가져옵니다.

logCustomData() 메서드를 사용하여 Amazon CloudFront 함수의 사용자 지정 데이터를 CloudFront 액세스 로그로 전송합니다. 함수가 뷰어 요청과 연결되어 있는지 아니면 뷰어 응답 이벤트와 연결되어 있는지에 따라 데이터가 viewer-request-log-data 또는 viewer-response-log-data 로그 필드에 기록됩니다.

메서드는 단일 문자열 인수를 허용합니다. 객체를 로깅하려면 먼저 JSON.stringify()를 사용하여 객체를 문자열로 변환합니다. 예제:

const resp_obj = JSON.stringify(some_obj); cf.logCustomData(resp_obj);

각 필드는 최대 800바이트의 데이터를 지원합니다. CloudFront는 데이터를 로그 필드에 쓰기 전에 자동으로 URL 인코딩합니다. CloudFront는 URL 인코딩 후 800바이트를 초과하는 모든 데이터를 잘라냅니다. 함수가 단일 실행 내에서 logCustomData()를 여러 번 직접 호출하는 경우 CloudFront는 마지막 값만 사용합니다.

로그 구성에 필드 추가

CloudFront 액세스 로그에서 이 데이터를 수신하려면 실시간 로그 구성 또는 표준 로깅(v2) 설정에 viewer-request-log-data 또는 viewer-response-log-data 필드를 추가해야 합니다. CloudFront Functions는 임베디드 접속 지점(POP)에 대한 사용자 지정 데이터 로깅을 지원하지 않습니다.

console.log()와의 차이점

logCustomData() 메서드는 CloudFront Functions에서 console.log()를 대체하지 않습니다. console.log()를 사용하여 Amazon CloudWatch Logs로 로그 라인을 전송합니다. cf.logCustomData()를 사용하여 CloudFront 액세스 로그(실시간 로그표준 로깅(v2))에 사용자 지정 데이터를 씁니다. 동일한 함수에서 두 메서드를 모두 사용할 수 있습니다. 자세한 내용은 CloudFront Functions 로그를 참조하세요.

메서드는 다음과 같은 구문을 사용합니다.

cf.logCustomData(String);
예뷰어 요청 함수에서 헤더 로깅
import cf from 'cloudfront'; function handler(event) { var request = event.request; // Check if the debug header exists, if so log it if (request.headers['x-debug-header']) { // Log the debug header value cf.logCustomData("debug header found: " + request.headers['x-debug-header'].value); } return request; }