CloudFront Functions를 위한 JavaScript 런타임 1.0 기능
CloudFront 함수 JavaScript 런타임 환경은 ECMAScript(ES) 버전 5.1
다음 항목에는 지원되는 모든 언어 기능이 나열되어 있습니다.
핵심 기능
ES의 다음과 같은 핵심 기능이 지원됩니다.
- 유형
-
모든 ES 5.1 유형이 지원됩니다. 여기에는 부울 값, 숫자, 문자열, 객체, 배열, 함수, 함수 생성자 및 정규 표현식이 포함됩니다.
- 연산자
-
모든 ES 5.1 연산자가 지원됩니다.
ES 7 거듭제곱 연산자(
**
)가 지원됩니다. - Statement
-
참고
const
및let
문은 지원되지 않습니다.다음 ES 5.1 문이 지원됩니다.
-
break
-
catch
-
continue
-
do-while
-
else
-
finally
-
for
-
for-in
-
if
-
return
-
switch
-
throw
-
try
-
var
-
while
-
레이블이 지정된 명령문
-
- 리터럴
-
ES 6 템플릿 리터럴은 여러 줄 문자열, 표현식 보간 및 중첩 템플릿에 대해 지원됩니다..
- 함수
-
모든 ES 5.1 함수 기능이 지원됩니다.
ES 6 화살표 함수가 지원되며 ES 6 나머지 파라미터 구문이 지원됩니다.
- 유니코드
-
소스 텍스트 및 문자열 리터럴에는 유니코드로 인코딩된 문자가 포함될 수 있습니다. 6자의 유니코드 코드 포인트 이스케이프 시퀀스(예:
\uXXXX
)도 지원됩니다. - 엄격 모드
-
함수는 기본적으로 엄격 모드에서 작동하므로 함수 코드에
use strict
명령문을 추가할 필요가 없습니다. 이것은 변경할 수 없습니다.
기본 객체
ES의 다음과 같은 기본 객체가 지원됩니다.
- 객체
-
객체에 대해 다음과 같은 ES 5.1 메서드가 지원됩니다.
-
create
(속성 목록 제외) -
defineProperties
-
defineProperty
-
freeze
-
getOwnPropertyDescriptor
-
getOwnPropertyNames
-
getPrototypeOf
-
hasOwnProperty
-
isExtensible
-
isFrozen
-
prototype.isPrototypeOf
-
isSealed
-
keys
-
preventExtensions
-
prototype.propertyIsEnumerable
-
seal
-
prototype.toString
-
prototype.valueOf
객체에 대해 다음 ES 6 메서드가 지원됩니다.
-
assign
-
is
-
prototype.setPrototypeOf
객체에 대해 다음과 같은 ES 8 메서드가 지원됩니다.
-
entries
-
values
-
- 문자열
-
문자열에 대해 다음 ES 5.1 메서드가 지원됩니다.
-
fromCharCode
-
prototype.charAt
-
prototype.concat
-
prototype.indexOf
-
prototype.lastIndexOf
-
prototype.match
-
prototype.replace
-
prototype.search
-
prototype.slice
-
prototype.split
-
prototype.substr
-
prototype.substring
-
prototype.toLowerCase
-
prototype.trim
-
prototype.toUpperCase
문자열에 대해 다음 ES 6 메서드가 지원됩니다.
-
fromCodePoint
-
prototype.codePointAt
-
prototype.endsWith
-
prototype.includes
-
prototype.repeat
-
prototype.startsWith
문자열에 대해 다음 ES 8 메서드가 지원됩니다.
-
prototype.padStart
-
prototype.padEnd
문자열에 대해 다음 ES 9 메서드가 지원됩니다.
-
prototype.trimStart
-
prototype.trimEnd
문자열에 대해 다음과 같은 비표준 메서드가 지원됩니다.
-
prototype.bytesFrom(array | string, encoding)
옥텟 배열 또는 인코딩된 문자열에서 바이트 문자열을 만듭니다. 문자열 인코딩 옵션은
hex
,base64
및base64url
입니다. -
prototype.fromBytes(start[, end])
각 바이트가 해당 유니코드 코드 포인트로 대체되는 바이트 문자열에서 유니코드 문자열을 만듭니다.
-
prototype.fromUTF8(start[, end])
UTF-8 인코딩된 바이트 문자열에서 유니코드 문자열을 만듭니다. 인코딩이 올바르지 않으면
null
이(가) 반환됩니다. -
prototype.toBytes(start[, end])
유니코드 문자열에서 바이트 문자열을 만듭니다. 모든 문자는 [0,255] 범위에 있어야 합니다. 그렇지 않은 경우
null
이 반환됩니다. -
prototype.toUTF8(start[, end])
유니코드 문자열에서 UTF-8 인코딩된 바이트 문자열을 만듭니다.
-
- 번호
-
숫자에 대한 모든 ES 5.1 메서드가 지원됩니다.
숫자에 대해 다음 ES 6 메서드가 지원됩니다.
-
isFinite
-
isInteger
-
isNaN
-
isSafeInteger
-
parseFloat
-
parseInt
-
prototype.toExponential
-
prototype.toFixed
-
prototype.toPrecision
-
EPSILON
-
MAX_SAFE_INTEGER
-
MAX_VALUE
-
MIN_SAFE_INTEGER
-
MIN_VALUE
-
NEGATIVE_INFINITY
-
NaN
-
POSITIVE_INFINITY
-
기본 제공 객체
ES의 다음 내장 객체가 지원됩니다.
- 수학 연산
-
모든 ES 5.1 수학 메서드가 지원됩니다.
참고
CloudFront 함수 런타임 환경에서
Math.random()
구현은 함수가 실행될 때의 타임스탬프와 함께 시드된 OpenBSDarc4random
을(를) 사용합니다.다음 ES 6 수학 메서드가 지원됩니다.
-
acosh
-
asinh
-
atanh
-
cbrt
-
clz32
-
cosh
-
expm1
-
fround
-
hypot
-
imul
-
log10
-
log1p
-
log2
-
sign
-
sinh
-
tanh
-
trunc
-
E
-
LN10
-
LN2
-
LOG10E
-
LOG2E
-
PI
-
SQRT1_2
-
SQRT2
-
- 날짜
-
모든 ES 5.1
Date
기능이 지원됩니다.참고
보안상의 이유로 단일 함수 실행의 수명 동안
Date
은(는) 항상 동일한 값(함수의 시작 시간)을 반환합니다. 자세한 내용은 제한된 기능 단원을 참조하세요. - 함수
-
apply
,bind
및call
메서드가 지원됩니다.함수 생성자는 지원되지 않습니다.
- 정규식
-
모든 ES 5.1 정규 표현식 기능이 지원됩니다. 정규 표현식 언어는 Perl과 호환됩니다. ES 9 명명된 캡처 그룹이 지원됩니다.
- JSON
-
parse
및stringify
을(를) 포함하여 모든 ES 5.1 JSON 기능이 지원됩니다. - 배열
-
배열에 대해 다음 ES 5.1 메서드가 지원됩니다.
-
isArray
-
prototype.concat
-
prototype.every
-
prototype.filter
-
prototype.forEach
-
prototype.indexOf
-
prototype.join
-
prototype.lastIndexOf
-
prototype.map
-
prototype.pop
-
prototype.push
-
prototype.reduce
-
prototype.reduceRight
-
prototype.reverse
-
prototype.shift
-
prototype.slice
-
prototype.some
-
prototype.sort
-
prototype.splice
-
prototype.unshift
배열에 대해 다음 ES 6 메서드가 지원됩니다.
-
of
-
prototype.copyWithin
-
prototype.fill
-
prototype.find
-
prototype.findIndex
배열에 대해 다음 ES 7 메서드가 지원됩니다.
-
prototype.includes
-
- 형식화된 배열
-
다음 ES 6 형식화된 배열이 지원됩니다.
-
Int8Array
-
Uint8Array
-
Uint8ClampedArray
-
Int16Array
-
Uint16Array
-
Int32Array
-
Uint32Array
-
Float32Array
-
Float64Array
-
prototype.copyWithin
-
prototype.fill
-
prototype.join
-
prototype.set
-
prototype.slice
-
prototype.subarray
-
prototype.toString
-
- 배열 버퍼
-
ArrayBuffer
에 대해 메서드가 지원됩니다.-
prototype.isView
-
prototype.slice
-
- Promise
-
Promise에 대해 다음 메서드가 지원됩니다.
-
reject
-
resolve
-
prototype.catch
-
prototype.finally
-
prototype.then
-
- crypto
-
암호화 모듈은 표준 해싱 및 HMAC(해시 기반 메시지 인증 코드) 헬퍼를 제공합니다.
require('crypto')
을(를) 사용하여 모듈을 로드할 수 있습니다. 모듈은 해당 Node.js 대응으로 정확하게 동작하는 다음과 같은 메서드를 노출합니다.-
createHash(algorithm)
-
hash.update(data)
-
hash.digest([encoding])
-
createHmac(algorithm, secret key)
-
hmac.update(data)
-
hmac.digest([encoding])
자세한 내용은 기본 제공 모듈 단원의 암호화(해시 및 HMAC)를 참조하세요.
-
- 콘솔
-
디버깅을 위한 헬퍼 객체입니다. 로그 메시지를 기록하는
log()
메서드만 지원합니다.참고
CloudFront 함수는
console.log('a', 'b')
와 같은 쉼표 구문을 지원하지 않습니다. 대신console.log('a' + ' ' + 'b')
형식을 사용합니다.
오류 유형
다음과 같은 오류 객체가 지원됩니다.
-
Error
-
EvalError
-
InternalError
-
MemoryError
-
RangeError
-
ReferenceError
-
SyntaxError
-
TypeError
-
URIError
Globals
globalThis
객체가 지원됩니다.
다음 ES 5.1 전역 함수가 지원됩니다.
-
decodeURI
-
decodeURIComponent
-
encodeURI
-
encodeURIComponent
-
isFinite
-
isNaN
-
parseFloat
-
parseInt
다음과 같은 글로벌 제약이 지원됩니다.
-
NaN
-
Infinity
-
undefined
기본 제공 모듈
다음 기본 제공 모듈이 지원됩니다.
암호화(해시 및 HMAC)
암호화 모듈(crypto
)은 표준 해싱 및 HMAC(해시 기반 메시지 인증 코드) 헬퍼를 제공합니다. require('crypto')
을(를) 사용하여 모듈을 로드할 수 있습니다. 이 모듈은 Node.js 대응물과 정확히 동일하게 동작하는 다음과 같은 메서드를 제공합니다.
해싱 메서드
crypto.createHash(algorithm)
-
지정된 알고리즘(
md5
,sha1
또는sha256
)을 사용하여 해시 다이제스트를 생성하는 데 사용할 수 있는 해시 객체를 생성하고 반환합니다. hash.update(data)
-
지정된
data
(으)로 해시 콘텐츠를 업데이트합니다. hash.digest([encoding])
-
hash.update()
을(를) 사용하여 전달된 모든 데이터의 다이제스트를 계산합니다. 인코딩은hex
,base64
또는base64url
일 수 있습니다.
HMAC 메서드
crypto.createHmac(algorithm, secret key)
-
지정된
algorithm
및secret key
을(를) 사용하는 HMAC 객체를 생성 및 반환합니다. 알고리즘은md5
,sha1
또는sha256
일 수 있습니다. hmac.update(data)
-
지정된
data
(으)로 HMAC 콘텐츠를 업데이트합니다. hmac.digest([encoding])
-
hmac.update()
을(를) 사용하여 전달된 모든 데이터의 다이제스트를 계산합니다. 인코딩은hex
,base64
또는base64url
일 수 있습니다.
쿼리 문자열
참고
CloudFront 함수 이벤트 객체는 URL 쿼리 문자열을 자동으로 구문 분석합니다. 즉, 대부분의 경우 이 모듈을 사용할 필요가 없습니다.
쿼리 문자열 모듈(querystring
)은 URL 쿼리 문자열을 구문 분석하고 서식을 지정하는 메서드를 제공합니다. require('querystring')
을 사용하여 모듈을 로드할 수 있습니다. 이 모듈은 다음과 같은 방법을 제공합니다.
querystring.escape(string)
-
지정된
string
을 URL-인코딩하여 이스케이프된 쿼리 문자열을 반환합니다. 이 방법은querystring.stringify()
에서 사용되며 직접 사용해서는 안 됩니다. querystring.parse(string[, separator[, equal[, options]]])
-
쿼리 문자열(
string
)을 구문 분석하고 객체를 반환합니다.separator
파라미터는 쿼리 문자열에서 키와 값 페어를 구분하기 위한 하위 문자열입니다. 기본 설정은&
입니다.equal
파라미터는 쿼리 문자열에서 키와 값을 구분하기 위한 하위 문자열입니다. 기본 설정은=
입니다.options
파라미터는 다음 키를 가진 객체입니다.decodeURIComponent function
-
쿼리 문자열에서 백분율로 인코딩된 문자를 디코딩하는 함수입니다. 기본 설정은
querystring.unescape()
입니다. maxKeys number
-
구문 분석할 최대 키 수입니다. 기본 설정은
1000
입니다.0
값을 사용하여 키 카운트 제한을 제거합니다.
기본적으로 쿼리 문자열 내의 백분율로 인코딩된 문자는 UTF-8 인코딩을 사용하는 것으로 간주됩니다. 잘못된 UTF-8 시퀀스는
U+FFFD
대체 문자로 대체됩니다.예를 들어 다음 쿼리 문자열의 경우:
'name=value&abc=xyz&abc=123'
querystring.parse()
의 반환 값:{ name: 'value', abc: ['xyz', '123'] }
querystring.decode()
는querystring.parse()
의 별칭입니다. querystring.stringify(object[, separator[, equal[, options]]])
-
object
를 직렬화하고 쿼리 문자열을 반환합니다.separator
파라미터는 쿼리 문자열에서 키와 값 페어를 구분하기 위한 하위 문자열입니다. 기본 설정은&
입니다.equal
파라미터는 쿼리 문자열에서 키와 값을 구분하기 위한 하위 문자열입니다. 기본 설정은=
입니다.options
파라미터는 다음 키를 가진 객체입니다.encodeURIComponent function
-
URL에 안전하지 않은 문자를 쿼리 문자열에서 백분율 인코딩으로 변환하는 데 사용할 함수입니다. 기본 설정은
querystring.escape()
입니다.
기본적으로 쿼리 문자열 내에서 백분율 인코딩이 필요한 문자는 UTF-8로 인코딩됩니다. 다른 인코딩을 사용하려면
encodeURIComponent
옵션을 지정합니다.예를 들어, 다음 코드의 경우:
querystring.stringify({ name: 'value', abc: ['xyz', '123'], anotherName: '' });
반환 값:
'name=value&abc=xyz&abc=123&anotherName='
querystring.encode()
는querystring.stringify()
의 별칭입니다. querystring.unescape(string)
-
지정된
string
의 URL 백분율로 인코딩된 문자를 디코딩하여 이스케이프되지 않은 쿼리 문자열을 반환합니다. 이 방법은querystring.parse()
에서 사용되며 직접 사용해서는 안 됩니다.
제한된 기능
다음 JavaScript 언어 기능은 보안 문제로 인해 지원되지 않거나 제한됩니다.
- 동적 코드 평가
-
동적 코드 평가는 지원되지 않습니다. 시도하면
eval()
및Function
생성자 모두 오류가 발생합니다. 예를 들어const sum = new Function('a', 'b', 'return a + b')
에서 오류가 발생합니다. - 타이머
-
setTimeout()
,setImmediate()
및clearTimeout()
함수는 지원되지 않습니다. 함수 실행 내에서 연기하거나 출력할 프로비전이 없습니다. 함수가 완료되려면 동기적으로 실행되어야 합니다. - 날짜 및 타임스탬프
-
보안상의 이유로 고해상도 타이머에 액세스할 수 없습니다. 현재 시간을 쿼리하는 모든
Date
메서드는 단일 함수 실행의 수명 동안 항상 동일한 값을 반환합니다. 반환된 타임 스탬프는 함수가 실행을 시작한 시간입니다. 따라서 함수에서 경과 시간을 측정할 수 없습니다. - 파일 시스템 액세스
-
파일 시스템 액세스가 없습니다. 예를 들어 Node.js에서처럼 파일 시스템 액세스를 위한
fs
모듈이 없습니다. - 프로세스 액세스
-
프로세스 액세스가 없습니다. 예를 들어 Node.js와는 달리 정보 액세스를 처리하기 위한
process
글로벌 객체가 없습니다. - 환경 변수
-
환경 변수에 액세스할 수 없습니다.
대신 CloudFront KeyValueStore를 사용하여 CloudFront Functions에 대한 키 값 페어의 중앙 집중식 데이터 스토어를 생성할 수 있습니다. CloudFront KeyValueStore를 사용하면 코드 변경 사항을 배포할 필요 없이 구성 데이터를 동적으로 업데이트할 수 있습니다. CloudFront KeyValueStore를 사용하려면 JavaScript 런타임 2.0을 사용해야 합니다. 자세한 내용은 Amazon CloudFront KeyValueStore 단원을 참조하십시오.
- 네트워크 액세스
-
네트워크 통화에 대한 지원이 없습니다. 예를 들어 XHR, HTTP(S) 및 소켓은 지원되지 않습니다.