使用无服务器框架创建和部署

可以使用无服务器框架创建和部署AWS Lambda.它允许您创建AWS Lambda触发器,并通过创建所需角色来部署它.无服务器框架允许以更简单的方式处理大型项目.所需的事件和资源都写在一个地方,只需几个命令就可以帮助在AWS控制台上部署完整的功能.

在本章中,您将详细了解如何开始使用AWS无服务器框架.

使用npm install安装无服务器框架

首先,您需要先安装 nodejs .你可以检查nodejs如下 :

安装服务器

你将不得不使用以下命令使用npm package&minus来安装无服务器;

npm install -g serverless


Severless

一次npm完成后,执行无服务器命令,该命令显示用于创建和部署AWS Lambda函数的命令列表.观察下面给出的屏幕截图 :

Framework Command


框架提示

您也可以使用sl而不是无服务器. sls 是无服务器的速记命令.

Shorthand

如果你需要关于命令 sls,的帮助,你可以使用以下命令 :

sls create --help


帮助

要创建无服务器框架,您必须按照下面给出的步骤和减去;

步骤1

要开始使用无服务器框架,我们需要添加凭据.通过这种方式,您可以在AWS控制台中首先使用以下 :

添加用户

第2步

点击下一步:权限按钮添加权限.您必须将现有策略或管理员访问权附加到此用户.

设置权限


摘要审核

第3步

单击创建用户以添加用户.它将显示我们配置无服务器框架所需的访问密钥和密钥 :

创建用户

配置AWS无服务器框架

让我们看看如何配置AWS无服务器框架.你可以使用以下命令 :

sls config credentials --provider aws --key accesskey --secret secretkey


配置框架

请注意,输入的凭据详细信息,即访问密钥密钥存储在文件/aws/credentials .

首先,创建一个文件夹,用于存储项目文件.

创建文件夹

接下来,我们将在 aws-serverless 文件夹中开始工作.

创建AWS Lambda使用无服务器框架

现在,让我们使用下面给出的步骤创建一个带无服务器框架的Lambda函数;

步骤1

以下是无服务器的详细信息创建命令 :

创建命令

步骤2

现在,我们需要分配模板,如下所示;

AWS-nodejs,aws-nodejs-typescript,aws-nodejs-ecma-script,aws-python,aws-python3,aws-groovy -gradle等.

第3步

我们将利用 aws-nodejs 模板来创建我们的第一个项目使用无服务器框架出于同样目的的命令如下所示 :

sls create --template aws-nodejs


Nodejs

请注意此命令为模板aws-nodejs创建样板.

步骤4

现在,打开在IDE中创建的文件夹.这里我们使用的是Visual Studio代码,文件夹结构如下:

Visual Studio Framework

第5步

创建了2个文件: handler.js Serverless.yml

AWS Lambda基本功能详细信息显示在 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 具有无服务器框架的配置详细信息,如下所示 :

# Welcome to Serverless!
#
# This file is the main config file for your service.
# It's very minimal at this point and uses default values.
# You can always add more config options for more control.
# We've included some commented out config Examples here.
# Just uncomment any of them to get that config option.
#
# For full config options, check the docs:
#    docs.serverless.com
#
# Happy Coding!
service: aws-nodejs # NOTE: update this with your service name

# You can pin your service to only deploy with a specific Serverless version
# Check out our docs for more details
# frameworkVersion: "=X.X.X"

provider:
 name: aws
 runtime: nodejs6.10

# you can overwrite defaults here
#  stage: dev
#  region: us-east-1

# 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" : "ServerlessDeploymentBucket" } ] ]  }
#    - Effect: "Allow"
#      Action:
#        - "s3:PutObject"
#      Resource:
#        Fn::Join:
#          - ""
#          - - "arn:aws:s3:::"
#            - "Ref" : "ServerlessDeploymentBucket"
#            - "/*"

# you can define service wide environment variables here
#  environment:
#    variable1: value1

# you can add packaging information here
#package:
#  include:
#    - include-me.js
#    - include-me-dir/**
#  exclude:
#    - exclude-me.js
#    - exclude-me-dir/**

functions:
 hello:
   handler: handler.hello

