标签: aws-api-gateway

AWS API 网关:状态代码 413,请求实体太大

我有一个带有 AWS API Gateway 和 Lambda 函数的无服务器 API。我正在使用自定义授权功能进行授权。标题太大,因此我收到此错误。通常,对于 nginx 服务器,我会更改 nging 配置,这将得到修复。我不知道如何在 AWS API Gateway 中处理这个问题。

aws-lambda aws-api-gateway

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

使用 AWS CDK 为 AWS API 网关启用 CORS

我正在尝试使用 AWS CDK 构建应用程序,如果我要使用 AWS 控制台手动构建应用程序,我通常会在 API 网关中启用 CORS。

尽管我可以从 API Gateway 中导出 swagger 并找到了许多选项来为 OPTIONS 方法生成 Mock 端点,但我不知道如何使用 CDK 来做到这一点。目前我正在尝试:

const apigw             = require('@aws-cdk/aws-apigateway');
Run Code Online (Sandbox Code Playgroud)

在哪里:

var api                 = new apigw.RestApi(this, 'testApi');
Run Code Online (Sandbox Code Playgroud)

并定义 OPTIONS 方法,如:

const testResource   = api.root.addResource('testresource');

var mock = new apigw.MockIntegration({
                    type: "Mock",
                    methodResponses: [
                            {
                                    statusCode: "200",
                                    responseParameters : {
                                            "Access-Control-Allow-Headers" : "string",
                                            "Access-Control-Allow-Methods" : "string",
                                            "Access-Control-Allow-Origin" : "string"
                                    }
                            }
                    ],
                    integrationResponses: [
                            {
                                    statusCode: "200",
                                    responseParameters: {
                                            "Access-Control-Allow-Headers" :  "'Content-Type,X-Amz-Date,Authorization,X-Api-Key,X-Amz-Security-Token'",
                                            "Access-Control-Allow-Origin" : "'*'",
                                            "Access-Control-Allow-Methods" …
Run Code Online (Sandbox Code Playgroud)

aws-cloudformation aws-api-gateway aws-cdk

9
推荐指数
3
解决办法
7678
查看次数

AWS API Gateway 删除响应标头

我使用 AWS api 网关创建了一个 API,其中包含一个模拟端点/test

在我的回复中,我得到了标题x-amzn-RequestIdx-amz-apigw-id. 如果出现错误,例如使用不存在的端点/test2,我也会得到x-amazn-ErrorType标头。

我不希望这些 aws 标头出现在我的 api 响应中。如何去除这些?

api amazon-web-services aws-api-gateway

9
推荐指数
1
解决办法
1003
查看次数

API 网关返回 403 - 禁止

我有一个 API 网关,其端点由 AWS Lambda 代理集成实现。我还为此端点配置了自定义授权方。我看到一个问题,我向该端点发出的第一个请求成功,但其他调用将失败;我收到一个 403 - 禁止的错误。如果我等待一段时间,我可以提出另一个成功的请求,但随后我开始看到同样的问题。

这是我的授权人代码:

const jwt = require('jsonwebtoken');

exports.authorizer = async function (event, context) {
  const bearerToken = event.authorizationToken.slice(7);
  const { payload } = jwt.decode(bearerToken);
  return {
    principalId: payload.sub,
    policyDocument: {
      Version: '2012-10-17',
      Statement: [{
        Action: 'execute-api:Invoke',
        Effect: 'Allow',
        Resource: event.methodArn,
      }],
    },
  };
};
Run Code Online (Sandbox Code Playgroud)

在此端点的 API 网关日志中,我可以看到授权方正在返回,Allow但我仍然可以看到授权失败:

(50ac5f87-e152-4933-a797-63d84a528f61) 客户端无权执行此操作。

有谁知道这会如何或为什么会发生?

javascript amazon-web-services node.js aws-lambda aws-api-gateway

9
推荐指数
1
解决办法
3754
查看次数

为什么使用terraform创建API网关的方法响应不同?

我有以下 terraform 脚本,它创建一个 API 网关,将请求传递给 lambda 函数。

provider "aws" {

  access_key = "${var.access_key}"

  secret_key = "${var.secret_key}"
  # 
  region     = "${var.region}"

  version = "~> 2.6"
}

resource "aws_api_gateway_rest_api" "MyDemoAPI" {
  name        = "MyDemoAPI"
  description = "This is my API for demonstration purposes"
}

resource "aws_api_gateway_resource" "MyDemoResource" {
  rest_api_id = "${aws_api_gateway_rest_api.MyDemoAPI.id}"
  parent_id   = "${aws_api_gateway_rest_api.MyDemoAPI.root_resource_id}"
  path_part   = "mydemoresource"
}

resource "aws_api_gateway_method" "MyDemoMethod" {
  rest_api_id   = "${aws_api_gateway_rest_api.MyDemoAPI.id}"
  resource_id   = "${aws_api_gateway_resource.MyDemoResource.id}"
  http_method   = "POST"
  authorization = "NONE"
}

resource "aws_api_gateway_integration" "MyDemoIntegration" {
  rest_api_id = "${aws_api_gateway_rest_api.MyDemoAPI.id}" …
Run Code Online (Sandbox Code Playgroud)

amazon-web-services terraform aws-api-gateway

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

无法让 API Gateway 使用私有 VPC 链接(在网络负载均衡器后面到 Fargate 容器)

无法让 API Gateway 与私有 VPC 链接(在网络负载均衡器后面到 Fargate 容器)容器一起使用

大家好,过去三天我一直在努力让它发挥作用。我的目标是设置一个 POST 方法,该方法重定向到运行 Go 容器的私有 VPC。我在线查看了一些指南并尝试了其中的大部分。为了这个实验,我复制了我们的容器在单个网络负载均衡器后面运行,创建了一个 VPC 链接并设置了 API 方法来使用它,但是当我测试它时,我得到的只是一个非常无用的 500内部服务器错误。我查看了我的 CloudWatch 日志,我很确定容器没有被击中。任何帮助都会很棒,让我知道我需要提供什么,以便我可以提供帮助。

谢谢!

这是我在测试方法时从 API Gateway 得到的:

Thu Aug 22 23:27:10 UTC 2019 : Endpoint request body after transformations: { "userId": <omitted>, ... }
Thu Aug 22 23:27:10 UTC 2019 : Sending request to http://<network load balancer DNS>:<port my code listens to>/api/someApi
Thu Aug 22 23:27:20 UTC 2019 : Execution failed due to configuration error: There was an internal error while …
Run Code Online (Sandbox Code Playgroud)

amazon-web-services amazon-ecs amazon-elb aws-api-gateway aws-fargate

9
推荐指数
1
解决办法
868
查看次数

在 AWS API Gateway 中,我可以在不附加 API 密钥的情况下使用使用计划吗?

关于 API 网关使用计划的 AWS 文档都暗示它们是使用/附加到 API 密钥创建的,但没有说明如果没有 API 密钥它将如何运行。我有一个未经授权的 API,我想对其应用限制。我可以创建使用计划,将其附加到资源,而不将 API 密钥与其关联吗?它会起作用吗?

上下文:我正在尝试使用 CloudFormation 的 Java SDK 来定义堆栈,但我无法弄清楚如何以编程方式指定特定于资源的节流阀。我还将接受一个答案,该答案告诉我如何在不使用控制台的情况下执行此操作。

throttling amazon-web-services aws-cloudformation aws-api-gateway aws-cdk

9
推荐指数
1
解决办法
1322
查看次数

CDK 将 API Gateway 堆栈拆分为 2 个小堆栈

我正在尝试创建 CDK 堆栈以创建 API 网关。如果我在“小块”(资源的评论部分)中创建堆栈,一切都正常工作,但是当我尝试创建完整的堆栈时,我收到此异常:

 Number of resources, 224, is greater than maximum allowed, 200
Run Code Online (Sandbox Code Playgroud)

因此,我尝试将我的大堆栈拆分为 2 个较小的堆栈,一个堆栈创建资源并创建一半的资源,另一个堆栈填充相关数据。

代码片段:

 Number of resources, 224, is greater than maximum allowed, 200
Run Code Online (Sandbox Code Playgroud)

我尝试创建cross-stacknested-stack将 API 数据传递给它,但到目前为止没有运气。

我的目标是创建一个包含 2 个小栈的栈——它们都指向同一个 API。或者,如果可能,为资源限制创建一个解决方法。

任何帮助都感激不尽。


2020 年 10 月 10 日更新:

目前,没有解决此问题的方法,最终将 API 网关拆分为多个 API 网关。

2020 年 24 月 10 日更新:

AWS CloudFormation 现在支持增加对五个服务配额的限制 - 模板大小、资源、参数、映射和输出。可以在 S3 对象中传递的模板的最大大小现在是 1MB(以前是 450KB)。最大资源数的新每个模板限制为 500(以前为 200)

更多信息可以在这里找到。

amazon-web-services aws-api-gateway aws-cdk

9
推荐指数
1
解决办法
3651
查看次数

Azure SignalR 服务的 AWS 完美替代品是什么?

最近,我使用 Azure 的“Azure SignalR Service”和 Azure App Service 构建了一个实时聊天应用程序。它像魔术一样工作。我爱它!但是,我现在受限于将 AWS 用于我的平台,并希望获得同等替代服务,以便我可以构建实时服务,只利用 AWS 服务。

我可以利用 AWS 中的什么平等子站点来构建实时应用程序,类似于我使用 Azure SignalR 服务和 Azure 应用程序服务构建 Azure 应用程序的方式?

我的计划是同时使用 API Gateway + AWS Elastic Beanstock。我在这里有哪些选择?弹性豆料会奏效吗?不确定我是否需要在 Elastic beanstock 中实现某种类型的永远在线功能,以便停机期间不会停止 AWS 资源并中断 WebSocket 连接。

1 笔记值得一提。作为这个项目的一部分,我的硬性要求之一是创建一个 HTTP rest-full api。我的计划是将它放在 API Gateway 代理后面。

AWS 声明它在此处使用 API 网关提供实时服务

https://aws.amazon.com/blogs/compute/annoucing-websocket-apis-in-amazon-api-gateway/

但是,在 API Gateway 中,我相信我需要创建“HTTP API”而不是“WebSocket API”。如果我有一个使用 ASP.NET Core web api 的后端 web api,我还可以选择 WebSocket API 吗? 在此处输入图片说明

如果我使用 AWS“WebSocket API”,如何在仍然允许实时的同时为我的后端 ASP.NET Core web api 创建 API 前端(代理)?

amazon-web-services signalr amazon-elastic-beanstalk aws-api-gateway

9
推荐指数
1
解决办法
4445
查看次数

在 AWS HTTP API 网关和 Fargate/ECS 上空闲/重新部署后,如何修复间歇性 503 服务不可用?

我们有一个非常简单的设置,这让我们很头疼:

  1. 为我们的静态 HTML/JS 提供 S3 集成的HTTP API 网关,以及ANY /api/{proxy+} 通往可通过Cloud Map访问的 Fargate 服务/任务路由
  2. 具有“API 服务”的ECS 集群使用Fargate和通过awsvpc. 没有自动缩放。最低健康:100%,最高:200%。
  3. 使用SRVDNS 记录的服务发现 TTL 60
  4. ECS服务/任务完全是无聊/空转,总是愉快地接受请求,同时记录他们。

问题:

我们收到一些间歇性 HTTP 503 Service Unavailable请求。新部署(带有任务重新部署)会提高速率,但即使在 10-15 分钟后,它们仍会间歇性地发生。

在 Cloud Watch 中,我们看到失败的 503 请求

2020-06-05T14:19:01.810+02:00 xx.117.163.xx - - [05/Jun/2020:12:19:01 +0000] "GET ANY /api/{proxy+} HTTP/1.1" 503 33 Np24bwmwsiasJDQ=
Run Code Online (Sandbox Code Playgroud)

但似乎他们没有达到一个活着的后端实例。

我们启用了 VPC 流日志,似乎HTTP API 网关希望将一些请求路由到停止的任务,即使它们已经很长时间(远远超过 60 …

amazon-web-services aws-api-gateway aws-fargate

9
推荐指数
1
解决办法
1677
查看次数