Fusic Tech Blog

Fusion of Society, IT and Culture

Serverless FrameworkでLambdaとS3を作成する
2018/10/23

Serverless FrameworkでLambdaとS3を作成する

清家です。
私がAWSのServerless環境を作成する時、基本的にはServerless Frameworkを使います。
AWS SAMでも良いのですが、Serverless Frameworkは開発が活発で便利なPluginも多く、
機能追加も非常に早いためです。

インストールには npmyarm を利用します。

  • npm
npm install serverless

yarn

yarn add serverless

node_modules/serverless/bin/serverlessに実行ファイルがありますので、
適宜パスを指定したり、 package.jsonscripts に実行スクリプトを追加してください。

serverlessコマンドを使ってテンプレートを作成します。
テンプレートに一覧はこちらを御覧ください。
以下はGoのテンプレート(aws-go-dep)を利用しています。

serverless create --template aws-go-dep

すると、最低限の設定を行なったserverless.yml が作成されますので、修正していきます。
configをstageごとに分けたいので、別途用意したconfigファイルを参照するようにしています。

ドキュメントはこちら

  • serverless.yml
service: Save2S3
 provider:
 name: aws
 runtime: go1.x
 stage: ${opt:stage, 'dev'}
 region: ap-northeast-1
 timeout: 10
 cfLogs: true
 iamRoleStatements:
 - Effect: "Allow"
 Action:
 - "s3:ListBucket"
 - "s3:GetObject"
 - "s3:PutObject"
 - "s3:DeleteObject"
 Resource:
 Fn::Join:
 - ""
 - - "arn:aws:s3:::"
 - ${self:provider.environment.Bucket}
 - "/\*"
 environment:
 Bucket: ${file(config/${self:provider.stage}.json):Bucket}
 DebugMode: ${file(config/${self:provider.stage}.json):DebugMode}
 package:
 exclude:
 - ./\*\*
 include:
 - ./bin/\*\*
 functions:
 api:
 handler: bin/api
 events:
 - http:
 path: save2S3/{Action}
 method: post
 resources:
 Resources:
 Bucket:
 Type: AWS::S3::Bucket
 Properties:
 BucketName: ${self:provider.environment.Bucket}

config/dev.json

{
 "Bucket":"seike460Save2S3",
 "DebugMode":"on"
 }

あとはdeployコマンドを実行すればおしまいです。
CloudFormationをいい感じ作って、deployしてくれます。
Goで書いてる関係で、makeしています。
(Makeファイルはserverless frameworkが用意してくれます)

make && serverless deploy
 
 Serverless: Packaging service...
 Serverless: Excluding development dependencies...
 Serverless: Uploading CloudFormation file to S3...
 Serverless: Uploading artifacts...
 Serverless: Uploading service .zip file to S3 (7.87 MB)...
 Serverless: Validating template...
 Serverless: Updating Stack...
 Serverless: Checking Stack update progress...
 
 …省略…
 
 endpoints:
 
 POST - https://秘密.execute-api.ap-northeast-1.amazonaws.com/dev/save2S3/{Action}
 
 Stack Outputs
 
 …秘密…
 
 Serverless: Removing old service versions...
 Done in 78.62s.

とても簡単ですね。
Serverless Resourcesをチャッチャか作りたい時にオススメです。

Shiro Seike

Shiro Seike

Company:Fusic CO., LTD. Slides:slide.seike460.com blog:blog.seike460.com Program Language:PHP , Go , Elixir infrastructure:Server , Network , infrastructure as code Frontend:Vue.js Interest:Full Serverless Architecture