标签: aws-api-gateway

如何从 AWS API Gateway 获取 url 参数并将它们输入到 lambda 中

我已经设置了我的 API 网关并将它连接到我的 lambda 函数

我将 url 设置为 {id} 并希望将此参数传递给 lambda,

然而,即使在使用默认模板和自定义模板尝试多个集成请求后,lambda 仍然无法检测到 api 网关(id)中传递的参数

我试过将 id 分配给我的节点 js lambda 函数中的不同参数,将其映射到 path.params.id 和其他变量,甚至尝试了字符串查询,但仍然没有在 lambda 中检测到任何想法?

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

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

AWS API Gateway“不支持的方法\”未定义\“”作为响应

我正在设置一个 AWS Lambda 函数来连接到我的 DynamoDB。为了访问它,我还设置了一个 API 网关。

当我测试它时,lambda 似乎工作。因此,我认为问题出在 API 网关设置中。

API网关设置

对于 lambda,我配置了以下测试事件:我配置了一个如下所示的测试事件:

{
  "httpMethod": "GET"
}
Run Code Online (Sandbox Code Playgroud)

此测试事件给了我以下响应:

Response:
{
  "statusCode": "200",
  "body": "{\"Items\":[{\"id\":1,\"brand\":\"Test brand\",\"title\":\"Test product\"}],\"Count\":1,\"ScannedCount\":1}",
  "headers": {
    "Content-Type": "application/json"
  }
}
Run Code Online (Sandbox Code Playgroud)

对于 API 网关,我尝试了以下测试: API网关测试

我尝试在 lambda 管理控制台中自动创建 API 网关。重新创建 lambda 和 API 网关。

拉姆达函数:

console.log('Loading function');

const doc = require('dynamodb-doc');

const dynamo = new doc.DynamoDB();


