代码之家  ›  专栏  ›  技术社区  ›  andy mccullough

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

  •  8
  • andy mccullough  · 技术社区  · 8 年前

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

    我的无服务器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 从部署到prod?

    4 回复  |  直到 8 年前
        1
  •  8
  •   Noel Llevares    8 年前

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

    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} ).

        2
  •  1
  •   David Hudman naribo    5 年前

    我正在使用SLS 1.32.0

    我没能得到 functions: ${self:environment-functions.${opt:stage}} 工作。(不确定原因)

    它返回以下内容:

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

    但是,在中使用相同的逻辑 dashmug的 答复 file 为我工作:

    无服务器。yml公司 :

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

    serverless-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
    
        3
  •  0
  •   kartick shaw    5 年前

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

    无服务器插件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"
    

    对于us-east-1。然后使用下面的代码段

    - If: '"${self:provider.region}" == "us-east-1"'
            Exclude:
              - functions.func1
    
        4
  •  0
  •   CTN    5 年前

    例如,创建文件

    env函数。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}}