CloudFront Functions の JavaScript ランタイム 1.0 の機能
CloudFront Functions の JavaScript ランタイム環境は ECMAScript (ES) バージョン 5.1
次のトピックでは、サポートされるすべての言語機能の一覧を示します。
主要機能
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)
オクテット列またはエンコードされた文字列からバイト文字列を作成します。文字列エンコーディングオプションは
hex
、base64
、base64url
です。 -
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()
実装に、関数が実行されたときのタイムスタンプがシードされた OpenBSDarc4random
を使用します。以下の 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
は、単一の関数実行の有効期間中、常に同じ値 (関数の開始時間) を返します。詳細については、「制限された機能」を参照してください。 - 関数
-
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
-
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()
メソッドのみサポートしています。注記
CloudFront Functions は、
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
ビルトインモジュール
以下のビルトインモジュールがサポートされています。
Crypto (ハッシュと 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 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
モジュールはありません。 - プロセスへのアクセス
-
プロセスにはアクセスできません。例えば、Node.js にあるような、情報アクセスを処理するための
process
グローバルオブジェクトはありません。 - 環境変数
-
環境変数にはアクセスできません。
この代わりに、CloudFront KeyValueStore を使用して、CloudFront Functions のための key-value ペアの一元化されたデータストアを作成できます。CloudFront KeyValueStore を使用すると、コード変更をデプロイする必要なく、設定データを動的に更新できます。CloudFront KeyValueStore を使用するには、JavaScript ランタイム 2.0 を使用する必要があります。詳細については、「Amazon CloudFront KeyValueStore」を参照してください。
- ネットワークアクセス
-
ネットワークコールはサポートされていません。たとえば、XHR、HTTP (S)、ソケットはサポートされていません。