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"
有没有人发现有条件地在 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"