标签: 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 Api Gateway 本地测试/开发

我们在 AWS 中拥有 dockerized 微服务,所有这些都在 API 网关之后并可通过 REST 访问。身份验证由 API 网关管理。

有没有可能在本地机器上测试那些 REST 微服务(包括身份验证/api 网关逻辑)?是否有可能让 API Gateway 将请求回显到我的本地机器并调用本地运行的微服务?在本地测试 API Gateway 托管身份验证的最佳实践是什么?

谢谢!

amazon-web-services aws-api-gateway

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

如何在 AWS API Gateway 映射模板中设置对象键值

我最近熟悉了 AWS 最奇特的 API 网关映射模板语法,这对我来说并没有多大意义。

我试图阅读文档,至少说https://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-mapping-template-reference.html#util-template-参考

我想做的很简单。我在JSON请求主体,而我想增加额外的现场timeReceived$context.requestTime作为其值。我天真的第一次尝试是#set( $bodyObj.timeReceived = $context.requestTime )行不通的。

我很肯定我会让它工作,但是做这样简单的事情需要时间和精力,IMO 很愚蠢,AWS 应该改进现有的文档。

编辑:我在下面写的解决方案有效,但我主张重新考虑使用 API Gateway。我最近更新了我的应用程序,改为使用 edge lambda 和 CloudFront,这在各方面都是一个更好的解决方案。一些棘手的 lambda 配置无法使用环境变量,因此将 DeliveryStreamName 自动化到代码有点问题(我最终使用带有 Sceptre 的自定义解析器)。但还是好多了。不需要这些愚蠢的黑客 =)。

amazon-web-services aws-api-gateway

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

通过 API GW 调用时,AWS Lambda Go 函数未获取请求正文

首先,有人可能会说这个问题与HTTP request body not getting to AWS lambda function via AWS API GatewayGetting json body in aws Lambda via API gateway非常相似

但是,这些问题都没有解决使用 Golang 的问题,我遇到的问题是找到event与 Node.js 文档中随处使用的参数等效的参数。

这是我的 Lambda 函数:

package main

import (
    "context"
    "encoding/json"
    "github.com/aws/aws-lambda-go/lambda"
    "github.com/aws/aws-lambda-go/events"
    "log"
)

type MyReturn struct {
    Response string `json:"response"`
}

type APIGWResponse struct {
    IsBase64Encoded bool              `json:"isBase64Encoded"`
    StatusCode      int               `json:"statusCode"`
    Headers         map[string]string `json:"headers"`
    Body            string            `json:"body"`
}

func handle(ctx context.Context, name MyReturn) (APIGWResponse, error) {
    log.Print("Called by …
Run Code Online (Sandbox Code Playgroud)

go aws-lambda aws-api-gateway aws-lambda-go

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

使用 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
查看次数