使用Web套接字设置API网关我希望嵌入式硬件客户端对此Web套接字(也称为WebSocket URL)进行报告。遗憾的是,此客户端已预先配置,并将其“ ID”添加为URL的一部分(请参见下面的示例)。
有什么方法可以提取ID并在连续处理中对其进行管理?我需要URL来标识我的不同客户并做出适当的响应。
WebSocket URL:wss://12dxxxxx.execute-api.eu-central-1.amazonaws.com/dev/<THIS_IS_THE_ID_OF_MY_EMBEDDED_HARDWARE>
答案 0 :(得分:1)
一种解决方法是在websocket API之前使用CloudFront分发,然后通过CloudFront分发处理请求。意味着可以为将通过CloudFront dist提供服务的websocket API创建自定义域名。 CloudFront dist的来源将是websocket API端点
Lambda @ Edge函数可以在“原始请求”事件上触发,并且该函数可以从URL中剥离硬件ID,并将其作为queryString或标头等传递给websocket API。 websocket API的后端可以访问queryString / header并最终从传入的事件数据中获取硬件ID
注意:需要DNS记录(CNAME)才能将域名映射到CloudFront dist
下面的示例L @ E nodeJs代码:
'use strict';
exports.handler = (event, context, callback) => {
console.log(event)
const request = event.Records[0].cf.request;
var hardwareId = request.uri.substr(1);
request.origin = {
custom: {
domainName: 'xxxxxxxxxx.execute-api.us-east-1.amazonaws.com',
port: 443,
protocol: 'https',
path: '/dev',
sslProtocols: ['TLSv1', 'TLSv1.1','TLSv1.2'],
readTimeout: 60,
keepaliveTimeout: 5,
customHeaders: {}
}
};
request.uri = '/';
request.querystring = 'hardwareId='+hardwareId;
callback(null, request);
};