标签: aws-api-gateway

无法在AWS API Gateway上使用CORS使用自定义请求标头

我创建并部署了具有以下结构的AWS API Gateway资源,包括自定义HTTP请求标头'X-header'

dev (stage)
  /echo (resource)
    POST (method)
      Method Request - Headers: X-header
    OPTIONS (method)
      Method Request - Headers: X-header
Run Code Online (Sandbox Code Playgroud)

当我从Chrome发送到端点时,出现以下错误.

XMLHttpRequest无法加载https://fxxxx.execute-api.us-west-2.amazonaws.com/dev/echo.预检响应中的Access-Control-Allow-Headers不允许请求标头字段X-header.

Chrome正在对OPTIONS方法进行预检检查.我可以看到请求标题:

Access-Control-Request-Headers:accept,content-type,x-header
Access-Control-Request-Method:POST

但响应标题只有:

Access-Control-Allow-Headers:Content-Type,X-Amz-Date,Authorization,X-Api-Key,X-Amz-Security-Token
Access-Control-Allow-Methods:POST,OPTIONS
Access-Control-Allow-起源:*

Chrome希望Response Access-Control-Request-Headers包含我的自定义x-header,这似乎是合乎逻辑的.这是API Gateway错误吗?

我看到的唯一解决方法是删除自定义标头并传递POST正文中的数据.

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

2
推荐指数
3
解决办法
5120
查看次数

行为不一致AWS API网关。获取有效的API的403

我有一些已经使用了一段时间的API。所有这些都通过API密钥进行保护。由于某种原因,他们所有人都已停止工作,并从cloudfront引发403,Error。它们均未启用任何缓存机制。当我通过AWS控制台针对这些API端点测试Lambda函数时,一切正常。为了重现该问题,我将我的测试api端点之一指向了没有API密钥的lambda函数。那行得通。然后,我向API添加了API密钥,然后重新部署了它。有趣的是,我能够邮递他们而无需传递x-api-key标头。对于此测试API端点,缓存的响应是来自Cloudfront的X-Cache?Miss。

我的原始API /测试API的设置没有任何区别。这种行为是不一致的,没有它,我的应用程序功能根本就没有。

amazon-web-services aws-api-gateway

2
推荐指数
1
解决办法
1035
查看次数

AWS API Gateway和Kinesis Firehose集成:添加额外数据

我目前正在使用以下映射模板将发送到AWS API Gateway端点的数据传递给AWS Kinesis Firehose流:

{
    "DeliveryStreamName": "[STREAMNAME]",
    "Record": {
        "Data": "$util.base64Encode($input.body)"
    }
}
Run Code Online (Sandbox Code Playgroud)

我想要做的是:向$input.body正在编码的信息添加信息,就像$context.identity.sourceIp发出请求的客户端一样.

当传递给Kinesis Firehose的输出需要进行Base64编码时,我该如何解决这个问题呢?理想情况下,我希望发布到Kinesis Firehose的数据如下所示:

{
  "x": 1,
  "y": 2,
  "z": 3,
  ...,                   // all the properties from the JSON-request by the client
  "clientIp": "x.x.x.x"  // property added by API-Gateway into client's object
}
Run Code Online (Sandbox Code Playgroud)

base64 aws-api-gateway amazon-kinesis-firehose

2
推荐指数
1
解决办法
932
查看次数

HTTP请求主体未通过AWS API Gateway进入AWS Lambda函数

我有一个用Scala编写的非常基本的lambda函数,已部署到AWS Lambda。当我通过AWS Lambda控制台对其进行测试时,该功能可以正常工作。

这是功能,其中添加了一些其他日志记录以用于调试目的。

package com.spacecorpshandbook.ostium.lambda.handler

import java.util

import com.google.gson.Gson
import temp.{ApiGatewayProxyResponse, Appointment, CancelResponse}

/**
  * Amazon Lambda handler adapter for the Cancellation application
  */
class CancellationHandler {

