CloudFront Functions の JavaScript runtime 機能 - Amazon CloudFront

CloudFront Functions の JavaScript runtime 機能

CloudFront Functions の JavaScript runtime 環境は ECMAScript (ES) バージョン 5.1 に準拠しており、ES バージョン 6 ~ 9 の一部の機能をサポートしています。また、ES 仕様に含まれない非標準メソッドも提供しています。次のトピックでは、サポートされるすべての言語機能の一覧を示します。

主要機能

ES の次の主要機能がサポートされています。

Types]

すべての ES 5.1 タイプでサポートされています。これには、ブール値、数値、文字列、オブジェクト、配列、関数、関数コンストラクタ、正規表現が含まれます。

演算子

すべての ES 5.1 演算子でサポートされています。

ES 7 指数演算子 (**) がサポートされています。

ステートメント
注記

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 のレストパラメータ (残余因数) 構文がサポートされています。

Unicode

ソーステキストおよび文字列リテラルには、Unicode でエンコードされた文字を含めることができます。6 文字の Unicode エスケープシーケンス (コードポイント、例: \uXXXX) もサポートされています。

Strict モード

関数は Strict モードで動作するため、関数コードに 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)

    オクテット列またはエンコードされた文字列からバイト文字列を作成します。文字列エンコーディングオプションは hexbase64base64urlです。

  • prototype.fromBytes(start[, end])

    バイト文字列から Unicode 文字列を作成します。各バイトは、対応する Unicode コードポイントで置き換えられます。

  • prototype.fromUTF8(start[, end])

    UTF-8 でエンコードされたバイト文字列から Unicode 文字列を作成します。エンコーディングが正しくない場合は、null が返されます。

  • prototype.toBytes(start[, end])

    Unicode 文字列からバイト文字列を作成します。すべての文字は [0,255] の範囲内にある必要があります。そうでない場合は、null が返されます。

  • prototype.toUTF8(start[, end])

    Unicode 文字列から 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 の以下のビルトインオブジェクトがサポートされています。

Math

ES 5.1 のすべての Math メソッドがサポートされています。

注記

CloudFront Functions runtime 環境では、Math.random() 実装に、関数が実行されたときのタイムスタンプがシードされた OpenBSD arc4random を使用します。

以下の ES 6 Math メソッドがサポートされています。

  • 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 は、単一の関数実行の有効期間中、常に同じ値 (関数の開始時間) を返します。詳細については、「制限された機能」を参照してください。

関数

applybindcall メソッドがサポートされています。

関数コンストラクタはサポートされていません。

正規表現

すべての ES 5.1 の正規表現機能がサポートされています。正規表現言語は Perl 互換です。ES 9 の名前付きキャプチャグループがサポートされています。

JSON

parsestringify を含むすべての 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

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])

詳細については、「ビルトインモジュールセクション」の「Crypto (ハッシュと HMAC)」を参照してください。

コンソール

これはデバッグ用のヘルパーオブジェクトです。ログメッセージを記録するための log() メソッドのみサポートしています。

エラーのタイプ

以下のエラーオブジェクトがサポートされています。

  • 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

ビルトインモジュール

以下のビルトインモジュールがサポートされています。

Crypto (ハッシュと HMAC)

暗号モジュール (crypto) は、標準のハッシュおよびハッシュベースのメッセージ認証コード (HMAC) ヘルパーを提供します。require('crypto') を使用してモジュールをロードできます。このモジュールは、Node.js の相対物とまったく同じように動作する以下のメソッドを提供します。

ハッシュメソッド

crypto.createHash(algorithm)

ハッシュオブジェクトを作成して返します。このハッシュオブジェクトは、指定されたアルゴリズム (md5sha1sha256 のいずれか) を使用してハッシュダイジェストの生成に使用できます。

hash.update(data)

指定された data を使用してハッシュコンテンツを更新します。

hash.digest([encoding])

hash.update() を使用して渡されたすべてのデータのダイジェストを計算します。エンコードは hexbase64base64url のいずれかを使用します。

HMACメソッド

crypto.createHmac(algorithm, secret key)

指定された algorithmsecret key を使用する HMAC オブジェクトを作成して返します。アルゴリズムは md5sha1sha256 のいずれかを使用します。

hmac.update(data)

指定された data を使用して HMAC コンテンツを更新します 。

hmac.digest([encoding])

hmac.update() を使用して渡されたすべてのデータのダイジェストを計算します。エンコードは hexbase64base64url のいずれかを使用します。

クエリ文字列

注記

CloudFront Functions イベントオブジェクトは、URL クエリ文字列を自動的に解析します。つまり、ほとんどの場合、このモジュールを使用する必要はありません。

クエリ文字列モジュール (querystring) は、URL クエリ文字列を解析および書式設定するためのメソッドを提供します。require('querystring') を使用してモジュールをロードできます。このモジュールは、以下のメソッドを提供します。

querystring.escape(string)

URL は string をエンコードし、エスケープしたクエリ文字列を返します。このメソッドは querystring.stringify() で使用するため、直接使用しないでください。

querystring.parse(string[, separator[, equal[, options]]])

クエリ文字列 (string) を解析し、オブジェクトを返します。

separator パラメータは、クエリ文字列のキーと値のペアを区切る substring です。デフォルトでは、& です。

equal パラメータは、クエリ文字列のキーと値を区切る substring です。デフォルトでは、= です。

options パラメータは、以下のキーを持つオブジェクトです。

decodeURIComponent function

クエリ文字列のパーセントエンコーディングされた文字を decode する関数です。デフォルトでは、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 パラメータは、クエリ文字列のキーと値のペアを区切る substring です。デフォルトでは、& です。

equal パラメータは、クエリ文字列のキーと値を区切る substring です。デフォルトでは、= です。

options パラメータは、以下のキーを持つオブジェクトです。

encodeURIComponent function

URL-unsafe 文字をクエリ文字列のパーセントエンコーディングに変換するために使用される関数です。デフォルトでは、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() 関数はサポートされていません。関数実行中に defer または yield する規定はありません。関数は同期的に実行しないと完了できません。

日付とタイムスタンプ

セキュリティ上の理由から、高解像度タイマーにはアクセスできません。現在の時刻を照会するすべての Date メソッドは、単一の関数実行の存続期間中は常に同じ値を返します。返されるタイムスタンプは、関数の実行を開始した時刻です。したがって、関数内で経過時間を測定することはできません。

ファイルシステムへのアクセス

ファイルシステムにはアクセスできません。たとえば、Node.js にあるようなファイルシステムアクセス用の fs モジュールはありません。

ネットワークアクセス

ネットワークコールはサポートされていません。たとえば、XHR、HTTP (S)、ソケットはサポートされていません。