说明 我正在尝试定义无服务器API资源。但是使用函数ImportValue定义swagger规范文件的位置时遇到了麻烦。
重现此问题的步骤:
我无法在Location中定义具有嵌套函数AWS::Serverless::Api
的{{1}}资源。我尝试过以下三种方式,但都没有。
注意:堆栈参数已正确定义,并且存在来自其他堆栈的导出值。由于简洁的原因,没有在这里显示它们。
ImportValue
Cloudformation显示以下错误。
FAILED - 变换Include下参数Location的值必须 解析为字符串,数字,布尔值或任何这些的列表。
但是,如果我不使用ApiGatewayApi:
Type: AWS::Serverless::Api
Properties:
Name: !Sub ${AWS::StackName}-API
StageName: !Ref ApiGatewayStageName
DefinitionBody:
'Fn::Transform':
Name: 'AWS::Include'
Parameters:
Location:
Fn::Sub:
- s3://${BucketName}/${SwaggerSpecificationS3Key}
- BucketName:
Fn::ImportValue:
!Sub "${EnvironmentName}-dist-bucket-${AWS::Region}"
ApiGatewayApi:
Type: AWS::Serverless::Api
Properties:
Name: !Sub ${AWS::StackName}-API
StageName: !Ref ApiGatewayStageName
DefinitionBody:
'Fn::Transform':
Name: 'AWS::Include'
Parameters:
Location:
Fn::Sub:
- s3://${BucketName}/${SwaggerSpecificationS3Key}
- BucketName:
!ImportValue 'dev-dist-bucket-us-east-1'
ApiGatewayApi:
Type: AWS::Serverless::Api
Properties:
Name: !Sub ${AWS::StackName}-API
StageName: !Ref ApiGatewayStageName
DefinitionBody:
'Fn::Transform':
Name: 'AWS::Include'
Parameters:
Location:
Fn::Sub:
- s3://${BucketName}/${SwaggerSpecificationS3Key}
- BucketName:
Fn::ImportValue: 'dev-dist-bucket-us-east-1'
,则可以使用嵌套的ImportValue
Fn::Sub
是因为Fn :: Transform还是AWS :: Include? p>