AWS服务

AWS服务

service就像一个项目。您可以在这里定义AWS Lambda函数,events触发它们以及resources它们需要的任何AWS基础结构,所有这些都在一个名为的文件中serverless.yml
要开始构建您的第一个无服务器框架项目,请创建一个service


组织

在应用程序的开头,许多人使用单个服务来定义该项目的所有功能,事件和资源。这是我们在开始时推荐的。

myService/
  serverless.yml  //包含所有功能和基础设施资源

但是,随着应用程序的增长,您可以将其分解为多个服务。许多人通过工作流或数据模型组织他们的服务,并将与这些工作流和数据模型相关的功能组合在一起。

users/
  serverless.yml #包含4个执行用户CRUD操作和Users数据库的功能
  
posts/
  serverless.yml #包含4个执行Posts CRUD操作和Posts数据库的函数
  
comments/
  serverless.yml #包含4个功能,用于执行注释CRUD操作和注释数据库

这是有道理的,因为相关功能通常使用通用基础架构资源,并且您希望将这些功能和资源作为单个部署单元保持在一起,以便更好地组织和分离关注点。
注意:目前,每个服务都将在AWS API Gateway上创建单独的REST API。由于AWS API Gateway的限制,每个REST API只能有一个自定义域。如果您计划制作大型REST API,请记下此限制。此外,修复工作正在进行中,并且是首要任务。


创作

要创建服务,请使用该create命令。您还必须传入要编写服务的运行时(例如,node.js,python等)。您还可以传入路径来创建目录并自动命名您的服务:

#在 ./myService 文件夹中使用nodeJS模板创建服务
serverless create --template aws-nodejs --path myService

以下是AWS Lambda的可用模板:

  • aws-clojurescript-gradle
  • aws-clojure-gradle
  • aws-nodejs
  • aws-nodejs-typescript
  • aws-alexa-typescript
  • aws-nodejs-ecma-script
  • aws-python
  • aws-python3
  • aws-ruby
  • aws-provided
  • aws-kotlin-jvm-maven
  • aws-kotlin-nodejs-gradle
  • aws-groovy-gradle
  • aws-java-gradle
  • aws-java-maven
  • aws-scala-sbt
  • aws-csharp
  • aws-fsharp
  • aws-go
  • aws-go-dep
    查看create命令文档以获取所有详细信息和选项。

内容

您将在工作目录中看到以下文件:

  • serverless.yml
  • handler.js

serverless.yml

每个service配置都在serverless.yml文件中管理。该文件的主要职责是:

  • 声明无服务器服务
  • 在服务中定义一个或多个功能
  • 定义将部署服务的提供程序(以及提供的运行时)
  • 定义要使用的任何自定义插件
  • 定义触发每个要执行的函数的事件(例如HTTP请求)
  • 定义此服务中的函数所需的一组资源(例如,1个DynamoDB表)
  • 允许本events节中列出的事件部署时自动创建事件所需的资源
  • 允许使用无服务器变量进行灵活配置

您可以看到服务的名称,提供程序配置以及functions定义中指向handler.js文件的第一个函数。任何进一步的服务配置都将在此文件中完成。

# serverless.yml                                            //文件名

service: users

provider:
  name: aws
  runtime: nodejs6.10
  stage: dev                                                #设置使用的默认阶段。默认是dev
  region: us-east-1                                         #覆盖使用的默认区域。默认为us-east-1
  profile: production                                       #用于此服务的默认配置文件
  memorySize: 512                                           #覆盖默认的内存大小。默认值为1024
  
  deploymentBucket:
    name: com.serverless.${self:provider.region}.deploys    #覆盖默认部署桶
    serverSideEncryption: AES256                            #使用服务器端加密时
    tags:                                                  #将添加到每个部署资源的标记
      key1: value1
      key2: value2
  deploymentPrefix: serverless                              #覆盖应存储已部署工件的默认S3前缀。默认是无服务器的
  versionFunctions: false                                   #可选功能版本控制
  stackTags:                                               #可选的CF堆栈标签
   key: value
  stackPolicy:                                              #可选CF堆叠策略。 以下示例允许更新除删除/替换EC2实例之外的所有资源(请谨慎使用!)
    - Effect: Allow
      Principal: "*"
      Action: "Update:*"
      Resource: "*"
    - Effect: Deny
      Principal: "*"
      Action:
        - Update:Replace
        - Update:Delete
      Resource: "*"
      Condition:
        StringEquals:
          ResourceType:
            - AWS::EC2::Instance

