😊
Powertools for AWS (Python) を用いた S3 Trigger のカスタマイズ方法
こんにちは。hayata-yamamoto です。
今回は、Powertools for AWS (Python) を用いて、S3 のイベントトリガーで動く Lambda 関数の提供方法を紹介します。私が思うに、Lambda と S3 はファイルアップロード時に何か処理を非同期で動かしたい時にとても便利で、多くの利用事例があるイメージです。これから、何か実装しようと思ってる方の参考になれば嬉しいです
S3 と Lambda の統合はどのようなもの?
公式によりますと、
Amazon Simple Storage Service からのイベント通知は、Lambda を使用して処理することができます。Amazon S3 は、オブジェクトを作成または削除するときに、イベントを Lambda 関数に送信できます。
具体的な利用シーンは、S3に何かオブジェクトがアップロードされたら処理の処理をかけておく、と言ったシーンでしょうか。クライアントから直接S3にファイルをアップロードするシーンがある場合は、こちらのトリガーがとても便利に使えます。
使い方
さて、このS3トリガーですが、以下のようなシーケンスを想定して動かします。
どのようなシーンで Lambda に変更が通知されるかは以下も合わせて確認するのがお勧めです。
実装例は以下のような感じになります。実際の処理の内容はケースバイケースですが、アップロードされた画像を事前に何か加工したり、外部のAPIを呼び出したりするのが便利そうですね
import re
from urllib.parse import unquote_plus
from aws_lambda_powertools.utilities.data_classes import S3Event, event_source
@event_source(data_class=S3Event)
def handler(event: S3Event, context: dict) -> None:
print(f"{event.raw_event=}")
for message in event.records:
try:
key = unquote_plus(message.s3.get_object.key)
do_something(key)
except Exception as e:
print(e)
おわりに
もしご興味お持ちいただけた方は、ぜひカジュアル面談にお越しくださいませ!
Discussion