CONTENTS
AWS s3からのフォルダごとの一括ダウンロード&アップロード
AWS s3にアップしている大量の画像ファイルを一括ダウンロードする必要があった。管理コンソールからでは一括操作ができないため、コマンドで行なうAWS CLIを使用することに。AWS CLIはかなり前に他でも使用してたんだけど、何となくわざわざ設定しなおすのもなぁー、と思っていたところ、案外すんなりいったので、メモとして残します。
2016年5月時点、AWSのマネージメントコンソールから、AWS s3の一括ダウンロード、アップロードはできないため、AWS CLIを使用するかアプリなどを使用するしか方法はないようです。
AWS CLIのユーザーアカウントの権限設定
AWSのIAMユーザーの設定
aws cliを使用する前に今回のs3を操作するための専用アカウントを管理コンソールから作成。
画面右上の認証情報からIAMユーザーの使用開始をクリック。
作成完了時に表示される
「AWS Access Key ID」
「AWS Secret Access Key」
の2つは後ほど使用するので、
ダウンロードして、忘れないようにメモしておいてください。
それと作成後に左メニューから「ユーザー」→「アクセス許可」から
「Amazon s3 Full Access」をアタッチしておくのもお忘れなく。
AWS CLIのインストール
AWSの管理コンソールではフォルダ(バケット)単位での操作ができないため、
aws cliでの操作を行う必要があります。
AWS コマンドラインインターフェイス (CLI) は、AWS サービスを管理するための統合ツールです。ダウンロードおよび設定用の単一のツールのみを使用して、コマンドラインから複数の AWS サービスを制御し、スクリプトを使用してこれらを自動化することができます。
引用元:aws amazon webservices cli
windowsへaws cliのインストール
自分のMBAでは容量が足らないため、会社のwindowsデスクトップPCで操作を行うことに。
まずはwindows8のPCへaws cliのインストールを行う。
以下AWSページからwindows版の64ビットインストーラ―をダウンロードし、特別な設定もなくインストール
http://docs.aws.amazon.com/ja_jp/cli/latest/userguide/installing.html#install-msi-on-windows
aws cliの初期設定
インストール完了後、コマンドプロンプトから初期設定を行う。たったの4行。
aws configure AWS Access Key ID [None]:********** AWS Secret Access Key []:********** Default region name []:ap-northeast-1 Default output format []:JSON
ここまでは順調。
次に対象のバケットのリスト表示
aws s3 ls s3://バケット名/
ここまでも問題なし。
UnicodeWarningが出て、振り出しへ
次に実際にバケットのダウンロードをしようとしたところ、下記エラーが表示され、ダウンロードができない事態に!
ユニコードが合わないエラーが出る。
下記でダウンロードを行なおうと、
cd ダウンロードしたいフォルダ aws s3 cp s3://バケット名/a.txt .
としたところ、下記エラーが表示され、実行されず。
UnicodeWarning: Unicode equal comparison failed to convert both arguments to Unicode - interpreting them as being unequal
ということで今回は原因究明もあまり時間がなく、何かのバージョンの問題だろうと勝手に決めつけ、python経由でインストールをすることに。
pythonの最新版3.5.1をインストール
以下ページからpythonの最新版を落として、
python経由でインストールをすることに。
https://www.python.org/downloads/
特に問題なくインストール完了。
完了後、コマンドプロンプトにて。
pip install awscli
AWS s3のコマンドでのダウンロードとアップロード
s3のバケットから、ローカルへダウンロード
aws s3 cp s3://バケット名/ . --recursive
ローカルから、s3のバケットへアップロード
aws s3 cp フォルダ名 s3://バケット名/バケット名/ --recursive --acl public-read --cache-control "max-age=604800"
いつも思うのだけれど、recursive=再帰的 という言葉は普段使わないので、未だに慣れない。。。
AWS s3のコマンドオプション
オプションの説明は以下
--recursive 再帰的。。。フォルダ以下のファイル全部 --acl public-read 全体に閲覧権限。これがないと表示されないので、WEBの場合は必須。 --cache-control "max-age=604800" キャッシュコントロール。とりあえず7日間。
AWSの管理コンソールからだと、フォルダ(バケット)毎の操作ができないため、aws cliでの操作が必要という話しでした。