serverless-v1.0.0-rc.1を試してみた(1) – 基本的なコマンド操作

モバイルアプリサービス部の五十嵐です。

久しぶりに Serverless を使おうとしたところ、バージョンが1.0系になっていました。どうやら0.x系から大きく変わっているようなので、チュートリアルがてら前回の記事(Slash CommandsとAWS Lambdaで作るChatOpsの基本機能 | Developers.IO)で作ったLambdaをserverless-v1.0.0-rc.1を使ってデプロイしてみました。

長くなってしまったので、実際に作成したserverlessのプロジェクトについては次の記事に書きます。

環境

  • serverless 1.0.0-rc.1
  • node.js 4.3.2
  • npm 2.14.12

インストール

まずはserverlessのインストールです。

# npm install serverless -g

# serverless -v
1.0.0-rc.1

# serverless

Commands
* Serverless documentation: http://docs.serverless.com
* You can run commands with "serverless" or the shortcut "sls"
* Pass "--help" after any <command> for contextual help

create ................... Create new Serverless Service.
deploy ................... Deploy Service.
deploy function .......... Deploys a single function from the service
info ..................... Displays information about the service.
invoke ................... Invokes a deployed function.
logs ..................... Outputs the logs of a deployed function.
remove ................... Remove resources.
tracking ................. Enable or disable usage tracking.

Plugins
AwsCompileApigEvents, AwsCompileFunctions, AwsCompileS3Events, AwsCompileSNSEvents, AwsCompileScheduledEvents, AwsDeploy, AwsDeployFunction, AwsInfo, AwsInvoke, AwsLogs, AwsRemove, Create, Deploy, Info, Invoke, Logs, Package, Remove, Tracking

インストールすると serverless コマンドとそのエイリアスの sls が使えるようになります。以降はエイリアス sls を使用します。

プロジェクトの作成

create コマンドでプロジェクトを作成します。今回はnode.jsで作りたいので --template aws-nodejs を指定します。ちなみに対応しているテンプレート(言語環境)は "aws-nodejs", "aws-python", "aws-java-maven" and "aws-java-gradle" の4つです。 --path オプションを付けると指定したディレクトリの下にプロジェクトを作ってくれます。

# sls create --template aws-nodejs --path sample
Serverless: Creating new Serverless service...
Serverless: Creating the service in "/Users/bisque33/Programs/serverless/sample"
 _______                             __
|   _   .-----.----.--.--.-----.----|  .-----.-----.-----.
|   |___|  -__|   _|  |  |  -__|   _|  |  -__|__ --|__ --|
|____   |_____|__|  \___/|_____|__| |__|_____|_____|_____|
|   |   |             The Serverless Application Framework
|       |                           serverless.com, v1.0.0-rc.1
 -------'

Serverless: Successfully created service with template: "aws-nodejs"

# ll sample
total 24
-rw-r--r--  1 bisque33  staff    63B  9 10 17:31 event.json
-rw-r--r--  1 bisque33  staff   259B  9 10 17:31 handler.js
-rw-r--r--  1 bisque33  staff   1.7K  9 10 17:31 serverless.yml

デプロイ

デプロイにはAWSのCredentialsが必要です。まだ設定していなければ serverless/01-setup.md at master · serverless/serverless を参照して設定します。

プロジェクトを作成したい状態で deploy コマンドを実行してみます。AWSの設定がうまくできていれば以下のように成功するはずです。CloudFormationを使ってデプロイしていることが分かりますね。 -v オプションを付けるとCloudFormationのログも出力されます。

sls deploy
Serverless: Creating Stack...
Serverless: Checking Stack create progress...
.....
Serverless: Stack create finished...
Serverless: Packaging service...
Serverless: Uploading CloudFormation file to S3...
Serverless: Uploading service .zip file to S3...
Serverless: Updating Stack...
Serverless: Checking Stack update progress...
............
Serverless: Stack update finished...

Service Information
service: sample
stage: dev
region: us-east-1
endpoints:
  None
functions:
  sample-dev-hello: arn:aws:lambda:us-east-1:XXX:function:sample-dev-hello

実行

デプロイされたLambdaを実行するには invoke コマンドを使います。デフォルトのFunction名はhelloです。eventパラメータにはプロジェクト作成時に作成されたevent.jsonが使われます。

# sls invoke --function hello
{
    "message": "Go Serverless v1.0! Your function executed successfully!",
    "event": {}
}

ログを見る

CloudWatchLogsにあるLambdaのログを見るには、 logs コマンドを使います。コマンドも短いし aws-cli に頭を切り替えなくて良いのは便利ですね。

# sls logs --function hello
START RequestId: f1b39691-7731-11e6-98d8-c9dbb6237eb0 Version: $LATEST
END RequestId: f1b39691-7731-11e6-98d8-c9dbb6237eb0
REPORT RequestId: f1b39691-7731-11e6-98d8-c9dbb6237eb0     Duration: 2.65 ms          Billed Duration: 100 ms            Memory Size: 1024 MB       Max Memory Used: 34 MB

まとめ

serverless 1.0系の所感としては、

  • Lambdaの開発に必要な設定やコマンドが全てserverlessに集約されているので便利です。
  • serverless.yamlという設定ファイルがCloudFormationのテンプレートに近い感覚で書けるのも良いです。(次の記事で軽く触れます)
  • Lambdaやその他リソースが全て設定ファイルに書いたとおりにCloudFormationになるので、透明性が高く、もしserverlessが無くなってもCloudFormationが残るので全く困らないということです(JAWSの頃はこの辺りが不安でした)。

まだまだ変更が激しい時期ですが、これなら業務でも使いたいなと思いました。