提问者:小点点

如何在参数中使用ImportValue?


正如我所知,我可以使用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/


共1个答案

匿名用户

一种方法是使用条件:

Parameters:
  MyValue:
    Type: String
    Value: ''
Conditions:
  MyValueExists: !Not [ !Equals [!Ref MyValue, '']]
Resources:
  Resource:
    Type: AWS::Something
    Properties:
      Key: !If [MyValueExists, !Ref MyValue, !ImportValue 'Imported']