[英]AWS API Gateway custom URL parameter?
使用 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>
一種解決方法是在 websocket API 前使用 CloudFront 分配,並通過 CloudFront 分配提供請求。 這意味着可以為將通過 CloudFront dist 提供服務的 websocket API 創建自定義域名。 CloudFront dist 的起源是 websocket API 端點
Lambda@Edge 函數可以在 'Origin Request' 事件上觸發,該函數可以從 URL 中剝離硬件 ID,並將其作為 queryString 或 header 等傳遞給 websocket API。 websocket API 的后端可以訪問 queryString/header 並最終從傳入的事件數據中獲取硬件 ID
注意:將域名映射到 CloudFront dist 需要 DNS 記錄(CNAME)
示例 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);
};
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.