  def cancelAppointment(appointment: Appointment): ApiGatewayProxyResponse = {

    System.out.println("++++ appointmentId is: " + appointment.getAppointmentId)

    val apiGatewayProxyResponse = new ApiGatewayProxyResponse
    val cancelResponse = new CancelResponse

    cancelResponse.setMessage("Cancelled appointment with id " + appointment.getAppointmentId)

    val gson: Gson = new Gson

    apiGatewayProxyResponse.setBody(gson.toJson(cancelResponse))

    apiGatewayProxyResponse.setStatusCode("200")

    val headerValues = new util.HashMap[String, String]

    headerValues put("Content-Type", "application/json")

    apiGatewayProxyResponse.setHeaders(headerValues)

    System.out.println("+++++ message before returning: " …
Run Code Online (Sandbox Code Playgroud)

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

2
推荐指数
1
解决办法
3124
查看次数

AWS Cloudfront分发不显示API网关分发

我有一个AWS Gateway API与自定义域结合使用的托管API 。它已经生产了至少一年。但是,当我Cloudfront从转到资源页面时AWS web console,我在用于Gateway API的同一帐户下看不到任何分发条目。

AWS文档的状态如下:

API Gateway创建的CloudFront发行版由与API Gateway关联的特定于区域的帐户拥有。在CloudWatch日志中跟踪用于创建和更新此类CloudFront分配的操作时,您必须使用API​​网关帐户ID。有关更多信息,请参阅在CloudTrail中记录创建自定义域名。

我为Gateway和使用相同的帐户Cloudfront。但是我在Cloudfront中看不到发行条目。

我想念什么?

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

2
推荐指数
1
解决办法
457
查看次数

AWS API Gateway:使用模拟集成来回显响应主体

我正在尝试使用Mock集成来“回显”我发送的JSON正文。不过,我只是无法得到它的工作。我可以从“ POST-集成响应”中返回任意JSON正文,但是从未通过找到JSON请求$input.json('$')。我已经能够成功地回显任何查询参数。

我的API有一个“ /”路径和一个定义的方法(POST)。导出的YAML是在这里

任何想法,以什么可怎么回事?

amazon-web-services aws-api-gateway

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

云前端 - 重叠的备用域名

在Api Gateway中,我创建了一个自定义域foo.example.com,用它创建了一个Cloud Front发行版CNAME.

我还想创建一个通配符域,*.example.com但在尝试创建它时,CloudFront会抛出一个错误:

CNAMEAlreadyExistsException:您提供的一个或多个CNAME已与不同的资源相关联

AWS在其文档中指出:

但是,您可以添加通配符备用域名,例如*.example.com,其中包含(与其重叠)非通配符备用域名,例如www.example.com.只要两个分发都是使用相同的AWS账户创建的,重叠域名可以位于同一分布中,也可以位于不同的分布中.

https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/CNAMEs.html#alternate-domain-names-wildcard

所以我可能误解了这一点,是否有可能完成我所描述的内容?

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

2
推荐指数
1
解决办法
909
查看次数

在Python中解析多部分请求字符串

我有这样的字符串

"--5b34210d81fb44c5a0fdc1a1e5ce42c3\r\nContent-Disposition: form-data; name=\"author\"\r\n\r\nJohn Smith\r\n--5b34210d81fb44c5a0fdc1a1e5ce42c3\r\nContent-Disposition: form-data; name=\"file\"; filename=\"example2.txt\"\r\nContent-Type: text/plain\r\nExpires: 0\r\n\r\nHello World\r\n--5b34210d81fb44c5a0fdc1a1e5ce42c3--\r\n"
Run Code Online (Sandbox Code Playgroud)

我也有其他标题可用的请求标头。

如何使用Python3轻松解析?

我正在通过API网关在AWS Lambda中处理文件上传,请求主体和标头可通过Python dict使用。

关于堆栈溢出还有其他类似的问题,但是大多数都假设使用requests模块或其他模块,并且期望请求详细信息采用特定的对象或格式。

注意:我知道可以将用户上传到S3并触发Lambda,但是在这种情况下,我故意选择不这样做。

python aws-lambda aws-api-gateway

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

调节Lambda时,AWS Lambda + API网关返回502错误

同步调用:如果该函数被同步调用并受到限制,则Lambda返回429错误,并且调用服务负责重试。ThrottledReason错误代码说明您遇到的是功能级别限制(如果指定)还是帐户级别限制(请参阅下面的注释)。每个服务可能都有自己的重试策略。例如,CloudWatch Logs最多重试失败的批次五次,两次重试之间有延迟。有关事件源及其调用类型的列表,请参阅支持的事件源。

参考

我不确定我对上述句子的理解是正确的,如果我错了,请修复我。

  1. 限制lambda时,它会返回429 ErrorAPI网关。
  2. 在此处的API网关中,调用服务将重试该请求。

但是,它没有按预期工作。以下是限制lambda时来自cloudWatch的API网关日志。

API-Gateway-Execution-Logs_3f1frvtwe4/sam-sm-test 2a38a4a9316c49e5a833517c45d31070 (bededbf0-73ae-11e8-87a2-f51933ef104f) Endpoint response body before transformations: {"Reason":"ReservedFunctionConcurrentInvocationLimitExceeded","Type":"User","message":"Rate Exceeded."}
API-Gateway-Execution-Logs_3f1frvtwe4/sam-sm-test 2a38a4a9316c49e5a833517c45d31070 (bededbf0-73ae-11e8-87a2-f51933ef104f) Endpoint response headers: {Connection=keep-alive, x-amzn-RequestId=bedfc624-73ae-11e8-bd28-6345cb3606c4, x-amzn-ErrorType=TooManyRequestsException, Content-Length=104, Date=Tue, 19 Jun 2018 10:51:39 GMT, Content-Type=application/json}
API-Gateway-Execution-Logs_3f1frvtwe4/sam-sm-test 2a38a4a9316c49e5a833517c45d31070 (bededbf0-73ae-11e8-87a2-f51933ef104f) Execution failed due to configuration error: Malformed Lambda proxy response
Run Code Online (Sandbox Code Playgroud)

实际上,Lambda返回{"Reason":"ReservedFunctionConcurrentInvocationLimitExceeded","Type":"User","message":"Rate Exceeded."}的API网关格式错误(代理集成),因此,API网关返回502 Error给调用API的客户端。

我希望重试失败的请求。我该如何处理?

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

2
推荐指数
1
解决办法
2208
查看次数

Cloudformation-'AWS_PROXY'当前仅支持Lambda函数

我想使用cloudformation创建堆栈时出现以下错误:

The following resource(s) failed to create: [ApiSyncLogsPost]. . Rollback requested by user.
CREATE_FAILED   AWS::ApiGateway::Method ApiSyncLogsPost Integrations of type 'AWS_PROXY' currently only supports Lambda function and Firehose stream invocations. (Service: AmazonApiGateway; Status Code: 400; Error Code: BadRequestException; Request ID: 8bff48b0-93e4-11e8-a183-5de2b976f282)
Run Code Online (Sandbox Code Playgroud)

我在Google上没有发现与此错误相关的任何信息,当我搜索它时,我只得到了很多AWS Cloudformation文档。

我认为正在发生的是 ApiSyncLogsPost资源定义不正确,但是我在互联网上发现的示例与此类似。

为了解决该错误需要更改什么?

这是cloudformation json:

{
"AWSTemplateFormatVersion": "2010-09-09",
"Metadata": {
    "AWS::CloudFormation::Designer": {
        "a73e3686-2291-49a2-b052-565c5f85a9c9": {
            "size": {
                "width": 60,
                "height": 60
            },
            "position": {
                "x": 270,
                "y": 120
            },
            "z": 2,
            "parent": "d68e59d4-72c0-425a-9b7b-227cbac3252d",
            "embeds": []
        },
        "0665ec07-964b-4c90-86c5-5f7731cece7b": { …
Run Code Online (Sandbox Code Playgroud)

aws-cloudformation aws-lambda aws-api-gateway

2
推荐指数
1
解决办法
864
查看次数