据我所知,我可以使用ImportValue来引用Resources
的一部分中来自另一个cloudformation堆栈的值。
NetworkInterfaces:
- GroupSet:
- Fn::ImportValue:
Fn::Sub: "${NetworkStackNameParameter}-SecurityGroupID"
AssociatePublicIpAddress: 'true'
DeviceIndex: '0'
DeleteOnTermination: 'true'
SubnetId:
Fn::ImportValue:
Fn::Sub: "${NetworkStackNameParameter}-SubnetID"
但是似乎无法在Parameters
中使用此功能
Parameters:
VPC:
Description: VPC ID
Type: String
Default:
Fn::ImportValue:
!Sub "${NetworkStackNameParameter}-VPC"
如果我使用上面的方法,将会得到错误:
调用CreateChangeSet操作时发生错误(ValidationError):模板格式错误:每个默认成员都必须是字符串。
是否可以解决?因为相同的vpc ID,子网ID,安全组ID不仅会在一个地方使用。
所以我不得不放弃:
- 在您的AWS CloudFormation模板中,确认Parameters部分不包含任何内部函数。
https://aws.amazon.com/premiumsupport/knowledge-center/cloudformation-template-validation/
答案 0 :(得分:0)
执行此操作的一种方法是使用条件:
Parameters:
MyValue:
Type: String
Value: ''
Conditions:
MyValueExists: !Not [ !Equals [!Ref MyValue, '']]
Resources:
Resource:
Type: AWS::Something
Properties:
Key: !If [MyValueExists, !Ref MyValue, !ImportValue 'Imported']