Amazon 无服务器应用程序模型 (SAM) 有条件地包含在模板中

Amazon Serverless Application Model (SAM) conditional includes in a template

有没有人发现有条件地在 SAM 模板中包含某些内容的技巧?这是用例;

我们有一个沙盒,所有内容都在 public 个子网中,因此我们的 lambda 函数不需要 VPC 访问权限。此外,此环境中没有 NAT 网关,因此如果我们授予 VPC 对 lambda 的访问权限,它们将失去互联网连接。然而,在我们的其他环境中,lambda 需要 VPC 访问权限,因为许多资源都在私有子网中。

因此,在上面的示例中,当环境变量表示我们不部署到沙箱时,仅包含 VPC 配置的最佳方法是什么?

如有任何建议,我们将不胜感激!

谢谢大家

您可以通过结合使用 Fn::If 函数和 AWS::NoValue 值来执行此操作(在您不需要的情况下)。

正如 Jason 上面所说,Fn::If 完成了工作:

VpcConfig:
        SecurityGroupIds:
          !If
            - IsNotSandbox
            -
              - !Ref SecurityGroup
            - !Ref "AWS::NoValue"
        SubnetIds:
          !If
            - IsNotSandbox
            -
              - !Ref SubNet1
              - !Ref SubNet2
            - !Ref "AWS::NoValue"