标签: aws-api-gateway

在API网关端点后面本地测试AWS Lambdas

AWS noob在这里.这是一个"最佳实践发展问题" - 但我会尝试具体:

我知道我可以在节点与输入JSON文件测试lambda表达式本地,但我不知道该"集成测试"我的web应用程序的最佳途径,这将在S3中运行,并调用lambda表达式响应API网关端点调用.

使用我的实际API网关配置文件来让我在本地调用相同的方法并在本地执行我的Lambdas会很棒.本文认为这是不可能的,但因为没有本地API网关测试环境:http://nickmchardy.com/blog/2015/09/my-thoughts-about-aws-api-gateway-working-with-aws-lambda

也许这还不清楚,例如:如果我在API网关中有一个用户/方法,使用GET和POST,它们分别连接到AWS中的listUsers.js和createUser.js Lambdas; 在开发中我想调用:http:// localhost:0000/users GET/POST并让它运行Lambdas并给出正确的响应,这样我就可以在本地运行我的整个架构.

显然,在调用URL的东西不是特别复杂,所以我的问题是更多:什么是这样做的考虑我将我(的Cloudfront!?!?JAWS)配置这些东西如何在AWS链接在一起的最佳实践,可以我完全利用它进行本地测试?

如果这不清楚或非常明显,请道歉!

aws-lambda aws-api-gateway

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

是否可以在AWS API Gateway中使用通配符或catch-all路径

我正在尝试将一个域的所有流量重定向到另一个域.我没有专门为此工作运行服务器,而是尝试使用带有lambda的AWS API Gateway来执行重定向.

我对根路径"/"的工作正常,但是没有处理任何子路径请求,例如/ a.有没有办法定义"catch all"资源或通配符路径处理程序?

aws-api-gateway

13
推荐指数
4
解决办法
1万
查看次数

AWS Cloudfront(使用WAF)+ API网关:如何通过Cloudfront强制访问?

我想把WAF放在API网关的前面,并且我发现只有通过在APIG面前手动添加启用了WAF的额外Cloudfront发行版才能获得(小)信息.这有点遗憾,特别是因为APIG现在本身支持自定义域,但它应该有效.

现在为了使解决方案安全而不仅仅是模糊,我想强制要求只能通过Cloudfront发行版访问API.这样做的最佳选择是什么?

  • 我希望能够使用类似于S3的'Origin Access Identities',但不知道如何做到这一点.
  • 如果我可以将一个IAM用户(或角色?)分配给Cloudfront发行版,我可以使用API​​G IAM功能,但我不知道如何做到这一点.
  • 我可能需要在APIG中使用API​​密钥,并将其作为来自Cloudfront的Origin Custom Header传递.这可能有用,只要我们不想将API密钥用于其他目的,所以我对此并不完全满意.
  • 可以使用虚拟(!)自定义授权程序,令牌验证表达式实际检查从Cloudfront作为Origin自定义标头传递的秘密.应该工作,它更灵活,但有点脏......或不?

有更好的想法吗?或者也许"正确的方式"存在,但我忽略了它?

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

13
推荐指数
1
解决办法
4691
查看次数

即使在向API网关发送响应后,AWS Lambda也会在后台运行

我已经搜索了整个网络,但没有找到如何使此功能获得成功的解决方案.需要帮助.

我的要求是:如果我触发一个用node.js编写的aws lambda函数并且使用aws-serverless-express模块​​必须快速将响应发送回API网关但我仍然不应该退出并仍然在后端运行我想要一个可以看到云监视日志.它必须是异步的.

代码段是:

    app.get('/check', function(req, res){
     method.invoke(req)
     res.status(200).send('success')
   })
Run Code Online (Sandbox Code Playgroud)

我做了这样的检查,但是lambda函数被停止并返回对api网关的响应,它甚至没有在后端运行method.invoke()函数.

如果我理解或做错了,请纠正我.我查看了此链接:调用AWS Lambda并异步返回API网关响应

这是解决这个问题的唯一方法吗?创建两个lambda函数.

node.js aws-lambda aws-api-gateway

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

AWS Api网关授权程序+ Cognito用户池无法正常工作{"message":"Unauthorized"}

我正在尝试使用带有cognito用户池的aws api网关授权程序.当我使用aws api网关控制台进行测试时,它工作正常.

但是,当我尝试在api中启用授权时,"message": "Unauthorized".请检查下面的屏幕截图

API网关控制台截图 - 这很好用 在此输入图像描述

邮差屏幕截图 - 不工作 在此输入图像描述

请有人帮忙吗.

仅供参考我遵循这里提到的说明http://docs.aws.amazon.com/apigateway/latest/developerguide/apigateway-integrate-with-cognito.html

amazon-web-services aws-api-gateway aws-cognito

13
推荐指数
5
解决办法
6257
查看次数

CloudFront背后的API网关是否不支持AWS_IAM身份验证?

似乎无法调用通过CloudFront分配启用AWS_IAM保护的REST API.

以下是如何重现这个:

  • 使用API​​网关创建REST API
  • 使用AWS_IAM身份验证保护REST API方法
  • 创建面向REST API的CloudFront分配
  • 在Route 53中创建一个以CloudFront Distribution为目标的A Record

