本投稿は、 Nelly Susanto による記事 「Assess and migrate your database using AWS DMS Schema Conversion CLI」を翻訳したものです。
DMS Schema Conversion は、AWS Database Migration Service (AWS DMS) の機能で、AWS DMS コンソールと AWS Command Line Interface (AWS CLI) からアクセスできます。これは AWS DMS のフルマネージドな機能で、データベースの評価と変換が可能です。このマルチパートシリーズの 2 回目の投稿では、DMS Schema Conversion コンポーネントの作成と、評価や変換などの移行アクティビティの実行を自動化する方法を紹介します。このシリーズの 最初の投稿 では、DMS Schema Conversion の設定における前提条件の準備、DMS Schema Conversion の設定、AWS DMS コンソールを通じた移行アクティビティの実行についてのガイダンスを提供しています。
AWS CLI を使用する主な利点の 1 つは、特に大規模なデータベース移行において移行プロセスを自動化および合理化できることです。 この投稿では、DMS Schema Conversion を使用して Amazon Relational Database Service (Amazon RDS) for SQL Server データベースを評価し、Amazon Aurora PostgreSQL-Compatible Edition に変換する方法を記載します。DMS Schema Conversion コンポーネントのセットアップと構成の自動化、評価レポートの生成、データベースストレージとコードオブジェクトの変換、変換されたコードの Amazon Simple Storage Service (Amazon S3) へのエクスポート、そして変換されたコードをターゲットデータベースに適用する方法について、順を追って説明します。
ソリューションの概要
DMS Schema Conversion CLI は AWS CLI Version 2 で利用可能です。現在インストールされているバージョンを確認するには、コマンドプロンプトで次のコマンドを使用してください:
aws --version
aws-cli/2.17.38 Python/3.11.9 Darwin/24.3.0 exe/x86_64
AWS CLI Version 2 のインストール方法については、AWS CLI の使用開始をご覧ください。
DMS Schema Conversionの主要コンポーネントは以下の通りです:
- インスタンスプロファイル – インスタンスプロファイルは、DMS Schema Conversion が使用するネットワークとセキュリティを定義します。また、内部の DMS Schema Conversion リソースが起動される場所も決定します。
- データプロバイダー – データプロバイダーは、DMS Schema Conversion が接続するためのデータベースタイプ、ソースおよびターゲットの接続詳細に関する情報を保存します。
- 移行プロジェクト – 移行プロジェクトは、すべての DMS Schema Conversion 移行アクティビティの基盤です。ここでは、インスタンスプロファイル、ソースおよびターゲットのデータプロバイダー、移行ルールなどの移行エンティティを定義します。
まず、AWS CLI を使用して主要な DMS Schema Conversion コンポーネントを作成する方法を説明します。
次に、データベースオブジェクトの評価や変換など、移行作業を実行するためのコマンドについて説明します。
このポストでは、AWS リージョンとして us-east-1 を使用し、デフォルトの AWS プロファイルを使用します。
export AWS_DEFAULT_REGION='us-east-1'
export AWS_PROFILE=default
AWS CLI の環境変数の設定方法については、AWS CLI の環境変数の設定をご覧ください。
インスタンスプロファイルの作成
インスタンスプロファイルは、DMS Schema Conversion が使用するネットワークとセキュリティの設定を指定し、内部の DMS Schema Conversion リソースがどこにデプロイされるかを決定します。インスタンスプロファイルの作成プロセスの一部として、DMS Schema Conversion が使用すべきインスタンスプロファイル名、ネットワークタイプ、サブネットグループ、セキュリティグループを指定します。
aws dms create-instance-profile \
--publicly-accessible \
--network-type IPV4 \
--instance-profile-name "ip-demo" \
--description "Instance profile sql to Aurora PG" \
--subnet-group-identifier "sc2" \
--vpc-security-groups sg-052b3xxx \
--query 'InstanceProfile.InstanceProfileArn' \
--output text
#Output return Instance Profile arn
arn:aws:dms:us-east-1:123456789012:instance-profile:JX6FWLF6T5E4JJXXD5YCDOCABI
データプロバイダーの作成
データプロバイダーは、DMS Schema Conversion で使用されるデータベースの種類と、ソースデータベースとターゲットデータベースに関する接続情報に関するメタデータを定義します。このステップでは、データプロバイダーの名前、データベースエンジンの種類、データベースサーバー名、ポート、データベースに接続するための DMS Schema Conversion の SSL モードなどのデータベース設定を指定して、データプロバイダーを作成します。
#Create Source (SQL Server) Data Provider
aws dms create-data-provider \
--data-provider-name "demo-sql" \
--description "sql server" \
--engine sqlserver \
--settings "{\"MicrosoftSqlServerSettings\": {\"ServerName\": \"tsw.c3wkj7xxxx.us-east-1.rds.amazonaws.com\", \"Port\": 1433, \"DatabaseName\": \"tsw\"}}" \
--query 'DataProvider.DataProviderArn' \
--output text
#Return of source data provide arn
arn:aws:dms:us-east-1:123456789012:data-provider:MVPJGML3DJBEJJMYVBZSGRYSMA
#Create Target (Aurora PostgreSQL) Data Provider
aws dms create-data-provider \
--data-provider-name "demo-pg" \
--description "Aurora PostgreSQL" \
--engine "aurora-postgresql" \
--settings "{\"PostgreSqlSettings\": {\"ServerName\": \"apg1-instance-1.c3wkj7xxxx.us-east-1.rds.amazonaws.com\", \"Port\": 1234, \"DatabaseName\": \"postgres\", \"SslMode\": \"none\"}}" \
--query 'DataProvider.DataProviderArn' \
--output text
#Output return of target data provider arn
arn:aws:dms:us-east-1:123456789012:data-provider:L72LHMJATZB2TJZIQXMVM5ORM4
移行プロジェクトの作成
DMS Schema Conversion の移行プロジェクトは、インスタンスプロファイル、ソースとターゲットのデータプロバイダー、移行ルールなどの主要コンポーネントの統合を調整します。AWS CLI コマンドを使用して移行プロジェクトを作成するには、まずプロジェクト名を指定します。次に、プロジェクトが使用するインスタンスプロファイルを関連付けます。次に、ソースとターゲットのデータプロバイダーとそのシークレット、および AWS Secrets Manager の AWS ID および AWS Identity and Access Management(IAM)の役割を指定します。最後に、評価レポートとエクスポートされた変換コードの Amazon S3 パスを設定し、Amazon S3 バケットの IAM ロールを指定します。
aws dms create-migration-project \
--migration-project-name "demo-sql-apg" \
--instance-profile-identifier "arn:aws:dms:us-east-1:123456789012:instance-profile:JX6FWLF6T5E4JJXXD5YCDOCABI" \
--source-data-provider-descriptors "{\"DataProviderIdentifier\": \"arn:aws:dms:us-east-1:123456789012:data-provider:MVPJGML3DJBEJJMYVBZSGRYSMA\", \"SecretsManagerSecretId\": \"arn:aws:secretsmanager:us-east-1:123456789012:secret:sql-aiml-9Wmj68\", \"SecretsManagerAccessRoleArn\": \"arn:aws:iam::123456789012:role/aws-dms-sc-oltp\"}" \
--target-data-provider-descriptors "{\"DataProviderIdentifier\": \"arn:aws:dms:us-east-1:123456789012:data-provider:L72LHMJATZB2TJZIQXMVM5ORM4\", \"SecretsManagerSecretId\": \"arn:aws:secretsmanager:us-east-1:123456789012:secret:apg1-Lzc3TT\", \"SecretsManagerAccessRoleArn\": \"arn:aws:iam::123456789012:role/aws-dms-sc-oltp\"}" \
--description description \
--schema-conversion-application-attributes "{\"S3BucketPath\": \"s3://amzn-s3-demo-bucket\", \"S3BucketRoleArn\": \"arn:aws:iam::123456789012:role/aws-dms-sc-oltp\"}" \
--query 'MigrationProject.MigrationProjectArn' \
--output text
#Output project arn
arn:aws:dms:us-east-1:123456789012:migration-project:HYY6WUCDVRG43NTF2JK5URI6II
ソース選択ルールの作成
DMS Schema Conversion のコンポーネントを作成する AWS CLI コマンドについて説明してきました。それでは、移行アクティビティを実行するコマンドを見てみましょう。最初のステップは、DMS Schema Conversion で移行プロセスに含めたいデータベースオブジェクトを定義するソースの選択ルールを作成することです。以下は、ユースケースに合わせて必要に応じて変更できる選択ルールの例です。
cat > source_rules.json << EOF
{
"rules": [
{
"rule-type": "selection",
"rule-id": "1",
"rule-name": "1",
"object-locator": {
"server-name": "tsw.c3wkj7xxxx.us-east-1.rds.amazonaws.com",
"database-name": 'tsw',
"schema-name": 'dbo'
},
"rule-action": "explicit"
]}
EOF
このルールを設定したら、次のステップであるデータベースオブジェクトの評価と変換に進むことができます。
アセスメントレポートの作成
アセスメントを開始するには、start-metadata-model-assessment コマンドを使用します。移行プロジェクトの Amazon Resouce Name (ARN) と、前のセクションで作成したソースの選択ルールを指定してください。
aws dms start-metadata-model-assessment \
--migration-project-identifier arn:aws:dms:us-east-1:123456789012:migration-project:35TRQ7CYINHXXK7HQYMD2BUS64 \
--selection-rules file://source_rules.json
#Response
{
"RequestIdentifier": "44fc9838-146f-41d8-b13c-923b3cc704c2"
}
評価の進捗状況を確認するには、describe-metadata-model-assessments コマンドを使用してください。
aws dms describe-metadata-model-assessments \
--migration-project-identifier arn:aws:dms:us-east-1:123456789012:migration-project:35TRQ7CYINHXXK7HQYMD2BUS64\
--query 'Requests[0].Status' --output text
#Response
IN_PROGRESS
SUCCESS
This is the full list of operation statuses: IN_PROGRESS, SUCCESS, FAILED, DUPLICATE, RETRY, CANCELING, CANCELLED.
評価レポートのエクスポート
評価レポートを作成したら、export-metadata-model-assessment コマンドを使用してレポートを Amazon S3 にエクスポートします。PDF 形式のサマリレポートには、移行の複雑さの推定値が記載されています。DMS Schema Conversion には、手動でのアクションが必要なオブジェクトや推奨事項を含む詳細なレポートを CSV 形式で生成するオプションもあります。
以下のコードは、サマリレポートを PDF 形式でエクスポートする方法を示しています。サマリではなく詳細なレポートが必要な場合は、assessment-report-type を csv に設定してください。
aws dms export-metadata-model-assessment \
--migration-project-identifier arn:aws:dms:us-east-1:123456789012:migration-project:35TRQ7CYINHXXK7HQYMD2BUS64\
--selection-rules file://source_rules.json\
--file-name "assessment report" \
--assessment-report-types "pdf"
#Assessment reports are available in S3
Exporting metadata model assessment...
{
"PdfReport": {
"S3ObjectKey": "demo-sql-apg/report.pdf",
"ObjectURL": "https://sc-123456789.s3.amazonaws.com/demo-sql-apg/report.pdf"
}
}
{
"CsvReport": {
"S3ObjectKey": "demo-sql-apg/report.zip",
"ObjectURL": "https://sc-123456789.s3.amazonaws.com/demo-sql-apg/report.zip"
}
}
変換を実行
変換を実行する準備ができたら、start-metadata-model-conversion を使用します。以前に作成したマイグレーションプロジェクトの ARN とソースの選択ルールを指定してください:
aws dms start-metadata-model-conversion \
--migration-project-identifier arn:aws:dms:us-east-1:123456789012:migration-project:35TRQ7CYINHXXK7HQYMD2BUS64 \
--selection-rules file://source_rules.json
describe-metadata-model-conversions コマンドを使用して、変換の進捗状況を確認できます:
aws dms describe-metadata-model-conversions \
--migration-project-identifier arn:aws:dms:us-east-1:123456789012:migration-project:35TRQ7CYINHXXK7HQYMD2BUS64\
--query 'Requests[0].Status' --output text
#Response
IN_PROGRESS
SUCCESS
変換したコードをSQLとしてエクスポート
変換が完了すると、変換されたコードは移行プロジェクト内で利用可能になります。SQL としてエクスポートするか、ターゲットデータベースに直接適用することができます(適用方法については次のセクションを参照してください)。エクスポートまたは適用する前に、まずターゲットの選択ルールでデータベースオブジェクトを定義する必要があります。以下のコードは、ターゲット選択ルールの例です。必要に応じて、ユースケースに合わせて修正することができます。
cat > target_rules.json << EOF
{
"rules": [
{
"rule-type": "selection",
"rule-id": "1",
"rule-name": "1",
"object-locator": {
"server-name": " apg1-instance-1.c3wkj7xxxx.us-east-1.rds.amazonaws.com",
"schema-name": 'tsw_dbo'
},
"rule-action": "explicit"
}
]
}
EOF
これで、start-metadata-model-export-as-script コマンドを使用して、変換されたコードを SQL としてエクスポートできます。移行プロジェクト、ターゲット選択ルール、Origin には対象として Target を指定、ファイル名を記載してください:
aws dms start-metadata-model-export-as-script \
--migration-project-identifier arn:aws:dms:us-east-1:123456789012:migration-project:35TRQ7CYINHXXK7HQYMD2BUS64 \
--selection-rules file://target_rules.json \
--origin TARGET \
--file-name "SaveAsSQL"
エクスポートの進行状況を確認するには、describe-metadata-model-export-as-script コマンドを使用してください:
aws dms describe-metadata-model-exports-as-script \
--migration-project-identifier arn:aws:dms:us-east-1:123456789012:migration-project:35TRQ7CYINHXXK7HQYMD2BUS64 \
--query 'Requests[0].Status' --output text
#Response
IN_PROGRESS
SUCCESS
変換されたコードのターゲットデータベースへの適用
変換されたコードをターゲットデータベースに適用するには、start-metadata-model-export-to-target コマンドを使用します。以前に作成した移行プロジェクトの ARN とターゲットの選択ルールを指定してください:
aws dms start-metadata-model-export-to-target \
--migration-project-identifier arn:aws:dms:us-east-1:123456789012:migration-project:35TRQ7CYINHXXK7HQYMD2BUS64 \
--selection-rules file://target_rules.json \
--overwrite-extension-pack
適用の進行状況を確認するには、describe-metadata-model-exports-to-target を使用します:
aws dms describe-metadata-model-exports-to-target \
--migration-project-identifier arn:aws:dms:us-east-1:123456789012:migration-project:35TRQ7CYINHXXK7HQYMD2BUS64\
--query 'Requests[0].Status' --output text
#Response
IN_PROGRESS
SUCCESS
移行後のクリーンアップ
移行が完了したら、DMS Schema Conversion リソースをクリーンアップできます。
#Cleanup
# Delete migration project
aws dms delete-migration-project \
> --migration-project-identifier arn:aws:dms:us-east-1:123456789012:migration-project:HYY6WUCDVRG43NTF2JK5URI6II
#Response
{
"MigrationProject": {
"MigrationProjectName": "demo-sql-apg",
"MigrationProjectArn": "arn:aws:dms:us-east-1:123456789012:migration-project:HYY6WUCDVRG43NTF2JK5URI6II",
"MigrationProjectCreationTime": "2024-08-01T17:29:05.681257 + 00:00",
"SourceDataProviderDescriptors": [
{
"SecretsManagerSecretId": "arn:aws:secretsmanager:us-east-1:123456789012:secret:sql-aiml-9Wmj68",
"SecretsManagerAccessRoleArn": "arn:aws:iam::123456789012:role/aws-dms-sc-oltp",
"DataProviderName": "demo-sql",
"DataProviderArn": "arn:aws:dms:us-east-1:123456789012:data-provider:MVPJGML3DJBEJJMYVBZSGRYSMA"
}
],
"TargetDataProviderDescriptors": [
{
"SecretsManagerSecretId": "arn:aws:secretsmanager:us-east-1:123456789012:secret:apg1-Lzc3TT",
"SecretsManagerAccessRoleArn": "arn:aws:iam::123456789012:role/aws-dms-sc-oltp",
"DataProviderName": "demo-pg",
"DataProviderArn": "arn:aws:dms:us-east-1:123456789012:data-provider:L72LHMJATZB2TJZIQXMVM5ORM4"
}
],
"InstanceProfileArn": "arn:aws:dms:us-east-1:123456789012:instance-profile:JX6FWLF6T5E4JJXXD5YCDOCABI",
"InstanceProfileName": "ip-demo",
"TransformationRules": "{\"rules\":[]}",
"SchemaConversionApplicationAttributes": {
"S3BucketPath": "s3://amzn-s3-demo-bucket",
"S3BucketRoleArn": "arn:aws:iam::123456789012:role/aws-dms-sc-oltp"
}
}
}
#Delete source data provider
aws dms delete-data-provider --data-provider-identifier arn:aws:dms:us-east-1:123456789012:data-provider:MVPJGML3DJBEJJMYVBZSGRYSMA
#Response
{
"DataProvider": {
"DataProviderName": "demo-sql",
"DataProviderArn": "arn:aws:dms:us-east-1:123456789012:data-provider:MVPJGML3DJBEJJMYVBZSGRYSMA",
"DataProviderCreationTime": "2024-08-01T17:27:12.902435 + 00:00",
"Engine": "sqlserver",
"Settings": {
"MicrosoftSqlServerSettings": {
"ServerName": "tsw.c3wkj7xxxx.us-east-1.rds.amazonaws.com",
"Port": 1433,
"DatabaseName": "tsw",
"SslMode": "none"
}
}
}
}
#Delete Target data provider
aws dms delete-data-provider --data-provider-identifier arn:aws:dms:us-east-1:123456789012:data-provider:L72LHMJATZB2TJZIQXMVM5ORM4
#Response
{
"DataProvider": {
"DataProviderName": "demo-pg",
"DataProviderArn": "arn:aws:dms:us-east-1:123456789012:data-provider:L72LHMJATZB2TJZIQXMVM5ORM4",
"DataProviderCreationTime": "2024-08-01T17:27:12.902435 + 00:00",
"Engine": "aurora-postgresql",
"Settings": {
"MicrosoftSqlServerSettings": {
"ServerName": "apg1-instance-1.c3wkj7xxxx.us-east-1.rds.amazonaws.com",
"Port": 1234,
"DatabaseName": "postgres",
"SslMode": "none"
}
}
}
}
#Delete Instance Profile
aws dms delete-instance-profile --instance-profile-identifier arn:aws:dms:us-east-1:123456789012:instance-profile:JX6FWLF6T5E4JJXXD5YCDOCABI
#Response
{
"InstanceProfile": {
"InstanceProfileArn": "arn:aws:dms:us-east-1:123456789012:instance-profile:JX6FWLF6T5E4JJXXD5YCDOCABI",
"KmsKeyArn": "arn:aws:kms:us-east-1:123456789012:key/e26404b5-853a-4a33-95b9-99ef043cd207",
"PubliclyAccessible": true,
"NetworkType": "IPV4",
"InstanceProfileName": "ip-demo",
"InstanceProfileCreationTime": "2024-08-01T17:25:33.128750 + 00:00",
"SubnetGroupIdentifier": "sc2",
"VpcSecurityGroups": [
"sg-052b3xxx"
]
}
}
まとめ
特に大規模なデータベース移行の場合で、AWS CLI による DMS Schema Conversion を使用する主な利点は、移行プロセスを自動化および合理化できることです。この投稿では、AWS CLI を使用して、インスタンスプロファイル、データプロバイダー、移行プロジェクトなど、主要な DMS Schema Conversion のコンポーネントを設定する方法を示しました。選択ルールの作成、評価レポートの生成、変換の実行、変換されたコードのエクスポート、変換されたコードのターゲットデータベースへの適用という移行ワークフローを順を追って説明しました。このソリューションは、移行プロセスの自動化と標準化に役立ち、手作業を減らし、リスクを最小限に抑えます。チームが複数のワークロードを同時に移行する必要がある場合に最適です。大規模な移行を計画している場合は、このソリューションを活用して作業を合理化し、移行を加速することをお勧めします。
DMS SC CLI を使用してデータベースオブジェクトを評価および変換する方法の詳細については、AWS DMS CLI リファレンスガイドをご覧ください。
著者について