LoginSignup
5
2

More than 5 years have passed since last update.

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

Last updated at Posted at 2017-03-13

こんにちは、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だっけか、そこと組み合わせるだろうから勉強しないと。。

5
2
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
5
2