gpt4 book ai didi

aws-cloudformation - AWS CloudFormation 函数调用失败:Fn::ImportValue 不得依赖于任何资源、导入的值或 Fn::GetAZs

转载 作者:行者123 更新时间:2023-12-04 11:09:42 25 4
gpt4 key购买 nike

我有一个云形成模板 (mainVPC),它在 VPC 中创建几个子网并导出名称为“PrivateSubnetA”、“PrivateSubnetB”的子网...我有一个不同的云形成模板来创建 DBSubnetGroup。如果用户不提供数据,我想使用“PrivateSubnetA”、“PrivateSubnetB”作为默认值。 CloundFormation 不支持在参数中导入值。所以我设置了一些默认值(XXXX)并有一个条件部分来查看用户是否提供了一些输入

Conditions:
userNotProvidedSubnetA: !Equals
- !Ref PrivateSubnetA
- XXXX
userNotProvidedSubnetB: !Equals
- !Ref PrivateSubnetB
- XXXX

这有助于我确定用户是否提供了数据。现在我想使用默认值,如果用户没有提供值,则使用用户提供的值。下面是代码

 DBSubnetGroup:
Type: 'AWS::RDS::DBSubnetGroup'
Properties:
DBSubnetGroupDescription: RDS Aurora Cluster Subnet Group
SubnetIds:
- !If
- userNotProvidedSubnetA
- Fn::ImportValue:
!Sub '${fmMainVpc}-PrivateSubnetA'
- !Ref PrivateSubnetA
- !If
- userNotProvidedSubnetB
- Fn::ImportValue:
!Sub '${fmMainVpc}-PrivateSubnetB'
- !Ref PrivateSubnetB

此操作失败,并显示错误“模板错误:Fn::ImportValue 中的属性不得依赖于任何资源、导入的值或 Fn::GetAZs”。ImportValue 未在模板中的其他任何地方使用。

有没有一种方法可以使用导出的值作为默认值(默认值不能被硬编码,它们作为来自另一个堆栈的运行的导出值),同时为用户提供一个选项来提供自己的值(以创建资源)。

谢谢。

最佳答案

这也可能是由于 Fn::ImportValue 内对参数命名错误的引用造成的。例如,如果我定义了以下参数 NetworkStackName,并且在 Fn::ImportValue 语句中错误引用了它(如 NetworkName),我会收到这个错误。我需要更改 NetworkName 以匹配参数中的值,NetworkStackName 来修复错误。

Parameters:
NetworkStackName:
Type: String
Default: happy-network-topology
Resources:
MySQLDatabase:
Type: AWS::RDS::DBInstance
Properties:
Engine: MySQL
DBSubnetGroupName:
Fn::ImportValue:
!Sub "${NetworkName}-DBSubnetGroup"

关于aws-cloudformation - AWS CloudFormation 函数调用失败:Fn::ImportValue 不得依赖于任何资源、导入的值或 Fn::GetAZs,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52240515/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com