S3 からの ElastiCache クラスターの復元をトラブルシューティングするにはどうすればよいですか?

所要時間3分
0

Amazon ElastiCache for Redis のバックアップを Amazon Simple Storage Service (Amazon S3) から復元する際に、クラスターの作成が失敗します。「Create-failed」または「Permission denied」(許可が拒否されました) というエラーメッセージが表示されます。これを解決するにはどうすればよいですか?

簡単な説明

Amazon S3 からの ElastiCache バックアップの復元が失敗する一般的な理由は次のとおりです。

  • バックアップの制約から逸脱してバックアップを復元しようとしている。
  • ElastiCache が Amazon S3 からファイルを取得できなかった。
  • ElastiCache バックアップファイルが別のリージョンの Amazon S3 バケットにある。
  • 複数のデータベースを含む .rdb ファイルを (クラスターモードが有効な状態の) ElastiCache クラスターに復元しようとしている。

解決方法

バックアップの制約から逸脱してバックアップを復元しようとしている

ElastiCache for Redis バックアップを復元する場合、次のバックアップの制約に注意することが重要です。

  • (クラスターモードが有効な状態の) Redis クラスターを使用して作成されたバックアップから (クラスターモードが無効な状態の) Redis クラスターに復元することはできません。
  • (クラスターモードが有効な状態の) ElastiCache クラスターから作成されたバックアップを復元する場合、ElastiCache コンソールでクラスターモード無効オプションを選択することはできません。クラスターモード有効オプションのみ使用できます。
  • (クラスターモードが有効な状態の) ElastiCache クラスターのバックアップを Amazon S3 にエクスポートすると、複数の .rdb ファイル (シャードごとに 1 つ) が作成されます。Amazon S3 からバックアップをシードしようとすると、1 つのバックアップ (.rdb) しか参照できません。これにより、単一のシャードのキーがシードされます。ワイルドカードを含めることでこれを回避しようとすると、次のエラーが発生します。
    Error: Object or bucket does not exist for S3 object: examplebucket/cluster-mode-enabled-*.rdb (エラー: S3 オブジェクトのオブジェクトまたはバケットが存在しません: examplebucket/cluster-mode-enabled-*.rdb)。
  • データ階層化を使用するクラスターからバックアップを復元することはできません。例えば、r6gd ノードを、データ階層化を使用しないクラスター (r6g ノードなど) に復元することはできません。
  • ElastiCache Redis のデータ階層化の制限により、バックアップを Amazon S3 にエクスポートすることはできません。そのため、S3 から ElastiCache のデータ階層化のバックアップを復元することはできません。
  • .rdb ファイルが複数のデータベースを参照している場合、(クラスターモードが無効な状態の) Redis クラスターから (クラスターモードが有効な状態の) Redis クラスターに復元することはできません。これを実行しようとすると、次のエラーが発生します。
    Error: To restore a snapshot in cluster mode, all keys in the RDB file should reside in DB 0 (エラー: クラスターモードでスナップショットを復元するには、RDB ファイル内のすべてのキーが DB 0 に存在する必要があります)。

ElastiCache が Amazon S3 からファイルを取得できなかった

このエラーは、S3 バケットに保存されている ElastiCache バックアップにアクセスするために必要な許可が ElastiCache にない場合に発生します。許可の問題は ElastiCache Events で確認できます。

次の ElastiCache Event の例は、ElastiCache が S3 からバックアップファイルを取得できなかったために Redis レプリケーショングループ「test」の作成が失敗したことを示しています。

Restore from snapshot failed for node group 0001 in replication group test. Failed to retrieve file from S3

ElastiCache が Amazon S3 からファイルを取得できなかったことがエラーの原因であると判断したら、リージョンが次のいずれかであることを確認します。

オプトインリージョンには、ElastiCache が Amazon S3 からバックアップファイルを取得することを許可するバケットポリシーが必要です。

