我們有一個 AWS API Gateway 端點,其唯一目的是在最終由 Lambda 函式處理的 SQS 主題中創建訊息。所以:
API Gateway Endpoint Handler -> SQS Topic Message -> SQS Lambda Handler
我們希望通過在 SQS Lambda 處理程式中記錄來自 API 網關處理程式的 context.aws_request_id 來開始關聯 API 網關端點處理程式和 Lambda 之間的活動。問題是如何最好地將 API 網關的 aws_request_id 傳遞給 SQS Lambda?
我們有一個解決方案,當我們呼叫 sqs send_message 函式時,我們將 aws_request_id 作為 MessageBody 的一部分傳遞:
msg_body = [some data]
msg_body['aws_request_id'] = context.aws_request_id
response = queue.send_message(MessageBody=msg_body, MessageGroupId=msg_group_id, MessageDeduplicationId=msg_deduplication_id)
最后,在 SQS Lambda 處理程式中,我們可以檢索網關的 request_id:
def my_sqs_handler(event, context):
records = event.get('Records')
for record in records:
log.info('Processing SQS message: %s', record['messageId'])
body = json.loads(record.get('body'))
apigw_request_id = json.loads(record.get('aws_request_id'))
log.info('API Gateway request-id: %s', apigw_request_id)
...
這有效,但似乎并不干凈,因為 request_id 被嵌入到 sqs 訊息正文中。似乎應該有一個更清晰的機制來通過傳遞給 sqs lambda 處理程式的事件或背景關系物件來獲取它。有沒有人設法找到一種在 API 網關處理程式中嵌入額外“事件”或“背景關系”資訊的方法,然后最終由 SQS lambda 處理程式讀取?
謝謝
uj5u.com熱心網友回復:
這幾乎是 REST api 上請求轉換的教科書用例。基本上,您可以將模板轉換應用于傳入的請求,例如,可以向包含標頭值的訊息正文添加一個鍵,以便它們繼續通過 sqs 將其發送到 lambda
有關更多資訊,請參閱https://docs.aws.amazon.com/apigateway/latest/developerguide/rest-api-data-transformations.html
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/329549.html
