kei0425tan’s blog

技術的なことを主に

claudia.js使ってAWS lambdaはじめました

いろいろ調べてみたら、claudia.jsを利用すると簡単にAWS lambdaを利用できるようです。

とはいうものの、ほんとにはじめの一歩になるのでかなり苦労しました。

例によって、実行環境はcloud9を利用します。

cloud9でのワークスペースの作成

テンプレートにpython用を選択して作成すること。

最初はなんでもいいやということで、blankを選択したのですが、AWSCLIコマンドをインストールするのに、pipを利用します。
その際に、Python.hが必要になるのですが、blankには入っていませんでした。
それで、ググってみると、sudo apt-get install python2.7-devをすればいいよとあるのですが、なぜかそんなパッケージは見つからないと出てきます。

なので、最初からpython用のテンプレートを選択することによりすんなりと先に進めます。

nodeの確認

python用のテンプレートを利用しても、nvmやnodeはインストールされています。
ところが、バージョンを確認すると、v4.7.3がインストールされています。

AWS lambdaを調べてみると、4.3.2(と0.10.36)しかサポートされていないため、念のため、バージョンを合わせておきます。

$ nvm install 4.3.2
$ nvm alias default 4.3.2

AWS CLIのインストール

pipで簡単にインストールできます。

$ sudo pip install awscli

まあ、こちらのほうが詳しいですね。
docs.aws.amazon.com

AWS CLIの設定

AWSのページで先にユーザを作成し、アクセスキーとシークレットキーを生成しておきます。
管理ポリシーしは以下の3つを指定しておいてください。

  • AWSLambdaFullAccess
  • IAMFullAccess
  • AmazonAPIGatewayAdministrator

https://aws.amazon.com/jp/developers/access-keys/aws.amazon.com


aws configureで対話形式で設定できます。

$ aws configure
AWS Access Key ID [None]: 「アクセスキー」
AWS Secret Access Key [None]: 「シークレットキー」
Default region name [None]: ap-northeast-1(東京)
Default output format [None]: json

上記操作により、以下の2つのファイルが作成されます。
~/.aws/credentials

[default]
aws_access_key_id =「アクセスキー」
aws_secret_access_key = 「シークレットキー」

~/.aws/config

[default]
output = json
region = ap-northeast-1

claudia.jsのインストール

ここからは英語ですがチュートリアルがあります。

claudiajs.com

しかし、残念ながら私は英語苦手なのでこちらを参考にしました。
dev.classmethod.jp


npmでグローバルインストール

$ npm install claudia -g

プロジェクトの作成

$ mkdir web-api-sample
$ cd web-api-sample
$ npm init

とりあえず、全部エンターでちゃかちゃかやっちゃいましょう。

プロジェクトの dependency に Claudia API Builder を追加

$ npm install claudia-api-builder --save

web-api-sample/app.jsを以下の内容で作成。

var ApiBuilder = require('claudia-api-builder');
var api = new ApiBuilder();
 
module.exports = api;
 
api.get('/hello', function () {
    'use strict';
    return 'hello claudia.js';
});

web-api-sample/package.jsonに"files": "*.js"を追加

{
  "name": "web-api-sample",
  "version": "1.0.0",
  "description": "",

  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "author": "",
  "license": "ISC",
  "dependencies": {
    "claudia-api-builder": "^2.4.0"
  }
}

AWSにデプロイ

$ claudia create --name web-api-sample --region ap-northeast-1 --api-module app

結構時間かかります。
何かが間違えてるとエラーになります。
うまく行くと以下のようになります。

saving configuration
{
  "lambda": {
    "role": "web-api-sample-executor",
    "name": "web-api-sample",
    "region": "ap-northeast-1"
  },
  "api": {
    "id": "yfw8aqrorg",
    "module": "app",
    "url": "https://yfw8aqrorg.execute-api.ap-northeast-1.amazonaws.com/latest"
  }
}

そしたら、urlに/hello(app.jsに追加したやつ)を付けてアクセスしてみましょう!

https://yfw8aqrorg.execute-api.ap-northeast-1.amazonaws.com/latest/hello

"hello claudia.js"

と表示されれば完成です!
お疲れ様でした!

ここで作成した関数は、AWSのlambdaのところで参照できます。
最初アクセスしたときは、スタートアップ画面しかでてこなかったので、適当な関数を一度登録したところ、表示されるようになりました。
右上にリージョン選択があるので、「東京」を選んでくださいね。