Fn::Sub 中的嵌套 Fn::ImportValue 不适用于 SAM 模板

Nom*_*qub 5 aws-cloudformation aws-api-gateway aws-sam-cli

描述: 我正在尝试定义无服务器 API 资源。但是在使用函数 ImportValue 定义 swagger 规范文件的位置时遇到麻烦。

重现问题的步骤: 我无法在 Location 中定义AWS::Serverless::Api具有嵌套函数的资源ImportValue。我尝试了以下三种方法,它们都不起作用。

注意:堆栈参数定义正确,存在其他堆栈的导出值。为简洁起见,这里不显示它们。

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' 
Run Code Online (Sandbox Code Playgroud)

Cloudformation 显示以下错误。

FAILED - 转换 Include 下的参数 Location 的值必须解析为字符串、数字、布尔值或任何这些的列表。

但是,如果我不使用ImportValue它,它可以与嵌套的Fn::Sub

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::Sub: dist-bucket-${EnvironmentName}-${AWS::Region}
Run Code Online (Sandbox Code Playgroud)

是因为 Fn::Transform 还是 AWS::Include?