正如我所知,我可以使用ImportValue引用< code>Resources中另一个cloudformation堆栈的值。
NetworkInterfaces:
- GroupSet:
- Fn::ImportValue:
Fn::Sub: "${NetworkStackNameParameter}-SecurityGroupID"
AssociatePublicIpAddress: 'true'
DeviceIndex: '0'
DeleteOnTermination: 'true'
SubnetId:
Fn::ImportValue:
Fn::Sub: "${NetworkStackNameParameter}-SubnetID"
但该功能似乎不能在参数
中使用
Parameters:
VPC:
Description: VPC ID
Type: String
Default:
Fn::ImportValue:
!Sub "${NetworkStackNameParameter}-VPC"
如果我使用上面的方法,会得到错误:
调用 CreateChangeSet 操作时出错 (验证错误): 模板格式错误: 每个默认成员都必须是字符串。
无论如何要解决这个问题?因为同一个vpc id、子网id、安全组Id,不仅会在一个地方使用。
所以我不得不放弃:
https://aws.amazon.com/premiumsupport/knowledge-center/cloudformation-template-validation/
一种方法是使用条件:
Parameters:
MyValue:
Type: String
Value: ''
Conditions:
MyValueExists: !Not [ !Equals [!Ref MyValue, '']]
Resources:
Resource:
Type: AWS::Something
Properties:
Key: !If [MyValueExists, !Ref MyValue, !ImportValue 'Imported']