ECのウェブ担当者のメモ

ECサイトを運営管理している、WEB担当プログラマのメモ

スポンサーリンク

AWS CLI S3を使ってみたら最高に便利だった

f:id:jun9632:20151028020034p:plain

ウェブ担用の記事かどうかわかりませんが、 ウェブ担であろうとだれであろうと、便利な物は便利で AWSのS3を使っているなら、是非、コマンドラインツール AWS CLIを使うことも検討してもらいたいです。

何が便利なのか?

AWS CLI S3の何が便利なのかといえば、ファイル系の操作が格段に早くなります。 特にコピー。

原因としては、S3用の無料で使えるクライアンツールが無いのがいけないんだと思います。 唯一、Cyberduck が使えるけど、ファイル数が増えてくると、動きが遅くなって、 あまり使い物にならなくなってしまいます。

Cyberduck | Libre FTP, SFTP, WebDAV, S3 & OpenStack Swift browser for Mac and Windows

だから、AWS CLI が便利に感じるんです。

AWS CLI のインストール

公式のドキュメントを見てもらうの手取り早いです。

docs.aws.amazon.com

ざっくりと天順を説明すると

  1. pipのインストール

curl "https://bootstrap.pypa.io/get-pip.py" -o "get-pip.py"

sudo python get-pip.py

  1. pipから AWS CLI をインストール。

sudo pip install awscli

インストール以上、おしまいです。

AWS CLI の設定

AWSのAccess Key IDSecret Access Keyを設定します。

コマンドラインから設定が可能です。

$aws configure

以下を対話型に聞かれるので、入力しながら進めていきます。

AWS Access Key ID [None]: xxxxxxxxxxxxxxxx
AWS Secret Access Key [None]: xxxxxxxxxxxxxxxxxxxxxxx
Default region name [None]: ap-northeast-1 (東京(自分のリージョンを指定する))
Default output format [None]: json

これまでで、設定が完了します。

実際に使ってみる

ファイルの一覧表示

ls コマンドを使います。

公式ドキュメントはこちら

ls — AWS CLI 1.9.0 Command Reference

バケットの確認

もっとも基本コマンドで、バケットの一覧が取得できます。

aws s3 ls

ファイルの確認

特定のバケットやディレクトリ配下のファイルを確認することができる。

aws s3 ls s3://mybucket
aws s3 ls s3://mybucket/foo

ファイルのコピー

S3とローカル または、S3からS3でファイルをコピーすることができます。

cp コマンドを使います。

公式ドキュメントはこちら

cp — AWS CLI 1.9.1 Command Reference

Local => S3 (アップロード)

ローカルから、S3にファイルをコピーする方法です。

ローカルのtest.txtを S3のmybucket/配下に、test2.txtのファイル名でアップロードします。

aws s3 cp test.txt s3://mybucket/test2.txt

S3 => ローカル (ダウンロード)

S3からローカルにファイルをダウンロードする方法です。

S3のmybucket/配下のtest.txtをローカルに、test2.txtのファイル名でダウンロードします。

aws s3 cp test.txt s3://mybucket/test2.txt

S3 => S3 (S3内でコピー)

S3内でファイルをコピーする方法です。

mybucket/配下のtest.txtをtest2.txtのファイル名でコピーする方法です。

aws s3 cp s3://mybucket/test.txt s3://mybucket/test2.txt

基本的にはパスが変わるだけで、ローカル、S3内をやりとりすることができます。

移動

S3とローカル または、S3からS3でファイルを移動することができます。

*mv コマンドを使います。

公式ドキュメントはこちら

mv — AWS CLI 1.9.1 Command Reference

基本的には、cpをmvにすれば、コピーか移動かの違いになります。 説明は割愛します。

ディレクトリの同期

S3とローカル または、S3からS3でフォルダの同期をとることができます。

sync コマンドを使います。

公式ドキュメントはこちら

sync — AWS CLI 1.9.1 Command Reference

cp mv同様にfrom toの同期したいディレクトリのパスを設定すれば同期することができます

Local => S3

aws s3 sync . s3://mybucket

S3 => Local

aws s3 sync s3://mybucket .

S3 => S3

aws s3 sync s3://mybucket1 s3://mybucket2

オプション

--dryrun

テストの確認できます。結果ログが表示されるけど、実際に同期は行われない。

aws s3 sync . s3://mybucket --dryrun

--acl

権限を指定して、同期をとることができる

aws s3 sync . s3://mybucket --acl public-read

--include

同期対象のファイルを指定可能

aws s3 sync . s3://mybucket --include "*.jpg" --include "*.png"

--exclude

同期除外対象のファイルを指定可能

aws s3 sync . s3://mybucket --exclude "*/*"

--delete

削除したファイルも同期する。 同期元のファイルで削除したファイルを同期先でも削除したい場合に設定する。

aws s3 sync . s3://mybucket --delete

まとめ

主に使いそうな、コマンドのみを記述していますが、 他にもオプションやらが沢山あるので、ドキュメントも参考にしてください。

普段の使いどころとしては、バックアップ系のファイルコピーやサーバーのログファイルの移動などに使われるんじゃないかと思います。 その時には、当然のようにコマンド実行することになると思うのですが、

今回使ってみて、S3内での大量ファイルのコピーの時などにも最高に威力を発揮します。

はたまた、syncコマンドを使えば、S3をクラウドファイルサーバー的にも使うことができるようになるのではないかと思っています。 色々と時間の短縮になりそうな気がしています。