データ保護の基礎:Amazon S3 バケットのバックアップ方法

Amazon S3 は、Amazon Web Services (AWS) が提供する信頼性の高いクラウドストレージです。ファイルは、Amazon S3 バケット内にオブジェクトとして保存されます。Amazon S3 はその高い信頼性から、データのバックアップ保存に広く利用されています。冗長データが 1 つのアベイラビリティゾーンに保存される Amazon Elastic Block Storage (EBS) とは異なり、Amazon S3 では冗長データが複数のアベイラビリティゾーンに分散して保存されます。

あるアベイラビリティゾーンのデータセンターが利用できなくなった場合でも、別のゾーンのデータにアクセスすることができます。人為的ミスやソフトウェアの障害によるデータ損失を防ぐため、Amazon S3 バケットに保存されたデータをバックアップする必要がある場合があります。S3 バケットへのアクセス権を持つユーザーがデータを削除したり、不要な変更を書き込んでデータを破損させたりすると、データが削除されたり破損したりする可能性があります。ソフトウェアの障害も同様の結果を引き起こす可能性があります。

AWS S3への直接バックアップ | NAKIVO

AWS S3への直接バックアップ | NAKIVO

シンプルな Amazon S3 連携と、ランサムウェア対策としての不変性オプションにより、単一障害点を回避します。自動バックアップ階層化と即時復旧機能も備えています。

Amazon S3 バージョニング

オブジェクトのバージョニングは、Amazon S3 の有効な機能であり、バケット内のデータを破損、不要な変更、削除から保護することができます。ファイルが変更されると(S3 でオブジェクトとして保存されている場合)、オブジェクトの新しいバージョンが作成されます。同じオブジェクトの複数のバージョンがバケットに保存されます。以前のバージョンのオブジェクトにアクセスして復元することができます。オブジェクトが削除されると、”削除マーカー”がオブジェクトに適用されますが、削除前のバージョンを復元することができます。Amazon S3 バージョニングは、追加の S3 バックアップ ソフトウェアを使用せずに利用可能です。

ライフサイクルポリシーを使用して、S3 バケットにバージョンをどのくらいの期間保存するかを定義することで、Amazon S3 バックアップの形式を取得できます。追加のバージョンを保存するための追加コストは、ライフサイクルポリシーを適切に設定すれば、高くならないはずであり、新しいバージョンは最も古いものを置き換えます。古いバージョンは削除するか、より費用対効果の高いストレージ(たとえば、コールドストレージ)に移動してコストを最適化できます。

AWS S3 バージョニングを有効にする方法

適切な権限を持つアカウントを使用して AWS マネジメントコンソールにサインインします。Services をクリックし、S3 ストレージ カテゴリのを選択してください。

Backup to Amazon S3 – opening the S3 storage page in AWS Management Console

ナビゲーションペインで Buckets をクリックし、バージョニングを有効にしたい必要な S3 バケットを選択します。この例では、名前が blog-bucket01 のバケットを選択します。バケット名をクリックしてバケット詳細を開きます。

Backup to Amazon S3 – selecting a bucket

選択したバケットの Properties タブを開きます。

バケットバージョニング セクションでEditをクリックします。

How to enable AWS S3 versioning

デフォルトでは、バケットバージョニングは無効になっています。

Enable をクリックして、バケットバージョニングをオンにします。

Save Changes をクリックします。

ライフサイクルルールを更新する必要があるかもしれないことを指摘するヒントが表示されます。これは次のステップです。

Editing Amazon S3 versioning settings

構成変更が適用された場合、ページの上部にメッセージが表示されます: バケットバージョニングの編集に成功しました

ライフサイクルルール

Amazon S3 バージョニングのライフサイクルルールを設定するには、選択したバケットのページ上の Management タブに移動します。 ライフサイクルルール セクションでCreate lifecycle ruleをクリックします。

How to create a lifecycle rule for a bucket when AWS S3 versioning is enabled

