Slide 1

Slide 1 text

Serverless ⼊⾨ ~ 環境構築からデプロイまで~

Slide 2

Slide 2 text

⽬次 serverless って何? 実際にやってみる 開発環境構築 動作確認@Local デプロイ 動作確認@本番環境

Slide 3

Slide 3 text

serverless って何 AWS Labmda とかの開発環境構築&デプロイをやってくれる 凄いやつだよ serverless.yml の設定で、 infrastructure as code 実現 (AWS Lambda with Node 8.10 の場合)ES6 の const とか async/await とか使える(さっき知ったよ! )

Slide 4

Slide 4 text

実際にやってみる 開発環境構築 $npm install -g serverless $serverless create --t aws-nodejs --p my-service 以上、おしまい!

Slide 5

Slide 5 text

⽣成されたコード module.exports.hello = async (event, context) => { return { statusCode: 200, body: JSON.stringify({ message: 'Go Serverless v1.0!', input: event, }), }; }; 実際にローカルで動かしてみると... $sls invoke local -f hello 実⾏される!!!

Slide 6

Slide 6 text

コードリーディング (handler.js) event serverless のdocs に記載されてるのは下記。いっぱいあるね!

Slide 7

Slide 7 text

どんなevent をとるのかは serverless.yml に定義できる functions: hello: handler: handler.hello # events: # - http: # path: users/create # method: get # - websocket: $connect

Slide 8

Slide 8 text

コードリーディング (handler.js) context context っぽいプロパティをいっぱい持ってるよ! 気になったら読んでみてね! (https://docs.aws.amazon.com/ja_jp/lambda/latest/dg/nodejs- prog-model-context.html )

Slide 9

Slide 9 text

デプロイ デプロイに関する設定は serverless.yml に記述する deploy に使う aws のprofile ( /.aws/credentials のあれ これ) deploy するregion ( デフォルトは us-east-1 ) 東京じゃないので要注意!! deploy するpackage ... etc

Slide 10

Slide 10 text

serverless.yml の例 service: scraping-addons-maintenance-page # NOTE: update this w # Use the serverless-webpack plugin to transpile ES6 plugins: - serverless-webpack provider: name: aws runtime: nodejs8.10 # you can overwrite defaults here stage: dev region: ap-northeast-1 profile: private functions: hello: handler: handler.hello schedule: cron(0 0 * * ? *)

Slide 11

Slide 11 text

実際にデプロイしてみる $sls deploy $sls deploy Serverless: Packaging service... Serverless: Excluding development dependencies... Serverless: Creating Stack... Serverless: Checking Stack create progress... ..... Serverless: Stack create finished... Serverless: Uploading CloudFormation file to S3... Serverless: Uploading artifacts... Serverless: Uploading service my-service.zip file to S3 (4.16 K Serverless: Validating template... Serverless: Updating Stack... Serverless: Checking Stack update progress... ............... Serverless: Stack update finished...

Slide 12

Slide 12 text

デプロイプロセスどうなってるの? https://serverless.com/framework/docs/providers/aws/guide/deployi ng#how-it-works 分かりやすい!

Slide 13

Slide 13 text

動作確認@本番環境 local のテストとほとんど同じだよ!! $sls invoke -f hello

Slide 14

Slide 14 text

おまけ1 "errorMessage": "Access Denied" の話 local 実⾏時とデプロイ後実⾏時とで、権限が異なってないか 確認しよう local: serverless.yml のprofile に基づいて実⾏ deploy: lambda に当てられた role に基づいて実⾏ 対応: serverless.yml でlambda に IAM 権限を設定

Slide 15

Slide 15 text

# you can add statements to the Lambda function's IAM Role here iamRoleStatements: - Effect: "Allow" Action: - "s3:ListBucket" Resource: { "Fn::Join" : ["", ["arn:aws:s3:::", { "Ref" - Effect: "Allow" Action: - "s3:PutObject" Resource: Fn::Join: - "" - - "arn:aws:s3:::" - "Ref" : "ServerlessDeploymentBucket" - "/*"

Slide 16

Slide 16 text

おまけ2 webpack の話 Q. Node8.10 でES6 対応してるなら必要なくない? A. module 依存の最適化とかで、有ったほうがいいから(震え声) With babel/webpack you have the Node version independent optimized packaging and tree-shaking, which just cannot be done with plain Node8 and packaging everything in your project root. (https://forum.serverless.com/t/aws-node-8-10-runtime-for- lambdas-migration-guide/4141)