#    The following are a few example events you can configure
#    NOTE: Please make sure to change your handler code to work with those events
#    Check the event documentation for details
#    events:
#      - http:
#          path: users/create
#          method: get
#      - s3: ${env:BUCKET}
#      - schedule: rate(10 minutes)
#      - sns: greeter-topic
#      - stream: arn:aws:dynamodb:region:XXXXXX:table/foo/stream/1970-01-01T00:00:00.000
#      - alexaSkill: amzn1.ask.skill.xx-xx-xx-xx
#      - alexaSmartHome: amzn1.ask.skill.xx-xx-xx-xx
#      - iot:
#          sql: "SELECT * FROM 'some_topic'"
#      - cloudwatchEvent:
#          event:
#            Example:
#              - "aws.ec2"
#            detail-type:
#              - "EC2 Instance State-change Notification"
#            detail:
#              state:
#                - pending
#      - cloudwatchLog: '/aws/lambda/hello'
#      - cognitoUserPool:
#          pool: MyUserPool
#          trigger: PreSignUp

#    Define function environment variables here
#    environment:
#      variable2: value2

# you can add CloudFormation resource templates here
#resources:
#  resources:
#    NewResource:
#      Type: AWS::S3::Bucket
#      Properties:
#        BucketName: my-new-bucket
#  Outputs:
#     NewOutput:
#       Description: "Description for the output"
#       Value: "Some output value"

现在,我们需要在s中添加更改erverless.yml文件根据我们的要求.您可以使用下面给出的命令 :

您可以使用以下命令进行服务 :

 
服务:aws-nodejs#注意:使用您的服务名称更新此项

现在,在此处更改服务并添加给我们文件夹的名称如下所示 :

service: aws-nodejs # NOTE: update this with your service name

提供商详细信息如下所示;

provider:
   name: aws
   runtime: nodejs6.10

提供者是 aws ,运行时是 nodejs6.10 .我们需要添加我们将在其中工作的区域阶段,即项目的 dev或prod 环境.所以这里是提供者的更新细节:提供者和减号;

name: aws
runtime: nodejs6.10
# you can overwrite defaults here
stage: prod
region: us-east-1

IAM角色

iam角色,也就是说,使用Lambda的权限代码显示在 .yml 文件中 :

#  iamRoleStatements:
#    - Effect: "Allow"
#      Action:
#        - "s3:ListBucket"
#      Resource: { "Fn::Join" : ["", ["arn:aws:s3:::", { "Ref" : "ServerlessDeploymentBucket" } ] ]  }
#    - Effect: "Allow"
#      Action:
#        - "s3:PutObject"
#      Resource:
#        Fn::Join:
#          - ""
#          - - "arn:aws:s3:::"
#            - "Ref" : "ServerlessDeploymentBucket"
#            - "/*"

请注意,我们需要提供角色的详细信息,即per其他AWS服务所需的任务,在上一节中.

AWS Lambda处理程序详细信息

处理程序中导出函数的名称. js 是你好.因此处理程序是文件的名称,后跟导出名称.

functions:
   hello:
      handler: handler.hello

有关s3服务的资源详情,如下图所示:

# you can add CloudFormation resource templates here
#resources:
#  resources:
#    NewResource:
#      Type: AWS::S3::Bucket
#      Properties:
#        BucketName: my-new-bucket
#  Outputs:
#     NewOutput:
#       Description: "Description for the output"
#       Value: "Some output value"

使用无服务器框架部署AWS Lambda

让我们将上述lambda函数部署到AWS控制台.您可以为此目的使用以下步骤 :

步骤1

首先,您必须使用以下命令 :

sls deploy


Deploy

第2步

现在,您应该在AWS控制台中看到该功能现在如图所示.无服务器AWS的详细信息记录在AWS云组中.为此,请转至AWS服务并选择 CloudFormation . AWS Lambda的详细信息显示如下 :

Cloud Framework

观察给出的名称是项目名称,后跟使用的阶段.

使用的阶段

步骤3

它为AWS Lambda创建iam角色,为AWS cloudwatch创建日志组.创建S3存储桶,其中包含存储的代码详细信息和配置详细信息.

这是由命令 sls deploy 创建的.您无需指定iam角色,而是在部署阶段默认创建.

无服务器产品

步骤4

详细的事件流程显示在下面的云形成服务中.

详细流程


Hello

AWS Lambda代码

AWS Lambda代码及其执行设置显示在给出的屏幕截图中低于 :

Lambda代码

当您测试Lambda函数时,你可以找到以下输出 :

Lambda framework


执行框架ework

以上显示上述函数的日志输出 :

框架输出

我们还可以使用无服务器命令测试AWS Lambda函数,如下所示 :

sls invoke --function hello


无服务器框架

此处显示invoke命令的语法 :

sls invoke --function hello

此调用命令触发AWS Lambda函数并在命令提示符中显示输出,如下所示 :

命令触发器

您还可以在部署之前测试Lambda函数,并使用以下命令测试命令 :