如何使用Serverless框架?

  • 回答 (7)
  • 关注 (1)
  • 查看 (1124)

从行业趋势看,Serverless是云计算必经的一场革命,无服务器云函数是实现微服务的最好的方法之一,该如何使用Serverless框架?

汐夜汐夜提问于
rg759955努力前行的程序员回答于
推荐

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

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

Serverless 框架 hello, world

先按官网的 demo,进行实验。

一、安装 serverless 框架

npm install -g serverless

或者,和我一样使用:

yarn global add serverless

二、设置 aws 凭证。

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

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

编程访问 serverless

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

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

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

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

export AWS_ACCESS_KEY_ID=<your-key-here>export AWS_SECRET_ACCESS_KEY=<your-secret-key-here>serverless deploy

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

或者,如官方的示例:

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

三、创建 hello-world 服务

serverless create --template aws-nodejs --path hello-world
Serverless: Generating boilerplate...Serverless: Generating boilerplate in "/Users/fdhuang/learing/serverless-guide/hello-world" _______                             __|   _   .-----.----.--.--.-----.----|  .-----.-----.-----.|   |___|  -__|   _|  |  |  -__|   _|  |  -__|__ --|__ --||____   |_____|__|  \___/|_____|__| |__|_____|_____|_____||   |   |             The Serverless Application Framework|       |                           serverless.com, v1.23.0 -------'Serverless: Successfully generated boilerplate for template: "aws-nodejs"(play-env)

生成两个文件;

├── handler.js└── serverless.yml

其中的 handler.js 的内容是:

