ちょっと話題の記事

【AWS】node.js初心者がOSXでLambda開発環境を整えてみた

2015.09.07

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

はじめに

こんにちは植木和樹@上越妙高オフィスです。本日は lambda の開発環境を準備した際の作業を備忘録としてまとめました。

2014年のre:Inventで発表されたlambdaですが、年末のアドベントカレンダー等で大いに盛り上がっているのを横目に完全に取り残されておりました。しかし9月5日に開催されたJAWS re:Moteでも「lambda, lambda, lambda」と、その可能性に注目が集まっていることを感じざるを得ません。

ということで、node.jsはおろかJavaScriptも詳しくない私がまずは開発環境を整えるところから始めてみました。

準備したもの

パッケージインストール

OSXの場合、開発環境といっても大掛かりなものは必要ありません。後述するサンプルプロジェクトを実行するためのnode.jsを入れておきましょう。またbrewでシステム全体にnode.jsを入れるのはバージョンが混在できないため非推奨です。

特にlambdaのnode.jsのバージョンは0.10.33と少々古いようです。Rubyのrbenvと同じくnvmというツールを使って複数バージョンを切り替えられるようにするのが良さそうです。

$ brew install nvm
$ mkdir ~/.nvm
$ cp $(brew --prefix nvm)/nvm-exec ~/.nvm/
(以下ではzshを使ってますが、bashの方は $HOME/.bashrc に読み替えてください)
$ echo 'export NVM_DIR=~/.nvm' >>  $HOME/.zshrc
$ echo 'source $(brew --prefix nvm)/nvm.sh' >>  $HOME/.zshrc
(一度 Terminal を開き直して、上の設定を有効にします)

$ nvm ls-remote
$ nvm install v0.10.33
$ nvm alias default 0.10.33
$ node -v
v0.10.33

lambda実行環境用 IAM Role

lambdaが実行されるのは、AWSが用意してマネージしているどこかのサーバー上となります。この環境から自分のAWSリソース(S3とか)へアクセスするのを許可するためにIAM Roleを作成して、lambda作成時に設定してあげる必要があります。

IAM Roleの作成はAWSマネージメントコンソールから可能です。

  1. メニューから「ロール」→ 「新しいロールの作成」と進みます。
  2. 「ロール名」に"my-lambda-role"と入力します。
  3. 「ロールタイプの選択」では "AWS Lambda" を選択します。
  4. 「ポリシーのアタッチ」で "PowerUserAccess" を選択します。(もちろん実運用時は必要最小限の権限に絞ることが推奨です)
  5. ロールを作成すると ARN という文字列が表示されますので、これをメモっておきましょう。

サンプルプロジェクト

お手軽にlambda環境を用意する方法がないか調べていたところ、2014年のlambdaアドベントカレンダーで @imaifactory さんがnpmというnode.jsのパッケージ管理システムを用いたサンプルプロジェクトを用意されていました。ありがたくこちらを使用させていただくことにしました。

ただサンプルプロジェクトはこのままでは動きません。2015年の3月にlambdaのAPIバージョンが変わったために、一部廃止されたAPIを使っているためです。 APIバージョンの更新等は弊社の梶原さんがforkしていたものがあったため、その他 app.js というlambda本体のコードがエラーになる問題や、環境設定ファイルのデフォルト値を入れたりしたものでさらにforkしてみました。

サンプルを動かす

上記のサンプルプロジェクトをgit cloneしてから、script/initLambda.js に前述したlambda実行用IAM RoleのARNを設定するだけで動かせるようになっています。

$ git clone https://github.com/ueki-kazuki/myFirstLambda
$ cd myFirstLambda
$ npm install
$ vi script/initLambda.js
(config.role に作成したIAM RoleのARNを入力する)

$ npm run initLambda
$ npm run build
$ npm run publish

Lambda funtionが作成されたら、AWSマネージメントコンソールからテストしてみましょう。

20150907_lambda_001

「Test」をクリックします。

20150907_lambda_002

ページ下部に実行結果が出力されます。赤枠で囲ったところがconsole.logで出力されたeventの内容になります。

20150907_lambda_003

このeventの内容を参照しつつ、コードを修正することでお好みの処理が可能になるわけですね。

以降app.jsを修正するたびに、下のコマンドを実行すれば関数が更新できます。

$ npm run build && npm run publish

まとめ

node.jsに不慣れなため、これだけ設定するだけでも調べ物に3日もかかってしまいました。それでも自分の手で動かすといろいろ理解が深まって楽しいですね。

環境も整ったので、今度はAPI Gatewayと組み合わせてちょっとしたツールを作ってみたいと思います。

参考にしたページ