祝! Serverless Framework 1.0 Beta版リリース

記事タイトルとURLをコピーする

 こんにちは。CS課の坂本(@t_sakam)です。
 タイトルは違いますが、前回に続いて、Serverless Frameworkの話題です。

 8月3日にServerless Frameworkの1.0のベータ版がリリースされたので、まずは公式ドキュメントに沿って使い勝手を試してみました。
 試したところ、0.5系のときと使い方が変わっていたので、残しておきたいと思います。


  1. 「Serverless Framework」のインストール
  2. プロジェクトの作成
  3. AWSのクレデンシャル情報の設定
  4. Lambdaファンクションの作成
  5. デプロイ
  6. テスト実行
  7. まとめ
  8. サーバーレス界隈の話題「ServerlessConf Tokyo 2016」

1. 「Serverless Framework」のインストール

今回の作業環境
OSOS X
Python2.7.10
aws-cliaws-cli/1.10.36
npm2.15.5

 以下のコマンドで「Serverless Framework」をローカル環境にインストールします。ベータ版をインストールする場合は、通常のインストール時のコマンドの最後に「@beta」を付けます。


sudo npm install -g serverless@beta

 バージョンの確認ができれば、インストールは成功です。


serverless --version
1.0.0-beta.1.1

2. プロジェクトの作成

 インストールできたら、次はプロジェクトを作成します。0.5系のときのように対話的に作成する方法はなくなり、ディレクトリ作成後、そのディレクトリに入るだけです。  Beta版だからなのか、正式リリース後もこの方法なのかは不明ですが、かなりシンプルに変化しています。

mkdir myFirstService && cd myFirstService


3. AWSのクレデンシャル情報の設定

 次にAWSのアクセスキーとシークレットアクセスキーを設定します。こちらも対話的に設定する方法ではなくなっています。
 以下のどちらかの方法で設定します。

Quick Setup

 公式ドキュメントでは「Quick Setup」として環境変数に設定する方法が記載されています。シェルを終了すると消えてしまうので、次回実行時に再度設定する必要があります。


export AWS_ACCESS_KEY_ID=XXXXXXXXXXXXXXXXXXXX
export AWS_SECRET_ACCESS_KEY=XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Advanced & Longer Term Setup

 「Advanced & Longer Term Setup」として、こちらも公式ドキュメントで「AWS CLI」の設定方法が記載されています。上の「Quick Setup」の方法は一時的に利用する場合の設定方法なので、通常はこちらのやり方で設定することになると思います。


$ aws configure
AWS Access Key ID [None]: XXXXXXXXXXXXXXXXXXXX
AWS Secret Access Key [None]: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Default region name [None]: us-east-1
Default output format [None]: ENTER

4. Lambdaファンクションの作成

1. Lambdaファンクションの作成

 以下のコマンドでLambdaファンクションを作成します。


serverless create --template aws-python


2. 生成されたファイルの確認

 先ほどの「myFirstService」ディレクトリの中を確認すると、以下の表にある4ファイルが生成されています。自動生成される設定ファイルは、jsonファイルではなく、yamlファイルに変更になったようです。


生成された4ファイル
event.jsonテスト実行時にLambdaファンクションのevent引数に渡す値
handler.pyLambdaファンクション
serverless.env.yml環境設定ファイル。リージョンやステージを設定
serverless.ymlメインの設定ファイル。サービス名、言語、ファンクション名、リソースなどを設定

event.json

  1 {
  2   "key3": "value3",
  3   "key2": "value2",
  4   "key1": "value1"
  5 }

handler.py

  1 def hello(event, context):
  2     return { "message": "Go Serverless v1.0! Your function executed successfully!", "event": event }

serverless.env.yml

  1 # This is the Serverless Environment File
  2 #
  3 # It contains listing of your stages, and their regions
  4 # It also manages serverless variables at 3 levels:
  5 #    - common variables: variables that apply to all stages/regions
  6 #    - stage variables: variables that apply to a specific stage
  7 #    - region variables: variables that apply to a specific region
  8
  9 vars:
 10 stages:
 11   dev:
 12     vars:
 13     regions:
 14       us-east-1:
 15         vars:

serverless.yml

※serverless.ymlは行が多いので少し省略


 12 # Happy Coding!
 13
 14 service: aws-python # NOTE: update this with your service name
 15
 16 provider:
 17   name: aws
 18   runtime: python2.7
 19
 20 # you can overwrite defaults here
 21 #defaults:
 22 #  stage: dev
 23 #  region: us-east-1
 24
 25 # you can add packaging information here
 26 #package:
 27 #  include:
 28 #    - include-me.js
 29 #  exclude:
 30 #    - exclude-me.js
 31 #  artifact: my-service-code.zip
 32
 33 functions:
 34   hello:
 35     handler: handler.hello

3. サービス名の変更

 Lambdaファンクションを作成するコマンドを実行した後に「Please update the "service" property in serverless.yml with your service name」とメッセージが出力されるので、まずは生成された「serverless.yml」ファイルの「service name」を変更します。
 14行目に仮のサービス名「aws-python」が入っているので、今回は「myFirstService」に変えました。


vim serverless.yml

serverless.yml

 14 service: myFirstService # NOTE: update this with your service name

5. デプロイ

1. デプロイコマンド

 ひとまず、サービス名以外は初期値のままでデプロイしてみます。


serverless deploy

2. コマンド実行後の様子

 下のキャプチャを確認すると、CloudFormationのスタックが作成されたり、コードをzipファイルに固めてS3にアップロードしているのが、わかります。



3. CloudFormationのマネジメントコンソールで確認

 CloudFormationのマネジメントコンソールで確認すると、スタックが作成されています。S3バケットやLambdaファンクション以外にIAM Roleも作成されています。


4. S3のマネジメントコンソールで確認

 S3のマネジメントコンソールで確認すると、自動で生成されたバケットの中にzipファイルがアップロードされています。


5. Lambdaのマネジメントコンソールで確認

 Lambdaのマネジメントコンソールで確認すると、「myFirstService-dev-hello」というLambdaファンクションが作成されています。



6. テスト実行

1. テスト実行コマンド

 デプロイできたので、ローカル環境からテスト実行してみます。Lambdaファンクションのevent引数に渡す値が入った「event.json」ファイルを指定して実行します。


serverless invoke --function hello --path event.json

2. 実行結果

 問題なく想定していた値が返ってきました。



7. まとめ

 今回は、Serverless Framework 1.0 Beta版を試してみました。
 対話的に設定する方法がなくなったり、自動生成される設定ファイルがjsonファイルからyamlファイルに変更されるなど、前回の0.5系からいろいろと変更が入った、という印象でした。自動生成されるファイルも4ファイルのみでしたので、よりシンプルに設定できるような方向性で変更を加えているのかもしれません。
 まだまだ日々大きく変化している印象の「Serverless Framework」。他にもいろいろな機能があると思うので、次回も「Serverless Framework」の1.0 Beta版を引き続きみてみたいと思います。

 いや〜、Serverless Frameworkって本当にいいものですね。

8. サーバーレス界隈の話題「ServerlessConf Tokyo 2016」

 最後にサーバーレス界隈の話題をひとつ。
 今年の5月にニューヨークのブルックリンで「ServerlessConf」が初めて開催されました。その「ServerlessConf」ですが、早くも2箇所目として東京で10月1日(土)に開催されます!

ServerlessConf Tokyo 2016

 8月16日にチケットの販売が開始され、カンファレンス前日のプレカンファレンス・ワークショップの方は既に満席ですが、カンファレンスの方はまだ受付をおこなっています(8月17日現在)。
 日本でここまで大きなサーバーレス関係のイベントは初めてだと思いますので、「サーバーレス」について気になっている方はこの機会に参加されてみてはいかがでしょうか?

チケットのお申し込みはこちら