はじめに
大きいサイズのファイルをS3にアップロードする場合は「マルチパートアップロード」を使用しましょう。
スループットの向上や、アップロード失敗時のリカバリが楽(※)になります。
※失敗したときは、失敗した分割ファイルのみをやり直すだけでリカバリできる。
本題
S3バケットを作成する
アップロード用のS3バケットを作成していきます。
S3のコンソールを開きます。
バケットを作成するをクリックします。
バケットの情報を入力します。
- バケット名:グローバルでユニークな名前
他の設定はデフォルトで大丈夫です。
作成をクリックします。
作成できました。
ファイルを分割する
アップロードするファイルを用意します。
今回は約150MBの動画ファイルです。
splitコマンドでファイルをチャンクに分割します。
split -b 40M video.mp4
40MBのファイルに分割されました。
ファイル名はうまい具合にアルファベット順になっています。
マルチパートアップロードを作成する
マルチパートアップロードを作成します。
構文
aws s3api create-multipart-upload --bucket [バケット名] --key [元のファイル名]
実際のコマンド例
aws s3api create-multipart-upload --bucket hhob-s3multipart-final --key video.mp4
※UploadIdは後で使用するのでメモしておきましょう!
分割したファイルをアップロードする
各チャンクをアップロードします。
本来は自動化するべきですが今回は1つずつ手動でアップロードします。
part-numberとbodyの値を適宜変更して実行して下さい。
構文
aws s3api upload-part --bucket [バケット名] --key [元のファイル名] --part-number [連番] --body [チャンクファイル名] --upload-id [id]
実際のコマンド例
aws s3api upload-part --bucket hhob-s3multipart-final --key video.mp4 --part-number 1 --body xaa --upload-id TSt.uq_2SItWDD_v0IxkxwmuhaAPOj6k5AV3PWg3UhyNkoSGSrcO0n2spy1i3LPfQH3GWfjnx6gXWAZrgVK0DwPrgCiGtfpPQdTwtna_LMePU554eKJTjx.H.FJ4ZYSFgu_tbsijTH6keU1_pu._tA--
※part-numberとETagは後で使用するのでメモしておきましょう!
ファイルを 結合する
ファイルを結合するためのjsonファイルを作成します。
nano list.json
jsonの内容
先ほどメモしたpartnumberとETagに置き換えてください。
{ "Parts": [ { "PartNumber": 1, "ETag": "\"70418ed5e552ea21deb8785359e69e28\"" }, { "PartNumber": 2, "ETag": "\"e0c16ead703bfcd1b36b339d9ae1901d\"" }, { "PartNumber": 3, "ETag": "\"56734bc19b453aab5144de4454945609\"" }, { "PartNumber": 4, "ETag": "\"7786233d68592caf07e93521cbd0a80e\"" } ] }
Ctrl + X、Y、Enterで書き込みを終了します。
チャンクを結合します。
構文
aws s3api complete-multipart-upload --multipart-upload [jsonファイルリンク] --bucket [バケット名] --key [オリジナルファイル名] --upload-id [id]
バケット名とUploadIdは適宜置き換えてください。
実際のコマンド例
aws s3api complete-multipart-upload --multipart-upload file://list.json --bucket hhob-s3multipart-final --key video.mp4 --upload-id TSt.uq_2SItWDD_v0IxkxwmuhaAPOj6k5AV3PWg3UhyNkoSGSrcO0n2spy1i3LPfQH3GWfjnx6gXWAZrgVK0DwPrgCiGtfpPQdTwtna_LMePU554eKJTjx.H.FJ4ZYSFgu_tbsijTH6keU1_pu._tA--
実施結果確認
S3のコンソールに戻ります。
最初に作成したバケットのオブジェクト一覧を確認します。
無事アップロードに成功したようです。
以上です。
おわりに
マルチパートアップロードは地味に使用する機会が多いと思います。
チャンクをアップロードする部分などを効率化して活用してみてください!