AWS Database Migration Service (AWS DMS) のレプリケーション DB インスタンスがストレージ不足のステータスになっている理由を知りたいです。
簡単な説明
AWS DMS レプリケーション DB インスタンスでは、レプリケーション DB インスタンスの作成時に割り当てられたストレージを指定できます。デフォルトでは、dms.t2.\ * と dms.r4.\ * レプリケーション DB インスタンスタイプのボリュームサイズは 50 GiB です。dms.c4.\ * レプリケーション DB インスタンスタイプのボリュームサイズは 100 GiB です。レプリケーション DB インスタンスのストレージの空き容量をモニタリングするには、FreeStorageSpace の Amazon CloudWatch メトリクスを確認してください。レプリケーション DB インスタンスストレージは、主に、継続的なレプリケーションのために収集されるタスクログやキャッシュされた変更に使用されます。AWS DMS レプリケーション DB インスタンスが storage-full 状態になる理由は、移行タイプによって異なる場合があります。
フルロードでの移行
タスクログが多い場合、タスクログによって storage-full の問題が生じることがあります。たとえば、タスクの詳細デバッグログをオンにすると、DB インスタンスのタスクログがさらに増えます。
継続的なレプリケーションがある移行
キャッシュされたイベントは、フルロードのフェーズ中にストレージの問題を引き起こすおそれがあります。StopTaskCachedChangesNotApplied タスク設定を使用するように移行を設定している場合は特に当てはまります。ストレージサイズが小さすぎてキャッシュされた変更を保存できない場合、レプリケーション DB インスタンスは storage-full の状態になります。変更データキャプチャ (CDC) のフェーズ中にスワップされたイベントにより、ソースからキャプチャされた変更をターゲットに適用できない場合、ストレージの問題が発生することがあります。AWS DMS はまず、キャッシュされたイベントをメモリに保存します。MemoryKeepTime または MemoryLimitTotal パラメータで定義された値を超えると、AWS DMS はキャッシュされたイベントをストレージにスワップします。スワップされたデータ向けの十分なストレージがない場合、レプリケーション DB インスタンスは storage-full の状態になります。詳細については、「Change processing tuning settings」を参照してください。
解決策
注: AWS コマンドラインインターフェイス (AWS CLI) コマンドの実行中にエラーが発生した場合は、「AWS CLI エラーのトラブルシューティング」を参照してください。また、AWS CLI の最新バージョンを使用していることを確認してください。
タスクログを削除する
レプリケーション DB インスタンスのステータスが利用可能な状態である場合、タスクログを削除できます。
- AWS DMS コンソールを開きます。
- ナビゲーションペインで、[Replication instances] を選択します。
- レプリケーション DB インスタンスの名前を選択します。[Log management] セクションにすべてのタスクと各タスクの [Log size] が表示されます。
- ログを削除するタスクを選択し、[Delete] を選択します。
詳細については、「Viewing and managing AWS DMS task logs」を参照してください。
タスク設定を変更する
AWS CLI を使用して DMS タスクログを削除するには、タスク設定を変更します。以下のコマンドを実行して tasksetting.json の JSON ファイルを作成します。
{
"Logging": {
"DeleteTaskLogs":true
}
}
JSON ファイルを作成したら、以下のコマンドを実行してタスク設定を変更します。
注: タスクを変更するには、タスクのステータスが [Stopped] または [Failed] である必要があります。
aws dms modify-replication-task --replication-task-arn --replication-task-settings file://tasksetting.json
上記のコマンドはパラメータを "DeleteTaskLogs": true に変えることによりタスク設定を変更します。パラメータを変更すると、そのタスクに存在するすべてのログがレプリケーション DB インスタンスから削除されます。次に、タスク設定は "DeleteTaskLogs": true パラメータを削除します。レプリケーション DB インスタンスからログが削除され、タスク設定でパラメータ "DeleteTaskLogs": true が削除されていることを確認します。
ログを定期的に削除するには、毎回**"DeleteTaskLogs": true** パラメータを使用してタスク設定を変更する必要があります。cronjob または Lambda スケジューラーを使用して定期的にこのコマンドを実行するようにスケジュールできます。詳細については、「modify-replication-task」を参照してください。
レプリケーション DB インスタンスのストレージサイズを増やす
レプリケーション DB インスタンスが storage-full の状態である場合、ログを削除することはできません。割り当てられたストレージサイズを増やすか、レプリケーションタスクを削除する必要があります。レプリケーション DB インスタンスのストレージサイズを増やす方法は、以下のとおりです。
- AWS DMS コンソールを開きます。
- ナビゲーションペインで、[Replication instances] を選択します。
- ボリュームサイズを変更したいレプリケーション DB インスタンスの名前を選択します。
- [Modify] を選択します。
- [Allocated storage (GB)] のフィールドに新しい値を入力します。
- [Apply changes immediately] をクリックし、[Modify] を選択します。
重要: 割り当てられたストレージサイズを増やすと、後から減らすことはできません。
関連情報
Best practices for AWS Database Migration Service