[新機能]AWS LambdaがNode.js v8.10をサポートしました

79件のシェア(ちょっぴり話題の記事)

こんにちは。サービスグループの武田です。

東京は暖かい日が続き、葉桜もちらほら見られるようになってきました。今日はAWS Lambdaが、待望のNode.js v8.10をサポートしたので紹介します。

AWS Lambda Supports Node.js v8.10

なお公式ドキュメントでは、4月3日時点で日本語ドキュメントは対応していませんでした。英語ドキュメントは更新されているため次のリンクから確認できます。

Programming Model(Node.js) - AWS Lambda

Node.js v8.10のプログラミングモデル

バージョン6系から8系での変更点はリリースノートなどを見ていただくとして、一番の変更点はasync/awaitパターンが使えるようになったことでしょう。

というわけで、マネジメントコンソールからv8.10を確認しつつ、Lambdaでasync/awaitパターンのコードも試してみます。ちなみに確認は東京リージョンです。

マネジメントコンソールでやってみた

まずはマネジメントコンソールを開き、AWS Lambdaを開きます。開けたら、[関数の作成]ボタンをクリックします。

ランタイムのプルダウンを開くと、デフォルトはNode.js 6.10ですが、Node.js 8.10が選択できるようになっています!

名前やロールの欄も適宜入力し、[関数の作成]ボタンをクリックします。

無事に作成できました。

関数の作成

Lambda関数の作成ができたので、続いてasyncとawaitを使ったコードを試していきます。今回は次のようなコードを保存して動作確認をしました。

function delay(x) {
    return new Promise(resolve => {
        setTimeout(() => {
            resolve(x);
        }, 2000);
    });
}

exports.handler = async function(event, context) {
    console.log('before wait');
    const s = await delay('Hello from Lambda');
    console.log(s);
    context.done(null, s);
};

delay関数は、引数を2秒後にresolveするプロミスを返します。従来のプログラミングモデルでは、返ってきたプロミスのthenメソッドを呼び出して、resolve/rejectの処理をそれぞれ定義していました。v8.10では、代わりにasync/awaitを使って同様のことが実現できます。

エディタに入力できたら[保存]ボタンをクリックして保存します。

テストしてみる

保存ボタンの横にある[テスト]ボタンをクリックします。

特に引数を指定する必要はありませんが、とりあえずテンプレートのまま、適当な名前をつけて保存します。

作成できたら、もう一度[テスト]ボタンをクリックしましょう。

実行結果のログを見ると、出力されたメッセージに2秒の遅延が確認できました!

2018-04-03T01:49:54.563Z    4df6a04f-36e1-11e8-b0dd-d710d63aaa10    before wait
2018-04-03T01:49:56.579Z    4df6a04f-36e1-11e8-b0dd-d710d63aaa10    Hello from Lambda

まとめ

新しくサポートされたNode.js v8.10を試してみました。イマドキのJSプログラミングがLambdaでも可能になる素敵すぎるアップデートですね!

すでに利用している方は、これを機会に、以前作成したLambda関数のアップデートなどもぜひ検討してみてください!