ライフサイクルルールの作成 ページが開きます。

Lifecycle Rule configuration。ライフサイクルルール名を入力してください。例えば、 ブログライフサイクル01

ルールの範囲を選択します。ライフサイクルルールを特定のオブジェクトに適用するようにフィルターを適用するか、もしくはバケット内のすべてのオブジェクトにルールを適用することができます。 オブジェクトタグを定義して、ライフサイクルアクションを適用すべきオブジェクトを示します。適切なフィールドにキーと値を入力し、タグを追加するにはAdd tagボタンを、削除するにはRemoveボタンをクリックします。

Configuring a lifecycle rule to meet the AWS backup strategy

Lifecycle rule actions. この規則で実行したいアクションを選択してください:

  • 現在のバージョン間のストレージクラス間の遷移 オブジェクト
  • 以前の オブジェクト のバージョンがストレージクラス間で遷移される
  • 現在の バージョンのオブジェクトをの期限切れにする
  • 以前のバージョンを永久に 削除します
  • 期限切れの削除マーカーまたは未完成のマルチパートアップロードを削除

Using Amazon S3 for backup – configuring lifecycle rule actions

Transition noncurrent versions of objects between storage classes

ストレージクラスの遷移と、オブジェクトが非現在になるまでの日数を選択します。

私の例では、オブジェクトは現在のS3ストレージクラスからスタンダード-IAに35日後に移動されます。

Permanently delete previous versions of objects

以前のバージョンを削除するまでの日数を入力してください。この値は、オブジェクトが非現在になる日数よりも高くなければなりません。私の例では、 40日後にオブジェクトが永久に削除されます。

ライフサイクル規則を作成するためにCreate Ruleをクリックしてください。

AWS S3 backup – configuring options for a lifecycle rule

バケットのレプリケーション

Amazon S3の自動バックアップの代わりとして、バケットを地域間でレプリケートすることができます。別地域のデスティネーションバケットとして二つ目のバケットを作成し、レプリケーション規則を作成する必要があります。レプリケーション規則を作成した後、ソースバケットで行われたすべての変更が自動的にデスティネーションバケットに反映されます。

Replication rules セクションを、ソースバケットの管理タブで見つけ、Create replication ruleをクリックしてください。

S3 bucket replication is an alternative to Amazon S3 backup

レプリケーション規則作成ページが開きます。

レプリケーション規則の名前を入力してください。たとえば、ブログS3バケットレプリケーション

規則が作成されたときの規則状態を定義します (enabled または disabled)。

Configuring a replication rule for an S3 bucket

ソースバケット。ソースバケットは既に選択されています ( ブログバケット01 )。

規則の適用範囲を選択してください。バケット内のすべてのオブジェクトにレプリケーション規則を使用することも、フィルタを設定してカスタムオブジェクトに規則を適用することもできます。

デスティネーション。デスティネーションバケット名を入力するか、Browse S3をクリックしてリストからバケットを選択します。このアカウント内または別のアカウント内のバケットを選択できます。AWS S3バージョニングがソースバケットで有効化されている場合、デスティネーションバケットでもオブジェクトバージョニングを有効化する必要があります。選択されたデスティネーションバケットのデスティネーション地域が表示されます。 Amazon S3 bucket replication – selecting a bucket

アイデンティティとアクセス管理(IAM)ロールを設定し、ストレージクラスと追加のレプリケーションオプションを選択してください。設定を保存してバケットのレプリケーションルールを作成するには、Saveをクリックします。

Configuring options for Amazon S3 bucket replication

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 インスタンスや物理マシンも保護できる、堅牢な仮想化バックアップソフトウェアです。

NAKIVO Backup & Replication をお試しください

NAKIVO Backup & Replication をお試しください

無料トライアルを利用して、本ソリューションのデータ保護機能をすべてお試しください。15日間無料。機能や容量の制限は一切ありません。クレジットカードも不要です。

関連記事