/**
 * Demonstrates a simple HTTP endpoint using API Gateway. You have full
 * access to the request and response payload, including headers and …
Run Code Online (Sandbox Code Playgroud)

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

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

从 CLI 的现有 apigateway 克隆 AWS apigateway API

我必须创建许多 AWS apigateway api。所有 api 都将使用 Lambda 函数进行调用。这些新的 api 还将包括以下常见步骤。

  • API 类型为区域和 REST API
  • 添加 POST 方法
  • 方法执行设置
  • 调用类型=Lambda 函数,并选择相应的 Lambda 函数。
  • CORS 设置
  • Lambda 权限
  • 积分响应设置
  • 部署 API
  • 在 API 使用计划中包含阶段
  • 重新部署 API

这是 apigateway 克隆 API 概要。

SYNOPSIS
            create-rest-api
          --name <value>
          [--description <value>]
          [--clone-from <value>]
          [--binary-media-types <value>]
          [--minimum-compression-size <value>]
          [--api-key-source <value>]
          [--endpoint-configuration <value>]
          [--policy <value>]
          [--api-version <value>]
          [--cli-input-json <value>]
          [--generate-cli-skeleton <value>]
Run Code Online (Sandbox Code Playgroud)

如何从 CLI 的现有 apigateway API 克隆 apigateway API 并避免执行上述所有重复步骤。

amazon-web-services aws-api-gateway

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

S3 网站可以访问 API 网关私有端点吗?

我有一个用例,其中将有一个网站托管在 AWS S3存储桶上,
S3 网站将调用 API以获取要呈现的数据。

在 AWS 无服务架构的情况下,我们通常在 AWS Lambda 函数前面有一个 API 网关来处理和返回所需的数据。

AWS 去年推出了 API Gateway Private Endpoints - https://aws.amazon.com/blogs/compute/introducing-amazon-api-gateway-private-endpoints/

私有 API 网关将可以通过 VPC 端点访问,
我想知道S3 存储桶是否使用私有 API 网关端点来内部访问数据
或者位于 VPC 之外的 S3 需要面向公共的 API 网关端点?

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

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

AWS API 网关 HTTP 请求拦截器

我找不到有关拦截所有通过 AWS API Gateway 传递的 HTTP 请求的文档。

我正在尝试为部署在 AWS API Gateway 上的后端 API 提出日志记录服务。这个想法是所有的 HTTP 请求都将通过 API 网关。如果我能够拦截通过 API Gateway 的请求,我就可以挂钩日志服务代码。

这种方法的原因是,日志代码将独立于实际的服务代码,并且服务代码不必更新以包括请求/响应的日志记录。

对此有任何解决方案吗?

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

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

异步 Lambda 代理集成

我正在尝试从 AWS API Gateway 异步调用 AWS Lambda 函数。

我有一个长时间运行(2-3 分钟)的 Lambda 函数,我想从 HTTP Post 请求异步调用这个 Lambda 函数。我将 API 网关配置为 Lambda 代理集成(因为我想将未修改的主体传递给函数)这工作正常,但 30 秒后,由于 API 网关执行时间限制,我得到 504。

但是我无法调用异步函数。根据AWS docs,如果我设置haeder“X-Amz-Invocation-Type”应该是可能的,但这没有任何区别。

有人知道是否可以异步调用函数并使用代理集成?

java aws-lambda aws-api-gateway

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

Terraform:如何从对象列表创建 API 网关端点和方法?

我想创建一个 terraform (v0.12+) 模块,该模块输出一个带有 Lambda 集成的 AWS API 网关。我不太明白如何(或者甚至可能)遍历映射列表以动态输出资源。

用户应该能够像这样实例化模块:

module "api_gateway" {
  source = "./apig"

  endpoints = [
    {
      path = "example1"
      method = "GET"
      lambda = "some.lambda.reference"
    },
    {
      path = "example1"
      method = "POST"
      lambda = "some.lambda.reference"
    },
    {
      path = "example2"
      method = "GET"
      lambda = "another.lambda.reference"
    }
  ]
}
Run Code Online (Sandbox Code Playgroud)

endpoints界面上,我想输出三个资源:

  1. aws_api_gateway_resource哪里path_part = endpoint[i].path
  2. aws_api_gateway_method哪里http_method = endpoint[i].method
  3. aws_api_gateway_integration,需要一个参考 endpoint[i].lambda,等

Terraform 的for_each属性似乎不足以处理这个问题。我知道 Terraform 也支持 …

terraform aws-api-gateway terraform-provider-aws

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

使用 boto3 创建 aws lambda 集成 api 网关资源

正如标题所示,我试图用一种方法创建一个资源,该方法用boto3python 库触发 lambda 函数。

我在做以下事情。

首先,我创建资源

new_endpoint_response = aws_apigateway.create_resource(
        restApiId = 'xxxxxxxx',
        parentId = 'xxxxxxxx',
        pathPart = event['Configure']
    )
Run Code Online (Sandbox Code Playgroud)

然后,post方法

put_method_response = aws_apigateway.put_method(
        restApiId = 'xxxxxxxxxxx',
        resourceId = new_endpoint_response['id'],
        httpMethod = 'POST',
        authorizationType = 'NONE'
    )
Run Code Online (Sandbox Code Playgroud)

最后,将 lambda 函数分配给该方法

aws_apigateway.put_integration(
        restApiId = 'xxxxxxxxxx',
        resourceId = new_endpoint_response['id'],
        httpMethod = 'POST', 
        integrationHttpMethod = 'POST',
        type = 'AWS',
        uri = 'LAMBDA ARN'
    )
Run Code Online (Sandbox Code Playgroud)

这是我遇到一些问题的地方。当我尝试做最后一步时,我总是得到

An error occurred (BadRequestException) when calling the PutIntegration operation: AWS ARN for integration must contain path or …

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

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

有没有办法通过API网关发送大文件?

我正在开发将从用户接收文件然后上传到 Amazon S3 的应用程序。使用 API Gateway 访问应用程序。服务 API 网关对 WebSocket 和 REST API 的负载大小有限制。有什么方法可以通过 API Gateway 从 Internet 访问我的服务?

在此处输入图片说明

在此处输入图片说明

amazon-web-services aws-api-gateway

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

使用 AWS Amplify 和 Android 通过 Cognito 对 REST API 进行身份验证

我目前正在尝试配置我使用 AWS Amplify 添加的 REST API。我已经配置了用户身份验证,用户可以按照身份验证文档中概述的步骤注册和登录。然后我使用api 步骤添加了一个 REST API 。

目前,我只是想从 DynamoDB 中检索项目列表。当我在 aws 控制台上测试 api 时它是成功的,但是,当我从我的 android api 进行调用时,它返回以下错误:

{"message":"Authorization header requires 'Credential' parameter. Authorization header requires 'Signature' parameter. Authorization header requires 'SignedHeaders' parameter. Authorization header requires existence of either a 'X-Amz-Date' or a 'Date' header. Authorization=[a long string of characters]
Run Code Online (Sandbox Code Playgroud)

我知道放大会使用 AWS_IAM 自动将 API 设置为受限,我认为这就是返回上述消息的原因。我正在尝试使用我之前通过身份验证步骤设置的用户池对其进行身份验证。我的 android 应用程序中调用 API 的代码如下:

{"message":"Authorization header requires 'Credential' parameter. Authorization header requires 'Signature' parameter. Authorization header requires 'SignedHeaders' parameter. …
Run Code Online (Sandbox Code Playgroud)

android amazon-cognito aws-api-gateway aws-amplify aws-amplify-sdk-android

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