Serverless 应用开发指南:serverless 的 hello, world

在翻译了几篇 serverless 与物联网相关的文章之后,我开始想着好好掌握一下 serverless 的相关知识。

我对于 serverless 的第一认知是:Serverless 是由一堆云服务构建后端服务的,如存储、计算、授权都是由不同的服务来构建的。而作为一个开发人员,我们所要做的就是了解如何搭配不同的云服务。

因此,在进行更多的定义之前,我打算先熟悉一下 serverless,以便于我更好地了解什么是 serverless 应用开发。

Serverless 框架 hello, world

考虑到直接使用 aws lambda 编写 serverless,对于我这样的新手相当的有挑战性。于是,我便先选择了 Serverless 框架,GitHub: https://github.com/serverless/serverless。

先让我们按官网的 demo,进行实验。开始之前,除了拥有一台电脑,你还需要有一个 AWS 账号。AWS 提供一年的免费试用,你所需要做的就是办一张支持 visa 的信用卡。

一、安装 serverless 框架

  
  
  1. npm install -g serverless

或者,和我一样使用:

  
  
  1. yarn global add serverless

二、设置 aws 凭证。

1.登录 AWS 账号,然后点击进入 IAM (即,Identity & Access Management)。

2.点击用户,然后添加用户,如 serveless-admin,并在『选择 AWS 访问类型』里,勾上编程访问


编程访问 serverless


3.点击下一步权限,选择『直接附加现有策略』,输入AdministratorAccess,然后创建用户。

注意:由于是 AdministratorAccess 权限,所以不要泄漏你的密钥出去。

  1. 创建用户。随后,会生成访问密钥 ID 和 私有访问密钥。请妥善保存好。

然后导出证书,并使用 serverless depoy 保存到本地。

  
  
  1. export AWS_ACCESS_KEY_ID=<your-key-here>

  2. export AWS_SECRET_ACCESS_KEY=<your-secret-key-here>

  3. serverless deploy

将会自动生成配置到 ~/.aws/credentials

或者,如官方的示例:

   
   
  1. serverless config credentials --provider aws --key AKIAIOSFODNN7EXAMPLE --secret wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY

三、创建 hello-world 服务

   
   
  1. serverless create --template aws-nodejs --path hello-world

   
   
  1. Serverless: Generating boilerplate...

  2. Serverless: Generating boilerplate in "/Users/fdhuang/learing/serverless-guide/hello-world"

  3. _______                             __

  4. |   _   .-----.----.--.--.-----.----|  .-----.-----.-----.

  5. |   |___|  -__|   _|  |  |  -__|   _|  |  -__|__ --|__ --|

  6. |____   |_____|__|  \___/|_____|__| |__|_____|_____|_____|

  7. |   |   |             The Serverless Application Framework

  8. |       |                           serverless.com, v1.23.0

  9. -------'

  10. Serverless: Successfully generated boilerplate for template: "aws-nodejs"

  11. (play-env)

生成两个文件;

    
    
  1. ├── handler.js

  2. └── serverless.yml

其中的 handler.js 的内容是:

    
    
  1. 'use strict';

  2. module.exports.hello = (event, context, callback) => {

  3.  const response = {

  4.    statusCode: 200,

  5.    body: JSON.stringify({

  6.      message: 'Go Serverless v1.0! Your function executed successfully!',

  7.      input: event,

  8.    }),

  9.  };

  10.  callback(null, response);

  11.  // Use this code if you don't use the http event with the LAMBDA-PROXY integration

  12.  // callback(null, { message: 'Go Serverless v1.0! Your function executed successfully!', event });

  13. };

而 serverless.yml 的内容,因为注释所有的内容,因此相当于是空的。

四、部署及测试:

      
      
  1. $serverless deploy -v

