【S3】 AmazonLinuxからmarutipart uploadしてみた


s3apiによるs3のマルチパートアップロードを試してみました。

試しにコマンドを打ったところエラーになりました。

$ aws s3api create-multipart-upload –bucket bucket01 –key upload_test
Unable to locate credentials. You can configure credentials by running “aws configure”.

「aws configure」を実行してs3へのアクセス情報を設定しろとの事なので設定しました。

$ aws configure

AWS Access Key ID [None]: XXXXXXXXXXXX
AWS Secret Access Key [None]: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Default region name [None]: ap-northeast-1
Default output format [None]:

改めて下記コマンドを実行します。
$ aws s3api create-multipart-upload –bucket bucket01 –key upload_test

{
    "UploadId": "AkOQcxvFIfo・・・SCoQbm5Y7A-",
    "Bucket": "bucket01",
    "Key": "upload_test"
}

上記コマンドを実行するとjson形式のデータが返ってきます。
この段階ではs3に「マルチパートアップロードしますよ」と伝えただけです。
「–bucket」はアップロード先のバケット名、「–key」はs3とやりとりするときの合言葉なので任意の文字列になります。

UploadIdは毎回打つのが面倒なので環境変数に入れておきましょう。
(UploadIdは長すぎるので省略しています)

$ upload_id=”AkOQcxvFIfo・・・SCoQbm5Y7A-“

ここからが実際のファイルのアップロードになります。
今回は事前に「split」コマンドで分割したファイルをアップロードします。
ファイル名は「upload_file.aa」~「upload_file.af」になります。
「–part-number」は1から順番にカウントアップさせていきます。

$ aws s3api upload-part –bucket bucket01 –key upload_test –upload-id $upload_id –part-number 1 –body “upload_file.aa”

{
    "ETag": "\"c4fb53d06aee2bd562c237df94013e63\""
}

$ aws s3api upload-part –bucket bucket01 –key upload_test –upload-id $upload_id –part-number 2 –body “upload_file.ab”

{
    "ETag": "\"de32f886de2426a22d727aa350c68f95\""
}

$ aws s3api upload-part –bucket bucket01 –key upload_test –upload-id $upload_id –part-number 3 –body “upload_file.ac”

{
    "ETag": "\"9ce6731631a3265b9073d4b5901a5f02\""
}

$ aws s3api upload-part –bucket bucket01 –key upload_test –upload-id $upload_id –part-number 4 –body “upload_file.ad”

{
    "ETag": "\"f336993539d7b4cb36d46312286c3369\""
}

$ aws s3api upload-part –bucket bucket01 –key upload_test –upload-id $upload_id –part-number 5 –body “upload_file.ae”

{
    "ETag": "\"f7c24742e6fd37e8e1d4d374ccc5683c\""
}

$ aws s3api upload-part –bucket bucket01 –key upload_test –upload-id $upload_id –part-number 6 –body “upload_file.af”

{
    "ETag": "\"a0e296ac115bb5ca28596aa961151c01\""
}

上記でs3へのファイルアップロードは完了したのですが、終了処理をしないと分割したファイルが結合されません。
結合するには上記コマンドで返ってきた「Etag」を付与してs3に終了通知をする必要があります。
まずは取得した「ETag」を元にjsonファイルを作成します。

$ vi multipart.json

{
  "Parts": [
    {
      "ETag": "\"c4fb53d06aee2bd562c237df94013e63\"",
      "PartNumber": 1
    },
    {
      "ETag": "\"de32f886de2426a22d727aa350c68f95\"",
      "PartNumber": 2
    },
    {
      "ETag": "\"9ce6731631a3265b9073d4b5901a5f02\"",
      "PartNumber": 3
    },
    {
      "ETag": "\"f336993539d7b4cb36d46312286c3369\"",
      "PartNumber": 4
    },
    {
      "ETag": "\"f7c24742e6fd37e8e1d4d374ccc5683c\"",
      "PartNumber": 5
    },
    {
      "ETag": "\"a0e296ac115bb5ca28596aa961151c01\"",
      "PartNumber": 6
    }
  ]
} 

このファイルを下記コマンドでs3に投げます。

$ aws s3api complete-multipart-upload –bucket bucket01 –key upload_test –upload-id $upload_id –multipart-upload file://multipart.json

{
    "ETag": "\"b3d3bba306dda0bbda437e1086ce3328-6\"",
    "Bucket": "bucket01",
    "Location": "https://bucket01.s3.amazonaws.com/upload_file",
    "Key": "upload_test"
}

これで結合されたファイルがs3に作成されます。
以上、s3apiによるマルチパートアップロードでした。

コメントを残す

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