Serverless 入門 ~環境構築からデプロイまで~

Serverless 入門 ~環境構築からデプロイまで~

Serverless Frameworkを利用した、AWS Lambdaの開発環境の構築、テスト、そしてデプロイまでのプレゼンテーションです

Twitter: https://twitter.com/korn_shonery
Blog: https://blog.kon-shou.com/

9123b9174072648a8ddc893032ef1a80?s=128

Shohei Kondo

March 15, 2019
Tweet

Transcript

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

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

  3. serverless って何 AWS Labmda とかの開発環境構築&デプロイをやってくれる 凄いやつだよ serverless.yml の設定で、 infrastructure as

    code 実現 (AWS Lambda with Node 8.10 の場合)ES6 の const とか async/await とか使える(さっき知ったよ! )
  4. 実際にやってみる 開発環境構築 $npm install -g serverless $serverless create --t aws-nodejs

    --p my-service 以上、おしまい!
  5. ⽣成されたコード module.exports.hello = async (event, context) => { return {

    statusCode: 200, body: JSON.stringify({ message: 'Go Serverless v1.0!', input: event, }), }; }; 実際にローカルで動かしてみると... $sls invoke local -f hello 実⾏される!!!
  6. コードリーディング (handler.js) event serverless のdocs に記載されてるのは下記。いっぱいあるね!

  7. どんなevent をとるのかは serverless.yml に定義できる functions: hello: handler: handler.hello # events:

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

  9. デプロイ デプロイに関する設定は serverless.yml に記述する deploy に使う aws のprofile ( /.aws/credentials

    のあれ これ) deploy するregion ( デフォルトは us-east-1 ) 東京じゃないので要注意!! deploy するpackage ... etc
  10. 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 * * ? *)
  11. 実際にデプロイしてみる $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...
  12. デプロイプロセスどうなってるの? https://serverless.com/framework/docs/providers/aws/guide/deployi ng#how-it-works 分かりやすい!

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

  14. おまけ1 "errorMessage": "Access Denied" の話 local 実⾏時とデプロイ後実⾏時とで、権限が異なってないか 確認しよう local: serverless.yml

    のprofile に基づいて実⾏ deploy: lambda に当てられた role に基づいて実⾏ 対応: serverless.yml でlambda に IAM 権限を設定
  15. # 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" - "/*"
  16. おまけ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)