「労働者が自分の仕事をうまくやりたいなら、まず自分の道具を研ぎ澄まさなければなりません。」 - 孔子、「論語。陸霊公」
表紙 > プログラミング > Golang を使用して AWS Lambda で複数のトリガーを処理する方法?

Golang を使用して AWS Lambda で複数のトリガーを処理する方法?

2024 年 11 月 19 日に公開
ブラウズ:894

How to Handle Multiple Triggers in AWS Lambda with Golang?

Golang での AWS Lambda の複数のトリガーのサポート

はじめに

AWS Lambda は、S3 イベントや SQS メッセージなど、さまざまなソースからの関数のトリガーをサポートしています。ただし、Lambda 関数が複数のトリガーに応答する必要がある場合、ジレンマが発生します。

提案されたソリューション

2 つのアプローチを試みました:

最初のアプローチ:

func main() {
    lambda.Start(ProcessIncomingS3Events)
    lambda.Start(ProcessIncomingEvents)
}

最初のトリガー (ProcessIncomingS3Events) が常にすべてのイベントを処理するため、このメソッドは失敗しました。

2 番目のアプローチ:

func main() {
    lambda.Start(ProcessIncomingEvents)
}

このシナリオでは、Lambda はイベント タイプを識別できず、すべてのトリガーで「イベント タイプが見つかりませんでした」エラーが発生しました。

マルチイベント ハンドラーの実装

これらの制限を克服するには、AWS ハンドラー インターフェイスを使用してマルチイベント ハンドラーを実装できます。実装例は次のとおりです。

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{})
}

このアプローチを使用すると、Lambda 関数はさまざまな AWS イベントをリッスンし、それに応じて処理できます。

考慮事項

この方法を使用すると柔軟性が得られますが、Lambda 関数は次のようなものであることに注意してください。単一タイプのイベントを効果的に処理するように設計されています。複数のイベント タイプを混在させると、複雑さとパフォーマンスの問題が発生する可能性があります。

最新のチュートリアル もっと>

免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。

Copyright© 2022 湘ICP备2022001581号-3