AWS S3 でデータをバックアップおよびリストアする
バックアップ戦略の作成、その戦略のテスト、およびバックアップの実行は、各顧客の責任です。
AWS S3 を使用したデータのバックアップとリストアがサポートされています。データを S3 にバックアップし、その後新しい CelerData クラスターにデータをリストアすることで、データを移行することもできます。
始める前に
IAM ポリシーを設定する
AWS IAM ロール(または IAM ユーザー)に以下のようなポリシーがアタッチされていることを確認し、AWS S3 との統合を成功させます。データスナップショットを保存する S3 バケットの名前に <bucket_name>
を置き換えることを忘れないでください。このロールを仮定ロールにアタッチするか、データクレデンシャル で参照されるロールにアタッチできます。詳細については、AWS リソースへの認証を参照してください。
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "s3",
"Effect": "Allow",
"Action": [
"s3:GetObject"
],
"Resource": [
"arn:aws:s3:::<bucket_name>/*"
]
},
{
"Sid": "s3list",
"Effect": "Allow",
"Action": [
"s3:ListBucket"
],
"Resource": [
"arn:aws:s3:::<bucket_name>"
]
}
]
}
適切なクレデンシャル方法を選択する
AWS リソースへの認証に従って、適切なクレデンシャル方法を選択してください。その後、StorageCredentialParams
のパラメーターセットを以下のように準備します。
-
AWS S3 にアクセスするためのクレデンシャル方法としてインスタンスプロファイルを選択した場合、S3 バケットが存在するリージョンとして
aws_s3_region
を設定します。aws_s3_region
は、リポジトリを作成する際に以下のようにStorageCredentialParams
で使用されます。"aws.s3.use_instance_profile" = "true",
"aws.s3.region" = "us-west-2" -
AWS S3 にアクセスするためのクレデンシャル方法として仮定ロールを選択した場合、仮定ロールの ARN として
iam_role_arn
を、S3 バケットが存在するリージョンとしてaws_s3_region
を設定します。iam_role_arn
とaws_s3_region
は、リポジトリを作成する際に以下のようにStorageCredentialParams
で使用されます。"aws.s3.use_instance_profile" = "true",
"aws.s3.iam_role_arn" = "arn:aws:iam::xxxxxxxxxx:role/yyyyyyyy",
"aws.s3.region" = "us-west-2"
以下の表は、StorageCredentialParams
で設定する必要があるパラメーターを説明しています。
パラメーター名 | 必須 | 説明 |
---|---|---|
aws.s3.use_instance_profile | はい | AWS S3 にアクセスするためのクレデンシャル方法としてインスタンスプロファイルと仮定ロールを許可します。このパラメーターを true に設定します。 |
aws.s3.iam_role_arn | いいえ | データファイルが保存されている AWS S3 バケットに対する権限を持つ IAM ロールの ARN。AWS S3 にアクセスするためのクレデンシャル方法として仮定ロールを使用する場合、このパラメーターを指定する必要があります。その後、CelerData は Hive catalog を使用して Hive データを分析する際にこのロールを仮定します。 |
aws.s3.region | はい | AWS S3 バケットが存在するリージョン。例: us-west-1 。 |
詳細については、AWS S3 へのアクセスのための認証パラメーターを参照してください。
データをバックアップする
データベース、テーブル、またはパーティションの粒度レベルでの完全バックアップがサポートされています。
テーブルに大量のデータを保存している場合、パーティションごとにデータをバックアップおよびリストアすることをお勧めします。これにより、ジョブの失敗時の再試行コストを削減できます。定期的に増分データをバックアップする必要がある場合、テーブルに対して動的パーティション化プラン(たとえば、特定の時間間隔で)を策定し、毎回新しいパーティションのみをバックアップすることができます。
リポジトリを作成する
データをバックアップする前に、AWS S3 にデータスナップショットを保存するためのリポジトリを作成する必要があります。CelerData クラスター内で複数のリポジトリを作成できます。詳細な手順については、CREATE REPOSITORYを参照してください。
以下の例では、Amazon S3 バケット bucket_s3
に test_repo
という名前のリポジトリを 作成します。StorageCredentialParams
を準備したパラメーターセットに置き換えることを忘れないでください。
CREATE REPOSITORY test_repo
WITH BROKER
ON LOCATION "s3a://bucket_s3/backup"
PROPERTIES(
StorageCredentialParams
);
CelerData は S3A プロトコルに従ってのみ AWS S3 にリポジトリを作成することをサポートしています。したがって、AWS S3 にリポジトリを作成する際には、リポジトリの場所として渡す S3 URI の ON LOCATION
にある s3://
を s3a://
に置き換える必要があります。
作成したリポジトリは SHOW REPOSITORIES を使用して確認できます。データをリストアした後、CelerData クラスター内でリポジトリを削除するには DROP REPOSITORY を使用します。ただし、AWS S3 にバックアップされたデータスナップショットは CelerData を通じて削除できません。AWS S3 で手動で削 除する必要があります。
データスナップショットをバックアップする
リポジトリが作成された後、データスナップショットを作成し、リモートリポジトリにバックアップする必要があります。詳細な手順については、BACKUPを参照してください。
以下の例では、データベース sr_hub
のテーブル sr_member
に対してデータスナップショット sr_member_backup
を作成し、リポジトリ test_repo
にバックアップします。
BACKUP SNAPSHOT sr_hub.sr_member_backup
TO test_repo
ON (sr_member);
BACKUP は非同期操作です。SHOW BACKUP を使用して BACKUP ジョブのステータスを確認したり、CANCEL BACKUP を使用して BACKUP ジョブをキャンセルしたりできます。
データをリストアまたは移行する
AWS S3 にバックアップされたデータスナップショットを現在の CelerData クラスターまたは別の CelerData クラスターにリストアして、データをリストアまたは移行できます。
(オプション)新しいクラスターにリポジトリを作成する
データを別の CelerData クラスターに移行するには、新しいクラスターで同じ リポジトリ名 と 場所 でリポジトリを作成する必要があります。そうしないと、以前にバックアップされたデータスナップショットを表示できません。詳細については、リポジトリを作成するを参照してください。
スナップショットを確認する
データをリストアする前に、指定されたリポジトリ内のスナップショットを SHOW SNAPSHOT を使用して確認できます。
以下の例では、test_repo
内のスナップショット情報を確認します。
SHOW SNAPSHOT ON test_repo;
+------------------+-------------------------+--------+
| Snapshot | Timestamp | Status |
+------------------+-------------------------+--------+
| sr_member_backup | 2023-02-07-03-09-43-561 | OK |
+------------------+-------------------------+--------+
1 row in set (0.11 sec)
スナップショットを介してデータをリストアする
RESTORE ステートメントを使用して、リモートストレージシステム内のデータスナップショットを現在の CelerData クラスターまたは他の CelerData クラスターにリストアできます。
以下の例では、test_repo
内のデータスナップショット sr_member_backup
をテーブル sr_member
にリストアします。データレプリカは 1 つだけリストアされます。
RESTORE SNAPSHOT sr_hub.sr_member_backup
FROM test_repo
ON (sr_member)
PROPERTIES (
"backup_timestamp"="2023-02-07-14-45-53-143",
"replication_num" = "1"
);
RESTORE は非同期操作です。SHOW RESTORE を使用して RESTORE ジョブのステータスを確認したり、CANCEL RESTORE を使用して RESTORE ジョブをキャンセルしたりできます。
使用上の注意
- バックアップは他のアプリケーションでは認識されない特別なファイル形式で行われます。
- ADMIN 権限を持つユーザーのみがデータをバックアップまたはリストアできます。
- 各データベースでは、同時に実行できる BACKUP または RESTORE ジョブは 1 つだけです。そうでない場合、CelerData はエラーを返します。
- BACKUP および RESTORE ジョブは CelerData クラスターの多くのリソースを占有するため、CelerData クラスターが高負荷でないときにデータをバックアップおよびリストアすることをお勧めします。
- データバックアップのためのデータ圧縮アルゴリズムの指定はサポートされていません。
- データはスナップショットとしてバックアップされるため、スナップショット生成時にロードされたデータはスナップショットに含まれません。したがって、スナップショットが生成された後、RESTORE ジョブが完了する前に古いクラスターにデータをロードした場合、データがリストアされるクラスターにもデータをロードする必要があります。データ移行が完了した後、データとサービスの正確性を確認した後にアプリケーションを新しいクラスターに移行することをお勧めします。
- RESTORE ジョブが完了するまで、リストア中のテーブルを使用することはできません。
- リストアするテーブルを新しいクラスターに事前に作成する必要はありません。RESTORE ジョブが自動的に作成します。
- リストアするテーブルと同じ名前の既存のテーブルがある場合、CelerData はまず既存のテーブルのスキーマがリストアするテーブルのスキーマと一致するかどうかを確認します。スキーマが一致する場合、CelerData はスナップショット内のデータで既存のテーブルを上書きします。スキーマが一致しない場合、RESTORE ジョブは失敗します。
AS
キーワードを使用してリストアするテーブルの名前を変更するか、データをリストアする前に既存のテーブルを削除することができます。 - RESTORE ジョブが既存のデータベース、テーブル、またはパーティションを上書きする場合、ジョブが COMMIT フェーズに入った後、上書きされたデータはリストアできません。この時点で RESTORE ジョブが失敗またはキャンセルされた場合、データが破損してアクセスできなくなる可能性があります。この場合、RESTORE 操作を再度実行し、ジョブが完了するのを待つしかありません。したがって、現在のデータが不要であると確信していない限り、上書きによるデータのリストアはお勧めしません。上書き操作は、スナップショットと既存のデータベース、テーブル、またはパーティション間のメタデータの一貫性を最初に確認します。一貫性が検出されない場合、RESTORE 操作は実行できません。
- BACKUP または RESTORE ジョブ中に、対応するテーブルのシングルテーブルマテリアライズドビューがバックアップまたはリストアされます。現在、非同期リフレッシュマテリアライズドビュー のバックアップはサポートされていません。クエリアクセラレーションやクエリリライトに使用できないマテリアライズドビューの物理テーブルのみをバックアップできます。
- 現在、ユーザーアカウント、権限、およびリソースグループに関連する設定データのバックアップはサポートされていません。
- 現在、テーブル間の Colocate Join 関係のバックアップおよびリストアはサポートされていません。