Serverless FrameworkでLambdaをPython 3.6で使ってみた

serverless-framework

こんにちは、臼田です。

みなさんLambdaしてますか?

今回は、Serverless FrameworkからPython 3.6のLambdaを利用してみます。

Serverless Framework自体の使い方については下記をご参照ください。

今から始めるServerless Frameworkで簡単Lambda開発環境の構築

Serverless Frameworkのインストール

Serverless Frameworkでは1.12.0のバージョンからPython 3.6のLambdaに対応しているようです。

https://github.com/serverless/serverless/releases/tag/v1.12.0

古い場合には、新しくインストールし直しましょう。

$ npm uninstall serverless -g
unbuild serverless@1.8.0
$ npm install serverless -g
$ sls -v
1.17.0

2017/07/07現在では1.17.0でインストールされました。

サービスの作成

それでは作成していきます。

Python 3.6のテンプレート名は「aws-python3」と指定します。

$ sls create -t aws-python3 -p py3test
Serverless: Generating boilerplate...
Serverless: Generating boilerplate in "/Users/xxxxxxxx/py3test"
 _______                             __
|   _   .-----.----.--.--.-----.----|  .-----.-----.-----.
|   |___|  -__|   _|  |  |  -__|   _|  |  -__|__ --|__ --|
|____   |_____|__|  \___/|_____|__| |__|_____|_____|_____|
|   |   |             The Serverless Application Framework
|       |                           serverless.com, v1.17.0
 -------'

Serverless: Successfully generated boilerplate for template: "aws-python3"
$ cd py3test/
$ ls
handler.py     serverless.yml

無事作成されました。

deployしてみる

早速deployします。

$ sls deploy -v
Serverless: Packaging service...
Serverless: Creating Stack...
Serverless: Checking Stack create progress...
CloudFormation - CREATE_IN_PROGRESS - AWS::CloudFormation::Stack - py3test-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 - py3test-dev
Serverless: Stack create finished...
Serverless: Uploading CloudFormation file to S3...
Serverless: Uploading artifacts...
Serverless: Uploading service .zip file to S3 (387 B)...
Serverless: Validating template...
Serverless: Updating Stack...
Serverless: Checking Stack update progress...
CloudFormation - UPDATE_IN_PROGRESS - AWS::CloudFormation::Stack - py3test-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 - HelloLambdaVersionHWLEieddo07V14GsF2RBO2dLDZNAIFWtjjffo8S843I
CloudFormation - CREATE_IN_PROGRESS - AWS::Lambda::Version - HelloLambdaVersionHWLEieddo07V14GsF2RBO2dLDZNAIFWtjjffo8S843I
CloudFormation - CREATE_COMPLETE - AWS::Lambda::Version - HelloLambdaVersionHWLEieddo07V14GsF2RBO2dLDZNAIFWtjjffo8S843I
CloudFormation - UPDATE_COMPLETE_CLEANUP_IN_PROGRESS - AWS::CloudFormation::Stack - py3test-dev
CloudFormation - UPDATE_COMPLETE - AWS::CloudFormation::Stack - py3test-dev
Serverless: Stack update finished...
Service Information
service: py3test
stage: dev
region: us-east-1
api keys:
  None
endpoints:
  None
functions:
  hello: py3test-dev-hello

Stack Outputs
HelloLambdaFunctionQualifiedArn: arn:aws:lambda:us-east-1:000000000000:function:py3test-dev-hello:1
ServerlessDeploymentBucketName: py3test-dev-serverlessdeploymentbucket-459r6dem702c

無事deploy出来ました。

確認してみる

きちんとPython 3.6でdeployされているかマネジメントコンソールで確認します。

001_python

ランタイムがPython 3.6となっていました。

実行してみる

実行してみます。

 sls invoke -f hello
{
    "statusCode": 200,
    "body": "{\"message\": \"Go Serverless v1.0! Your function executed successfully!\", \"input\": {}}"
}

無事実行できました。

さいごに

Serverless Frameworkを使えばPython 3.6になっても簡単にLambdaを利用できました。

今後、Serverless Frameworkのプラグインについても、Python 3.6の対応状況を確認していきます。