Serverless勉強
Serverless学習
こんばんは、 です。
今日は、Serverless Framework のチュートリアルをやってみました.
概要
ServerlessFrameworkを学んでみる.
開発する言語ははNode.js
.
PaaSにはAWS
を選択してみる.
インストール
Node
Node.jsはもともとインストールしていたため割愛
$ node -v
v11.4.0
Serverless Framework
npmでServerless Frameworkをインストール.
$ npm install -g serverless
$ serverless -v
1.35.1
$ sls -v
1.35.1
プロジェクト作成
$ sls create --template aws-nodejs --path {projectName}
Serverless: Generating boilerplate...
Serverless: Generating boilerplate in "/Users/takashimanozomu/work/30_pgworkspaces/vscode/learning-serverless/out"
_______ __
| _ .-----.----.--.--.-----.----| .-----.-----.-----.
| |___| -__| _| | | -__| _| | -__|__ --|__ --|
|____ |_____|__| \___/|_____|__| |__|_____|_____|_____|
| | | The Serverless Application Framework
| | serverless.com, v1.35.1
-------'
Serverless: Successfully generated boilerplate for template: "aws-nodejs"
ディレクトリ構成としては以下のようなファイル群が作成された.
projectRoot
|
|--.gitignore
|--handler.js
`--serverless.yml
ファイル編集
serverless.ymlを一部書き換える必要があるそうだ.
provider:
name: aws
runtime: nodejs8.10
region: ap-northeast-1 # この行を追加
IAMの作成
ServerlessFrameworkで利用するIAMをAWSのマネジメントコンソールから作成した.
アクセスキーおよびシークレットキーを取得.
ポリシーは AdministratorAccess
を与えた.
デプロイ
デプロイの前に、作成したIAMの情報を環境変数で定義.
$ export AWS_ACCESS_KEY_ID={アクセスキー}
$ export AWS_SECRET_ACCESS_KEY={シークレットキー}
この他にも方法はあるようだ.
公式ドキュメントに書いてあった.
デプロイを実施する.
$ serverless deploy -v
Serverless: Packaging service...
Serverless: Excluding development dependencies...
Serverless: Creating Stack...
Serverless: Checking Stack create progress...
CloudFormation - CREATE_IN_PROGRESS - AWS::CloudFormation::Stack - out-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 - out-dev
Serverless: Stack create finished...
Serverless: Uploading CloudFormation file to S3...
Serverless: Uploading artifacts...
Serverless: Uploading service .zip file to S3 (1.27 KB)...
Serverless: Validating template...
Serverless: Updating Stack...
Serverless: Checking Stack update progress...
CloudFormation - UPDATE_IN_PROGRESS - AWS::CloudFormation::Stack - out-dev
CloudFormation - CREATE_IN_PROGRESS - AWS::Logs::LogGroup - HelloLogGroup
CloudFormation - CREATE_IN_PROGRESS - AWS::IAM::Role - IamRoleLambdaExecution
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_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 - HelloLambdaVersionB7WY0OSKPIHFjeHZtSsqgSXLgHFcfJalbqn07jxo8
CloudFormation - CREATE_IN_PROGRESS - AWS::Lambda::Version - HelloLambdaVersionB7WY0OSKPIHFjeHZtSsqgSXLgHFcfJalbqn07jxo8
CloudFormation - CREATE_COMPLETE - AWS::Lambda::Version - HelloLambdaVersionB7WY0OSKPIHFjeHZtSsqgSXLgHFcfJalbqn07jxo8
CloudFormation - UPDATE_COMPLETE_CLEANUP_IN_PROGRESS - AWS::CloudFormation::Stack - out-dev
CloudFormation - UPDATE_COMPLETE - AWS::CloudFormation::Stack - out-dev
Serverless: Stack update finished...
Service Information
service: out
stage: dev
region: ap-northeast-1
stack: out-dev
api keys:
None
endpoints:
None
functions:
hello: out-dev-hello
layers:
None
Stack Outputs
HelloLambdaFunctionQualifiedArn: arn:aws:lambda:ap-northeast-1:************:function:out-dev-hello:1
ServerlessDeploymentBucketName: out-dev-serverlessdeploymentbucket-************
よくわからないが、デプロイは完了したような雰囲気だ.
雰囲気、LamndaとS3に何かしたのだろうというのは標準出力からわかる.
とりあえず、マネジメントコンソールで何が起きたのかは後ほど確認してみる.
チュートリアルに存在する、以下のコマンドは簡単に更新するためのもの.
$ serverless deploy function -f hello
Serverless: Packaging function: hello...
Serverless: Excluding development dependencies...
Serverless: Uploading function: hello (476.58 KB)...
Serverless: Successfully deployed function: hello
Serverless: Successfully updated function: hello
デプロイ結果
Lambda
Lambda Functionが作成されていた.
内容は流石に、handler.js
のようだ.
ただし、トリガーが定義されていない.
API Gateway
等の設定を行っていないからだろうが、どうやって実行するのか.
この他、S3にバケットが新たに作成されており、CloudFormationも作成されていた.
実行
実行もServerless Frameworkから行えるようだ.
$ serverless invoke -f hello -l
{
"statusCode": 200,
"body": "{\"message\":\"Go Serverless v1.0! Your function executed successfully!\",\"input\":{}}"
}
--------------------------------------------------------------------
START RequestId: d061003a-11c8-11e9-bc43-c9296002e575 Version: $LATEST
END RequestId: d061003a-11c8-11e9-bc43-c9296002e575
REPORT RequestId: d061003a-11c8-11e9-bc43-c9296002e575 Duration: 5.34 ms Billed Duration: 100 ms Memory Size: 1024 MB Max Memory Used: 45 MB
実行してみたところ正常に返却されているようだ.
ただし、AWSのマネジメントコンソールからみても1度実行されてる以外よくわからない.
ログ確認
ログ確認用のコマンドがあるようなので、試してみる.
よくわからんが、めちゃくちゃコマンドが返ってくるまでに時間がかかりすぎるので諦めた・・・
削除
デプロイしたものを削除するコマンドがあるようだ.
無料枠で頑張る自分は忘れず削除・・・
$ serverless remove
Serverless: Getting all objects in S3 bucket...
Serverless: Removing objects in S3 bucket...
Serverless: Removing Stack...
Serverless: Checking Stack removal progress...
....
Serverless: Stack removal finished...
AWSのマネジメントコンソールからも確認を行なったが、
作成されたものが綺麗さっぱり掃除されていた.
まとめ
Serverless Frameworkのチュートリアル的なものをなぞってみたが、
ハマりどころがなくスムーズにことが進むので驚いた.
Serverless Architectureはこれから無視できない技術領域になるため、
もう少ししっかりとしたキャッチアップを進めていきたいと思う.