如何仅在资源存在时使用 Fn::GetAttr?

How can I use Fn::GetAttr only when the resource exist?

我正在制作一个主堆栈和两个嵌套堆栈。 第一个嵌套堆栈是创建 Lambda 的堆栈。 第二个嵌套堆栈创建 Apigateway。

制作 Apigateway 时,我将一些 Lambda 输出发送到 Apigateway 模板。 但是在某些情况下不会创建某些 Lambda 输出。

所以当我使用 Fn::GetAttr 将一些输出发送到 Apigateway 模板时。我得到一个错误,因为输出不存在。

[Lambda 模板(嵌套堆栈)]

由于条件 conditionNeedMock,未创建 MockServerArn 输出。

...
Outputs:
  MockServerArn:
    Condition: conditionNeedMock
    Description: lambdaMock function Arn
    Value: !GetAttr lambdaMock.Arn
...

[主模板]

LambdaStack.Ouputs.MockserverArn 未创建,因此在使用 !GetAttr.

时出现错误
...
Resources:
  LambdaStack:
    Type: AWS::CloudFormation::Stack
    ...

  ApiGatewayStack:
    Type: AWS::CloudFormation::Stack
    DependsOn: LambdaStack
    Properties:
      TemplateURL: apigateway.yml
      TimeoutInMinutes: 20
      Parameters:
        paramMockServerArn: !GetAtt LambdaStack.Outputs.MockServerArn
...

唯一可行的方法(不引入自定义资源)是如果 conditionNeedMock 也在根堆栈中:

paramMockServerArn: !If [conditionNeedMock, !GetAtt LambdaStack.Outputs.MockServerArn, !Ref "AWS::NoValue"]