如何在参数中使用ImportValue?

Bil*_*ill 15 amazon-web-services aws-cloudformation

据我所知,我可以使用ImportValue 来引用Resources.

NetworkInterfaces:
- GroupSet:
  - Fn::ImportValue:
      Fn::Sub: "${NetworkStackNameParameter}-SecurityGroupID"
  AssociatePublicIpAddress: 'true'
  DeviceIndex: '0'
  DeleteOnTermination: 'true'
  SubnetId:
    Fn::ImportValue:
      Fn::Sub: "${NetworkStackNameParameter}-SubnetID"
Run Code Online (Sandbox Code Playgroud)

不过这个功能好像不能用Parameters

Parameters:
  VPC:
    Description: VPC ID
    Type: String
    Default:
      Fn::ImportValue:
        !Sub "${NetworkStackNameParameter}-VPC"
Run Code Online (Sandbox Code Playgroud)

如果我使用上面的方式,会得到错误:

调用 CreateChangeSet 操作时发生错误 (ValidationError):模板格式错误:每个默认成员必须是字符串。

无论如何要解决吗?因为同一个vpc id、子网id、安全组Id,不会只用在一个地方。

更新

所以我不得不放弃:

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

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

小智 3

一种方法是使用条件:

Parameters:
  MyValue:
    Type: String
    Value: ''
Conditions:
  MyValueExists: !Not [ !Equals [!Ref MyValue, '']]
Resources:
  Resource:
    Type: AWS::Something
    Properties:
      Key: !If [MyValueExists, !Ref MyValue, !ImportValue 'Imported']
Run Code Online (Sandbox Code Playgroud)