日志如下:

      
      
  1. Serverless: Packaging service...

  2. Serverless: Excluding development dependencies...

  3. Serverless: Uploading CloudFormation file to S3...

  4. Serverless: Uploading artifacts...

  5. Serverless: Uploading service .zip file to S3 (409 B)...

  6. Serverless: Validating template...

  7. Serverless: Updating Stack...

  8. Serverless: Checking Stack update progress...

  9. CloudFormation - UPDATE_IN_PROGRESS - AWS::CloudFormation::Stack - hello-world-dev

  10. CloudFormation - CREATE_IN_PROGRESS - AWS::Logs::LogGroup - HelloLogGroup

  11. CloudFormation - CREATE_IN_PROGRESS - AWS::IAM::Role - IamRoleLambdaExecution

  12. CloudFormation - CREATE_IN_PROGRESS - AWS::Logs::LogGroup - HelloLogGroup

  13. CloudFormation - CREATE_IN_PROGRESS - AWS::IAM::Role - IamRoleLambdaExecution

  14. CloudFormation - CREATE_COMPLETE - AWS::Logs::LogGroup - HelloLogGroup

  15. CloudFormation - CREATE_COMPLETE - AWS::IAM::Role - IamRoleLambdaExecution

  16. CloudFormation - CREATE_IN_PROGRESS - AWS::Lambda::Function - HelloLambdaFunction

  17. CloudFormation - CREATE_IN_PROGRESS - AWS::Lambda::Function - HelloLambdaFunction

  18. CloudFormation - CREATE_COMPLETE - AWS::Lambda::Function - HelloLambdaFunction

  19. CloudFormation - CREATE_IN_PROGRESS - AWS::Lambda::Version - HelloLambdaVersionPSzzisjnTvvYknuXwQOlAvdkQZ67qXYSvgoAi9T8W0

  20. CloudFormation - CREATE_IN_PROGRESS - AWS::Lambda::Version - HelloLambdaVersionPSzzisjnTvvYknuXwQOlAvdkQZ67qXYSvgoAi9T8W0

  21. CloudFormation - CREATE_COMPLETE - AWS::Lambda::Version - HelloLambdaVersionPSzzisjnTvvYknuXwQOlAvdkQZ67qXYSvgoAi9T8W0

  22. CloudFormation - UPDATE_COMPLETE_CLEANUP_IN_PROGRESS - AWS::CloudFormation::Stack - hello-world-dev

  23. CloudFormation - UPDATE_COMPLETE - AWS::CloudFormation::Stack - hello-world-dev

  24. Serverless: Stack update finished...

  25. Service Information

  26. service: hello-world

  27. stage: dev

  28. region: us-east-1

  29. stack: hello-world-dev

  30. api keys:

  31.  None

  32. endpoints:

  33.  None

  34. functions:

  35.  hello: hello-world-dev-hello

  36. Stack Outputs

  37. HelloLambdaFunctionQualifiedArn: arn:aws:lambda:us-east-1:706605665335:function:hello-world-dev-hello:1

  38. ServerlessDeploymentBucketName: hello-world-dev-serverlessdeploymentbucket-bk066p5c9zgl

然后,让我们来触发一下这个函数:

       
       
  1. $ serverless invoke -f hello -l

服务器返回了下面的结果:

       
       
  1. {

  2.    "statusCode": 200,

  3.    "body": "{\"message\":\"Go Serverless v1.0! Your function executed successfully!\",\"input\":{}}"

  4. }

  5. --------------------------------------------------------------------

  6. START RequestId: 041138f9-bc81-11e7-aa63-0dbab83f773d Version: $LATEST

  7. END RequestId: 041138f9-bc81-11e7-aa63-0dbab83f773d

  8. REPORT RequestId: 041138f9-bc81-11e7-aa63-0dbab83f773d    Duration: 2.49 ms   Billed Duration: 100 ms     Memory Size: 1024 MB    Max Memory Used: 20 MB

这意味着,我们的第一个服务已经成功上线了。

我们也可以通过下面的命令来获取相应的日志:

       
       
  1. serverless logs -f hello -t

末了,记得执行:

       
       
  1. $ serverless remove

它可以帮你省很多钱



最近,我在玩 Serverless,先发篇 hello, world 的文章给大家解解馋。更多的内容,可以关注我在 GitHub 的项目《Serverless 应用开发指南》。

未来,会发一篇相关的整理知识的文章。

点击阅读原文获取Serverless 应用开发指南

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值