AWS Lambda は、S3 イベントや SQS メッセージなど、さまざまなソースからの関数のトリガーをサポートしています。ただし、Lambda 関数が複数のトリガーに応答する必要がある場合、ジレンマが発生します。
2 つのアプローチを試みました:
最初のアプローチ:
<code class="go">func main() { lambda.Start(ProcessIncomingS3Events) lambda.Start(ProcessIncomingEvents) }</code>
最初のトリガー (ProcessIncomingS3Events) が常にすべてのイベントを処理するため、このメソッドは失敗しました。
2 番目のアプローチ:
<code class="go">func main() { lambda.Start(ProcessIncomingEvents) }</code>
このシナリオでは、Lambda はイベント タイプを識別できず、すべてのトリガーで「イベント タイプが見つかりませんでした」エラーが発生しました。
これらの制限を克服するには、 AWS ハンドラー インターフェイスを使用してマルチイベント ハンドラーを実装できます。サンプル実装は次のとおりです。
<code class="go">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{}) }</code>
このアプローチを使用すると、Lambda 関数はさまざまな AWS イベントをリッスンし、それに応じて処理できます。
このメソッドを使用する際、次のことが可能になります。柔軟性に優れているため、Lambda 関数は単一タイプのイベントを効果的に処理するように設計されていることに注意してください。複数のイベント タイプを混在させると、複雑さとパフォーマンスの問題が発生する可能性があります。
以上がGolang を使用して AWS Lambda で複数のトリガーを処理する方法?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。