functions:

  usersCreate:                                               #一个函数
    handler: users.create
    events:                                                  #触发此功能的事件
      - http: post users/create
  
  usersDelete:                                               # 一个函数
    handler: users.delete
    events:                                                  #触发此功能的事件
      - http: delete users/delete

                                                             #“功能”使用的“资源”。 原始AWS CloudFormation进入此处。
resources:
  Resources:
    usersTable:
      Type: AWS::DynamoDB::Table
      Properties:
        TableName: usersTable
        AttributeDefinitions:
          - AttributeName: email
            AttributeType: S
        KeySchema:
          - AttributeName: email
            KeyType: HASH
        ProvisionedThroughput:
          ReadCapacityUnits: 1
          WriteCapacityUnits: 1

每个serverless.yml转换为单个AWS CloudFormation模板,并从生成的CloudFormation模板创建CloudFormation堆栈。


handler.js

handler.js文件包含您的功能代码。函数定义serverless.yml将指向此handler.js文件和此处导出的函数。

event.json

注意:默认情况下不会创建此文件

创建此文件并添加事件数据,以便您可以通过数据调用您的函数 serverless invoke -p event.json


部署

部署服务时,您的所有功能,事件和资源serverless.yml都将转换为AWS CloudFormation模板,并部署为单个CloudFormation堆栈。

要部署服务,首先要cd进入相关的服务目录:

cd my-service

然后使用deploy命令:

serverless deploy

部署默认为AWS 上的dev阶段和us-east-1区域,除非您在其他地方指定了这些,或者将它们作为选项添加:

serverless deploy --stage prod --region us-east-1

查看部署指南,了解有关部署及其工作方式的更多信息。或者,查看deploy命令文档以获取所有详细信息和选项。


删除

要从AWS账户轻松删除您的服务,您可以使用该remove命令。

运行serverless remove -v以触​​发删除过程。在部署步骤中,我们也在verbose模式下运行,因此您可以查看删除过程的所有详细信息。

无服务器将启动删除并通知您有关其在控制台上的进程。删除整个服务后,将打印成功消息。

删除过程将仅删除提供商基础结构上的服务。服务目录仍将保留在本地计算机上,因此您仍可以稍后修改并(重新)将其部署到另一个阶段,区域或提供程序。


版本固定

无服务器框架通常通过全局安装npm install -g serverless。这样,您就可以为所有服务提供无服务器CLI

全局安装工具的缺点是版本无法固定在package.json中。如果您升级无服务器,这可能会导致问题,但您的同事或CI系统不会。您现在可以在serverless.yml中使用新功能,该功能仅在最新版本中可用,而不必担心您的CI系统将使用旧版本的无服务器进行部署。

固定版本

要配置版本固定frameworkVersion,请在serverless.yaml中定义属性。每当您从CLI运行无服务器命令时,它都会检查您当前的无服务器版本是否与该frameworkVersion范围匹配。CLI使用语义版本控制,因此您可以将其固定到精确版本或提供范围。一般来说,我们建议您确定一个确切的版本,以确保您团队中的每个人都具有完全相同的设置,并且不会发生意外问题。

例子:
# serverless.yml

frameworkVersion: "=1.0.3"

service: users

provider:
  name: aws
  runtime: nodejs6.10
  memorySize: 512

…
版本范围
# serverless.yml

frameworkVersion: ">=1.0.0 <2.0.0"

service: users

provider:
  name: aws
  runtime: nodejs6.10
  memorySize: 512

…

从现有服务中安装serverless

如果您已经拥有无服务器服务,并且希望使用锁定框架版本package.json,则可以按如下方式安装无服务器:

#来自服务范围内
npm install serverless --save-dev

在本地调用无服务器

要执行本地安装的无服务器可执行文件,您必须从节点模块目录中引用二进制文件。
例:node ./node_modules/serverless/bin/serverless deploy

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值