AWS CLI S3を使ってみたら最高に便利だった
ウェブ担用の記事かどうかわかりませんが、 ウェブ担であろうとだれであろうと、便利な物は便利で 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 のインストール
公式のドキュメントを見てもらうの手取り早いです。
ざっくりと天順を説明すると
- pipのインストール
curl "https://bootstrap.pypa.io/get-pip.py" -o "get-pip.py"
sudo python get-pip.py
- pipから AWS CLI をインストール。
sudo pip install awscli
インストール以上、おしまいです。
AWS CLI の設定
AWSのAccess Key IDとSecret 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をクラウドファイルサーバー的にも使うことができるようになるのではないかと思っています。 色々と時間の短縮になりそうな気がしています。