从部署到特定阶段排除 Lambda 函数

Exclude Lambda function from deploy to a particular stage

我试图排除 Lambda 函数通过无服务器部署到我在 AWS 中的 prod 阶段。

我的无服务器 yaml 中的一个片段看起来像 -

functions:
  some-prod-function:
    handler: prodFunction.handler
    events:
      - http:
          path: /prod-function
          method: post
  some-dev-function:
    handler: devFunction.handler
    events:
      - http:
          path: /dev-function
          method: post

有没有办法将 some-dev-function 排除在产品部署之外?

您可以将这些定义放在不同的 属性 上并使用变量来选择要使用的定义。

environment-functions:
  prod:
    some-prod-function:
      handler: prodFunction.handler
      events:
        - http:
            path: /prod-function
            method: post
  dev:
    some-dev-function:
      handler: devFunction.handler
      events:
        - http:
            path: /dev-function
            method: post


functions: ${self:environment-functions.${opt:stage}}      

您可能需要根据您指定部署阶段的方式(${opt:stage}${env:stage})更改此设置。

我正在使用 SLS 1.32.0

我无法让 functions: ${self:environment-functions.${opt:stage}} 工作。 (不知道为什么)

它returns如下:

A valid service attribute to satisfy the declaration 'self:environment-functions.dev' could not be found.

然而,在 dashmug 的 回答中使用相同的逻辑,file 对我有用:

serverless.yml:

functions: ${file(serverless-${opt:stage}.yml)}

无服务器-dev.yml:

some-dev-function:
  handler: devFunction.handler
  events:
    - http:
        path: /dev-function
        method: post

无服务器-prod.yml:

some-prod-function:
  handler: prodFunction.handler
  events:
    - http:
        path: /prod-function
        method: post

如果您使用无服务器框架,您可以使用无服务器插件

serverless-plugin-ifelse

然后

plugins:
  - serverless-plugin-ifelse 

如果要排除就说func1

functions:
  func1:
    name: Function 1
    handler: lambda.func1
    events:
      - http:
          path: "path1"
          method: "post"
          authorizer:
            arn: arn:aws:cognito-idp:us-east-1:123456789012:userpool/us-east-1_0acCDefgh

  func2:
    name: Function 2
    handler: lambda.func2
    events:
      - http:
           path: "path2"
           method: "post"



func3:
    name: Function 3
    handler: lambda.func2
    events:
      - http:
           path: "path3"
           method: "post"

美国东部 1 号。然后使用下面的代码片段

- If: '"${self:provider.region}" == "us-east-1"'
        Exclude:
          - functions.func1

例如创建一个文件

env-functions.yml

并添加如下内容

prod:
    some-prod-function:
      handler: prodFunction.handler
      events:
        - http:
            path: /prod-function
            method: post
dev:
    some-dev-function:
      handler: devFunction.handler
      events:
        - http:
            path: /dev-function
            method: post

在此之后 serverless.yml 设置

functions: ${file(env-functions.yml):${opt:stage, self:provider.stage}}