AWS Lambda(Node)でES modulesとtop-level awaitが使えるようになってた

2022.01.14

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

Introduction

タイトル通り、先日よりLambdaでES modulesとtop level awaitが使えるようになってました。   なので、Node14.xランタイムを指定して、↓のようにかけます。

import foo from 'bar';

const data = await foo.hoge();

export async function handler() {
    ・・・・・・・・・・
};

Environment

以下の環境で試しました。

  • OS : MacOS 11.3.1

Try

AWSコンソールでLambda関数を作成します。
ランタイムはNode.js 14.xです。

次にローカルでLambdaを記述していきます。

% mkdir es_module_lambda && cd es_module_lambda
% npm init

package.jsonのtypeをmodules変更。

{
  "name": "es_module",
  "type": "module",
    ・・・・・・・・・・
}

動作確認用にaxiosをインストール。

% npm install --save axios

lib.mjsファイルを作成。

//lib.mjs
export function get_message() {
    return "es module!";
}

↑のlib.mjsとaxisを使うハンドラ用index.mjsを作成。   

//index.mjs

import axios from 'axios';
import { get_message } from './lib.mjs';

const res = await axios.get(`https://api.zipaddress.net/?zipcode=1010025`);

export async function handler() {
    const response = {
        statusCode: 200,
        "message":get_message(),
        "body": res.data
    };
    return response;
};

コードが記述できたらzip圧縮。

% zip -r /path/your/es_module_lambda.zip .

Lambdaのコンソールへいき、
コード > アップロード元 > zipファイル
でさきほどのzipファイルを指定してアップロードします。
テストタブで実行して↓のように結果がかえってくればOKです。

ここでも言っているように、
パフォーマンス的にも優れているのでよさそうです。  

References