You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在单份SAM template.yaml中按环境条件集成Datadog?

单份SAM template.yaml按环境控制Datadog部署方案

核心思路

既然Transform段无法使用Condition,我们可以把Datadog相关的资源(比如层、扩展、权限等)通过资源级的Condition来控制,同时用参数传递环境标识,实现仅在非生产环境部署Datadog组件。

具体实现步骤

1. 定义环境参数与条件

在Parameters段添加环境参数,然后在Conditions里定义非生产环境的判断条件:

Parameters:
  Environment:
    Type: String
    AllowedValues:
      - dev
      - stage
      - prod
    Description: 部署的环境标识

Conditions:
  IsNonProduction: !Not [!Equals [!Ref Environment, prod]]

2. 控制Datadog资源的部署

把所有Datadog相关的资源(比如Lambda层、Datadog扩展、IAM权限)都加上Condition: IsNonProduction,这样只有在dev/stage环境才会创建这些资源:

Resources:
  # 你的主Lambda函数
  MyLambdaFunction:
    Type: AWS::Serverless::Function
    Properties:
      CodeUri: ./src
      Handler: index.handler
      Runtime: python3.11
      # 仅非生产环境添加Datadog层与扩展
      Layers:
        !If
          - IsNonProduction
          - - !Ref DatadogLambdaLayer
          - !Ref AWS::NoValue
      Events:
        ApiEvent:
          Type: Api
          Properties:
            Path: /test
            Method: get

  # Datadog Lambda层(仅非生产环境部署)
  DatadogLambdaLayer:
    Type: AWS::Serverless::LayerVersion
    Condition: IsNonProduction
    Properties:
      LayerName: Datadog-Python311
      ContentUri: ./datadog-layer
      CompatibleRuntimes:
        - python3.11

  # Datadog Lambda扩展(仅非生产环境部署)
  DatadogExtension:
    Type: AWS::Serverless::Function
    Condition: IsNonProduction
    Properties:
      FunctionName: Datadog-Extension
      CodeUri: ./datadog-extension
      Handler: bootstrap
      Runtime: provided.al2
      Layers:
        - arn:aws:lambda:${AWS::Region}:464622532012:layer:Datadog-Extension:47
      Timeout: 300
      MemorySize: 128

3. 配置Lambda函数的Datadog环境变量

同样用!If条件判断,仅在非生产环境注入Datadog所需的环境变量:

Resources:
  MyLambdaFunction:
    # ... 其他配置
    Properties:
      # ... 其他属性
      Environment:
        Variables:
          REGION: !Ref AWS::Region
          # 非生产环境添加Datadog变量
          !If
            - IsNonProduction
            - DD_API_KEY: <你的Datadog API密钥>
              DD_SITE: datadoghq.com
              DD_LOGS_INJECTION: true
            - !Ref AWS::NoValue

4. 部署时指定环境参数

通过SAM部署命令传递环境参数,控制是否部署Datadog组件:

# 部署dev环境
sam deploy --parameter-overrides Environment=dev --stack-name my-stack-dev

# 部署stage环境
sam deploy --parameter-overrides Environment=stage --stack-name my-stack-stage

# 部署prod环境(不会创建任何Datadog相关资源)
sam deploy --parameter-overrides Environment=prod --stack-name my-stack-prod

关键注意事项

  • 确保所有Datadog相关的资源、层、扩展、环境变量都通过Condition或!If进行条件控制,避免生产环境引入不必要的组件。
  • 如果使用Datadog的自动工具生成SAM配置,记得手动给对应的资源添加条件判断。
  • 生产环境的Lambda函数不会加载任何Datadog相关的依赖,完全隔离,符合需求。

内容的提问来源于stack exchange,提问作者Robert K

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.22 05:00:01