データセンターなどにあるオンプレの Microsoft SQL Server を Amazon RDS for SQL Server に移行する際の問題点をまとめました。
オンプレ環境にある場合の問題点
- ハードウェアのライフサイクルに左右される
→ 最近のハードウェアの寿命は増えていますが(サーバー系なら10年くらいは持ちそう?)、それでもいつか寿命は来ます。 - サポートの更新・ライセンスの更新の手間が掛かる
→ 1年おき、数年おきにサポートを更新したり、ライセンスを更新するのは大変です。大きな組織・小さな組織ともに管理し続けることは困難です。
Amazon RDS for SQL Server に移行した場合の制限事項
- Amazon RDS は Linux や Windows OS の上にインストールされているわけではないため、シェルやコマンドでのアクセスはできません。
- OS にログインして操作するという機能がないため、例えば root 権限や Administrator 権限を必要とするシステムプロシージャやシステムテーブルへのアクセスが制限されます。
RDS をマルチ AZ 配置にする場合
マルチ AZ 配置にする場合、以下の機能により実装されます。
- データベースミラーリング(SQL Server ミラーリング)
- Always On
Always On とは
SQL Server の「高可用性」を実現する機能です。
データベースミラーリング(SQL Server ミラーリング)に変わる機能としてリリースされました。
「高可用性」とは「可用性」が高く、障害が発生してサービスが提供できなくなるような事態がない状態のことを言います。
Always On は、「Windows Server Failover Clustering(WSFC)、別名 Microsoft Failover Clustering(MSFC)」の上に乗っています。
移行方法
実際に移行するとなると、以下の 2 つの方法が考えられます。
- SQL Server でバックアップを取得し RDS にリストアする
- DMS(Database Migration Service)を使用する
SQL Server でバックアップを取得して RDS にリストアする場合
完全バックアップファイル(データベース名.bak)を利用して RDS にリストアできます。
RDS にリストアする場合は、一旦完全バックアップファイルを Amazon S3 に保存します。
完全バックアップフィル(データベース.bak)ファイルには、以下の情報を保存できます。
- データ
- スキーマ
- ストアドプロシージャ
- トリガー
などすべてのデータベースオブジェクトが含まれます。
SQL Server Management Studio より取得できる RDS のバックアップ
SQL Server Management Studio より RDS へアクセスをして以下のようにバックアップを取得することができます。
取得したいデータベースを選択して右クリックし「タスク」-「バックアップ」を選択します。
下図のように「復旧モデル」が「完全」になっています。
「バックアップの種類」は「完全」「差分」「トランザクション ログ」の 3 種類から選択できます。
「master」データベースは下図のように復旧モデルが「単純」しかありません。
ストアドプロシージャ(STORED PROCEDURE)とは
ストアドプロシージャ(STORED PROCEDURE)とは、データベースに対する処理をまとめて 1 つのプログラムとし、RDBMS(リレーショナル・データベース・マネジメント・システム)に保存したものを言います。
SQL 文も 1 行だけでなく、複数行記述できるほか、SQL 文の結果に対する条件分岐や繰り返し処理も可能になるため、より複雑な処理が可能になります。
Microsoft SQL Server は Transact-SQL(T-SQL)という言語を使って記述します。
■AWS 公式サイトの「暗号化による完全バックアップ」の例
exec msdb.dbo.rds_backup_database |
- exec ← ストアドプロシージャを実行します。(exec は execute とも記述できます)
- msdb.dbo.rds_backup_database ← プロシージャ名
- msdb ← データベース名(システムデータベース)
ストアドプロシージャは下図のようにデータベース内にあります。
RDS の場合は、下図のように「rds_backup_database」など、RDS に特化したプロシージャを保有しています。
.bak ファイルを使用する際の制限事項
■1 TB を超えるサイズのデータベースのバックアップはサポート対象外
1 TB を超えるサイズのデータベースのバックアップはサポート対象外になります。
「不可能」ではなく「サポート対象外」ということなので、できるかもしれませんがサポートされないので自己責任となります。
■マルチ AZ DB インスタンスでは、完全復旧モデルのみリストア可能
マルチ AZ DB インスタンスでは、完全復旧モデルでバックアップされたデータベースのみリストア(復元)できます。
ネイティブバックアップとは?
AWS の公式サイトでよく使われる「ネイティブバックアップ」という用語ですが、オンプレの Microsoft SQL Server で取得されるバックアップのことを言います。
Amazon S3 バケットにアクセスできるロールが必要
RDS へリストア(復元)する際に、RDS から S3 へのアクセスが必要になります。
また、「ユーザー」や「個人アカウント」という概念ではなく、RDS の「サービス」が S3 へアクセスするという考え方になります。
サービスの場合は「サービスロール」と言います。
例
{ |
■sts:AssumeRole とは
- sts ← Security Token Service(セキュリティ・トークン・サービス)
AWS 公式サイトでは、「AWS Security Token Service (AWS STS) を使用して、AWS リソースへのアクセスをコントロールできる一時的セキュリティ認証情報を持つ、信頼されたユーザーを作成および提供することができます。」と記載があります。
Amazon RDS プロシージャ
RDS 上の SQL Server データベース(RDS for SQL Server)に接続し、以下の Amazon RDS プロシージャを呼び出して操作することができます。
接続するには「SQL Server Management Studio(SSMS)」を利用します。
以下のストアドプロシージャが利用できます。
- rds_backup_database – 1 つのデータベースを S3 バケットにバックアップします。RDS のバックアップを取得する際に呼び出します。
- rds_restore_database – S3 から 1 つのデータベースを復元します。
- rds_task_status – バックアップの実行を追跡しタスクを復元します。
- rds_cancel_task – 実行中のバックアップをキャンセルするかタスクを復元します。
rds_backup_database プロシージャ
■AWS 公式サイトの「暗号化による完全バックアップ」の例
exec msdb.dbo.rds_backup_database |
バックアップ(完全バックアップファイル)のリストア(復元)
リストアする場合は、RDS 上の SQL Server データベース(RDS for SQL Server)に接続し、上で解説した Amazon RDS プロシージャを呼び出してリストアします。
接続するには「SQL Server Management Studio(SSMS)」を利用します。
リストアする場合は「rds_restore_database」を呼び出してリストアします。
- rds_restore_database – S3 から 1 つのデータベースを復元します。
DMS(Database Migration Service)を利用する場合
DMS(Database Migration Service)を利用しても SQL Server を RDS へ移行することができます。
コメント