只有当资源存在时,我才能使用Fn::GetAttr



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

在制作Apigateway时,我将一些Lambda输出发送到ApigateGateway模板。但有些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"]

最新更新