View a markdown version of this page

SQL Server のセットアップ - AWS 変換

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

SQL Server のセットアップ

SQL Server 環境でこれらのステップを実行して、 AWS 変換モダナイゼーションを有効にします。

データベースのセットアップと設定

ステップ 1: 必要なアクセス許可を持つデータベースユーザーを作成する

必要なアクセス許可を持つ AWS 変換専用のデータベースユーザーを作成します。DMS Schema Conversion ユーザーがすでにある場合は、再利用できます。

SQL Server インスタンスに接続し、次のコマンドを実行します。

-- Create the login in master database USE master; CREATE LOGIN [atx_user] WITH PASSWORD = 'YourStrongPassword123!'; -- Switch to your application database USE [YourDatabaseName]; CREATE USER [atx_user] FOR LOGIN [atx_user]; -- Grant required permissions GRANT VIEW DEFINITION TO [atx_user]; GRANT VIEW DATABASE STATE TO [atx_user]; ALTER ROLE [db_datareader] ADD MEMBER [atx_user]; -- Grant master database permissions USE master; GRANT VIEW SERVER STATE TO [atx_user]; GRANT VIEW ANY DEFINITION TO [atx_user];
注記

モダナイズするデータベースごとに、データベース固有のコマンド (USE、CREATE USER、GRANT) を繰り返します。

db_datareader ロールは、スキーマ変換のみではなく、データ移行にのみ必要です。

  • db_datareader ロールは、データベース内のすべてのテーブルへの読み取りアクセスを許可します。

  • このロールは、データ移行を実行する場合にのみ必要です。

  • スキーマ変換のみ (データ移行なし) の場合、db_datareader ロールは必要ありません

  • スキーマ変換には、他のアクセス許可 (定義の表示、データベースの状態の表示など) で十分です。

ステップ 2: AWS Secrets Manager に認証情報を保存する

データベース認証情報を AWS Secrets Manager に安全に保存します。DMS 用に作成されたシークレットがすでにある場合は、このステップをスキップします。

  1. コンソールで AWS Secrets Manager に移動する

  2. 新しいシークレットの保存を選択する

  3. シークレットを設定します。

    • シークレットタイプ: 他のデータベースの認証情報

    • データベース: Microsoft SQL Server

    • ユーザー名: atx_user (または選択したユーザー名)

    • パスワード: 作成したパスワード

    • サーバー名: SQL Server エンドポイント

    • データベース名: データベース名

    • ポート: 1433 (またはカスタムポート)

  4. [次へ] を選択します。

  5. シークレット名を入力: atx-db-modernization-sqlserver

  6. 必要なタグを追加します (これらのタグは必須です)。

    • キー: プロジェクト、値: atx-db-modernization

    • キー: 所有者、値: データベースコネクタ

  7. 残りの画面でへを選択する

  8. ストアを選択する

  9. 次のステップで使用するシークレット ARN を書き留めます。

重要

データベースパスワードは、「/」、「@」、「」、スペースを除く、印刷可能な ASCII 文字のみを使用する必要があります。削除が予定されているシークレットは、変換の失敗を引き起こす可能性があります。

ステップ 3: 必要な DMS ロールを作成する

AWS 変換には、DMS オペレーションに特定の IAM ロールが必要です。以下の CloudFormation テンプレートを使用して、これらのロールをデプロイします。

注記

AWS アカウントに既存の DMS 関連のロールがある場合は、重複を作成するのではなく、このテンプレートを変更してそれらのリソースを再利用します。

次の内容で dms-roles.yaml という名前のファイルを作成します。

