serverlessフレームワークを使ってローカル環境で作成したNode.jsをLambda関数としてデプロイ
##環境
$ sw_vers
ProductName: Mac OS X
ProductVersion: 10.11.6
BuildVersion: 15G1212
$ brew -v
Homebrew 1.1.11
Homebrew/homebrew-core (git revision 0e1e; last commit 2017-03-11)
$ node -v && npm -v
v6.9.2
3.10.9
##やったこと
何はともあれServerlessのインストール
$ npm install serverless -g
AWS CLIのインストール
$ brew install awscli
$ aws
usage: aws [options] <command> <subcommand> [<subcommand> ...] [parameters]
To see help text, you can run:
aws help
aws <command> help
aws <command> <subcommand> help
aws: error: too few arguments
AWS CLIの設定
Access Keyで設定する場合
- 事前にIAMでグループ権限とユーザーに対するグループ追加を行う必要あり
$ aws configure
AWS Access Key ID [None]: ABCABCABCABCABCABC12
AWS Secret Access Key [None]: BCDBCDBCDBCDBCDBCDBCD+123+EFGEFGEFG45678
Default region name [None]: us-east-1
Default output format [None]: json
※AWS リージョンコード一覧
http://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/using-regions-availability-zones.html
確認
AWC CLIが使えるかの確認をします。
ここでは、EC2のインスタンス一覧表示コマンドを投げました。
(結果は何もないのでからのjsonが返ってくる。
aws ec2 describe-instances
{
"Reservations": []
}
##使ってみる
プロジェクト作成
まずはプロジェクトを作成
公式ドキュメントにある、node.jsテンプレートを使用し、プロジェクトを作成
$ serverless create --template aws-nodejs --path serverless-test
Serverless: Generating boilerplate...
Serverless: Generating boilerplate in "/Users/d_ojima/Documents/serverless-test"
_______ __
| _ .-----.----.--.--.-----.----| .-----.-----.-----.
| |___| -__| _| | | -__| _| | -__|__ --|__ --|
|____ |_____|__| \___/|_____|__| |__|_____|_____|_____|
| | | The Serverless Application Framework
| | serverless.com, v1.8.0
-------'
Serverless: Successfully generated boilerplate for template: "aws-nodejs"
それっぽいロゴが表示されます。
テンション上がりますね
内容を確認
$ cd serverless-test/ && tree .
.
├── handler.js
└── serverless.yml
0 directories, 2 files
デプロイ
handler.jsにサンプルが書かれている状態なので、このままデプロイしてみます。
$ serverless deploy -v
Serverless: Creating Stack...
Serverless: Checking Stack create progress...
CloudFormation - CREATE_IN_PROGRESS - AWS::CloudFormation::Stack - serverless-test-dev
CloudFormation - CREATE_IN_PROGRESS - AWS::S3::Bucket - ServerlessDeploymentBucket
CloudFormation - CREATE_IN_PROGRESS - AWS::S3::Bucket - ServerlessDeploymentBucket
CloudFormation - CREATE_COMPLETE - AWS::S3::Bucket - ServerlessDeploymentBucket
CloudFormation - CREATE_COMPLETE - AWS::CloudFormation::Stack - serverless-test-dev
Serverless: Stack create finished...
Serverless: Packaging service...
Serverless: Uploading CloudFormation file to S3...
Serverless: Uploading service .zip file to S3 (583 B)...
Serverless: Updating Stack...
Serverless: Checking Stack update progress...
CloudFormation - CREATE_COMPLETE - AWS::CloudFormation::Stack - serverless-test-dev
CloudFormation - UPDATE_IN_PROGRESS - AWS::CloudFormation::Stack - serverless-test-dev
CloudFormation - CREATE_IN_PROGRESS - AWS::Logs::LogGroup - HelloLogGroup
CloudFormation - CREATE_IN_PROGRESS - AWS::Logs::LogGroup - HelloLogGroup
CloudFormation - CREATE_COMPLETE - AWS::Logs::LogGroup - HelloLogGroup
CloudFormation - CREATE_IN_PROGRESS - AWS::IAM::Role - IamRoleLambdaExecution
CloudFormation - CREATE_IN_PROGRESS - AWS::IAM::Role - IamRoleLambdaExecution
CloudFormation - CREATE_COMPLETE - AWS::IAM::Role - IamRoleLambdaExecution
CloudFormation - CREATE_IN_PROGRESS - AWS::Lambda::Function - HelloLambdaFunction
CloudFormation - CREATE_IN_PROGRESS - AWS::Lambda::Function - HelloLambdaFunction
CloudFormation - CREATE_COMPLETE - AWS::Lambda::Function - HelloLambdaFunction
CloudFormation - CREATE_IN_PROGRESS - AWS::Lambda::Version - HelloLambdaVersionmQpsI2bHdSCO39nFrbUuIDXStzt10M9R68vwOUGdtc
CloudFormation - CREATE_IN_PROGRESS - AWS::Lambda::Version - HelloLambdaVersionmQpsI2bHdSCO39nFrbUuIDXStzt10M9R68vwOUGdtc
CloudFormation - CREATE_COMPLETE - AWS::Lambda::Version - HelloLambdaVersionmQpsI2bHdSCO39nFrbUuIDXStzt10M9R68vwOUGdtc
CloudFormation - UPDATE_COMPLETE_CLEANUP_IN_PROGRESS - AWS::CloudFormation::Stack - serverless-test-dev
CloudFormation - UPDATE_COMPLETE - AWS::CloudFormation::Stack - serverless-test-dev
Serverless: Stack update finished...
Service Information
service: serverless-test
stage: dev
region: us-east-1
api keys:
None
endpoints:
None
functions:
hello: serverless-test-dev-hello
Stack Outputs
HelloLambdaFunctionQualifiedArn: arn:aws:lambda:us-east-1:932608639237:function:serverless-test-dev-hello:1
ServerlessDeploymentBucketName: serverless-test-dev-serverlessdeploymentbucket-1gve57f768zkr
ブラウザからAWSコンソールを確認すると
serverlessでデプロイしたLambda関数が確認できました
また、serverlessではCloudFormationの機能を利用しているため、同時にIAMロールS3バケットなども作成されていました。
##雑感
とりあえず環境構築ということで、serverlessの触り中の触りを試してみた。
今後は、外部パッケージを使ったラムダ関数の作成、API Gatewayとの連携などを試してみたい。