Linuxサーバ間で、Amazon S3へのアップロードやS3からのダウンロードを行える環境を設定する手順を記載しています。
AWSコマンドラインインターフェースを利用します。
1.構成図
環境としては下記のようになります。
オンプレミス環境(左側)は、CentOSです。別のLinuxでもほぼ同様だと思います。
AWSコマンドラインインターフェース(AWS CLI)をセットアップし、CentOS上のファイルをS3にアップロードします。設定としては、同期(sync)設定にて、日次でスケジュール実行(cron)します。
S3にアップされたファイルは、各EC2インスタンスでダウンロード利用します。なお、EC2インスタンスにはAWS CLI環境はインストール済です。
2.オンプレミス側(CentOS)での作業
オンプレミス側にあたるCentOSで、AWS CLI(コマンドラインインターフェース)環境をセットアップします。
この手順は下記を参照ください。
- CentOS に AWS CLI を「pip install awscli」でインストールする手順
- 「WARNING: The C extension could not be compiled」の対応方法
次は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 $
この仕組みを利用すれば、ちょっとしたバックアップやファイル移動/展開の用途だけではなく、色んな応用ができると思います。