我创建并部署了具有以下结构的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正文中的数据.
我有一些已经使用了一段时间的API。所有这些都通过API密钥进行保护。由于某种原因,他们所有人都已停止工作,并从cloudfront引发403,Error。它们均未启用任何缓存机制。当我通过AWS控制台针对这些API端点测试Lambda函数时,一切正常。为了重现该问题,我将我的测试api端点之一指向了没有API密钥的lambda函数。那行得通。然后,我向API添加了API密钥,然后重新部署了它。有趣的是,我能够邮递他们而无需传递x-api-key标头。对于此测试API端点,缓存的响应是来自Cloudfront的X-Cache?Miss。
我的原始API /测试API的设置没有任何区别。这种行为是不一致的,没有它,我的应用程序功能根本就没有。
我目前正在使用以下映射模板将发送到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) 我有一个用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) 我有一个AWS Gateway API与自定义域结合使用的托管API 。它已经生产了至少一年。但是,当我Cloudfront从转到资源页面时AWS web console,我在用于Gateway API的同一帐户下看不到任何分发条目。
AWS文档的状态如下:
API Gateway创建的CloudFront发行版由与API Gateway关联的特定于区域的帐户拥有。在CloudWatch日志中跟踪用于创建和更新此类CloudFront分配的操作时,您必须使用API网关帐户ID。有关更多信息,请参阅在CloudTrail中记录创建自定义域名。
我为Gateway和使用相同的帐户Cloudfront。但是我在Cloudfront中看不到发行条目。
我想念什么?
我正在尝试使用Mock集成来“回显”我发送的JSON正文。不过,我只是无法得到它的工作。我可以从“ POST-集成响应”中返回任意JSON正文,但是从未通过找到JSON请求$input.json('$')。我已经能够成功地回显任何查询参数。
我的API有一个“ /”路径和一个定义的方法(POST)。导出的YAML是在这里。
任何想法,以什么可怎么回事?
在Api Gateway中,我创建了一个自定义域foo.example.com,用它创建了一个Cloud Front发行版CNAME.
我还想创建一个通配符域,*.example.com但在尝试创建它时,CloudFront会抛出一个错误:
CNAMEAlreadyExistsException:您提供的一个或多个CNAME已与不同的资源相关联
AWS在其文档中指出:
但是,您可以添加通配符备用域名,例如*.example.com,其中包含(与其重叠)非通配符备用域名,例如www.example.com.只要两个分发都是使用相同的AWS账户创建的,重叠域名可以位于同一分布中,也可以位于不同的分布中.
所以我可能误解了这一点,是否有可能完成我所描述的内容?
我有这样的字符串
"--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,但是在这种情况下,我故意选择不这样做。
同步调用:如果该函数被同步调用并受到限制,则Lambda返回429错误,并且调用服务负责重试。ThrottledReason错误代码说明您遇到的是功能级别限制(如果指定)还是帐户级别限制(请参阅下面的注释)。每个服务可能都有自己的重试策略。例如,CloudWatch Logs最多重试失败的批次五次,两次重试之间有延迟。有关事件源及其调用类型的列表,请参阅支持的事件源。
我不确定我对上述句子的理解是正确的,如果我错了,请修复我。
429 ErrorAPI网关。但是,它没有按预期工作。以下是限制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的客户端。
我希望重试失败的请求。我该如何处理?
我想使用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)