我正在制作一个主堆栈和两个嵌套堆栈。第一个嵌套堆栈是创建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"]