我正在尋找從用 Go 撰寫的 Lambda 函式向 SQS 佇列發送訊息,該函式在我已在 AWS 控制臺中配置,以便將 SQS 佇列作為目標連接。

我看到的代碼示例(此處)表明我需要加載 a config、創建 aclient并獲取 a queueURL,然后再通過呼叫SendMsg. 這種方法在本地運行代碼時效果很好,但在 Lambda 中似乎沒有必要,因為我正在控制臺中連接 SQS 佇列。當我已經連接到它作為目標時,是否需要告訴我的 Lambda 找到 queueURL?
順便說一句,我嘗試了這種方法,但在 Lambda 中運行代碼時收到以下錯誤。在本地呼叫 Lambda 之外的代碼會發現 queueURL 沒有問題。
{
"errorMessage": "operation error SQS: GetQueueUrl, https response error StatusCode: 400, RequestID: 2f725471-ec4e-5380-99ed-0f708c1fcfa4, AWS.SimpleQueueService.NonExistentQueue: ",
"errorType": "OperationError"
}
這讓我看到了另一面,我有一個 Lambda 從佇列中消費,因此將 SQS 佇列配置為觸發器。我只需要迭代sqsEvent.Records而不需要指定config,client或者queueURL我認為這是在后臺的控制臺中處理的,即
package main
import (
"context"
"fmt"
"github.com/aws/aws-lambda-go/events"
"github.com/aws/aws-lambda-go/lambda"
)
func handler(ctx context.Context, sqsEvent events.SQSEvent) error {
for _, message := range sqsEvent.Records {
fmt.Printf("The message %s for event source %s = %s \n", message.MessageId, message.EventSource, message.Body)
}
return nil
}
func main() {
lambda.Start(handler)
}
有沒有一種方法可以從 Lambda 內部向佇列發送訊息而無需找到第queueURL一個?
uj5u.com熱心網友回復:
我已配置為將 SQS 佇列作為目標連接。
發送訊息不需要您定義目標本身 - 目標用于傳遞異步 Lambda 函式呼叫結果。基本上 - 如果您沒有明確需要它們(并且您知道什么時候需要),它們將不是您所需要的。
授予您的 Lambda 向佇列發送訊息的權限,并使用SendMessageAWS 開發工具包發送訊息。不需要目的地。
AWS.SimpleQueueService.NonExistentQueue
錯誤訊息表明它沒有找到佇列,可能會仔細檢查您是否在正確的區域中查找。
我只需要遍歷 sqsEvent.Records 而不必指定配置、客戶端或 queueURL,因為我認為這是在后臺控制臺中處理的,即
是的,這是抽象出來的 - 最終,您的 Lambda 函式由事件呼叫,并將 Amazon SQS 設定為觸發器允許它將事件傳遞給您的函式。
有沒有一種方法可以從 Lambda 中向佇列發送訊息,而無需先找到 queueURL?
讓我們把它改寫為 - 有沒有一種方法可以給某人發送一封信而無需找到他們的地址?當然不是,因為我們需要知道這封信需要去哪里。
相同的概念適用于 SQS 佇列。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/480239.html
標籤:亚马逊网络服务 去 aws-lambda 亚马逊广场
