标签: aws-api-gateway

API Gateway是否自动验证输入模型?

我在AWS API网关中创建了具有以下端点的简单API:

POST /v1/users
Run Code Online (Sandbox Code Playgroud)

在方法执行/方法请求中,我添加了请求模型:

在此输入图像描述

此模型架构如下所示:

在此输入图像描述

但是,当我使用json body向该端点发出请求时,{ "foo": "bar" }它不会拒绝它并执行我的lambda函数...

那么,如果没有用于验证请求,为什么还有定义JSON模式的选项呢?

amazon-web-services aws-api-gateway

22
推荐指数
2
解决办法
5798
查看次数

API网关的自定义域返回403

我正在使用API​​ Gateway和Lambda创建一个api.使用API​​ Gateway Stage编辑器中指定的url一切正常; 但是,当我尝试移动到自定义域时,我遇到了一些问题.

我尝试的第一件事是直接从我的域使用Route 53中的CNAME记录到我从API网关获得的域.那是一些错误,我认为这是不正确的解决方案是正确的吗?

接下来,我尝试了API网关中的自定义域名功能.我的理解是,这将卷起一个CloudFront分配,然后我可以从Route 53映射到.当我创建自定义域并添加了域映射时,它为我提供了一个我认为是CloudFront分发的URL.该链接返回403响应,并且未在CloudFront中进行分发.调试此问题的好方法是什么?

amazon-web-services amazon-cloudfront aws-api-gateway

22
推荐指数
4
解决办法
9128
查看次数

发布到 api 网关时无法解析“授权标头中的“不是有效的键=值对(缺少等号)”

我创建了一个 api 网关来将数据放入我的 s3 存储桶中。当我在控制台中测试它时,它没有问题。即使我在授权方测试中测试我的令牌时,它也会返回“允许”,因此我的令牌没有任何问题。我的令牌验证是

^Bearer [-0-9a-zA-z\.]*$
Run Code Online (Sandbox Code Playgroud)

所以我用于生成标题的 python 代码如下所示:

headers = {
    "Authorization": "Bearer " + token,
    "Content-type": "application/json"
}
Run Code Online (Sandbox Code Playgroud)

我的其余代码是:

response = requests.post(url, headers=headers, data={"id":"0678a93d-ee8c-4db5-a831-1e311be4f04b", "test":"12345"})
print(response.text)
Run Code Online (Sandbox Code Playgroud)

我得到的错误消息是 "{"message":"'{My Token}' not a valid key=value pair (missing equal-sign) in Authorization header: 'Bearer {My Token}'."}"

我的网址如下所示:

https://my-api-gateway.amazonaws.com/MyStage,我在我的资源中使用了 {proxy+}。我注意到如果我将标题从 Content-type 更改为 Accept,它会给我同样的错误,但如果我也将我的 url 更改为https://my-api-gateway.amazonaws.com/MyStage/any-arbitrary-string /,我得到一个

   {"response":{"status":"VALID", "message": "success"}} 

Run Code Online (Sandbox Code Playgroud)

但该文件没有出现在我的 s3 存储桶中。我该如何解决?

python amazon-web-services aws-api-gateway

22
推荐指数
4
解决办法
4万
查看次数

Flutter web 中的 XMLHttpRequest 错误 [启用 CORS AWS API 网关]

注意:事实证明,这与颤振无关,而与我将 API 网关设置为 Lambda 代理这一事实有关

我试图从 Flutter Web 应用程序访问 API 端点,每次它出错并给我以下错误。

获取传感器数据时出错:DioError [DioErrorType.RESPONSE]:XMLHttpRequest 错误。

我知道这里有几个关于 SO(像这个这个)的问题在讨论这个问题,解决方案似乎是在服务器端启用 CORS 支持。我正在使用 AWS API 网关来构建 API,我按照这些说明从我的 API 启用 CORS 支持。这是我在 API 网关控制台中的 CORS 设置。

在此处输入图片说明

“Access-Control-Allow-headers”中的文本是

'内容类型,X-Amz-日期,授权,X-Api-Key,X-Amz-Security-Token'

在 API 网关上启用 CORS 似乎没有帮助,当我尝试点击 API 时,我的 flutter Web 应用程序仍然遇到相同的错误。

