読者です 読者をやめる 読者になる 読者になる

【Serverless】はじめてのServerless Framework v.1 rc1 その1

はじめに

先日、実践Serverlessの勉強会レポートを書きました。

fujiyasu.hatenablog.com

そして、ちょうど良く業務でもサーバーレスでやってみる?という
話にもなったので、技術調査も兼ねてプライベートで触ってみました。

なお、今回はバックエンドではなく
フロントエンド寄りの構成の話となります。

今回は、Serverless Frameworkを使って効率的に開発できるか試してみます。

github.com

アーキテクチャ

Cloudcraftというサービスを使い書いてみました。

https://cloudcraft.co/view/5d16ea58-14e0-439b-a8eb-18c047e9f39a?key=wIxzJw5VW44YEquqe4O7Sw

※今回は、ServerlessなのでAPI GatewayAWS Lambdaの話がメインです。

環境

  • OS X El capitan
  • nodebrew 0.9.6
    • Node.js v5.12.0
    • npm 3.8.6
    • aglio 2.2.1 ※API Blueprintを使って、API仕様書を作るために入れてみました。
  • Serverless v.1 rc1

前提条件

  • Serverless Frameworkを触ったことない人
  • AWSコンソールにログインできる

やってみた

インストールとプロジェクト作成

クイックスタートに書かれているように1 〜 5をやります。

github.com

Step 4に

serverless create --template aws-nodejs --path my-service

とありますが、nodejsで作られるようになっていますが
ServerlessはPython、Java8にも対応しているのでお好みで大丈夫です。
今回はそのままNode.jsを使います。

また、今回はプロジェクト名を「my-first-serverless-rc1」としました。

作られたものを確認

自動でプロジェクトの雛形が作られ、そのままデプロイできますが
それぞれのファイルを確認していきます。

・serverless.yml API Gateway, Lambda, IAMに関する設定をまとめて管理するファイル。
デフォルトが東京リージョンでないため、注意。
また、そのままだとLambdaしか作られないため、API Gatewayも一緒に作る場合
以下の設定を追加します。

functions:
  hello:
    handler: handler.hello
    events:
      - http:
          path: handler/hello
          method: get

ドキュメントは、以下のページです。

serverless/01-apigateway.md at 9699667cc0f35e222e160e9be53fcb6e3003742c · serverless/serverless · GitHub

・handler.js AWS Lambdaでの「入り口」となる部分です。
自動生成した際は「Go Serverless v1.0! Your function executed successfully!」という
文字列が返却される状態となっています。

・event.json ローカルテスト用のファイルだと思います。
あまり使う機会がなく、まだ詳しくないですがあっても問題ないです。

デプロイ

Step 6のコマンドでデプロイできますが、オプションをつけると経過がわかるのでオススメです。

[0:00:46] Y_Fujikawa:my-first-serverless-rc1 $ serverless deploy -v
Serverless: Packaging service...
Serverless: Removing old service versions...
Serverless: Uploading CloudFormation file to S3...
Serverless: Uploading service .zip file to S3...
Serverless: Updating Stack...
Serverless: Checking Stack update progress...
CloudFormation - UPDATE_IN_PROGRESS - AWS::CloudFormation::Stack - my-first-serverless-rc1-dev
CloudFormation - UPDATE_IN_PROGRESS - AWS::Lambda::Function - HelloLambdaFunction
CloudFormation - UPDATE_IN_PROGRESS - AWS::Lambda::Function - InsertLambdaFunction
CloudFormation - UPDATE_COMPLETE - AWS::Lambda::Function - HelloLambdaFunction
CloudFormation - UPDATE_COMPLETE - AWS::Lambda::Function - InsertLambdaFunction
CloudFormation - CREATE_IN_PROGRESS - AWS::ApiGateway::Deployment - ApiGatewayDeployment1474556465062
CloudFormation - CREATE_IN_PROGRESS - AWS::ApiGateway::Deployment - ApiGatewayDeployment1474556465062
CloudFormation - CREATE_COMPLETE - AWS::ApiGateway::Deployment - ApiGatewayDeployment1474556465062
CloudFormation - UPDATE_COMPLETE_CLEANUP_IN_PROGRESS - AWS::CloudFormation::Stack - my-first-serverless-rc1-dev
CloudFormation - DELETE_IN_PROGRESS - AWS::ApiGateway::Deployment - ApiGatewayDeployment1474250545851
CloudFormation - DELETE_COMPLETE - AWS::ApiGateway::Deployment - ApiGatewayDeployment1474250545851
CloudFormation - UPDATE_COMPLETE - AWS::CloudFormation::Stack - my-first-serverless-rc1-dev
Serverless: Stack update finished...

Service Information
service: my-first-serverless-rc1
stage: dev
region: ap-northeast-1
endpoints:
  GET - https://xxxxx.execute-api.ap-northeast-1.amazonaws.com/dev/handler/hello
functions:
  my-first-serverless-rc1-dev-hello: arn:aws:lambda:ap-northeast-1:201892032205:function:my-first-serverless-rc1-dev-hello

動作確認

Endpointsも書かれているので、Curlコマンドを叩けばすぐ確認できます。

curl https://xxxxx.execute-api.ap-northeast-1.amazonaws.com/dev/handler/hello

{"message": "Go Serverless v1.0! Your function executed successfully!"}

動作確認が済んだら、以下のコマンドを実行すればデプロイした内容が
すべて削除されてきれいになります。

serverless remove

注意

APIの認証をしていないため、APIのURLがわかってしまうと
いたずらにアクセスされる可能性があるため、認証キーを設定した方が良いです。
設定の仕方はまた次回に書きます。

まとめ

最初、便利だなぁと思っていたのですが
手動での設定が多すぎてとても大変な印象を受けましたが
すでに便利なフレームワークがあったことに驚きました。

もう少しいろいろ試してみて、便利さを実感していこうと思います。