AWS Database Migration Service(DMS)は、データベースをAWSに移行するためのサービスです。ターゲットデータベースは、リレーショナルデータベースサービスでホストされているデータベース、DynamoDB、RedShiftなど、AWSでサポートされているデータベースの1つである必要があります。ソースデータベースは、AWS上のデータベース、ローカルデータベース、またはOracleCloudPlatformなどの他のクラウドプラットフォーム上のデータベースである可能性があります。ソースデータベースの移行中のダウンタイムはゼロです。
データベースを移行する理由
次のようないくつかの理由で、データベースの移行が必要になる場合があります。
- 不均一な移行 別のデータベースエンジンに。たとえば、OracleデータベースからMySQLデータベースへ。ソースデータベースでサポートされていないデータベースタイプなど、別のデータベースの機能を利用するには、異種の移行が必要になる場合があります。商用データベースは、オープンソースデータベースに移行できます。リレーショナルデータベースは、NoSQLデータベースに移行することでメリットが得られる可能性があります。
- 均一な移行 同じデータベースエンジンタイプになりますが、プラットフォームが異なります。同種の移行を使用して、データベースのバックアップを作成できます。ローカルデータベースは、クラウドプラットフォームに移行することでメリットが得られる可能性があります。
- 継続的なデータレプリケーション テストと開発、およびデータベースの地域配布を目的として、さまざまなターゲットデータベースに送信します。
- 複数のソースデータベース 統合のために単一のデータベースに移行できます。
2つの記事では、DatabaseMigrationServiceを使用したOracleデータベースのMySQLデータベースへの移行について説明します。この記事には次のセクションがあります:
- 環境の設定
- IAMユーザーの作成
- 暗号化キーの作成
- RDSでのOracleおよびMySQLDBインスタンスの作成
- DMS用のOracleおよびMySQLDBの準備
- 結論
環境の設定
唯一の前提条件は、このリンクで作成できるAWSアカウントです。
IAMユーザーの作成
ユーザーは、DMSにアクセスするためにIAMアクセス許可とロールを取得する必要があります。 DMSから他のサービスにアクセスするには、追加のIAMアクセス許可が必要です。 KMS、IAM、EC2、CloudWatchなどの他のAWSサービスからいくつかのアクションが必要です。このセクションでは、IAMユーザーを作成し、必要な一連のアクセス許可のポリシーを添付します。 AWS IAMサービスを選択し、ユーザーの追加をクリックします 、図1に示すように。
図1: ユーザーを追加
ユーザーの追加 、ユーザー名を指定します (dvohra)そして両方のアクセスタイプを選択します 図2に示すように、オプション。
図2: 新しいユーザーの構成
カスタムパスワードを選択します 図3に示すように、[コンソールパスワード]のオプションを選択し、カスタムパスワードを指定して、[次へ]をクリックします。
図3: パスワードの指定
権限 、既存のポリシーを直接添付するを選択します オプションを選択し、ポリシーの作成をクリックします 図4に示すように、添付するポリシーを作成します。
図4: ユーザーの追加>ポリシーの作成
ポリシーの作成 、独自のポリシーを作成を選択します 図5に示すように、オプション。
図5: 独自のポリシーを作成する
レビューポリシー 、ポリシー名(DMS)を指定し、次のポリシーをポリシードキュメントにコピーします 。
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "dms:*", "Resource": "*" }, { "Effect": "Allow", "Action": [ "kms:ListAliases", "kms:DescribeKey" ], "Resource": "*" }, { "Effect": "Allow", "Action": [ "iam:GetRole", "iam:PassRole", "iam:CreateRole", "iam:AttachRolePolicy" ], "Resource": "*" }, { "Effect": "Allow", "Action": [ "ec2:DescribeVpcs", "ec2:DescribeInternetGateways", "ec2:DescribeAvailabilityZones", "ec2:DescribeSubnets", "ec2:DescribeSecurityGroups", "ec2:ModifyNetworkInterfaceAttribute", "ec2:CreateNetworkInterface", "ec2:DeleteNetworkInterface" ], "Resource": "*" }, { "Effect": "Allow", "Action": [ "cloudwatch:Get*", "cloudwatch:List*" ], "Resource": "*" }, { "Effect": "Allow", "Action": [ "logs:DescribeLogGroups", "logs:DescribeLogStreams", "logs:FilterLogEvents", "logs:GetLogEvents" ], "Resource": "*" } ] }
ポリシーの検証をクリックします また、メッセージがポリシーが有効である場合 が生成されたら(図6を参照)、[ポリシーの作成]をクリックします 、図6にも示されています。
図6: ポリシーの作成
ユーザーの作成 ウィザードで、新しく作成した DMSを選択します ポリシーを選択し、図7に示すように、[次へ]をクリックします。
図7: ユーザーに添付するポリシーの選択
[レビュー]で、[ユーザーの作成]をクリックします 、図8に示すように。
図8: レビュー>ユーザーの作成
図9に示すように、新しいユーザーが作成されます。
図9: 新しいユーザーが作成されました
新しいユーザーがIAMコンソール>ユーザーに追加されます 、図10に示すように。
図10: IAMユーザー
新しいユーザーを作成したら、DMS移行を作成するために新しいユーザーとしてログインする必要があります。 コンソールログインリンク 新しいユーザーが新しいユーザーのセキュリティクレデンシャルから取得されたときにログインするには(図11を参照)。
図11: コンソールログインリンク
DMSのIAMユーザーを作成したら、図12に示すように、rootユーザーとしてサインアウトします。
図12: rootユーザーとしてサインアウト
図13に示すように、ブラウザでログインURLを開き、ユーザー名とパスワードを指定して、[サインイン]をクリックします。
図13: 新しいIAMユーザーとしてログインする
暗号化キーの作成
前のセクションで作成したIAMユーザーとしてログインしていることを確認してください。 DMS移行を作成するときにマスターキーとして使用される暗号化キーを作成する必要があります。暗号化は、rootユーザーとしてではなく、新しいIAMユーザーとしてログインしているときに作成する必要があります。 暗号化キーを選択します IAMコンソールで、[キーの作成]をクリックします 、図14に示すように。
図14: キーを作成
エイリアスと説明の作成 、エイリアスを指定します ( dms )、図15に示すように、[次のステップ]をクリックします。
図15: エイリアスの指定
タグは必要ないため、[タグの追加]で[次のステップ]をクリックします。 [主要な管理者]で、管理者として追加されたIAMユーザーを選択します(図16を参照)。 [キー管理者にこのキーの削除を許可する]として[キーの削除]を選択し、[次のステップ]をクリックします。
図16: 主な管理者
[キー使用許可の定義]で、暗号化キーを使用できるIAMユーザーとロールを選択します。新しいIAMユーザーとdms-vpc-roleを選択します 、図17に示すように、[次のステップ]をクリックします。
図17: キー使用許可の定義
図18に示すように、[キーポリシーのプレビュー]で[完了]をクリックします。
図18: キーポリシーのプレビュー
図19に示すように、新しい暗号化キーが作成されます。
図19: 作成された暗号化キー
RDSでのOracleおよびMySQLDBインスタンスの作成
DMS移行のソースとターゲットとしてそれぞれOracleとMySQLRDSDBインスタンスを使用するため、2つのRDSインスタンスを作成します。1つはOracle SEデータベース用で、もう1つはMySQL用です。 「詳細設定の構成」でRDSインスタンスを作成する場合は、Oracle DBの図20に示すように、「ネットワークとセキュリティ」を選択して新しいVPCを作成し、新しいDBサブネットグループを作成し、新しいセキュリティグループを作成します。 AWSアカウントにVPCの最大数に制限がある場合は、RDSインスタンスを作成する前に未使用のVPCをいくつか削除してください。
図20: 詳細設定の構成
OracleとMySQLのRDSインスタンスを図21に示します。
図21: RDSDBインスタンス
自動的に作成されたセキュリティグループには、変更が必要な必要なインバウンド/アウトバウンドルールがありません。図22のMySQLDBに示すように、RDSコンソールのセキュリティグループのリンクをクリックします。
図22: セキュリティグループ
図23に示すように、セキュリティグループInboundの[編集]をクリックします。
図23: セキュリティグループ>編集
図24に示すように、[インバウンドルールの編集]で、[タイプ]を[すべてのトラフィック]、[プロトコル]を[すべて]、[ポート範囲]を[0-65535]、[送信元をどこでも]を選択し、[保存]をクリックします。
図24: インバウンドルールを編集する
変更されたインバウンドルールを図25に示します。
図25: 変更されたインバウンドルール
アウトバウンドルールは、デフォルトですべてのトラフィックを許可します(図26を参照)。
図26: アウトバウンドルール
図27に示すように、RDS上のOracle DB用に作成されたデフォルトのセキュリティグループも、すべてのトラフィックを許可するわけではありません。
図27: RDS上のOracleDBのセキュリティグループ
図28に示すように、MySQLデータベースセキュリティグループのインバウンドルールを変更するのと同様に、[編集]ボタンを使用してRDS上のOracle DBのセキュリティグループインバウンドを変更し、すべてのトラフィックを許可します。
図28: RDS上のOracleDBのセキュリティグループ
図29のMySQLDBに示すように、インスタンスの作成中に各DBインスタンスに構成されたマスターユーザー名とマスターパスワードをメモします。また、RDSでMySQL DBを作成する場合、構成設定(データベース名)はありません。 、DBインスタンス識別子、マスターユーザー名、マスターパスワード)は、「MYSQL」などのMySQL予約語である必要があります。
図29: マスターユーザー名とマスターパスワード
DMS用のOracleおよびMySQLDBの準備
RDS上のOracleDBとMySQLDBをそれぞれDMSソースとターゲットとして使用するには、DBインスタンスでいくつかの設定を構成する必要があります。コマンドラインシェルでOracleおよびMySQLDBインスタンスに接続して、設定を構成します。コマンドラインシェルでRDSDBインスタンスに接続するには、RDSインスタンスのエンドポイントを取得する必要があります。 RDS上のOracleDBのエンドポイントは、図30のRDSコンソールに示されています。
図30: RDS上のOracleDBのエンドポイント
次のsqlplusを使用してOracleDBインスタンスに接続します コマンド。HOST、SID、PORTはユーザーごとに異なる可能性があります。 HOST値は、エンドポイントからポートサフィックスを削除することによって取得されます。
sqlplus [email protected](DESCRIPTION=(ADDRESS=(PROTOCOL=TCP) (HOST=orcl.crbmlbxmp8qi.us-east-1.rds.amazonaws.com)(PORT=1521)) (CONNECT_DATA=(SID=ORCL)))
SQL * Plusコマンドラインインターフェイスは、RDS上のOracle DBに接続されます(図31を参照)。
図31: OracleDBに接続されたSQL*PlusCLI
DMSのデータベースレベルの補足ログを有効にします。
exec rdsadmin.rdsadmin_util.alter_supplemental_logging('ADD');
図32に示すように、PL/SQLプロシージャが完了します。
図32: データベースレベルの補足ログの有効化
また、 PRIMARY KEYを有効にします データベースレベルでのロギング。
exec rdsadmin.rdsadmin_util.alter_supplemental_logging ('ADD','PRIMARY KEY');
主キー 図33に示すように、ロギングが有効になります。
図33: 主キーロギングの有効化
RDS上のOracleDBインスタンスのREDOログのアーカイブを構成します。
exec rdsadmin.rdsadmin_util.set_configuration ('archivelog retention hours',24);
図34に示すように、アーカイブが構成されます。
図34: アーカイブの構成
データベースを移行すると、テーブルとテーブルデータも移行されます。データベーステーブルを作成しますwlslog Oracleデータベース内。
CREATE TABLE wlslog(time_stamp VARCHAR2(255) PRIMARY KEY,category VARCHAR2(255),type VARCHAR2(255),servername VARCHAR2(255), code VARCHAR2(255),msg VARCHAR2(255)); INSERT INTO wlslog(time_stamp,category,type,servername,code,msg) VALUES('Apr-8-2014-7:06:16-PM-PDT','Notice','WebLogicServer', 'AdminServer','BEA-000365','Server state changed to STANDBY'); INSERT INTO wlslog(time_stamp,category,type,servername,code,msg) VALUES('Apr-8-2014-7:06:17-PM-PDT','Notice','WebLogicServer', 'AdminServer','BEA-000365','Server state changed to STARTING'); INSERT INTO wlslog(time_stamp,category,type,servername,code,msg) VALUES('Apr-8-2014-7:06:18-PM-PDT','Notice','WebLogicServer', 'AdminServer','BEA-000365','Server state changed to ADMIN'); INSERT INTO wlslog(time_stamp,category,type,servername,code,msg) VALUES('Apr-8-2014-7:06:19-PM-PDT','Notice','WebLogicServer', 'AdminServer','BEA-000365','Server state changed to RESUMING'); INSERT INTO wlslog(time_stamp,category,type,servername,code,msg) VALUES('Apr-8-2014-7:06:20-PM-PDT','Notice','WebLogicServer', 'AdminServer','BEA-000361','Started WebLogic AdminServer'); INSERT INTO wlslog(time_stamp,category,type,servername,code,msg) VALUES('Apr-8-2014-7:06:21-PM-PDT','Notice','WebLogicServer', 'AdminServer','BEA-000365','Server state changed to RUNNING'); INSERT INTO wlslog(time_stamp,category,type,servername,code,msg) VALUES('Apr-8-2014-7:06:22-PM-PDT','Notice','WebLogicServer', 'AdminServer','BEA-000360','Server started in RUNNING mode');
PRIMARY KEYのないテーブルの補足ログを追加するには ロギング、または PRIMARY KEYの場合 データベースレベルでのログが設定されていない場合は、テーブルを変更して補足ログを追加します。
alter table wlslog add supplemental log data (ALL) columns;
CREATE TABLEで補足ログを有効にすることもできます ステートメント。
CREATE TABLE wlslog(time_stamp VARCHAR2(255) PRIMARY KEY, category VARCHAR2(255),type VARCHAR2(255), servername VARCHAR2(255), code VARCHAR2(255),msg VARCHAR2(255), supplemental log data(ALL) columns);
前の2つのコマンドからの出力を図35に示します。
図35: 作成済みのテーブルまたは新しいテーブルへの補足ログの追加
次に、DMS移行のためにRDS上のMySQLDBインスタンスを準備します。 MySQL DBに接続するには、エンドポイントを取得します(図36を参照)。
図36: RDS上のMySQLDBのエンドポイント
ホストは、エンドポイントからポートサフィックスを削除することによって取得されます。 MySQL CLIを使用して、コマンドラインからMySQLに接続します。
mysql -h mysqldb.crbmlbxmp8qi.us-east-1.rds.amazonaws.com -P 3306 -u dvohra -p
図37に示すように、MySQLCLIはRDS上のMySQLDBインスタンスに接続されます。
図37: MySQLCLIからMySQLに接続する
次に、MySQLデータベースの読み取りおよび書き込み権限を作成してDMSユーザー(dvohra)に付与します。
CREATE USER '<user acct>'@'%' IDENTIFIED BY <user password>';??? Remove as user dvohra already exists GRANT ALTER, CREATE, DROP, INDEX, INSERT, UPDATE, DELETE, SELECT ON myschema.* TO '<user acct>'@'%'; GRANT ALL PRIVILEGES ON awsdms_control.* TO '<user acct>'@'%';
ユーザーアカウントをdvohraに置き換えて、いくつかのコマンドからの出力を図38に示します。
図38: MySQLデータベースにDMSユーザーへのアクセスを許可する
結論
この記事では、AWS Database Migration Serviceを使用して、RDS上のOracleデータベースをRDS上のMySQLデータベースに移行する方法を紹介しました。この記事では、ソースデータベースとターゲットデータベースの設定について説明しました。次の記事では、移行を作成して実行します。