日本語キー名を含む S3 オブジェクトで Lambda 関数が動作しない際の対処法

日本語キー名を含む S3 オブジェクトで Lambda 関数が動作しない際の対処法

Clock Icon2024.07.08

困っていること

S3 イベント通知をトリガにー Lambda 関数を実行するカスタムソリューションを作成しました。
テスト環境で動作確認したところ、日本語オブジェクトが処理されませんでした。対処法を教えてください

どう対応すればいいの?

Lambda 関数内でオブジェクトのキー名が正しくデコードされているかをご確認ください。

https://docs.aws.amazon.com/ja_jp/AmazonS3/latest/userguide/notification-content-structure.html

S3 のイベントメッセージから取得できるオブジェクトのキー名は、URL エンコードされています。
例えば、「検証ファイル.txt」は、
「%E6%A4%9C%E8%A8%BC%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB.txt」となります。そのため、Lambda 関数内でキー名を正しくデコードする必要があります。

無題

https://docs.aws.amazon.com/ja_jp/lambda/latest/dg/with-s3-example.html#with-s3-example-deploy-code

以下は、Python の urllib を使用してキー名をデコードする例です。

import urllib.parse

def lambda_handler(event, context):
    key = urllib.parse.unquote_plus(event['Records'][0]['s3']['object']['key'], encoding='utf-8')
    print(f"Decoded key: {key}")
    # ここに処理を追加

参考資料

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.