データ保護の基礎:Amazon S3 バケットのバックアップ方法
Amazon S3 は、Amazon Web Services (AWS) が提供する信頼性の高いクラウドストレージです。ファイルは、Amazon S3 バケット内にオブジェクトとして保存されます。Amazon S3 はその高い信頼性から、データのバックアップ保存に広く利用されています。冗長データが 1 つのアベイラビリティゾーンに保存される Amazon Elastic Block Storage (EBS) とは異なり、Amazon S3 では冗長データが複数のアベイラビリティゾーンに分散して保存されます。
あるアベイラビリティゾーンのデータセンターが利用できなくなった場合でも、別のゾーンのデータにアクセスすることができます。人為的ミスやソフトウェアの障害によるデータ損失を防ぐため、Amazon S3 バケットに保存されたデータをバックアップする必要がある場合があります。S3 バケットへのアクセス権を持つユーザーがデータを削除したり、不要な変更を書き込んでデータを破損させたりすると、データが削除されたり破損したりする可能性があります。ソフトウェアの障害も同様の結果を引き起こす可能性があります。
Amazon S3 バージョニング
オブジェクトのバージョニングは、Amazon S3 の有効な機能であり、バケット内のデータを破損、不要な変更、削除から保護することができます。ファイルが変更されると(S3 でオブジェクトとして保存されている場合)、オブジェクトの新しいバージョンが作成されます。同じオブジェクトの複数のバージョンがバケットに保存されます。以前のバージョンのオブジェクトにアクセスして復元することができます。オブジェクトが削除されると、”削除マーカー”がオブジェクトに適用されますが、削除前のバージョンを復元することができます。Amazon S3 バージョニングは、追加の S3 バックアップ ソフトウェアを使用せずに利用可能です。
ライフサイクルポリシーを使用して、S3 バケットにバージョンをどのくらいの期間保存するかを定義することで、Amazon S3 バックアップの形式を取得できます。追加のバージョンを保存するための追加コストは、ライフサイクルポリシーを適切に設定すれば、高くならないはずであり、新しいバージョンは最も古いものを置き換えます。古いバージョンは削除するか、より費用対効果の高いストレージ(たとえば、コールドストレージ)に移動してコストを最適化できます。
AWS S3 バージョニングを有効にする方法
適切な権限を持つアカウントを使用して AWS マネジメントコンソールにサインインします。Services をクリックし、S3 ストレージ カテゴリのを選択してください。
ナビゲーションペインで Buckets をクリックし、バージョニングを有効にしたい必要な S3 バケットを選択します。この例では、名前が blog-bucket01 のバケットを選択します。バケット名をクリックしてバケット詳細を開きます。
選択したバケットの Properties タブを開きます。
バケットバージョニング セクションでEditをクリックします。
デフォルトでは、バケットバージョニングは無効になっています。
Enable をクリックして、バケットバージョニングをオンにします。
Save Changes をクリックします。
ライフサイクルルールを更新する必要があるかもしれないことを指摘するヒントが表示されます。これは次のステップです。
構成変更が適用された場合、ページの上部にメッセージが表示されます: バケットバージョニングの編集に成功しました 。
ライフサイクルルール
Amazon S3 バージョニングのライフサイクルルールを設定するには、選択したバケットのページ上の Management タブに移動します。 ライフサイクルルール セクションでCreate lifecycle ruleをクリックします。
ライフサイクルルールの作成 ページが開きます。
Lifecycle Rule configuration。ライフサイクルルール名を入力してください。例えば、 ブログライフサイクル01 。
ルールの範囲を選択します。ライフサイクルルールを特定のオブジェクトに適用するようにフィルターを適用するか、もしくはバケット内のすべてのオブジェクトにルールを適用することができます。 オブジェクトタグを定義して、ライフサイクルアクションを適用すべきオブジェクトを示します。適切なフィールドにキーと値を入力し、タグを追加するにはAdd tagボタンを、削除するにはRemoveボタンをクリックします。
Lifecycle rule actions. この規則で実行したいアクションを選択してください:
- 現在のバージョン間のストレージクラス間の遷移 オブジェクト
- 以前の オブジェクト のバージョンがストレージクラス間で遷移される
- 現在の バージョンのオブジェクトをの期限切れにする
- 以前のバージョンを永久に 削除します
- 期限切れの削除マーカーまたは未完成のマルチパートアップロードを削除
Transition noncurrent versions of objects between storage classes。
ストレージクラスの遷移と、オブジェクトが非現在になるまでの日数を選択します。
私の例では、オブジェクトは現在のS3ストレージクラスからスタンダード-IAに35日後に移動されます。
Permanently delete previous versions of objects。
以前のバージョンを削除するまでの日数を入力してください。この値は、オブジェクトが非現在になる日数よりも高くなければなりません。私の例では、 40日後にオブジェクトが永久に削除されます。
ライフサイクル規則を作成するためにCreate Ruleをクリックしてください。
バケットのレプリケーション
Amazon S3の自動バックアップの代わりとして、バケットを地域間でレプリケートすることができます。別地域のデスティネーションバケットとして二つ目のバケットを作成し、レプリケーション規則を作成する必要があります。レプリケーション規則を作成した後、ソースバケットで行われたすべての変更が自動的にデスティネーションバケットに反映されます。
Replication rules セクションを、ソースバケットの管理タブで見つけ、Create replication ruleをクリックしてください。
レプリケーション規則作成ページが開きます。
レプリケーション規則の名前を入力してください。たとえば、ブログS3バケットレプリケーション。
規則が作成されたときの規則状態を定義します (enabled または disabled)。
ソースバケット。ソースバケットは既に選択されています ( ブログバケット01 )。
規則の適用範囲を選択してください。バケット内のすべてのオブジェクトにレプリケーション規則を使用することも、フィルタを設定してカスタムオブジェクトに規則を適用することもできます。
デスティネーション。デスティネーションバケット名を入力するか、Browse S3をクリックしてリストからバケットを選択します。このアカウント内または別のアカウント内のバケットを選択できます。AWS S3バージョニングがソースバケットで有効化されている場合、デスティネーションバケットでもオブジェクトバージョニングを有効化する必要があります。選択されたデスティネーションバケットのデスティネーション地域が表示されます。 
アイデンティティとアクセス管理(IAM)ロールを設定し、ストレージクラスと追加のレプリケーションオプションを選択してください。設定を保存してバケットのレプリケーションルールを作成するには、Saveをクリックします。
AWS S3 バックアップコマンドラインインターフェース (CLI)
AWS CLIはAmazon S3を含むさまざまなAmazonサービスを操作できる強力なコマンドラインインターフェースです。バケットからファイルをコピーしてLinuxマシンのローカルディレクトリに保存することで、Amazon S3バケットをバックアップする便利な同期コマンドがあります。
AWS CLIの同期コマンドの機能は、ローカルファイルシステム(Amazon S3バックアップ先)のファイルは、ソースS3バケットに存在しない場合でも削除されず、その逆もまた然りです。これは、S3バケットでファイルが誤って削除された場合、同期後にLinuxマシンのローカルディレクトリの既存のファイルが削除されないため、AWS S3バックアップにとって重要です。
利点:
- 大型S3バケットとスケーラビリティのサポート
- 同期中に複数スレッドのサポート
- 新規および更新ファイルのみに対する同期能力
- スマートなアルゴリズムのため高い同期速度
欠点:
- EC2インスタンスで稼働するLinuxはEBSボリュームのストレージスペースを消費します。EBSボリュームのストレージコストはS3バケットよりも高いです。
このチュートリアルでは、Ubuntu Serverに対するコマンドを使用しています。
まず、AWS CLIをインストールする必要があります。
リポジトリのツリーを更新:
sudo apt-get update
AWS CLIをインストール:
sudo apt install awscli
または
unzipをインストール:
sudo apt install unzip
curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"
unzip awscli-exe-linux-x86_64.zip
sudo ./aws/install
EC2インスタンスで実行中のLinuxでAWS資格情報を確認します。
aws configure list
LinuxインスタンスでAWS CLIからAWSにアクセスする資格情報が設定されていない場合、資格情報を追加してください:
aws configure
次のパラメータを入力します:
AWSアクセスキーID
AWS秘密キー
デフォルト地域名
デフォルト出力形式
Amazon S3バックアップを保存するディレクトリを作成します。私の例では、~/s3/ ディレクトリを作成してS3バックアップを保存し、バケット名と同じ名前のサブディレクトリを作成します。S3バケットに保存されているファイルは、このLinuxマシンのローカルディレクトリにコピーされるべきです。~はユーザーのホームディレクトリで、私の例では/home/ubuntu です。
mkdir -p ~/s3/your_bucket_name
your_bucket_nameをあなたのバケットの名前(blog-bucket01の例)に置き換えます。 mkdir -p ~/s3/blog-bucket01
Linux を実行している EC2 インスタンス上のローカルディレクトリとバケットの内容を同期します:
aws s3 sync s3:// blog-bucket01 /home/ubuntu/s3/ blog-bucket01/
認証情報の設定、バケット名、および保存先パスが正しければ、S3 バケットからのデータのダウンロードが開始されます。操作が完了するまでの時間は、バケット内のファイルのサイズとインターネット接続速度によって異なります。
Amazon S3 自動バックアップ
AWS CLI sync を使用して、Amazon S3 自動バックアップジョブを設定できます。 AWS S3 バックアップ(S3 バケットから Linux インスタンス上のローカルディレクトリへファイルを同期)を実行するための sync.sh スクリプトファイルを作成し、このスクリプトをスケジュールに従って実行します。
nano /home/ubuntu/s3/sync.sh
#!/bin/sh
# Display the current date and time
echo '-----------------------------'
date
echo '-----------------------------'
echo ''
# Display the script initialization message
echo 'Syncing remote S3 bucket...'
# Running the sync command
/usr/bin/aws s3 sync s3://{BUCKET_NAME} /home/ubuntu/s3/{BUCKET_NAME}/
# Echo "Script execution is completed"
echo 'Sync complete'
{BUCKET_NAME} を、バックアップしたい S3 バケットの名前に置き換えてください。
aws (AWS CLI バイナリ)への完全なパスが定義されており、これにより crontab が crontab が使用するシェル環境で aws アプリケーションを正しく実行できるようになります。
スクリプトを実行可能にします:
sudo chmod +x /home/ubuntu/s3/sync.sh
スクリプトを実行して動作を確認します:
/home/ubuntu/s3/sync.sh
Amazon S3 バックアップスクリプトの実行をスケジュールするために、現在のユーザーの crontab(Linux のスケジューラ)を編集します。
crontab -e
crontab の設定を編集するには、テキストエディタを選択する必要がある場合があります。
タスクをスケジュールするための crontab の形式は次のとおりです:
m h dom mon dow command
ここで、m – 分、h – 時間、dom – 月の日、dow – 曜日のことを指します。
1時間ごとに同期を実行し、AWS S3のバックアップ結果をログファイルに保存するタスクの設定行を追加しましょう。この行をcrontab設定の末尾に追加してください。
0 * * * * /home/ubuntu/s3/sync.sh > /home/ubuntu/s3/sync.log
これでAmazon S3の自動バックアップが設定されました。ログファイルを使用すると、同期タスクの実行状況を確認できます。
まとめ
Amazon S3のバックアップを行う方法は複数あり、このブログ記事ではそのうちの2つについて解説しました。 バケットに対してオブジェクトのバージョン管理を有効にすると、オブジェクトの以前のバージョンを保持できるため、ファイルに望ましくない変更が加えられた場合でも、元のファイルを取り戻すことが可能です。Amazon S3 レプリケーションは、Amazon S3 バケットにオブジェクトとして保存されているファイルのコピーを作成するためのもう 1 つのネイティブツールです。この場合、オブジェクトは 1 つのバケットから別のバケットへレプリケートされます。 また、AWS CLIのsyncツールを使用してAmazon S3バケットのバックアップを作成することも可能です。これにより、バケット内のファイルを、EC2インスタンス上で動作するLinuxマシンのローカルディレクトリと同期させることができます。 Amazon S3 の自動バックアップは、スクリプトと crontab を使用してスケジュール設定できます。
一般的に、Amazon S3 クラウドストレージは非常に信頼性が高く、Amazon S3 へのバックアップは一般的な手法です。コードデータ保護戦略や AWS バックアップ戦略を策定している場合は、バックアップコピーを用意しておく必要があります。この場合、Amazon S3 および別の保存先にデータをバックアップすることをお勧めします。 NAKIVO Backup & Replication を使用して、物理マシンおよび仮想マシン上のデータを保護してください。NAKIVO Backup & Replication は、VM だけでなく、Amazon EC2 インスタンスや物理マシンも保護できる、堅牢な仮想化バックアップソフトウェアです。










