1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【Lambda】S3イベント通知におけるオブジェクトキーのエンコードに関する注意点と解決策

Last updated at Posted at 2024-03-14

背景

AWSを使用している開発者にとって、S3のイベント通知を処理するLambda関数は一般的なユースケースです。

しかし、オブジェクトキーに半角スペースが含まれている場合、S3はこれをプラス記号にエンコードして通知を送信します。
このエンコードにより、Lambda関数にはエンコード後のオブジェクトキー名が渡され、開発者が予期しない問題に直面する可能性があります。

例えば、S3のイベント通知で起動するLambda関数で、イベントデータからオブジェクトキーを取得し、何らかの処理をするとします。
Lambdaにはエンコード後のキー名が渡されるので、開発者はオブジェクトキーを適切に処理することができず、期待しない動作が発生する可能性があります。
(S3から当該キーのダウンロードに失敗する、など)

解決策

この問題を解決するためには、オブジェクトキーをLambda関数内で適切にデコードする必要があります。

Pythonの場合、urllib.parse.unquote_plus関数を使用して、エンコードされたオブジェクトキーをデコードすることができます。
このメソッドを使用することで、プラス記号が半角スペースに変換されます。

以下は、解決策の実装例です。

lamder_handler.py
import urllib.parse

def lambda_handler(event, context):
    # オブジェクトキーを取得
    object_key = event['Records'][0]['s3']['object']['key']

    # URLエンコードされたオブジェクトキーをデコード
    decoded_object_key = urllib.parse.unquote_plus(object_key)

    print(decoded_object_key)

    # ここに他の処理を追加する

    return {
        'statusCode': 200,
        'body': decoded_object_key
    }

参考資料

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?