」工欲善其事,必先利其器。「—孔子《論語.錄靈公》
首頁 > 程式設計 > 如何使用 Golang 處理 AWS Lambda 中的多個觸發器?

如何使用 Golang 處理 AWS Lambda 中的多個觸發器?

發佈於2024-11-19
瀏覽:928

How to Handle Multiple Triggers in AWS Lambda with Golang?

在Golang 中支援AWS Lambda 的多個觸發器

在Golang 中支援AWS Lambda 的多個觸發器

簡介

AWS Lambda 支援來自各種來源的觸發函數,包括S3 事件和SQS 訊息。但是,當您需要 Lambda 函數來回應多個觸發器時,就會出現困境。

建議的解決方案

您嘗試了兩種方法:

第一個方法:
func main() {
    lambda.Start(ProcessIncomingS3Events)
    lambda.Start(ProcessIncomingEvents)
}

func main() { lambda.Start(ProcessIncomingS3Events) lambda.Start(進程傳入事件) }

此方法失敗,因為第一個觸發器 (ProcessIncomingS3Events) 總是會處理所有事件。

第二種方法:
func main() {
    lambda.Start(ProcessIncomingS3Events)
    lambda.Start(ProcessIncomingEvents)
}

func main( ){ lambda.Start(進程傳入事件) }

在這種情況下,Lambda 無法識別事件類型,導致所有觸發器出現「無法找到事件類型」錯誤。

多事件處理程序實作

type Handler struct {
    // Define global variables or context information
}

func (h Handler) Invoke(ctx context.Context, data []byte) ([]byte, error) {
    // Unmarshal the data based on different event types

    var apiGatewayEvent events.APIGatewayProxyRequest
    if err := json.Unmarshal(data, &apiGatewayEvent); err == nil {
        // Handle API Gateway event
    }

    var snsEvent events.SNSEvent
    if err := json.Unmarshal(data, &snsEvent); err == nil {
        // Handle SNS event
    }

    return nil, nil
}

func main() {
    lambda.StartHandler(Handler{})
}

type Handler struct { // 定義全域變數或上下文訊息 } func (h Handler) Invoke(ctx context.Context, data []byte) ([]byte, error) { // 根據不同的事件類型對資料進行解組 var apiGatewayEvent events.APIGatewayProxyRequest if err := json.Unmarshal(data, &apiGatewayEvent);錯誤==零{ // 處理API網關事件 } var snsEvent events.SNSEvent if err := json.Unmarshal(data, &snsEvent);錯誤==零{ // 處理SNS事件 } 返回零,零 } 函數主() { lambda.StartHandler(處理程序{}) }

透過此方法,您的 Lambda 函數可以偵聽各種 AWS 事件並相應地處理它們。

注意事項

雖然使用此方法提供了靈活性,但請記住 Lambda 函數旨在有效地處理單一類型的事件。混合多種事件類型可能會帶來複雜性和效能問題。 How to Handle Multiple Triggers in AWS Lambda with Golang?

最新教學 更多>

免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。

Copyright© 2022 湘ICP备2022001581号-3