如何在参数中使用ImportValue?

时间:2020-02-28 06:29:42

标签: amazon-web-services amazon-cloudformation

据我所知,我可以使用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不仅会在一个地方使用。

更新

所以我不得不放弃:

  1. 在您的AWS CloudFormation模板中,确认Parameters部分不包含任何内部函数。

https://aws.amazon.com/premiumsupport/knowledge-center/cloudformation-template-validation/

1 个答案:

答案 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']