我目前有一个Web钩子,它正在调用AWS API Gateway - > AWS Lambda函数代理.我想让网络钩子更具响应性,并在继续处理Lambda时返回早期回复.
我继续从Lambda(Node v6.10)做了这个早期回复,但似乎没有提高响应能力.尽管已经有来自回调的响应,API网关是否在某种程度上等待Lambda完成执行?
另一个想法是从Lambda发布SNS通知并进行第二次Lambda侦听并继续处理,但如果有更简单的方法,则宁愿避免这种复杂化.
我将在AWS上构建微服务架构,我想请你澄清我的疑虑.
我目前的一般概念
我想使用API网关,它公开了在Elastic Beanstalk中运行的微服务API.我想将Elastic Beanstalk放在VPC中,而无需从Internet直接访问其实例.
问题和怀疑:
amazon-web-services amazon-elastic-beanstalk microservices aws-api-gateway
我需要使用aws cognito userpool授权我的API端点.我可以手动完成,但我需要使用无服务器框架自动化授权部分.
无服务器框架是否支持aws cognito?
如果是这样,我们如何设置无服务器的aws-userpool?
amazon-web-services amazon-cognito aws-lambda aws-api-gateway serverless-framework
这里的蓝图说,API网关将与401回应:未经授权.
我raise Exception('Unauthorized')在lambda中写了同样的内容,并且可以从Lambda Console中测试它.但是在POSTMAN中,我正在接收500
身体状态:
{
message: null`
}
Run Code Online (Sandbox Code Playgroud)
我想添加自定义错误消息,如"无效签名","TokenExpired"等,任何文档或指导将不胜感激.
我写了这段代码,但是我收到了一个错误.我怎么去上班?但同样的道理也适用于邮递员.
错误:
{"message":"The security token included in the request is invalid."}
Run Code Online (Sandbox Code Playgroud)
代码:
public class test extends AppCompatActivity {
private final AWS4Signer signer = new AWS4Signer();
Request<?> aws;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.test);
AWSCredentials credentials = new BasicAWSCredentials("AccessKey", "SecretKey");
aws = generateBasicRequest();
signer.setServiceName("execute-api");
signer.sign(aws, credentials);
new get_aws().execute();
}
private Request<?> generateBasicRequest() {
Request<?> request = new DefaultRequest<Void>("execute-api");
request.addHeader("Content-type", "application/json");
String securityToken = "Session Token";
request.addHeader("X-Amz-Security-Token", securityToken);
request.addHeader("Host", "********.amazonaws.com");
request.addHeader("x-amz-archive-description", "test test");
request.setResourcePath("/");
request.setEndpoint(URI.create("https://******.execute-api.****.amazonaws.com/data/all"));
return request;
}
private class …Run Code Online (Sandbox Code Playgroud) 我为没有身份验证的公共端点设置了AWS API网关。它连接到触发Lambda的WebSocket。
我正在通过https://pypi.org/project/websocket_client/与Python的websocket-clientlib 建立连接。
我注意到连接将在大约10%的时间内失败,并且随着负载的增加而变得更糟。正如我的常规API网关设置所说,我找不到任何让我感到烦恼的地方Your current account level throttling rate is 10000 requests per second with a burst of 5000 requests.。除此之外,每秒只有2-3个请求经常会触发问题。
同时失败响应会像 {u'message': u'Forbidden', u'connectionId': u'Z2Jp-dR5vHcCJkg=', u'requestId': u'Z2JqAEJRvHcFzvg='}
我进入了CloudWatch日志洞察,并搜索了连接ID和请求ID。API网关的日志组将找不到任何一个ID的结果。但是,在我的Lambda上进行搜索(在websocket connect上触发)时,将带有该连接ID的日志。日志显示一切正常运行。lambda只是运行一个将触发的MySQL查询。
尽管lambda可以按预期工作,但为什么我会得到禁止的响应?
获取消息时存在的问题:禁止从AWS API网关回复,似乎可以解决某些私有端点是否始终返回禁止的问题。我的用例没有任何内容。
更新
我认为这可能与locust.io或python有关,而我正在每秒使用python进行连接。我在我的机器上安装了https://www.npmjs.com/package/wscat,并反复尽可能快地连接和关闭。我没有收到Forbidden消息。由于我不确定我的连接方式在某些时候会随机向您吐出一条Forbidden消息,因此这更加令人困惑。
class SocketClient(object):
def __init__(self, host):
self.host = host
self.session_id = uuid4().hex
def connect(self):
self.ws = websocket.WebSocket()
self.ws.settimeout(10)
self.ws.connect(self.host)
events.quitting += self.on_close
data = self.attach_session({}) …Run Code Online (Sandbox Code Playgroud) 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链接在一起的最佳实践,可以我完全利用它进行本地测试?
如果这不清楚或非常明显,请道歉!
我正在尝试将一个域的所有流量重定向到另一个域.我没有专门为此工作运行服务器,而是尝试使用带有lambda的AWS API Gateway来执行重定向.
我对根路径"/"的工作正常,但是没有处理任何子路径请求,例如/ a.有没有办法定义"catch all"资源或通配符路径处理程序?
我正在尝试使用带有cognito用户池的aws api网关授权程序.当我使用aws api网关控制台进行测试时,它工作正常.
但是,当我尝试在api中启用授权时,"message": "Unauthorized".请检查下面的屏幕截图
请有人帮忙吗.
仅供参考我遵循这里提到的说明http://docs.aws.amazon.com/apigateway/latest/developerguide/apigateway-integrate-with-cognito.html
似乎无法调用通过CloudFront分配启用AWS_IAM保护的REST API.
以下是如何重现这个:
现在使用经过身份验证的用户(我使用Cognito UserPool用户和aws-amplify)来调用
我得到的错误是:
{"message":"我们计算的请求签名与您提供的签名不匹配.请检查您的AWS秘密访问密钥和签名方法.有关详细信息,请参阅服务文档."}
我无法相信AWS不支持自定义域后面的AWS_IAM受保护端点,因为这必须是一个非常常见的用例.
因此,请您提供一份如何实现这一目标的详细清单?
谢谢
amazon-cloudfront amazon-cognito aws-sdk aws-api-gateway aws-amplify
aws-api-gateway ×10
aws-lambda ×4
android ×1
aws-amplify ×1
aws-cognito ×1
aws-sdk ×1
locust ×1
python ×1
websocket ×1