AWSTemplateFormatVersion: '2010-09-09' Description: 'DMS Service Roles for AWS Transform SQL Server Modernization' Resources: DMSCloudWatchLogsRole: Type: AWS::IAM::Role Properties: RoleName: dms-cloudwatch-logs-role AssumeRolePolicyDocument: Version: '2012-10-17' Statement: - Effect: Allow Principal: Service: - dms.amazonaws.com - schema-conversion.dms.amazonaws.com Action: sts:AssumeRole ManagedPolicyArns: - arn:aws:iam::aws:policy/service-role/AmazonDMSCloudWatchLogsRole DMSS3AccessRole: Type: AWS::IAM::Role Properties: RoleName: dms-s3-access-role AssumeRolePolicyDocument: Version: '2012-10-17' Statement: - Effect: Allow Principal: Service: - dms.amazonaws.com - schema-conversion.dms.amazonaws.com Action: sts:AssumeRole Policies: - PolicyName: S3TaggedAccess PolicyDocument: Version: '2012-10-17' Statement: - Effect: Allow Action: - s3:GetBucketLocation - s3:GetBucketVersioning - s3:PutObject - s3:PutBucketVersioning - s3:GetObject - s3:GetObjectVersion - s3:ListBucket - s3:DeleteObject Resource: arn:aws:s3:::atx-db-modernization-* Condition: StringEquals: aws:ResourceAccount: !Ref AWS::AccountId DMSSecretsManagerRole: Type: AWS::IAM::Role Properties: RoleName: dms-secrets-manager-role AssumeRolePolicyDocument: Version: '2012-10-17' Statement: - Effect: Allow Principal: Service: - dms.amazonaws.com - schema-conversion.dms.amazonaws.com Action: sts:AssumeRole Policies: - PolicyName: SecretsManagerTaggedAccess PolicyDocument: Version: '2012-10-17' Statement: - Effect: Allow Action: - secretsmanager:GetSecretValue - secretsmanager:DescribeSecret Resource: '*' Condition: StringEquals: secretsmanager:ResourceTag/Project: atx-db-modernization secretsmanager:ResourceTag/Owner: database-connector DMSVPCRole: Type: AWS::IAM::Role Properties: RoleName: dms-vpc-role AssumeRolePolicyDocument: Version: '2012-10-17' Statement: - Effect: Allow Principal: Service: - dms.amazonaws.com - schema-conversion.dms.amazonaws.com Action: sts:AssumeRole ManagedPolicyArns: - arn:aws:iam::aws:policy/service-role/AmazonDMSVPCManagementRole DMSServerlessRole: Type: AWS::IAM::ServiceLinkedRole Properties: AWSServiceName: dms.amazonaws.com Description: 'Service Linked Role for AWS DMS Serverless' Outputs: DMSCloudWatchLogsRoleArn: Description: ARN of the DMS CloudWatch Logs Role Value: !GetAtt DMSCloudWatchLogsRole.Arn DMSS3AccessRoleArn: Description: ARN of the DMS S3 Access Role Value: !GetAtt DMSS3AccessRole.Arn DMSSecretsManagerRoleArn: Description: ARN of the DMS Secrets Manager Role Value: !GetAtt DMSSecretsManagerRole.Arn DMSVPCRoleArn: Description: ARN of the DMS VPC Role Value: !GetAtt DMSVPCRole.Arn Export: Name: !Sub ${AWS::StackName}-VPCRole DMSServerlessRoleArn: Description: ARN of the DMS Serverless Role Value: !Sub 'arn:aws:iam::${AWS::AccountId}:role/aws-service-role/dms.amazonaws.com/AWSServiceRoleForDMSServerless' Export: Name: !Sub ${AWS::StackName}-ServerlessRole

CLI を使用して CloudFormation AWS スタックをデプロイします。

aws cloudformation create-stack \ --stack-name dms-roles \ --template-body file://dms-roles.yaml \ --capabilities CAPABILITY_NAMED_IAM \ --region us-east-1

または、 AWS コンソールを使用してデプロイします。

  1. AWS コンソールで CloudFormation に移動する

  2. スタックの作成を選択する

  3. テンプレートファイルのアップロードを選択する

  4. dms-roles.yaml ファイルをアップロードする

  5. スタック名の入力: dms-roles

  6. IAM 機能の確認

  7. スタックの作成を選択する

