【Lambda】s3フォルダのアップロードをトリガーにする際にフォルダ名が日本語だった時の対処法

s3の特定フォルダ内へのファイルアップロードをLambdaにしたい!

だけどフォルダ名が日本語なのでうまくいかないんだ。

そんなことが起きたので今回は対処法を説明します。

解決方法

今回の場合、フォルダ名が日本語だとトリガーにできません。

そのため解決をするには2つの方法があります。

  1. フォルダ名の変更
  2. utf-8エンコードをする

この二つになります。

  1. フォルダ名の変更
    上記に関しては一つ懸念点があります。
    何かしらフォルダ名に依存しているプログラムなどがあればすべて修正する必要が出てきます。
    今回、僕の場合には依存プログラムがあったので方法2を試すようにします。

utf-8って?エンコードって?

utf-8とは

まず、僕たちがコンピュータに入力している文字と、コンピュータ自体が解釈している文字というのは違います。

一旦人間後を翻訳してコンピュータの言葉に変えるわけです。

コンピュータは0と1しか理解できません。なので、人が入力した文字を数字に当てはめてあげるわけです。

参考サイト↓
UTF-8とは

あ:00000001
い:00000010
う:00000011
え:00000100
お:00000101

例えばこんな感じの対応表があります。

「あ」と入力した際には、コンピュータ側では「00000001」と認識してくださいね。ということです。

こんな対応表が何種類かあってそのうちの一つがutf-8になります。

おおまかにいうとそんな感じです。

utf-8エンコードとは

まず、エンコードとはデータを他の形に変えることです。

翻訳みたいなイメージです。

英語の映画を日本語吹き替え版で見るのもそんなイメージでしょう。

意味は変えずに、形を変えるということ。

吹き替え版映画は日本語エンコードみたいな言い方になるんですかね?w

ということでutf-8エンコードとは、入力した文字をutf-8の対応表を通じてutf-8の形に変換する事を指します。

エンコードとは

utf-8エンコードして解決してみる

さて、エンコードと文字コードが分かった上で問題を解決しましょう。

この場合日本語名が対応していないのが原因だそうです。

今回はクラスメソッドさんの記事を参考にさせていただきました。

[小ネタ] 日本語のS3オブジェクトをLambdaのトリガーに設定してみた

なぜトリガーを日本語に設定できないかというと、オブジェクトURLを確認してみるとわかります。

トリガーにしたい対象のフォルダ内のファイルを選択して、URLをコピーを選択。

すると↓こんな感じのURLが出てきます。

https://spm-master-date.s3-ap-northeast-1.amazonaws.com/upload-test/%E8%B2%A9%E5%A3%B2%E7%8E%8B/test.txt

upload-testの配下のフォルダが変な感じになっていますね。

これは本来「販売王」っていうフォルダ名なんですが、日本語なんでutf-8エンコードされているようです。

ということはトリガーにする際に設定するプリフィックスをutf-8エンコードした状態で入力してみましょう。

こんなサイトを使ってエンコードをしてもOKでしょう↓

utf-8エンコード サイト

ほかにも先ほどのように対象フォルダ内のファイルを選択して、「URLをコピー」して、utf-8エンコードされた状態のプレフィックスを入力してみて下さい。

すると、うまく動くはずです。

まとめ

初めはフォルダ名を変更するしかないと思っていました。

しかし、調べてみると意外と別の解決方法もあったので良かったです。

解決方法はひとつではないのでそれしかないと決めつけないで、いろいろベストに近い解決方法を探す必要があると感じました。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA