Amazon Web Services ブログ

Amazon RDS ポイントインタイムリカバリを管理するための AWS CloudFormation カスタムリソースの構築

Amazon RDS は、クラウド内でのリレーショナルデータベースのセットアップ、運用、およびスケーリングを容易にし、ハードウェアのプロビジョニング、データベースの設定、パッチ適用、およびバックアップなどの時間がかかる管理タスクを自動化しながら、コスト効率に優れ、サイズ変更が可能な容量を提供するため、煩わしい作業を AWS にまかせて、ビジネスロジックとアプリケーション機能に集中することが可能になります。

AWS 責任共有モデルでは、データを保護し、災害に備えて適切なバックアップと復旧を確実にすることがユーザーの責任になります。バックアップは、所定の時点におけるデータセットのスナップショットです。最後の完全なバックアップ後に行われた変更のすべてを復元するための復旧戦略を設計してください。

RDS を使用すると、新しいデータベースインスタンスを作成して、特定の時点にデータベースインスタンスを復元することができます。AWS マネジメントコンソールAWS CLI、または RDS API を使用してポイントインタイムリカバリを実行できます。

組織がコンソールと AWS CLI へのアクセスをデータベース管理者のみに制限している場合があります。現在、AWS CloudFormation はポイントインタイムリカバリをサポートしないため、その次善策として AWS CloudFormation のカスタムリソースがあります。カスタムリソースでは、スタックを作成、更新 (カスタムリソースを変更した場合)、または削除するたびに AWS CloudFormation が実行するテンプレートに、カスタムプロビジョニングロジックを作成することができます。たとえば、AWS CloudFormation のリソースタイプとして使用できないリソースを含めたい場合は、カスタムリソースを使用してこれらのリソースを含めることができます。そうすることで、引き続き単一のスタック内で関連リソースのすべてを管理することができます。

この記事では、カスタムリソースである AWS Lambda 関数を使用して、バックアップ保持期間内の過去の任意の時間に RDS データベースのポイントインタイムリカバリを行う方法について説明します。

ソリューションの概要

RDS サービスは、データベースインスタンスのすべてのトランザクションログを 5 分ごとに Amazon S3 に保存します。コンソールでは、このプロパティがデータベースインスタンスの最終復元時間として表示されます。復元は、バックアップ保持期間内の任意の時点に行うことができます。

この記事では、以下の手順を実行します。

  1. 提供されている AWS CloudFormation テンプレートを使用して Lambda 関数と関連する IAM ロールを作成する。
  2. 必要なパラメータを持つ Lambda 関数を呼び出して、指定された時間へのデータベースの復旧を検証するために、もう一つの AWS CloudFormation スタックを作成する。

前提条件

このソリューションを実行するには、まず以下の項目を完了します。

この記事に記載されている AWS CloudFormation テンプレートとサンプルコードは、どちらもハードコードされた情報を使用します。これらは評価目的限定なので、十分にテストを行うことなく本番で使用しないでください。

復旧手順

AWS CloudFormation を使用して Lambda 関数をデプロイし、ソリューションをテストするには、以下の手順を実行してください。

Lambda 関数の作成

まず、データベースを過去の時間に復元できるカスタムリソースの Lambda 関数を作成します。この関数は、ポイントインタイムリカバリを実現するために RDS スナップショットを使用します。リソースは、このダウンロード可能なテンプレートを使ってセットアップできます。

  1. コンソールから直接起動するには、[Launch Stack] を選択します。
  2. [次へ] を選択します。
  3. スタックの詳細を指定ページで、[スタックの名前] に一意の名前を入力します (例: pitr-blog-custom-resource)。
  4. [次へ] を選択します。
  5. スタックオプションの設定ページで、[タグ] にオプションのタグを指定します。
  6. [次へ] を選択します。

  1. レビューページで [AWS CloudFormation によって IAM リソースが作成される場合があることを承認します] を選択します。
  2. [スタックの作成] を選択します。

プロビジョニングが完了するまで最大 5 分かかる場合があります。スタックのステータスが CREATE_COMPLETE になったら、作成された出力とリソースをそれぞれのタブに移動して確認します。

ソリューションのテスト

このステップには前のステップからのエクスポートされた Lambda 関数の名前が必要なので、スタックの作成が完了しており、ARN が出力に表示されていることを確認してください。リソースは、このダウンロード可能なテンプレートを使ってセットアップできます。

  1. このスタックをコンソールから直接起動するには、[Launch Stack] を選択します。
  2. [次へ] を選択します。
  3. スタックの詳細を指定ページでは、容易なオーケストレーションのために一部のパラメータが事前定義されています。残りのパラメータには、値を入力する必要があります。

この記事では、2 つのシナリオを使ってポイントインタイムリカバリソリューションを説明します。最初のシナリオでは、ポイントインタイムリカバリを実行して、特定のタイムスタンプに基づいた新しいデータベースを作成します。

  1. パラメータに適切な値を入力します。
    • [pRenameExistingDBInstance] には [No] を選択します。このアクションは、ポイントインタイムリカバリを新しいデータベースに復元します。これはデータベースのサブセットを復元する必要がある場合に最適です。
  2. テンプレートの詳細を指定したら、[次へ] を選択します。
  3. 復元時間を入力するときは、その時間帯の必要なスナップショットバックアップが復元しようとしている RDS データベースに存在することを確認してください。

  1. スタックオプションの設定ページで、オプションのタグを指定し、[次へ] を選択します。
  2. レビューページで、[スタックの作成] を選択します。
  3. RDS コンソールに移動します。

作成中の新しいデータベースインスタンスが表示されるまで、最大数分かかります。この新しいデータベースが、このスタックの作成時に入力したデータベースのポイントインタイムコピーです。

2 番目のシナリオでは、特定のタイムスタンプに基づいて既存データベースへのポイントインタイムリカバリを実行します。

  1. パラメータに適切な値を入力します。
    • [pRenameExistingDBInstance] には [Yes] を選択します。このアクションは、ポイントインタイムリカバリを同じ既存データベースに復元し、本番データベースで問題が起こった場合に既存のビジネスクリティカルなデータベースを復元するために最適です。
  1. テンプレートの詳細を指定したら、[次へ] を選択します。

復元時間を入力するときは、その時間帯の必要なスナップショットバックアップが復元しようとしている RDS データベースに存在することを確認してください。

  1. スタックオプションの設定ページで、オプションのタグを指定し、[次へ] を選択します。
  2. レビューページで [スタックの作成] を選択します。
  3. RDS コンソールに移動します。

名前が変更された既存のインスタンスと、ポイントインタイムリカバリからの新しいデータベースインスタンスが表示されるまで、最大数分かかります。

まとめ

この記事では、AWS CloudFormation を使用して、RDS データベースエンジンのバックアップ保持期間内の過去の任意の時間にポイントインタイムリカバリを実行するプロセスを紹介しました。このソリューションは、ベース管理者に AWS CloudFormation のカスタムリソースを使用してデータベースを復旧するためのさらなる方法を提供し、既存の復旧プロセスに簡単に統合できます。

 


著者について

Udayasimha Theepireddy (Uday) は 2017 年 11 月よりアマゾン ウェブ サービスのシニアクラウドデータベースアーキテクトとして活躍しています。Amazon の社内顧客と協力して、いくつかのサービスをオンプレミスの Oracle から Aurora や RDS PostgreSQL、RDS MySQL、Redshift データベースに移行する作業を担当しています。

 

 

Satya Vajrapu は DevOps のコンサルタント として、アマゾン ウェブ サービスで働いています。彼は、インフラストラクチャー、アプリケーション、そしてプロセスのためのモジュールの設計やコーディングで、AWS のお客様を支援しています。