现在使用经过身份验证的用户(我使用Cognito UserPool用户和aws-amplify)来调用

  1. 受保护的REST API方法及其API网关URL = SUCCESS
  2. 受保护的REST API方法通过CloudFront分发URL = FAILURE
  3. 受保护的REST API方法通过Route 53域URL = FAILURE

我得到的错误是:

{"message":"我们计算的请求签名与您提供的签名不匹配.请检查您的AWS秘密访问密钥和签名方法.有关详细信息,请参阅服务文档."}

我无法相信AWS不支持自定义域后面的AWS_IAM受保护端点,因为这必须是一个非常常见的用例.

因此,请您提供一份如何实现这一目标的详细清单?

谢谢

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

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

有没有办法在没有 VPC 的情况下将静态 IP 分配给 AWS Lambda?

我希望为通过 API 网关调用的 Lambda 分配一个静态 IP。这是必需的,因为我从此 lambda 调用的下游系统仅接受来自白名单 IP 的 Web 请求。

我通过与我的 lambda 关联的 VPC 成功地实现了这一点。但是 VPC 引入了一个糟糕的冷启动时间,有时范围为 12-16 秒。所以我正在寻找一种方法来防止这种从 VPC 冷启动,但同时为 lambda 分配一个静态 IP。

cold-start amazon-web-services amazon-vpc aws-lambda aws-api-gateway

13
推荐指数
3
解决办法
1万
查看次数

如何使用 terraform 在 AWS 上启用 CORS

我正在尝试在我的 aws 项目上启用 CORS,该项目由API GatewayLambda功能组成。我正在使用GETOPTIONS方法创建一个 API 网关。 OPTIONS旨在成为根据 aws文档启用 CORS 的模拟端点。有一个 lambda 函数 ( aws_lambda_function.app_lambda) 由方法调用GET,并且在响应标头中具有:

"Access-Control-Allow-Origin": "*",
"Access-Control-Allow-Headers": "Content-Type",
"Access-Control-Allow-Methods": "OPTIONS,POST,GET"
Run Code Online (Sandbox Code Playgroud)

但我仍然无法通过 CORS。

resource "aws_api_gateway_rest_api" "rest_api" {
  name        = "appAPIGateway"
  description = "App App App"
}

resource "aws_api_gateway_resource" "rest_api_resource" {
  depends_on = ["aws_api_gateway_rest_api.rest_api"]
  rest_api_id = "${aws_api_gateway_rest_api.rest_api.id}"
  parent_id = "${aws_api_gateway_rest_api.rest_api.root_resource_id}"
  path_part = "playground"
}

resource "aws_api_gateway_method" "opt" {
  rest_api_id   = "${aws_api_gateway_rest_api.rest_api.id}"
  resource_id   = "${aws_api_gateway_resource.rest_api_resource.id}"
  http_method   = …
Run Code Online (Sandbox Code Playgroud)

amazon-web-services cors terraform aws-api-gateway

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

用于在 AWS API Gateway 上列出 API 的 AWS v1 与 v2 API 对于同一 API Gateway 实例返回不同的数据

我希望使用 REST API 列出我的 AWS API Gateway 实例上可用的 API。我试过:

我对这两个调用使用相同的身份验证凭据。

两者均响应 200 OK。

  • v1 使用我的 API 返回正确的数据
  • v2 返回空响应 ( {"items": []} )
  • AWS-CLI v2 命令aws apigateway get-rest-apis返回正确的数据

知道为什么 v2 REST API 返回空响应吗?

amazon-web-services aws-api-gateway aws-rest-api

13
推荐指数
1
解决办法
1万
查看次数

如何通过CloudFormation授予API Gateway调用lambda函数的权限?

我一直在网上寻找答案.

基本上,我们使用Swagger来启动一个API,它非常棒并且运行良好,但有一件事不起作用......当我们调用一个端点时,我们得到一个500错误(它不是500错误,我们提供的是AWS的一个.该错误指出"由于配置错误导致执行失败:对Lambda函数的权限无效"(https://youtu.be/H4LM_jw5zzs < - 这是来自其他用户的视频,我收到的错误).

我已经走了很多路,并找到了答案......它涉及使用AWS CLI,看起来有点像这样:

aws lambda add-permission \
--function-name FUNCTION_NAME \
--statement-id STATEMENT_ID \
--action lambda:InvokeFunction \
--principal apigateway.amazonaws.com \
--source-arn "arn:aws:execute-api:us-east-1:ACCOUNT_ID:API_ID/*/METHOD/ENDPOINT"
Run Code Online (Sandbox Code Playgroud)

这很棒,但我们正在使用CloudFormation来启动所有内容,我们希望这是自动化的.有没有更简单的方法来解决这个问题?CloudFormation中是否有某些内容可以为我们提供所需的资源政策?

我正在尝试这个问题,但是我今天已经开始工作了几个小时,这对我们的API版本来说有点阻碍,所以任何帮助都会非常感激.:)

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

12
推荐指数
3
解决办法
1万
查看次数