ステップ 4: ネットワークセキュリティを設定する

AWS Transform、SQL Server データベース、およびその他の AWS サービス間のネットワーク接続が適切であることを確認します。

セキュリティグループ設定 (推奨アプローチ)

推奨されるアプローチ: IP ベースのルールではなく、セキュリティグループベースのアクセスコントロールを使用します。これにより、セキュリティが向上し、管理が容易になり、 AWS Transform のアーキテクチャとシームレスに連携します。

セキュリティグループベースのアクセスコントロールを使用する理由

  • DMS Schema Conversion が VPC 内に Elastic Network Interface (ENIsを作成する

  • データベースはパブリックにアクセス可能である必要はありません。

  • AWS 変換ではプライベート IP アドレスが公開されないため、IP ベースのルールが複雑になる

  • セキュリティグループリファレンスは、リソースのスケールに応じて動的で自動的な更新を提供します。

SQL Server セキュリティグループを設定する

AWS 変換で DMS スキーマ変換インスタンスプロファイルを設定するときは、DMS SC インスタンスのセキュリティグループを指定します。データベースセキュリティグループは、この DMS SC セキュリティグループからのインバウンドトラフィックを許可する必要があります。

Step-by-step設定:

  1. DMS Schema Conversion セキュリティグループを特定します。

    • これは、 AWS 変換でインスタンスプロファイルを作成するときに指定されます

    • セキュリティグループ ID を書き留めます (例: sg-0123456789abcdef0)

  2. SQL Server セキュリティグループのインバウンドルールを更新します。

    • タイプ: カスタム TCP

    • ポート: 1433 (またはカスタム SQL Server ポート)

    • ソース: DMS Schema Conversion セキュリティグループ ID

    • 説明:「DMS Schema Conversion アクセスを許可する」

  3. Aurora PostgreSQL ターゲットの場合 (作成後):

    • タイプ: PostgreSQL

    • ポート: 5432 (またはカスタム PostgreSQL ポート)

    • ソース: DMS Schema Conversion セキュリティグループ ID

    • 説明:「DMS Schema Conversion アクセスを許可する」

重要

最小特権セキュリティモデルにとって重要: 組織がデフォルトですべてのトラフィックをブロックする「最小特権」セキュリティモデルを使用している場合は、DMS Schema Conversion Security Group からデータベースポートへのインバウンドトラフィックを明示的に許可する必要があります。すべてのソースまたは IP 範囲に対してポート 1433 を開かないでください。

必要な AWS サービス接続

VPC が以下と通信できることを確認します。

  • AWS サービスエンドポイントの変換

  • AWS DMS エンドポイント

  • Aurora PostgreSQL エンドポイント

  • アーティファクトストレージ用の S3 エンドポイント

  • AWS Secrets Manager エンドポイント

  • AWS CodeConnections エンドポイント

VPC エンドポイント: プライベートネットワークの場合は、インターネットゲートウェイの依存関係を避けるために、必要な AWS サービスの VPC エンドポイントを設定します。

外部でホストされるデータベースの要件

SQL Server データベースが の外部でホストされている場合は AWS、モダナイゼーションを開始する前に、次の前提条件が満たされていることを確認し、セットアップステップを完了してください。

前提条件

  • VPC を持つ AWS アカウント

  • VPC と外部データベース間のネットワーク接続。ネットワーク接続の設定については、 AWS DMS 「 ユーザーガイド」の「ネットワーク接続の設定」を参照してください。

セットアップ手順

  1. 外部データベースの接続の詳細 AWS Secrets Manager を使用して、 にシークレットを作成します。詳細については、「ステップ 2: AWS Secrets Manager に認証情報を保存する」を参照してください。

  2. プロンプトが表示されたら、外部データベースに接続するための VPC ID とセキュリティグループ ID を指定します。シークレットのデータベースホスト名は AWS アカウント内で解決できないため、 AWS はこの情報の入力を求めます。