'use strict';module.exports.hello = (event, context, callback) => {  const response = {    statusCode: 200,    body: JSON.stringify({      message: 'Go Serverless v1.0! Your function executed successfully!',      input: event,    }),  };  callback(null, response);  // Use this code if you don't use the http event with the LAMBDA-PROXY integration  // callback(null, { message: 'Go Serverless v1.0! Your function executed successfully!', event });};

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

四、部署及测试:

$serverless deploy -v

日志如下:

Serverless: Packaging service...Serverless: Excluding development dependencies...Serverless: Uploading CloudFormation file to S3...Serverless: Uploading artifacts...Serverless: Uploading service .zip file to S3 (409 B)...Serverless: Validating template...Serverless: Updating Stack...Serverless: Checking Stack update progress...CloudFormation - UPDATE_IN_PROGRESS - AWS::CloudFormation::Stack - hello-world-devCloudFormation - CREATE_IN_PROGRESS - AWS::Logs::LogGroup - HelloLogGroupCloudFormation - CREATE_IN_PROGRESS - AWS::IAM::Role - IamRoleLambdaExecutionCloudFormation - CREATE_IN_PROGRESS - AWS::Logs::LogGroup - HelloLogGroupCloudFormation - CREATE_IN_PROGRESS - AWS::IAM::Role - IamRoleLambdaExecutionCloudFormation - CREATE_COMPLETE - AWS::Logs::LogGroup - HelloLogGroupCloudFormation - CREATE_COMPLETE - AWS::IAM::Role - IamRoleLambdaExecutionCloudFormation - CREATE_IN_PROGRESS - AWS::Lambda::Function - HelloLambdaFunctionCloudFormation - CREATE_IN_PROGRESS - AWS::Lambda::Function - HelloLambdaFunctionCloudFormation - CREATE_COMPLETE - AWS::Lambda::Function - HelloLambdaFunctionCloudFormation - CREATE_IN_PROGRESS - AWS::Lambda::Version - HelloLambdaVersionPSzzisjnTvvYknuXwQOlAvdkQZ67qXYSvgoAi9T8W0CloudFormation - CREATE_IN_PROGRESS - AWS::Lambda::Version - HelloLambdaVersionPSzzisjnTvvYknuXwQOlAvdkQZ67qXYSvgoAi9T8W0CloudFormation - CREATE_COMPLETE - AWS::Lambda::Version - HelloLambdaVersionPSzzisjnTvvYknuXwQOlAvdkQZ67qXYSvgoAi9T8W0CloudFormation - UPDATE_COMPLETE_CLEANUP_IN_PROGRESS - AWS::CloudFormation::Stack - hello-world-devCloudFormation - UPDATE_COMPLETE - AWS::CloudFormation::Stack - hello-world-devServerless: Stack update finished...Service Informationservice: hello-worldstage: devregion: us-east-1stack: hello-world-devapi keys:  Noneendpoints:  Nonefunctions:  hello: hello-world-dev-helloStack OutputsHelloLambdaFunctionQualifiedArn: arn:aws:lambda:us-east-1:706605665335:function:hello-world-dev-hello:1ServerlessDeploymentBucketName: hello-world-dev-serverlessdeploymentbucket-bk066p5c9zgl

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

$ serverless invoke -f hello -l

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

{    "statusCode": 200,    "body": "{\"message\":\"Go Serverless v1.0! Your function executed successfully!\",\"input\":{}}"}--------------------------------------------------------------------START RequestId: 041138f9-bc81-11e7-aa63-0dbab83f773d Version: $LATESTEND RequestId: 041138f9-bc81-11e7-aa63-0dbab83f773dREPORT RequestId: 041138f9-bc81-11e7-aa63-0dbab83f773d    Duration: 2.49 ms   Billed Duration: 100 ms     Memory Size: 1024 MB    Max Memory Used: 20 MB

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

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

serverless logs -f hello -t

末了,记得执行:

$ serverless remove

它可以帮你省很多钱

回答过的其他问题

CloudIDE是否能颠覆传统IDE?

rg759955努力前行的程序员
免责声明:以下仅为个人观点,若有歧义,勿喷 在我个人看来,是的,但不是未来,而是现在,以及未来。目前CloudIDE可以算是正处于生长期,也就是从传统IDE过渡到CloudIDE的一个过程,就像人们习惯的养成一样,一个人的习惯养成,需要28天。而现在CloudIDE正处于这个养成...... 展开详请

区块链对未来的发展都有哪些利弊呢?

rg759955努力前行的程序员
区块链的一大好处就是去中心化,但我相信互联网上已经有很多关于区块链去中心化好处的内容,我这里就不在叙说了。我在这里说的是去中心化后会引发哪些新问题? • 数字货币的附属性——在现实世界中,数字货币的附属性是一个非常头疼的问题。打个比方说,如果你不小心把私钥弄丢了,也就是数字货币...... 展开详请

区块链的去中心化理论真的有那么重要?

rg759955努力前行的程序员

去中心化就是去信任,说实话,难道现在的社会就那么不值得信任?人们把钱存在银行,不就是信任银行能保管我们的资金嘛,现在好了,搞出个数字货币,我们是有多缺乏信任?那如果是这样的话,那很好,,那就让我们利用这个技术将世界变成一个不需要信任的世界吧。

自己拥有一台云服务器能做什么有趣的事?

rg759955努力前行的程序员

开了两个Minecraft的服务器,生存和创造,号召小伙伴们一起来玩。

备案密码是什么?如何找回备案密码

rg759955努力前行的程序员
推荐
当新的主体备案通过后工信部下发备案号及备案密码,此密码即为备案密码,直接发到主体负责人(并非网站负责人)的手机和邮箱里面, 如果没有收到先核实一下主体负责人的手机及邮箱是否正确,;如果确认手机及邮箱均正确,可以登录工信部网站:http://www.miibeian.gov.cn ...... 展开详请

GoogleSignIn DEFAULT_GAMES_SIGN_IN错误?

rg759955努力前行的程序员
我在AndroidManifest.xml文件中使用元数据 <meta-data android:name="com.google.android.gms.games.APP_ID" android:value="@string/app_id" /> <...... 展开详请

扫码关注云+社区

领取腾讯云代金券