はじめに
先日、実践Serverlessの勉強会レポートを書きました。
fujiyasu.hatenablog.com
そして、ちょうど良く業務でもサーバーレスでやってみる?という
話にもなったので、技術調査も兼ねてプライベートで触ってみました。
なお、今回はバックエンドではなく
フロントエンド寄りの構成の話となります。
今回は、Serverless Frameworkを使って効率的に開発できるか試してみます。
github.com
Cloudcraftというサービスを使い書いてみました。
https://cloudcraft.co/view/5d16ea58-14e0-439b-a8eb-18c047e9f39a?key=wIxzJw5VW44YEquqe4O7Sw
※今回は、ServerlessなのでAPI GatewayとAWS 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がわかってしまうと
いたずらにアクセスされる可能性があるため、認証キーを設定した方が良いです。
設定の仕方はまた次回に書きます。
まとめ
最初、便利だなぁと思っていたのですが
手動での設定が多すぎてとても大変な印象を受けましたが
すでに便利なフレームワークがあったことに驚きました。
もう少しいろいろ試してみて、便利さを実感していこうと思います。