有趣的是,如果我从 chrome 中点击 API(即在浏览器上粘贴 API URL 并点击回车),API 工作得非常好。只有当我尝试从 Flutter Web 应用程序访问 API 时它才会失败。

问题:如何在我的 API 网关中启用 CORS 支持,以便我的 Flutter Web 应用程序可以使用 API?

cors aws-api-gateway flutter flutter-web

22
推荐指数
4
解决办法
3万
查看次数

从AWS API Gateway返回HTML

我正在努力实现与此帖相同的内容,但我不理解那里的答复,并且无权在评论中要求澄清.

我有一个接受GET请求,经过一些请求变量lambda函数(用Python实现),并且经由一个空响应模型返回的text/html(如所描述的API网关端点这里

如前面的SO问题所述,如果Lambda函数返回HTML字符串,并且API端点使用默认的输出直通行为@Intelliration Response,则引用HTML输出:

"\n<html>\n<body>\n ... \n</body>\n</html>\n"
Run Code Online (Sandbox Code Playgroud)

答案(由@ARUNBALAN NV提出)说"只需将HTML标记存储在变量中并将其返回."但我不确定这在Lambda函数的上下文中意味着什么.这是否意味着使用名为"variableHTML"的元素返回"application/json"响应?像这样的东西?

"{\"variableHTML\": \"\\n<html>\\n<body>\\n ... \\n</body>\\n</html>\\n\"}"
Run Code Online (Sandbox Code Playgroud)

我在API网关中进行了设置,我的集成响应现在使用Mapping来完全按照建议提取元素(用于200个应用程序/ json响应):

#set($inputRoot = $input.path('$')) 
$inputRoot.variableHTML .
Run Code Online (Sandbox Code Playgroud)

结果现在返回一个点.

我尝试了很多变种($ input.json而不是$ input.path,不同阶段的不同内容类型等),但感觉上面的设置最接近匹配来自其他线程的接受答案.

任何有关我出错的见解将不胜感激.谢谢阅读!

amazon-web-services aws-lambda aws-api-gateway

20
推荐指数
1
解决办法
9102
查看次数

如何使用GET请求将参数传递给AWS Lambda函数?

假设我想从我的Api网关端点向我的Lambda函数发出GET请求时,在URL字符串中传递val1和val2:

https://xyz.execute-api.amazonaws.com/prod/test?val1=5&val2=10
Run Code Online (Sandbox Code Playgroud)

我有一个简单的函数,它将两个输入val1和val2相加:

def lambda_handler(event, context):
    # How do I get at val1 and val2??
    return {'result': val1 + val2}
Run Code Online (Sandbox Code Playgroud)

我已经在AWS API网关上的方法请求中为URL查询字符串参数添加了val1和val2.但是如何在函数内部访问它们呢?

python amazon-web-services aws-lambda aws-api-gateway

20
推荐指数
2
解决办法
2万
查看次数

AWS API网关 - CORS + POST无法正常工作

CORS真的让我发疯,我真的没有想法让它变得有用.

我创建了一个简单的APIG Api,其中包含1个名为'abc'的资源,并添加了2个方法GETPOST,其中Authorization设置为NONE,API Key Required设置为false,所有内容都部署到名为'dev'的阶段.

当然,我在两种方法上都启用了CORS,我看到在OPTIONS方法和Access-Control-Allow-中添加了3个标题Access-Control-Allow-Origin,Access-Control-Allow-HeadersAccess-Control-Allow-Methods Origin添加到POSTGET方法中.

两个调用都映射到相同的lambda函数,该函数只是将"Hello from Lambda"文本输出到控制台.

然后我创建了一个简单的html页面,我在S3上作为静态网站托管,使用Route53指向一个域,并开始使用jQuery $ .ajax测试API 来进行调用.

一切看起来都很简单,直截了当,正如文档中所解释的那样,除了GET工作并按预期将文本输出到控制台.该POST版本导致以下错误:

No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://example.com' is therefore not allowed access. The response had HTTP status code …

api amazon-web-services cors aws-api-gateway

20
推荐指数
6
解决办法
1万
查看次数

AWS API Gateway错误:API Gateway无权将提供的角色假定为S3代理

有类似的问题,但他们有我尝试过的答案.我不确定我做错了什么,但任何帮助都会赞赏.

测试细节: 在此输入图像描述

方法执行测试的错误; PUT请求:

Execution log for request test-request
Mon Oct 16 10:13:47 UTC 2017 : Starting execution for request: test-invoke-request
Mon Oct 16 10:13:47 UTC 2017 : HTTP Method: PUT, Resource Path: /pop-data-xmlz/test.xml
Mon Oct 16 10:13:47 UTC 2017 : Method request path: {item=test.xml, folder=pop-data-xmlz}
Mon Oct 16 10:13:47 UTC 2017 : Method request query string: {}
Mon Oct 16 10:13:47 UTC 2017 : Method request headers: {Content-Type=application/xml}
Mon Oct 16 10:13:47 UTC 2017 : Method request body before …
Run Code Online (Sandbox Code Playgroud)

api amazon-s3 amazon-web-services aws-api-gateway

20
推荐指数
1
解决办法
9087
查看次数

从AWS API网关请求验证程序获取详细的错误消息

背景

我有一个使用带有API网关扩展的 Swagger 2.0定义创建的API网关.

我覆盖了默认的API网关响应,例如:

x-amazon-apigateway-gateway-responses:
  BAD_REQUEST_BODY:
    statusCode: 400
    responseTemplates:
      application/json: |
        {
          "error": {
            "code": 400,
            "stage": "$context.stage",
            "request": "$context.requestId",
            "message": "$context.error.message"
          }
        }
Run Code Online (Sandbox Code Playgroud)

$context上述有效载荷来自API网关变量.

我的API中的示例资源/方法如下所示(始终是LAMBDA_PROXY集成):

paths:
  /test:
    post:
      parameters:
        - in: body
          name: Test
          required: true
          schema:
          $ref: "#/definitions/Test"
      responses:
        201:
          description: Created
        400:
          description: Bad Request
        401:
          description: Unauthorized
        403:
          description: Forbidden
      x-amazon-apigateway-integration:
      uri: >-
        arn:aws:apigateway:${region}:lambda:path/2015-03-31/functions/${lambda}/invocations
      type: aws_proxy
      httpMethod: POST
      credentials: "${credentials}"
      passthroughBehavior: never
Run Code Online (Sandbox Code Playgroud)

使用相应的请求有效负载定义:

definitions:
  Test:
    type: …
Run Code Online (Sandbox Code Playgroud)

amazon-web-services swagger aws-api-gateway

20
推荐指数
3
解决办法
3341
查看次数

随机状态代码:连接到lambda的AWS api网关上的502错误

我使用代理集成使用api网关暴露了多个lambdas.我不时会收到状态代码为502的奇怪错误.在lambda云监视日志中没有任何内容.下面我发布了api网关日志以获取示例请求:

(0cbbd9f5-f1bd-11e7-92c0-4d5d3b7d0380) Received response. Integration latency: 231 ms

(0cbbd9f5-f1bd-11e7-92c0-4d5d3b7d0380) Endpoint response body before transformations:
{
    "Message": "An error occurred and the request cannot be processed.",
    "Type": "Service"
}

(0cbbd9f5-f1bd-11e7-92c0-4d5d3b7d0380) Endpoint response headers: 
{
    Connection=keep-alive, 
    x-amzn-RequestId=0cbc9dee-f1bd-11e7-857b-91f7f814692c, 
    x-amzn-ErrorType=ServiceException, 
    Content-Length=86, 
    Date=Fri, 05 Jan 2018 02:06:32 GMT, 
    Content-Type=application/json
}

(0cbbd9f5-f1bd-11e7-92c0-4d5d3b7d0380) Execution failed due to configuration error: Malformed Lambda proxy response

(0cbbd9f5-f1bd-11e7-92c0-4d5d3b7d0380) Method completed with status: 502
Run Code Online (Sandbox Code Playgroud)

基本上似乎api网关无法到达lambda并且调用lambda返回:

(0cbbd9f5-f1bd-11e7-92c0-4d5d3b7d0380) Endpoint response body before transformations:
{
    "Message": "An error occurred and the request cannot be processed.", …
Run Code Online (Sandbox Code Playgroud)

amazon-web-services aws-lambda aws-api-gateway

20
推荐指数
1
解决办法
2014
查看次数