尝试部署lambda和API网关配置时出现以下错误
”路径/ profile / v1处的集成格式错误。(服务: AmazonApiGateway;状态码:400;错误代码:BadRequestException”
什么会导致此错误以及如何解决。
swagger: '2.0'
info:
version: v1
title: ProfileAPI
paths:
"/profile/v1":
get:
tags:
- Values
operationId: ProfileV1Get
consumes: []
produces:
- text/plain
- application/json
- text/json
parameters: []
responses:
'200':
description: Success
schema:
type: array
items:
type: string
x-amazon-apigateway-integration:
httpMethod: post
type: aws_proxy
uri:
Fn::Sub: arn:aws:apigateway:${AWS::Region}:lambda:path/2015-03-31/functions/${ProfileFunction.Arn}/invocations
definitions: {}
答案 0 :(得分:1)
获得了大家都可能感兴趣的与AWS Support一起使用的最终工作设置:
当我们在外部swagger模板中引用cloudformation资源详细信息时,我们没有获得资源详细信息,因此收到上述错误。例如:“ Fn :: Sub:arn:aws:apigateway:$ {AWS :: Region}:lambda:path / 2015-03-31 / functions / $ {LambdaFunction.Arn} / invocations“在您尝试时不起作用
使用资源:“ LambdaFunction.Arn”(这是CloudFormation资源)以大体上的定义创建API网关集成端点uri。为了解决这些问题,我在cloudformation模板中进行了以下更改:
要在cloudformation模板中引用swagger文件,我在s3存储桶中上载了swagger模板,然后使用以下定义。我用过:
ZazzoAPI:
Type: AWS::Serverless::Api
Properties:
StageName: Prod
Variables:
LambdaFunctionName: !Ref LambdaFunction
#Configure API settings and options
MethodSettings: [{
LoggingLevel: "INFO",
MetricsEnabled: True ,
HttpMethod: "GET",
ResourcePath: "/"
}]
DefinitionBody:
'Fn::Transform':
Name: 'AWS::Include'
Parameters:
Location: "s3://s3.code-deploy/swagger_SAM.yaml"
通过AWS :: Include转换,您可以创建对Amazon S3存储桶中转换片段的引用。它允许在外部swagger文件中引用cloudformation资源的详细信息。您可以参考[1]的文档,以获取有关“ AWS :: Include”转换的更多详细信息。
然后我检查了swagger模板,发现您使用的是简写形式来指定积分uri。但是,“ AWS :: Include”目前不支持使用文档[2]中提到的YAML代码片段的简写形式。因此,我使用了内在函数“ Fn :: Sub”,并且能够在其中引用所需的cloudformation参数。招摇模板。
uri: !Sub "arn:aws:apigateway:${AWS::Region}:lambda:path/2015-03-31/functions/${LambdaFunction.Arn}/invocations”
uri:
Fn::Sub: "arn:aws:apigateway:${AWS::Region}:lambda:path/2015-03-31/functions/${LambdaFunction.Arn}/invocations"