如何在serverless.yml中添加条件?

问题描述 投票:0回答:1

我正在使用无服务器和 AWS。

我试图仅在生产和登台环境中运行我的函数 main ,这可能吗?

我尝试添加启用(请参阅:https://stackoverflow.com/a/68646306/5426690),但我得到“无法识别的属性‘启用’

functions:
  main:
    handler: dist/main.handler
    events:
      - http:
          enabled: false
          method: ANY
          path: /
          authorizer:
            type: COGNITO_USER_POOLS
            [....]
      - http:
          enabled: false
          path: '{proxy+}'
          method: ANY
          authorizer:
            type: COGNITO_USER_POOLS
            [....]
aws-lambda serverless serverless-framework aws-serverless
1个回答
0
投票

要在生产和登台等特定环境中运行无服务器功能,您不能直接使用事件配置中的

enabled
属性,因为无服务器框架无法识别它。相反,您应该根据无服务器配置中的环境条件来管理功能的部署,通常使用环境变量或自定义变量。

这里有一个基于stage实现条件功能部署的方法:

  1. 使用环境变量:使用环境变量检查当前阶段并有条件地包含事件。

  2. Serverless 环境语法:使用 Serverless Framework 对变量和条件的支持来控制是否添加事件。

以下是如何调整

serverless.yml
以根据部署阶段有条件地设置事件的示例:

service: conditional-function

provider:
  name: aws
  runtime: nodejs12.x
  stage: ${opt:stage, 'dev'} # Default to 'dev' if no stage is provided

functions:
  main:
    handler: dist/main.handler
    events: ${self:custom.events.${self:provider.stage}, []}

custom:
  events:
    production:
      - http:
          method: ANY
          path: /
          authorizer:
            type: COGNITO_USER_POOLS
            # additional settings...
      - http:
          path: '{proxy+}'
          method: ANY
          authorizer:
            type: COGNITO_USER_POOLS
            # additional settings...
    staging:
      - http:
          method: ANY
          path: /
          authorizer:
            type: COGNITO_USER_POOLS
            # additional settings...
      - http:
          path: '{proxy+}'
          method: ANY
          authorizer:
            type: COGNITO_USER_POOLS
            # additional settings...

在此设置中:

  • events
    函数的
    main
    属性会根据当前阶段从
    custom.events
    对象动态加载。
  • 对于
    production
    staging
    ,它加载定义的 HTTP 事件。对于其他阶段,例如
    dev
    ,它默认为空数组
    []
    ,这意味着不会创建任何事件。
  • 使用 Serverless 部署时,您可以通过
    --stage
    选项设置阶段,例如
    serverless deploy --stage production

此方法使您可以灵活地定义每个环境中可用的事件,并且它可以干净地集成到无服务器配置框架中,而无需在应用程序代码中使用外部脚本或条件逻辑。

© www.soinside.com 2019 - 2024. All rights reserved.