LoginSignup
17
19

More than 5 years have passed since last update.

ApexとnpmでLambda開発環境のテンプレートを作ってみた

Last updated at Posted at 2016-05-23

Apexは、AWS Lambdaのデプロイや実行が簡単にできるようになる、Lambda開発には必須と言っても過言ではないツールです。
ただ、サーバレスでイベントドリブンなLambdaの開発は、パッケージ管理やテストが若干面倒で、Apexだけでは物足りなかったので、npmをどうにか使えないか調べた所、AWS Lambdaの関数をnpmでパッケージ管理という記事が大変参考になりました。
そこで、上記記事を参考にApexとnpmでテスタブルなLambda開発環境のテンプレートを作ってみました。

Apex-npm-template

Apex-npm-templateの使い方

必要な環境

  • Node.js 4.3.2
  • Apex 0.9.0

セットアップ→デプロイ→実行

$ git clone https://github.com/tayasu/apex-npm-template.git
$ cd apex-npm-template
$ apex deploy
$ apex invoke hello

ローカルでテスト→デプロイ

$ cd functions/hello
$ npm install
$ npm test
$ npm run apex deploy #functionディレクトリからapex実行するrun-script

Apex-npm-templateで出来ること

Lambdaの最新の実行環境であるNode.js 4.3.2に対応

ES6サポートなんで、アロー関数やPromiseが使えます。
特に便利だった機能が、AWS.RequestオブジェクトのPromise対応です。下記のように簡単に同期処理が書くことができます。

s3.getObject(param).promise().then((data) => {
  // S3のデータを取得して結果を処理
  return data.Body.toString().toUpperCase();
}).then((value) => {
  // S3の処理完了後に同期的に次の処理
  console.log(value);
}).catch((error) => {
  // エラー処理
  console.log(error);
});

詳しくは "Making Requests in Node.js" の "Support for Promises" の項を参照ください。

ローカルでテスト時にApexの環境変数を読み込み

Apexの便利な機能のひとつである環境変数機能をローカルでテスト実行にも利用できるようにしました。
Apexでbuildした際にproject.jsonfunction.jsonの環境変数をマージしてenv.jsonを作っていたので、同様の処理をnpm test時にも行っています。
Apexの環境変数は下記のようにプロジェクトの環境変数と、functionごとの環境変数を管理でき、複数のfunctionを管理する場合には非常に便利です。

プロジェクトの環境変数

project.json
{
  "environment": {
    "FOO": "Be overwritten by function.json",
    "BAR": "bar"
  }
}

ファンクション毎の環境変数

function.json
{
  "environment": {
    "FOO": "foo"
  }
}

プロジェクトとファンクションをマージした結果

index.js
  console.log('ENV:%s,$s', process.env.FOO, process.env.BAR); //ENV:foo,bar

本番環境と開発環境の切り替え

Apexとnpmでローカルで簡単にテストができるようになると、次はLambdaの本番環境と開発環境を分けたくなります。
Apex-npm-templateには含めませんでしたが、私は下記の記事を参考に環境ごとにproject.jsonを切り替えて運用しています。

Lambda with Apex: 環境変数で環境別にLambda環境を整える

17
19
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
17
19