lambda入門(Node) - serverless frameworkを使ってみる

こんにちは、lambdaとslackを連携させて
あれこれやってみたいと思っている@smith_30 です

ひとまず今回は、lambdaを使うにあたりやったことを書き残しておきたいと思います

使ったもの

OS: Mac

  • Node
    私がlambdaを書くに当たってつかえるのはjavascriptだけだったので。

  • phpstorm
    php書く際にお世話になっています、
    フロントエンド範囲だったら大体なんでも便利にしてくれます。

  • eslint
    lambdaがサポートしているNodeのバージョンはv4なので
    es6で書けるため。
    phpstormに読み込ませて、文法を校正してもらう。

  • serverless framework
    https://github.com/serverless/serverless

準備

phpstorm にeslintの設定を行う

eslintの設定は、google javascript style guideのものを使う

  • インストール
$ npm install -g eslint eslint-config-google
  • 設定ファイル作成
eslintrc.json
{
  "parserOptions": {
    "ecmaVersion": 6
  },
  "extends": ["google"],
  "rules": {
    // Additional, per-project rules...
  }
}
  • phpstormに読ませる

e3d10d243ff703bb8347a2eb1956646e.png

serverless framework

amazonが出しているserverless framework的なやつもあるのですが
gcpとかその他クラウドサービスでもserverlessで何かという場合に
柔軟でありたいと思いこちらにしました。

serverless.ymlのproviderのnameあたりいじればいい。
awsでないsampleはこちらから

  • インストール
$ npm install -g serverless
  • awsのIAMを操作。Credential作成
  1. IAMのページにアクセス→ユーザータブをクリック→ユーザーを追加をクリック

  2. アクセスの種類は「プログラムによるアクセス」

  3. 既存のポリシーを直接アタッチ、AdministratorAccessを選択

  4. ユーザーの作成を実行

  • マシンに環境変数を設定
export AWS_ACCESS_KEY_ID=<your-key-here>
export AWS_SECRET_ACCESS_KEY=<your-secret-key-here>
  • プロジェクト作成(スクラッチで始める)
  • Or Existing Servicesから既存のプロジェクトを持ってきて使える
$ serverless create --template aws-nodejs --path testProject
Serverless: Generating boilerplate...
Serverless: Generating boilerplate in "/serverless/testProject"
 _______                             __
|   _   .-----.----.--.--.-----.----|  .-----.-----.-----.
|   |___|  -__|   _|  |  |  -__|   _|  |  -__|__ --|__ --|
|____   |_____|__|  \___/|_____|__| |__|_____|_____|_____|
|   |   |             The Serverless Application Framework
|       |                           serverless.com, v1.8.0
 -------'

Serverless: Successfully generated boilerplate for template: "aws-nodejs"

  • サービスのデプロイ
$ serverless deploy -v

プロジェクト内の全ての変更を反映させたいとき
(serverless.ymlの変更など)

serverless.ymlで指定されているデフォルトのリージョンはus-east-1なので
好きなところに編集しておくとよろしいかと。

  • lambda function のデプロイ
$ serverless deploy function -f hello

ここ以降のhelloは、プロジェクト作成時に入っているファイルを指す

handler.js
'use strict';

module.exports.hello = (event, context, callback) => {
  const response = {
    statusCode: 200,
    body: JSON.stringify({
      message: 'Go Serverless v1.0! Your function executed successfully!',
      input: event,
    }),
  };

  callback(null, response);

  // Use this code if you don't use the http event with the LAMBDA-PROXY integration
  // callback(null, { message: 'Go Serverless v1.0! Your function executed successfully!', event });
};
  • lambda function を実行してデバッグ(AWSで行われる)
$ serverless invoke -f hello -l

こんな感じでレスポンス返ってきます。

{
    "statusCode": 200,
    "body": "{\"message\":\"Go Serverless v1.0! Your function executed successfully!!\",\"input\":{}}"
}
--------------------------------------------------------------------
START RequestId: 264f962d-0808-11e7-8ff3-1f23314ea4ee Version: $LATEST
END RequestId: 264f962d-0808-11e7-8ff3-1f23314ea4ee
REPORT RequestId: 264f962d-0808-11e7-8ff3-1f23314ea4ee  Duration: 2.02 ms   Billed Duration: 100 ms     Memory Size: 1024 MB    Max Memory Used: 15 MB  
  • function の実行ログを取得
$ serverless logs -f hello -t
  • プロジェクトの削除
$ serverless remove

まとめ

予想以上にseverless frameworkが便利、
簡単にlambdaでの開発が進みそう。

phpstorm で編集→エディタのターミナルからデプロイのサイクルが
回せるのは楽だなーと。

また、lambdaってデバッグとかどうすんだろーとか、
デプロイいちいちzipにしてやらずに済むこととかが明らかになった。

デプロイコマンド打つとs3にzipがアップされるので
本番でこいつを指定してやればlambdaの設定は完了なのかな。。

今後作りたいものは、dynamoDBとlambdaの連携とかしたいので
ローカルで開発どうすんだろーとか考えていきたい。
あと、slackからのリクエストをローカルでモックして開発とかか。
APIGateWayだっけか、そこと組み合わせるだろうから勉強しないと。。