Serverless Frameworkを利用するための環境を構築して、AWS Lambdaをデプロイする方法について紹介します。

環境準備

予めaws cliが利用できることを前提で環境構築手順を紹介します。もし準備ができていない場合は、下記リンクを参照してください。

インストール

Serverless FrameworkはNode.js上で動作するため、Node.jsをインストールします。

Serverless Frameworkのインストールは、下記コマンドで一発でインストールできます。

$ npm install -g serverless

インストールしたバージョンを確認します。下記のようにバージョン情報が表示されれば問題なくインストールできています。

$ serverless --version                                                           
Framework Core: 2.10.0 (local)
Plugin: 4.1.1
SDK: 2.3.2
Components: 3.3.0

IAMユーザーを作成

AWSのマネジメントコンソールにログインし、Serverless Frameworkで利用するIAMユーザーを作成し、アクセスキー、シークレットキーをメモしておきます。注意点としては、AdministratorAcessが必要です。

AWS CLIの設定

awscliをインストールしていない場合には、インストールしましょう。

今回のテストで利用するプロファイルを作成します。serverlessdemoとします。
デプロイ先のリージョンは、東京リージョンを利用する想定で下記コマンドは実行しています。

$ aws configure --profile serverlessdemo
AWS Access Key ID [None]: ここには Access key ID
AWS Secret Access Key [None]: ここには Secret access key
Default region name [None]: ap-northeast-1

雛形生成

今回は、node.jsを利用するlambdaを雛形として選択します。

$ serverless create --template aws-nodejs --path hello
Serverless: Generating boilerplate...
Serverless: Generating boilerplate in "/Users/kawashima/work/app-swing-by/tech_blogs/test/hello"
 _______                             __
|   _   .-----.----.--.--.-----.----|  .-----.-----.-----.
|   |___|  -__|   _|  |  |  -__|   _|  |  -__|__ --|__ --|
|____   |_____|__|  \___/|_____|__| |__|_____|_____|_____|
|   |   |             The Serverless Application Framework
|       |                           serverless.com, v2.11.0
 -------'

Serverless: Successfully generated boilerplate for template: "aws-nodejs"

上記のような実行結果が表示されます。テンプレート、pathについては、serverless create --helpで確認してください。今回の例では、helloディレクトリにひな形が出力されます。

AWSへデプロイ

下記のコマンドを利用してデプロイします。
$ serverless deploy --verbose --aws-profile serverlessdemo --region ap-northeast-1
Serverless: Packaging service...
Serverless: Excluding development dependencies...
Serverless: Creating Stack...
Serverless: Checking Stack create progress...
CloudFormation - CREATE_IN_PROGRESS - AWS::CloudFormation::Stack - hello-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_IN_PROGRESS - AWS::S3::BucketPolicy - ServerlessDeploymentBucketPolicy
CloudFormation - CREATE_IN_PROGRESS - AWS::S3::BucketPolicy - ServerlessDeploymentBucketPolicy
CloudFormation - CREATE_COMPLETE - AWS::S3::BucketPolicy - ServerlessDeploymentBucketPolicy
CloudFormation - CREATE_COMPLETE - AWS::CloudFormation::Stack - hello-dev
Serverless: Stack create finished...
Serverless: Uploading CloudFormation file to S3...
Serverless: Uploading artifacts...
Serverless: Uploading service hello.zip file to S3 (389 B)...
Serverless: Validating template...
Serverless: Updating Stack...
Serverless: Checking Stack update progress...
CloudFormation - UPDATE_IN_PROGRESS - AWS::CloudFormation::Stack - hello-dev
CloudFormation - CREATE_IN_PROGRESS - AWS::IAM::Role - IamRoleLambdaExecution
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_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 - HelloLambdaVersionBmNLT7eOnWeJvxTHnDQUO0dLTcw4ZZI4yB65UbUCc
CloudFormation - CREATE_IN_PROGRESS - AWS::Lambda::Version - HelloLambdaVersionBmNLT7eOnWeJvxTHnDQUO0dLTcw4ZZI4yB65UbUCc
CloudFormation - CREATE_COMPLETE - AWS::Lambda::Version - HelloLambdaVersionBmNLT7eOnWeJvxTHnDQUO0dLTcw4ZZI4yB65UbUCc
CloudFormation - UPDATE_COMPLETE_CLEANUP_IN_PROGRESS - AWS::CloudFormation::Stack - hello-dev
CloudFormation - UPDATE_COMPLETE - AWS::CloudFormation::Stack - hello-dev
Serverless: Stack update finished...
Service Information
service: hello
stage: dev
region: ap-northeast-1
stack: hello-dev
resources: 6
api keys:
  None
endpoints:
  None
functions:
  hello: hello-dev-hello
layers:
  None

Stack Outputs
HelloLambdaFunctionQualifiedArn: arn:aws:lambda:ap-northeast-1:856919177685:function:hello-dev-hello:1
ServerlessDeploymentBucketName: hello-dev-serverlessdeploymentbucket-1151xbmu6m1zg

実行には、少し時間がかかりますがserverless frameworkがAWS CloudFormationを利用して必要な環境の構築を行っている様子がわかると思います。これでデプロイが完了です。もし、本当にデプロイが出来ているか気になる方は、ウェブコンソールで確認して見てください。

デプロイしたLambdaを実行する

下記コマンドでデプロイしたLambda、その実行ログを取得します。

$ serverless invoke --function hello --log --aws-profile serverlessdemo --region ap-northeast-1
{
    "statusCode": 200,
    "body": "{\n  \"message\": \"Go Serverless v1.0! Your function executed successfully!\",\n  \"input\": {}\n}"
}
--

デプロイしたものを削除する

下記コマンド削除します。

$  serverless remove --aws-profile serverlessdemo --region ap-northeast-1  

今回は、Serverless FrameworkをインストールしてAWS Lambdaのデプロイと実行を試してみました。構築自体には、ほとんど時間がかからないと思います。今度は、API Gateway + Lambdaの構築を通して、RESTfulなAPIの構築を紹介したいと思います。