AWS (Amazon Web Service) にある Amazon S3 (Amazon Simple Strage Service) を使用することで、自身のハードディスクに保存するよりも故障や破損からデータを保護することができます。
Amazon S3 というサービスは、リージョン (東京、アメリカなど) 内で最低3箇所以上の拠点にアップロードされたデータの複製を保存しており、耐久性が99.999999999%、可用性が99.99% (1年間で)、という保証があります。また、容量は無制限となっています。
50TBまでは、1GBあたり月$0.025となります。大体100GBで月額272円、1TBで月額2,780円 (2017/04/16 現在) くらいです。
私は家族写真を預けており、パソコンが壊れたとき用のバックアップに使用しており普段は使用しないため圧縮して費用を下げています。
事前準備
まずは、AWSのアカウントを作成しておきます。アカウントは AWSトップページ 右上にある「まずは無料で始める」というボタンから会員登録を行います。
アカウントの登録については、今回は説明しませんが英語自体は難しくなく、公式サイトのAWS アカウントの作成の流れや他のサイトでも説明されているページはたくさんありますので難しくはないでしょう。ただし、アカウントを作成する際に、クレジットカードの登録が必要となりますのでご用意しておいてください。
バックアップデータを保存するバケットを作成しよう
Amazon S3 にバックアップデータを保存するためのbucket (バケット) と呼ばれる領域を作成します。
このバケットに対してファイルをアップロードすることで、データを保存することができます。バケットにはフォルダ (厳密にはフォルダではありません。) も作成できますので1つのバケットに動画や画像などフォルダ分けして保存できます。
ではバケットを作成してみます。
まずは、AWS マネージメントコンソールへサインインしてAmazon S3のページへ移動します。
こちらのログインページはスーパーユーザーのログインページになります。できるだけスーパーユーザーではなく、IAMユーザーを作成して使用することをおすすめします。
IAMユーザーは制限ユーザーになりますので、使用できるサービスや機能に制限を設けることができ、不用意にサービスを起動させたり、停止させたりすることを制限できます。これにより、予期せぬ課金や自サービスの停止を防ぐことができます。
Amazon S3 のページへ移動したら「バケットを作成する」ボタンをクリックしてください。
バケット名を指定します。バケット名は小文字の英字、数字および一部の記号 (-, .
) が使用できます。ただし、このバケット名は世界で唯一な名前でないといけないということです。
次にリージョンを指定します。リージョンは「アジアパシフィック (東京)」を指定します。ここは日本国内でなくてもよければ他のリージョンでも構いません。リージョンによって料金が多少異なります。
プロパティでは、無効にしたい機能があれば指定します。
アクセス許可の設定では、ユーザーやグループ単位で作成するバケットのアクセス権を設定することができます。
確認では、作成するバケットの情報を確認し、問題なければ「バケットを作成」ボタンをクリックします。
以上で、新しくバケットが作成されました。
バックアップデータを Amazon S3 へアップロードする IAM ユーザーを作成しよう
バックアップを行う IAM ユーザーを作成します。ここで作成したユーザーを使用してパソコンから Amazon S3 へデータをアップロードしたり、ダウンロードしたりします。
ユーザー名とアクセス方法を指定します。今回のユーザーはコマンドで操作をし、AWS の Web ページへはログインしないため、「プログラムによるアクセス」にチェックを入れ、「AWS マネージメントコンソールへのアクセス」にはチェックを入れません。
作成する IAM ユーザーの権限を設定します。
今回はポリシーはAmazonS3FullAccess
を使用します。ただし、このポリシーは Amazon S3 に対してなんでもできてしまうため、実際には制限を掛けたポリシーを使用したほうが良いです。
確認ではユーザー名、AWS アクセスの種類やアクセス権限 (ポリシー) を確認します。
「ユーザーの作成」をクリックするとユーザーが作成されます。
完了画面が表示されればユーザーの作成は完了です。
気をつけていただきたいのは、ここでシークレットアクセスキーを控えるか、ユーザーのセキュリティ情報 (CSV) を必ずダウンロードしておいてください。Secret access key
は、再表示および再発行はされません。Secret access key
を紛失した場合は、アカウントを削除して再度作成する必要があります。
ダウンロードしたファイルの中身は以下のようになっています。
1 2 |
User name,Password,Access key ID,Secret access key,Console login link codebookshelf-sync-user,,BKIAJNPY57ACO4CDOJAQ,ooBxFfPqqY0WXVUVwF6Ji39cciNtu466Ug0gfgd4,https://<XXXX名>.signin.aws.amazon.com/console |
- User name
- 作成したユーザー名
- Password
- ユーザーのパスワード (空になっていると思います。)
- Access key ID
- Amazon S3 へアップロードする際に使用するキーの1つ目
- Secret access key
- Amazon S3 へアップロードする際に使用するキーの2つ目
- Console login link
- 作成したユーザーでログインするためのURL
Amazon S3 へアップロードするためのツールをインストールしょう
パソコンから Amazon S3 へアップロードするためには専用のツールを使用して行います。
まずは AWS のサイトから Amazon CLI (AWS コマンドラインインターフェース) をダウンロードします。
AWS のサイト右側に Windows、 Mac および Linux で別れていますので、お使いの環境にあったものをダウンロードしてください。
今回は、Windows バージョンのインストールを行います。
基本的に次へをクリックしていくだけでインストールは完了します。
以上で Amazon CLI のインストールは終了です。正常に終了したか確認するために、aws --version
コマンドを実行します。
バージョン情報が返ってくれば正常にインストールが完了しています。
1 2 |
E:\codebookshelf\sync-sample>aws --version aws-cli/1.11.76 Python/2.7.9 Windows/8 botocore/1.5.39 |
以下のようなメッセージが返ってくる場合は正しくインストールされていませんので、再度インストールを行ってみてください。
1 2 3 |
E:\codebookshelf\sync-sample>aws --version 'aws' は、内部コマンドまたは外部コマンド、 操作可能なプログラムまたはバッチ ファイルとして認識されていません。 |
アップロードするための情報を設定しよう
Amazon CLI で Amazon S3 へアップロードするための設定を行います。設定はaws configure
というコマンドで行います。
--profile
というオプションを使用することで、複数の設定 (例えばこのパソコンで異なるユーザーを操作する場合など) を持つことができます。
1 2 3 4 5 6 7 |
E:\codebookshelf\sync-sample>aws configure --profile codebookshelf-sync-sample AWS Access Key ID [None]: BKIAJNPY57ACO4CDOJAQ AWS Secret Access Key [None]: ooBxFfPqqY0WXVUVwF6Ji39cciNtu466Ug0gfgd4 Default region name [None]: ap-northeast-1 Default output format [None]: json E:\codebookshelf\sync-sample> |
- AWS Access Key ID
- ユーザーを作成した際にダウンロードしたCSVファイルの
Access Key ID
の値 - AWS Secret Access Key
- ユーザーを作成した際にダウンロードしたCSVファイルの
Secret Access Key
の値 - Default region name
- アップロードするリージョンを指定 (
ap-northeast-1
はアジアパシフィック(東京)になります) - Default output format
- 出力するフォーマットを指定 (今回は
json
形式で出力)
設定が完了したら、aws s3 ls
というコマンドを実行し、作成したバケット名が返ってくれば設定に問題はありません。
aws configure
で--profile
を使用した場合は、指定してください。
1 2 3 4 |
E:\codebookshelf\sync-sample> aws s3 ls --profile codebookshelf-sync-sample 2017-04-15 22:34:52 codebookshelf-sync-sample E:\codebookshelf\sync-sample> |
aws configure
で--profile
を使用したにも関わらず、指定しないと以下のようなエラーが発生します。
1 2 3 4 |
E:\codebookshelf\sync-sample>aws s3 ls s3://codebookshelf-sync-sample/ Unable to locate credentials. You can configure credentials by running "aws configure". E:\codebookshelf\sync-sample> |
Amazon S3 へアップロードしよう
パソコンにのみにあるファイルの場合
aws s3 sync
コマンドを使用することで S3 へアップロードしてくれます。
書式は、aws s3 sync </path/to/backup/> s3://<bucket name>/ [--profle <PROFILE NAME>]
となります。
- /path/to/backup/
- アップロードするローカルのディレクトリを指定します。
- s3://<bucket name>/
- 作成したバケット名を指定します。
- –profle <PROFILE NAME>
- 必要があればプロファイルを指定します。
ローカルの状態を確認します。
1 2 3 4 5 6 7 8 9 10 11 12 13 |
E:\codebookshelf\sync-sample>dir ドライブ E のボリューム ラベルは ボリューム です ボリューム シリアル番号は D4D5-AB84 です E:\codebookshelf\sync-sample のディレクトリ 2017/04/15 23:14 <DIR> . 2017/04/15 23:14 <DIR> .. 2017/04/15 23:14 22 sample-file01.txt 1 個のファイル 22 バイト 2 個のディレクトリ 881,615,364,096 バイトの空き領域 E:\codebookshelf\sync-sample> |
aws s3 sync
コマンドを使用して S3 へアップロードします。
1 2 3 4 |
E:\codebookshelf\sync-sample>aws s3 sync E:\codebookshelf\sync-sample\ s3://codebookshelf-sync-sample/ --profile codebookshelf-sync-sample upload: .\sample-file01.txt to s3://codebookshelf-sync-sample/sample-file01.txt E:\codebookshelf\sync-sample> |
アップロードされたかaws s3 ls
コマンドで確認します。
1 2 3 4 5 |
E:\codebookshelf\sync-sample>aws s3 ls s3://codebookshelf-sync-sample/ --profile codebookshelf-sync-sample E:\ProgramFiles\Amazon\AWSCLI\.\dateutil\parser.py:605: UnicodeWarning: Unicode equal comparison failed to convert both arguments to Unicode - interpreting them as being unequal 2017-04-15 23:25:31 22 sample-file01.txt E:\codebookshelf\sync-sample> |
パソコンから削除されたファイル
S3 の状態をaws s3 ls
コマンドで確認します。
1 2 3 4 5 6 |
E:\codebookshelf\sync-sample>aws s3 ls s3://codebookshelf-sync-sample/ --profile codebookshelf-sync-sample E:\ProgramFiles\Amazon\AWSCLI\.\dateutil\parser.py:605: UnicodeWarning: Unicode equal comparison failed to convert both arguments to Unicode - interpreting them as being unequal 2017-04-15 23:25:31 22 sample-file01.txt 2017-04-15 23:29:19 46 sample-file02.txt E:\codebookshelf\sync-sample> |
ローカルの状態を確認します。
1 2 3 4 5 6 7 8 9 10 11 12 13 |
E:\codebookshelf\sync-sample>dir ドライブ E のボリューム ラベルは ボリューム です ボリューム シリアル番号は D4D5-AB84 です E:\codebookshelf\sync-sample のディレクトリ 2017/04/15 23:14 <DIR> . 2017/04/15 23:14 <DIR> .. 2017/04/15 23:14 22 sample-file01.txt 1 個のファイル 22 バイト 2 個のディレクトリ 881,615,364,096 バイトの空き領域 E:\codebookshelf\sync-sample> |
aws s3 sync
コマンドを実行します。
コマンドコマンドコマンドコマンドコマンドコマンドコマンドコマンドコマンドコマンドコマンド
以上より通常のaws s3 sync
コマンドでは S3 にのみあるファイルは何も変化はありません。
S3 にあるファイルをローカルの状態とまったく同じにする (S3 のみにあるファイルは削除する) 場合は、パラメーター--delete
を指定します。
1 2 3 4 5 6 7 8 9 10 11 |
E:\codebookshelf\sync-sample>aws s3 sync --delete E:\codebookshelf\sync-sample\ s3://codebookshelf-sync-sample/ --profile codebookshelf-sync-sample E:\ProgramFiles\Amazon\AWSCLI\.\dateutil\parser.py:605: UnicodeWarning: Unicode equal comparison failed to convert both arguments to Unicode - interpreting them as being unequal delete: s3://codebookshelf-sync-sample/sample-file02.txt E:\codebookshelf\sync-sample> E:\codebookshelf\sync-sample>aws s3 ls s3://codebookshelf-sync-sample/ --profile codebookshelf-sync-sample E:\ProgramFiles\Amazon\AWSCLI\.\dateutil\parser.py:605: UnicodeWarning: Unicode equal comparison failed to convert both arguments to Unicode - interpreting them as being unequal 2017-04-15 23:25:31 22 sample-file01.txt E:\codebookshelf\sync-sample> |
Amazon S3 からダウンロードしよう
aws s3 sync
の引数を逆にすれば、S3 にアップロードしたデータをローカルにダウンロードできます。
書式は、aws s3 sync s3://<bucket name>/ </path/to/backup/> [--profle <PROFILE NAME>]
となります。
- s3://<bucket name>/
- ダウンロードするバケット名を指定します。
- /path/to/backup/
- ダウンロードするローカルのディレクトリを指定します。
- –profle <PROFILE NAME>
- 必要があればプロファイルを指定します。