!!! サイト改修中のため表示が乱れる場合があります(1月末頃まで) !!!
未分類

23-1. AWS S3に大量のファイルをアップロードする方法

やること

筆者は宗教上の都合でAWSに触ることができないのですが、仕事ではそうも言ってられず、S3にファイルをアップするくらいの作業は行います。(なぜそんな宗教に入信したかについてはまたどこかで説明しなければならないと思いますが)

皆さん思うでしょう。「ファイルのアップロードくらいは問題ないだろう」と。

しかしAWSはそんな甘い世界ではありません。もしあなたがそんな甘い考えでAWSに触れようとしているのであれば(自主規制)

今回はS3に大量の画像ファイルをアップロードしてブラウザからアクセスする方法をメモします。

環境

Windows10(64bit版)

何が問題なのか?

ブラウザを開き、AWSのマネジメントコンソールからS3に入ります。

バケットに入ります。初めて使う場合はバケットを作成します。

フォルダやファイルが並んでいます。ここに新しく「result_save」という約1.4GBのフォルダをアップロードしたいと思います。

「アップロード」ボタンから手続きを進めます。このとき「160GBよりも大きいファイルをアップロードするにはCLIを使用します」という注意書きが見えますが、1.4GBなので「次へ」でアップロードを実行します。

画面下部にアップロードの途中経過が表示されます。

さて、結論から言うとアップロードは失敗します。通信環境にもよりますが、速度が10~100KB/sのため「一晩放置しておけば終わるか」と思っていると、なぜかだんだん速度が落ちてきて、朝起きても20%台で油を売っていることがよくあります。あるいはページがクラッシュして失敗しています。

AWSエンジニアの方に泣きついたところ、CLIを使用せよとのこと。何MB以上のファイルでCLIを使用すべきかの基準は分かりませんが、プロがそう言っているのだからそうなのです。

FTPクライアントソフトを使うことも考えましたが、プロがCLIと言うからにはCLIです。AWS関係のトラブルを自分の考えで解決しようとするのはナンセンスです。百戦錬磨のサーバー担当者もボロボロ躓きます。それくらい、AWSはその辺の仮想サーバーとは質的に異なります。AWSエンジニアの言うことには絶対的に従うべきです。

CLIのインストール

正直なところ、CLIが何を意味しているのかはよく分かりません。ただ、理解する必要はありません。AWSには特殊な用語が星の数ほどあって、意味を調べてもキリがないからです。CLIとかIAMとかの略語はもちろん、S3やEC2といったサービス名もすべて固有名称です。

Windows10へのCLIのインストールは次のページのステップ1~3に従います。

の最新バージョンへのインストールまたは更新 AWS CLI - AWS Command Line Interface
AWS CLI システムに をインストールまたは更新する手順。

CLIの設定

手元のPCと遠くにあるS3を紐付けて、ファイルをアップロード可能な状態にします。

次のページの「aws configure を使用したクイック設定」に従います。アクセスキーIDとシークレットアクセスキーの取得方法も載っています。

の設定 AWS CLI - AWS Command Line Interface
が とやり取り AWS CLI するために使用する設定を設定します AWS。

フォルダのアップロード

指定の親フォルダの中身をアップロードします。ここでは「result_save」の中にある5つのフォルダをアップロードします。

Windowsのコマンドプロンプトを開き、対象の親フォルダがある場所に移動します。親フォルダのプロパティからパスをコピーし、cdのあとに貼り付けると楽です。

cd パス

アップロードのコマンドです。親フォルダより下の内容をアップします。バケット内のさらに下の階層にアップしたい場合はそのようにパスを指定すれば良いのではないかと思います。

aws s3 sync result_save/ s3://あなたのバケット名/

通信環境にもよりますが、私の場合は1.4GBが8分程度で完了しました。※追記:120GBだと6時間程度でした。

パブリックアクセスとバケットポリシーの設定

画像ファイルにはURLが割り当てられていますが、このままではブラウザからアクセスできません。URLを叩くとこんな感じ。

アクセス権限>ブロックパブリックアクセスから、すべてのブロックを解除して保存します。

アクセス権限>バケットポリシーから、ポリシージェネレーターに飛びます。

次の内容で「Add Statement」を押し、さらに「Generate Policy」を押します。

記述部分はこんな感じ

arn:aws:s3:::あなたのバケット名/*

生成されたおまじないを先ほどのバケットポリシーエディターに貼って保存します。

こんなおまじないです。

{
  "Id": "Policy1597513933525",
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "Stmt1597513901563",
      "Action": [
        "s3:GetObject"
      ],
      "Effect": "Allow",
      "Resource": "arn:aws:s3:::あなたのバケット名/*",
      "Principal": "*"
    }
  ]
}

これでブラウザからS3上の画像にアクセスできるようになりました。バケット名や配下のフォルダ構造、ファイル名が流出したら誰でもアクセスできる状態ですので、このあたりのアクセス権限の設定は別途がんばってください。

まとめ

「AWSなんて数ある仮想サーバーの一つでしょ」と思っていると痛い目に遭います。AWSはあなたがコツコツと積み上げてきたサーバーの知識やテクニックが通用しない領域です。分からないときは素直にAWSエンジニアにお願いしましょう。

リアクションのお願い

「参考になった!」「刺激された!」と思ったらぜひリアクションをしましょう。エンジニアの世界はGive and Takeによって成り立っています。これからも無料で良質な情報にアクセスできるよう、Giveする人への感謝をリアクションで示しましょう!

この記事をシェアする

自身のブログ等で使用する場合は引用を忘れずに!

また、寄付も受け付けています。コーヒー1杯でとても喜びます(*˘︶˘*)

 Amazonでギフト券(アマギフ)を贈る

こちらのリンク から金額を指定してお贈りください。(デフォルトで10000円になっているのでご変更ください)

配送:Eメール
受取人:staffあっとvigne-cla.com
贈り主:あなたのお名前やニックネーム
メッセージ:◯◯の記事が参考になりました。など

のようにご入力ください。見返りはありませんのでご了承ください。

 Amazonで食事券(すかいらーく優待券)を贈る

500円 1000円 2000円 5000円 からお贈りください。

配送:Eメール
受取人:staffあっとvigne-cla.com
贈り主:あなたのお名前やニックネーム
メッセージ:◯◯の記事が参考になりました。など

のようにご入力ください。見返りはありませんのでご了承ください。

 その他、ギフト券やクーポン券をメールで贈る

デジタルのギフト券/クーポン券はメールアドレス(staffあっとvigne-cla.com)までお送りください。受領の返信をいたします。
紙のギフト券/クーポン券は 「郵便物はこちらへ」の住所 まで送付してください。名刺やメールアドレスを同封していただければ受領の連絡をいたします。
余った株主優待券等の処理におすすめです。
いずれも見返りはありませんのでご了承ください。

不明点はSNSでお気軽にご連絡ください

ビネクラのTwitter・Youtubeでコメントをください!


Slack・Discordの場合はこちらの公開グループに参加してShoya YasudaまでDMをください!


※当ブログに関することは何でもご相談・ご依頼可能です。

この記事を書いた人
Yasuda

博士(理学)。専門は免疫細胞、数理モデル、シミュレーション。米国、中国で研究に携わった。遺伝的アルゴリズム信者。物価上昇のため半額弁当とともに絶滅寸前。

タイトルとURLをコピーしました