日本語キー名を含む S3 オブジェクトで Lambda 関数が動作しない際の対処法
2024.07.08
困っていること
S3 イベント通知をトリガにー Lambda 関数を実行するカスタムソリューションを作成しました。
テスト環境で動作確認したところ、日本語オブジェクトが処理されませんでした。対処法を教えてください
どう対応すればいいの?
Lambda 関数内でオブジェクトのキー名が正しくデコードされているかをご確認ください。
S3 のイベントメッセージから取得できるオブジェクトのキー名は、URL エンコードされています。
例えば、「検証ファイル.txt」は、
「%E6%A4%9C%E8%A8%BC%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB.txt」となります。そのため、Lambda 関数内でキー名を正しくデコードする必要があります。
以下は、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}")
# ここに処理を追加