S3 バケットが次のリージョンのいずれかにある場合、ElastiCache サービスが S3 のバックアップファイルにアクセスすることを許可する必要があります。

注: 中国 (北京)、中国 (寧夏)、および AWS GovCloud (米国西部) リージョンの正規 ID は、デフォルトの AWS リージョンとは異なります。

中国 (北京) と中国 (寧夏)

Canonical ID: b14d6a125bdf69854ed8ef2e71d8a20b7c490f252229b806e514966e490b8d83

AWS GovCloud (米国西部) リージョン

Canonical ID: 40fa568277ad703bd160f66ae4f83fc9dfdfd06c2f1b5060ca22442ac3ef8be6

AWS デフォルトリージョン

Canonical ID: 540804c33a284a299d2547575ce1010f2312ef3da9b3a053c8bc45bf233e4353

正規 ID またはバケットポリシーを使用して Amazon S3 の .rdb バックアップオブジェクトに対するアクセス権を ElastiCache に付与した後、Redis クラスターを復元します。

ElastiCache バックアップファイルが別のリージョンの Amazon S3 バケットにある

次のエラーメッセージは、別のリージョン内の Amazon S3 バケットにある ElastiCache バックアップを復元しようとしていることを示します。

「Permission denied to access S3 object.Please use the S3 object in the same region.」(S3 オブジェクトに対するアクセス許可が拒否されました。同じリージョンの S3 オブジェクトを使用してください)

問題を解決するには、次の操作を実行します。

1.    バックアップを含む S3 バケットから Redis クラスターが復元されるリージョンにある S3 バケットにバックアップ (.rdb) をコピーします。

異なるリージョンの Amazon S3 バケット間でコピーするために使用できる AWS コマンドラインインターフェイス (AWS CLI) コマンドの例を次に示します。

aws s3 cp s3://SourceBucketName/BackupName.rdb s3://DestinationBucketName/BackupName.rdb --acl bucket-owner-full-control --source-region SourceRegionName --region DestinationRegionName

注: AWS CLI コマンドの実行時にエラーが発生した場合は、AWS CLI の最新バージョンを使用していることを確認してください

2.    コピーが完了したら、バックアップ (.rdb) オブジェクトに、正規 ID またはバケットポリシーの形式で割り当てられた正しい許可があることを確認します。正しい正規 ID については、前のセクションを参照してください。

バックアップオブジェクトが正しいリージョンにコピーされ、正しい許可が適用されたので、クラスターの復元を続行できます。

複数のデータベースを含む .rdb ファイルを (クラスターモードが有効な状態の) ElastiCache クラスターに復元しようとしている

複数のデータベースを含む Redis バックアップ (.rdb) ファイルを (クラスターモードが有効な状態の) ElastiCache クラスターに復元することはできません。(クラスターモードが有効な状態の) ElastiCache は、複数のデータベースをサポートしていません。すべてのキーは DB0 に存在する必要があります。これが復元失敗の原因であるかどうかは、ElastiCache Events で確認できます。

次の ElastiCache Event の例は、複数のデータベースを含む .rdb ファイルが原因で Redis レプリケーショングループ「test」の作成が失敗したことを示しています。

Restore from snapshot failed for node group 0001 in replication group test. To restore a snapshot in cluster mode, all keys in the RDB file should reside in DB 0. Snapshot ID: arn:aws:s3:::example-bucket/multidb.rdb

この問題を解決するには、次の操作を実行します。

1.    すべてのキーが単一のデータベースに移行されていることを確認してください。

注: ソースデータベースが ElastiCache Redis にある場合、migrate コマンドはサポートされません。

2.    すべてのキーが同じデータベースに保存されたら、Redis データベースのローカルバックアップを作成し、そのバックアップを Amazon S3 にアップロードして、(クラスターモードが有効な状態の) ElastiCache クラスターへの復元を続行できます。


AWS公式
AWS公式更新しました 2年前
コメントはありません