ちょっと話題の記事

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

こんにちは。サービスグループの武田です。AWS Lambdaが、async/awaitが使用できるNode.js v8.10をサポートしたのでマネジメントコンソールで確認しながら簡単なサンプルも動かしてみました。
2018.04.03

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

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

東京は暖かい日が続き、葉桜もちらほら見られるようになってきました。今日は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関数のアップデートなどもぜひ検討してみてください!