Upgrade to Pro — share decks privately, control downloads, hide ads and more …

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

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

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

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

Shohei Kondo

March 15, 2019
Tweet

More Decks by Shohei Kondo

Other Decks in Programming

Transcript

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

    code 実現 (AWS Lambda with Node 8.10 の場合)ES6 の const とか async/await とか使える(さっき知ったよ! )
  2. ⽣成されたコード module.exports.hello = async (event, context) => { return {

    statusCode: 200, body: JSON.stringify({ message: 'Go Serverless v1.0!', input: event, }), }; }; 実際にローカルで動かしてみると... $sls invoke local -f hello 実⾏される!!!
  3. デプロイ デプロイに関する設定は serverless.yml に記述する deploy に使う aws のprofile ( /.aws/credentials

    のあれ これ) deploy するregion ( デフォルトは us-east-1 ) 東京じゃないので要注意!! deploy するpackage ... etc
  4. 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 * * ? *)
  5. 実際にデプロイしてみる $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...
  6. おまけ1 "errorMessage": "Access Denied" の話 local 実⾏時とデプロイ後実⾏時とで、権限が異なってないか 確認しよう local: serverless.yml

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