初心者向け:他のAWSアカウントでRDSスナップショットを復元する手順
2024-12-04
azblob://2024/11/29/eyecatch/2024-12-04-rds-snapshot-sharing-and-restore-in-another-account-000.jpg

本記事はFIXER Advent Calendar 2024( FIXER Advent Calendar 2024 ~ ルーキー編 〜)12月4日の記事です。

はじめに

2024年入社の 栄德 響介 です。

先日、Amazon RDS の スナップショット を別のAWSアカウントで復元する方法を先輩社員に教えていただきました。しかしながら、実際に一人で作業しようとすると細かい部分で躓いてしまいました。

同じような課題に直面する方の参考になればと思い、今回記事として残すことにしました。

RDS における バックアップ と スナップショット の違い

DBデータを保存する方法として、「スナップショット」と「バックアップ」という2つの選択肢があります。両者ともにデータを保護する手段ですが、その違いを明確に説明できない方も多いのではないでしょうか。そこで両者の違いを下記にまとめてみました。

作成方法

  • バックアップ:自動バックアップがオンの場合、Amazon RDS が毎日自動的にバックアップを作成する。
  • スナップショット:ユーザーが手動で任意のタイミングでスナップショットを作成する。

保存期間

  • バックアップ: ユーザーが設定した保持期間内(デフォルト7日間、最大35日間)保存され、その期間を過ぎると自動的に削除されてしまう。
  • スナップショット: ユーザーが明示的に削除するまで無期限に保存される。

復元可能なタイミング

  • バックアップ: 保持期間内であれば、任意の秒単位の時点にポイントインタイムリカバリが可能
  • スナップショット: スナップショットを取得した特定の時点の状態に復元

目的

  • バックアップ: データ障害時に最新の状態や特定の時点に迅速に復元するために使用される。
  • スナップショット: 特定の状態を長期的に保存したい場合や、特定の状態を基に新しい環境を構築したい場合に使用される。

管理と操作

  • バックアップ: Amazon RDS が自動的に管理し、復元可能な最新時刻はコンソールやAPIで確認できる。(通常過去5分以内)
  • スナップショット: ユーザーが手動で管理し、必要に応じてコピーや復元が可能。

復元時の挙動

  • 共通点:新しいエンドポイントを持つ新しい DB インスタンスが作成される。必要に応じて古いインスタンスを削除できる。

カスタマイズ性

  • バックアップ: 自動化されており、カスタマイズ範囲は限定的
  • スナップショット: ユーザーが作成タイミングを決定でき、より柔軟に管理できる。

以上がバックアップとスナップショットの明確的な違いになります。こうしてみるとまったく違うことがわかります。

バックアップは、自動的にデータベースを定期的に保存し、万が一のときに迅速に復元できるようにするためのもので、一方、スナップショットは、自分で「この時点の状態を残しておきたい!」というときに手動で作成し、後からその状態を基に新しいデータベースを作成したり、長期的に保存したりするためのものだということですね。

スナップショットを他のAWSアカウント上で復元

バックアップとスナップショットの違いがわかったところでスナップショットの復元をしていきましょう。

1.スナップショットの取得

スナップショットを復元したいのに、スナップショットがないのであれば話になりません。

まずはスナップショットをとりましょう。

既存のAWSマネジメントコンソールにアクセスし、RDS→スナップショット

右上の「スナップショットの取得」

すると、スナップショットの設定が出てきます。

スナップショットのタイプ

DBインスタンス:個別のDBインスタンスをバックアップする。

DBクラスター:クラスター全体(複数のインスタンスと共有ストレージ)をバックアップする。

(今回はDBクラスターで)

DBクラスター

DB識別子を入力します。(自動で入力されるか、クリックしたらプルダウンで出てくる)

スナップショット名

復元作業をする際にわかりやすいようにスナップショット名をつける。

ジョブを実行する前にスナップショットをとっとくのであれば「job-<ジョブID>-test」というように後で復元する際にどのスナップショットを復元すればいいかわかるようにしておくことが大切です。

後は右下の「スナップショットの取得」でスナップショットの作成が開始されます。

2. スナップショットの共有

スナップショットの共有をしていきたいところですが、その前にまずKMS(AWS Key Management Service)のカスタマー管理キー(CMK)のキーポリシーを変更しましょう

スナップショットの共有なのになぜ、CMKのキーポリシーの変更しなければいけないかというと、

暗号化されたスナップショットは、KMS(AWS Key Management Service)のCMKによって暗号化されています。
スナップショットを他のAWSアカウントと共有しても、共有先のアカウントが暗号化に使用されたCMKにアクセスできないと、そのスナップショットを使用してリソースを復元することができません。
そのため、CMKのキーポリシーを編集して、共有先のアカウントに対してキーの使用権限を付与する必要があります。

KMSのカスタマー管理キーのキーポリシーの編集をクリックするとこのような画面が出てきます。

PrincipalのAWSのところに

"arn:aws:iam::<共有したいアカウントID>:root"

と追記して、保存しましょう。

キーポリシーに共有先アカウントの権限を追加ができたので、次はスナップショットの共有しましょう。

共有したいスナップショットをクリックし、「アクション」の「スナップショットを共有」をクリック。

すると、アクセス許可の設定画面が出てきます。

「AWSアカウントID」に共有したいアカウントのIDを入力し、「追加」をクリック。

最後に右下の「保存」をクリック

これでスナップショットの共有ができました。

3. スナップショットの復元

スナップショットの取得、共有ができたところでいよいよ復元の方をしていきましょう。

別アカウント(復元したい方)のAWSマネジメントコンソールにアクセスし、RDS→スナップショット→自分と共有

2. スナップショットの共有で共有したスナップショットをクリックし、アクションのスナップショットを復元をクリック

すると、データベースの設定画面が出てくるので、適切な設定値にしましょう。

そして、大事なことがDB インスタンス識別子AWS KMS キーです。

DB インスタンス識別子は既存のDBインスタンス識別子と同じものを入力しましょう。

AWS KMSキーの「キーのARNを入力」を選択して、Amazon リソースネーム(ARN)にKMSキーを入力しましょう。

一度上から設定項目を確認していき、問題なければ復元しましょう!!!

設定が間違っていたり、識別子を別なものにしてしまうとデータベースにアクセスできないなんてことになってしまいます。

おわりに

今回はAmazon RDSのスナップショットを別のAWSアカウントで復元する方法についてまとめてみました。

実際に自分一人でやるときは、いろいろなことで躓いてしまいました。スナップショットを共有する手順で、「カスタマー管理キーのキーポリシーを変更」しかやってないのに復元しようとしたり、復元作業でデータベースの設定がうまくできてないまま復元してしまい、データベースに接続できなかったり...

リソースに対してだけではないですが、何かをする際には手順や設定項目などをしっかりと確認した上での慎重な対応が重要だと感じました。

皆さんもRDSのスナップショットを別のアカウントで復元したい場合にはこのブログを参考にしていただければと思います。

参考元

Amazon RDS よくある質問

DB クラスタースナップショットの作成

Amazon RDS の DB スナップショットを共有する

AWS KMSのキーポリシー