Pocket

Linuxサーバ間でAWS S3へのアップロードやダウンロードを行う方法

  • add this entry to hatena bookmark

Linuxサーバ間で、Amazon S3へのアップロードやS3からのダウンロードを行える環境を設定する手順を記載しています。

AWSコマンドラインインターフェースを利用します。

1.構成図

環境としては下記のようになります。

s3-linux-file-manage

オンプレミス環境(左側)は、CentOSです。別のLinuxでもほぼ同様だと思います。

AWSコマンドラインインターフェース(AWS CLI)をセットアップし、CentOS上のファイルをS3にアップロードします。設定としては、同期(sync)設定にて、日次でスケジュール実行(cron)します。

S3にアップされたファイルは、各EC2インスタンスでダウンロード利用します。なお、EC2インスタンスにはAWS CLI環境はインストール済です。

2.オンプレミス側(CentOS)での作業

オンプレミス側にあたるCentOSで、AWS CLI(コマンドラインインターフェース)環境をセットアップします。

この手順は下記を参照ください。

次はAmazon S3側での作業を行います。

3.Amazon S3でファイル配置場所を用意

Amazon S3 で、まずはバケット(Bucket)を用意します。作業はとても簡単で、S3のコンソール画面(Web)から「Create Bucket」するだけです。バケット名は全世界で一意な名前になるように、会社名などを織り交ぜると良いかと思います。

作成したバケットの中に、管理しやすくするために必要に応じてフォルダー(Folder)も作成しておくと良いかと思います。「Create Folder」するだけです。

4.CentOSからS3へファイルのアップロード

CentOSから、以下のコマンドで、S3上のフォルダの中を確認できます。

$ aws s3 ls s3://バケット名/フォルダ名/

S3上のバケット名とフォルダ名を指定した際の出力例は以下のようになります。

$ aws s3 ls s3://web-fanbright/
                           PRE images/
$ aws s3 ls s3://web-fanbright/images/
2015-04-14 17:56:08          0
$

 

それでは、作成したS3上のフォルダに、ローカルフォルダにあるファイルをアップロードします。

なお、アップロードは「sync」コマンドを使って、ローカルフォルダと同期する形にしたいと思います。

$ aws s3 ls s3://web-fanbright/images/
2015-04-14 17:56:08          0
$ ls -1 test_folder/
fanbright.jpg
fanbright.png
$ aws s3 sync test_folder/ s3://web-fanbright/images/
upload: test_folder/fanbright.png to s3://web-fanbright/images/fanbright.png
upload: test_folder/fanbright.jpg to s3://web-fanbright/images/fanbright.jpg
$ aws s3 ls s3://web-fanbright/images/
2015-04-14 17:56:08          0
2015-04-14 18:04:53       9845 fanbright.jpg
2015-04-14 18:04:53       1776 fanbright.png
$

上記は、S3上のフォルダが空である事を確認後に、「aws s3 sync」コマンドで、ローカルフォルダ「test_folder」の中身をS3にアップロード(同期)しています。

なお、単純にコピーする場合は「sync」の代わりに「cp」を使います。

定期的にローカルフォルダの中身が更新される場合は、cronを使えば簡単にS3との同期を実行できます。
日次で午前3時に同期を行う場合は、crontabコマンドで下記のように設定します。

00 03 * * * /usr/bin/aws s3 sync /(絶対パス)/test_folder s3://web-fanbright/images > /dev/null 2>&1

オンプレミス環境のLinuxから、S3にファイルをアップロードする設定は以上です。

 

5.S3からファイルをダウンロード

次は、S3にアップロードされているファイルをダウンロードします。

EC2を使う場合は、AWS CLI環境はインストール済ですので、「aws configure」で設定するだけで使えるようになります。

EC2ではなく、AWS CLI環境のインストールから必要な場合は、「2.オンプレミス側(CentOS)での作業」と同様の設定作業をします。

S3からローカルフォルダー「localfolder」にダウンロードする場合のコマンドは下記になります。

$ ls -1 localfolder/
$ aws s3 sync s3://web-fanbright/images/ localfolder
download: s3://web-fanbright/images/fanbright.jpg to localfolder/fanbright.jpg
download: s3://web-fanbright/images/fanbright.png to localfolder/fanbright.png
$ ls -1 localfolder/
fanbright.jpg
fanbright.png
$

 

この仕組みを利用すれば、ちょっとしたバックアップやファイル移動/展開の用途だけではなく、色んな応用ができると思います。

Pocket

コメントを残す

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


*

チェックサイト RSS Feed読者登録はいかがでしょうか?RSS配信中です。