Amazon Web Services ブログ

オンプレミスの SQL Server Windows ワークロードを Amazon EC2 Linux に移行する



何十年もの間、IT 管理者は SQL Server ワークロードを Windows でしか実行できませんでした。ただし、SQL Server 2017 の時点で、SQL Server は Linux オペレーティングシステムでも実行できるようになりました。IT 管理者にとって、これは、希望するオペレーティングシステムで SQL Server ワークロードを実行できる機会であり、Windows Server のライセンスコストを削減し、オープンソース技術でアプリケーションスタックの近代化を開始できる機会でもあります。しかも、すべてシステムアーキテクチャやユーザーエクスペリエンスを大幅に変更することはありません。Linux で既存の SQL Server ワークロードを実行したいお客様を支援するために、AWS は Microsoft SQL Server データベースのための Windows から Linux へのプラットフォーム変更アシスタントの提供を開始しました。

この記事では、Microsoft SQL Server データベースのための Windows から Linux へのプラットフォーム変更アシスタントを利用して、Microsoft SQL Server データベースを Windows から Amazon EC2 Linux に移行するプロセスについて解説します。この記事では、プラットフォーム変更アシスタントを実行するための前提条件の設定を示し、2 つの使用例を提示します。最初の例では、プラットフォーム変更アシスタントを利用して、SQL Server 2017 で新しい Amazon EC2 Linux インスタンスを起動し、SQL Server データベースをそこに移行します。2 番目の例では、プラットフォーム変更アシスタントを利用して、SQL Server 2017 を既に実行している既存の EC2 Linux インスタンスにデータベースを移行します。また、データベースを移行した後、EC2 Linux SQL Server 2017 インスタンスに接続し、SQL Server SA パスワードを設定するプロセスについても詳しく説明します。

ソリューションの概要

Microsoft SQL Server データベースのための Windows から Linux へのプラットフォーム変更アシスタントは、Windows Server で実行されている既存の Microsoft SQL Server ワークロードの Linux への移行を自動化する PowerShell ユーティリティです。このプラットフォーム変更アシスタントは、SQL Server 2008 以降を実行しているクラウドまたはオンプレミス環境にホストされた Windows Server マシンでお使いいただけます。

このプラットフォーム変更アシスタントは、一般的なSQL Server 2017 Linuxの非互換性をチェックし、ソースWindows ServerマシンからターゲットEC2 Linuxインスタンスへのデータベースのバックアップと復元を開始します。このプラットフォーム変更アシスタントは、ソース SQL Server データベースのローカルバックアップを作成し、AWS アカウントの Amazon S3 バケットにアップロードして、AWS Systems Manager Automation AWSEC2-SQLServerDBRestore を呼び出します。Automation は、SQL Server 2017 を既に実行しているターゲット EC2 Linux インスタンスを受信すると、S3 から SQL Server データベースのバックアップをターゲット EC2 Linux インスタンスにダウンロードし、データベースを復元します。SQL Server 2017 を実行するターゲット EC2 Linux インスタンスが提供されていないか存在しない場合、Automation は、Ubuntu 16.04 で SQL Server 2017 を実行する新しい EC2 インスタンスを起動して設定し、そこでデータベースを復元します。

この自動化されたプロセスにより、選択した SQL Server データベースを含むすぐに使用できる EC2 Linux インスタンスが作成され、これを実験やテストに使用できます。プラットフォーム変更アシスタントは、Ubuntu および Amazon Linux を実行しているインスタンスをターゲットとするプラットフォーム変更をサポートします。Microsoft SQL Server で公式にサポートされている Linux ディストリビューションのリストについては、Linux でのSQL Server を参照してください。Microsoft SQL Server データベースのための Windows から Linux へのプラットフォーム変更アシスタントは、S3 からダウンロードしてください。

次の図は、Microsoft SQL Server データベースのための Windows から Linux へのプラットフォーム変更アシスタントが実行するアクションを示しています。

前提条件

プラットフォーム変更アシスタントを実行するには、バックアップを実行し、ローカルディレクトリを作成し、内部拡張システムストアドプロシージャを実行するための SQL Server アカウントが必要です。そのアカウントには、ソース SQL Server インスタンスに対する sysadmin 権限が必要です。SQL ログイン (Windows 認証または SQL 認証) の作成の詳細については、Microsoft SQL Docs ウェブサイトにある CREATE LOGIN ウォークスルーを参照してください。そのログインを SQL Server インスタンスのサーバーロールにマッピングする方法については、sp_addsrvrolemember ウォークスルーを参照してください。

プラットフォーム変更アシスタントの設定

移行プロセスを開始する前に、次の手順を実行して、プラットフォーム変更アシスタントを設定します。

  1. IAM ロールを作成します。
    アカウント内のターゲット EC2 インスタンスで AWS Systems Manager が自動化を実行できるようにするには、適切な IAM ポリシーを持つ IAM ロールが必要です。
    AWS マネジメントコンソールの IAM コンソールで、AmazonSSMManagedInstanceCore マネージドポリシーがアタッチされたロールを作成します。この記事では、この IAM ロールに AmazonEC2RoleForSSM という名前を付けています。
    詳細については、AWS のサービスへのアクセス許可を委任するロールの作成を参照してください。
  2. IAM ユーザーを作成します。
    プラットフォーム変更アシスタントが AWS アカウントでユーザーに代わってアクション (S3 でのバックアップの書き込みと読み取り、EC2 インスタンスの起動など) を実行するには、カスタム IAM ポリシーを備えた IAM ユーザーを作成する必要があります。
    IAM コンソールで、次のポリシーで IAM ポリシーを作成します。

    {
      "Version": "2012-10-17",
      "Statement": [
        {
          "Effect": "Allow",
          "Action": [
            "ssm:StartAutomationExecution",
            "ssm:DescribeInstanceInformation",
            "ssm:ListCommandInvocations",
            "ssm:ListCommands",
            "ssm:GetAutomationExecution",
            "ssm:GetCommandInvocation",
            "ssm:SendCommand"
          ],
          "Resource": "*"
        },
        {
          "Effect": "Allow",
          "Action": [
            "s3:ListBucket",
            "s3:GetObject"
          ],
          "Resource": [
            "arn:aws:s3:::awsec2-server-upgrade-prod",
            "arn:aws:s3:::awsec2-server-upgrade-prod/*"
          ]
        },
        {
          "Effect": "Allow",
          "Action": [
            "s3:PutEncryptionConfiguration",
            "s3:CreateBucket",
            "s3:ListBucket",
            "s3:PutObject",
            "s3:DeleteObject",
            "s3:DeleteBucket"
          ],
          "Resource": [
            "arn:aws:s3:::sqldbbackup-*/*",
            "arn:aws:s3:::sqldbbackup-*"
          ]
        },
        {
          "Effect": "Allow",
          "Action": [
            "ec2:RebootInstances",
            "ec2:DescribeInstanceStatus",
            "ec2:DescribeInstances",
            "ec2:RunInstances",
            "ec2:DescribeImages"
          ],
          "Resource": "*"
        },
        {
          "Effect": "Allow",
          "Action": [
            "ec2:CreateTags"
          ],
          "Resource": "*",
          "Condition": {
            "ForAllValues:StringEquals": {
              "aws:TagKeys": [
                "AWSEC2-SQLREPLATFORM-INSTANCE-KEY"
              ]
            }
          }
        },
        {
          "Effect": "Allow",
          "Action": [
            "iam:PassRole"
          ],
          "Resource": "arn:aws:iam::*:role/AmazonEC2RoleForSSM"
        }
      ]
    }

    この記事では、IAM ポリシーに ReplatformSQLServerPolicy という名前を付けています。SQL Server データベースを既存の EC2 インスタンスに移行するだけであれば、移行先の EC2 インスタンスの ARN を使用するように EC2 IAM リソースを設定することもできます。
    IAM ポリシーを作成したら、プログラムでアクセスできる IAM ユーザーを作成し、作成した IAM ポリシーをアタッチします。この記事では、IAM ユーザーに ReplatformUser という名前を付けています。
    IAM ユーザーの認証情報 (アクセスキーとシークレットキー) を安全な場所に保存します。

  1. PowerShell のバージョンを確認します。
    プラットフォーム変更アシスタントを使用するには、移行元の Windows Server インスタンスに PowerShell バージョン 3.0 以降がインストールされている必要があります。PowerShell のバージョンを確認するには、PowerShell で次のコマンドを実行します。

    $PSVersionTable.PSVersion

  1. AWSPowerShell モジュールをインストールします。
    Microsoft SQL Server データベースのための Windows から Linux へのプラットフォーム変更アシスタントは、PowerShell モジュール AWSPowerShell を使用します。AWSPowerShell モジュールをインストールするには、移行元の Windows Server インスタンスで PowerShell MSI 用 AWS ツールをダウンロードして実行します。AWSPowerShell のインストールが成功したことを確認するには、次のコマンドを実行できる必要があります。

    Import-Module AWSPowerShell
    Get-Module AWSPowerShell
    

    モジュールを PowerShell にインポートする場合、開いている PowerShell セッションにモジュールが存在していることに注意してください。

  1. IAM ユーザーを使用するように AWSPowerShell を設定します。
    プラットフォーム変更アシスタントが IAM ユーザーを使用するには、手順 2 で作成した IAM ユーザーの認証情報を使用して、次のコマンドを実行して IAM ユーザーを AWSPowerShell 認証情報ストアに追加します。この記事では、ReplatformUser という名前で IAM ユーザーを保存します。

    Set-AWSCredential -AccessKey YourAccessKey -SecretKey YourSecretKey -StoreAs YourIAMUserName

  1. プラットフォーム変更アシスタントを移行元の SQL Server インスタンスにダウンロードします。
  2. プラットフォーム変更アシスタントをダウンロードして保存したら、PowerShell セッションから起動します。
    ダウンロードしたファイルの名前は、MigrateSQLServerToEC2Linux.ps1 です。PowerShell セッションから起動すると、プラットフォーム変更アシスタントのユーザーインターフェイスが表示されます。
    これで、この記事のサンプル移行でプラットフォーム変更アシスタントを使用する準備ができました。

特定の SQL Server データベースを新しい EC2 Linux SQL Server インスタンスに移行する

この最初の例は、特定の SQL Server データベースを新しい EC2 Linux SQL Server インスタンスに移行する方法を示しています。この記事では各フィールドの例を示しますが、プラットフォーム変更アシスタントを実際に実行する場合は、使用している SQL Server インスタンスに固有の情報を使用する必要があります。

次の手順を実行します。

  1. 次のコマンドを実行して、Microsoft SQL Server のための Windows から Linux へのプラットフォーム変更アシスタントを起動します: .\MigrateSQLServerToEC2Linux.ps1
  2. [SQL Server Name] には、SQL Server インスタンスの名前を入力します。
    このフィールドを空白のままにすると、プラットフォーム変更アシスタントはデフォルトで、実行しているサーバーの名前になります。ただし、複数の SQL Server インスタンスを実行している場合は、この例のように、移行元として使用する SQL Server インスタンスを指定します。
  1. [Authentication Type] では、SQL Authenticationを選択して、SQL 認証の認証情報を入力します。
    SQL 認証を使用するには、sysadmin 権限を持つ SQL ログインが必要です。Windows を選択した場合は、認証情報を入力する必要はありません。プラットフォーム変更アシスタントは、使用している Windows ユーザーの権限で SQL Server インスタンスにアクセスします。このオプションは、Windows 管理者としてプラットフォーム変更アシスタントを実行している場合に便利です。
  1. [Databases to migrate] では、Specific databases を選択します。
    .
  2. [Database names] には、移行するデータベースの名前のコンマ区切りリストを入力します。この記事では、「 sample-db-1, sample-db-2 」と入力しました。
    SQL Server インスタンス内のすべてのデータベースを移行する場合は、[ All databases] を選択します。プラットフォーム変更アシスタントは、システムデータベース (mastermodelmsdbResourcetempdb) を除くサーバー上のすべてのデータベースを移行します。
  1. [Path for local database backup] には、移行元の SQL Server インスタンスのローカルファイルパスを入力します。この記事では、C:\SQLServerBackups と入力しました。
    これは、プラットフォーム変更アシスタントが S3 にアップロードする前にデータベースのローカルバックアップを作成するパスです。
    次のスクリーンショットは、[Source SQL Server Details] の各フィールドを強調表示しています。
  1. [EC2 Instance Type] には、EC2 インスタンスタイプを入力します。この記事では、タイプ r4.4xlarge と入力しました。
    これは、プラットフォーム変更アシスタントが起動する EC2 インスタンスのインスタンスタイプです。この新しく作成された EC2 インスタンスには、SQL Server 2017 を実行する Ubuntu 16.04 が含まれています。新しい移行先インスタンスの SQL Server エディションは、移行元インスタンスの SQL Server エディションと同じエディション (Standard、Enterprise、Web、Express) になります。それぞれの SQL Server エディションでサポートされているインスタンスタイプを見つけるには、Amazon マーケットプレイスで Amazon Linux SQL Server 2017 を検索し、適切な Linux SQL Server 2017 AMI を選択します。
  1. [Subnet ID] には、サブネット ID を入力します。この記事では、subnet-1234abcd と入力しました。
    これは、新しい EC2 インスタンスを起動するサブネットの ID です。サブネット ID を指定しない場合、プラットフォーム変更アシスタントはデフォルトのサブネットで新しいインスタンスを起動します。
  1. [EC2 Key Pair] には、アクセスする必要があるキーペアの名前を入力します。この記事では、sample-keypair と入力しました。
    これは、新しく起動される EC2 インスタンスに関連付けられるキーペアです。後でインスタンスに SSH で接続するには、このキーペアが必要です。詳細については、Amazon EC2 キーペアを参照してください。
    次のスクリーンショットは、[New EC2 Instance] の詳細を強調表示しています。
  1. [AWS Profile Name] には、「設定」セクションの手順 6 で設定した AWS プロファイル (IAM ユーザー) の名前を入力します。この記事では、ReplatformUser という名前を使用しました。
    これは、SQL Server バックアップを S3 にアップロードし、SSM 自動化 AWSEC2-SQLServerDBRestore をトリガーするために使用される IAM ユーザーです。プロファイル名を指定しない場合、プラットフォーム変更アシスタントは、PowerShell に保存されているデフォルトのプロファイルを使用しようとします。
  1. 「設定」セクションの手順 6 で説明されている Set-Credential コマンドを使用せずに認証情報ファイルを手動で設定した場合は、[AWS Profile Location] に AWS プロファイルの場所を入力します。
    プロファイルの場所を指定しない場合、プラットフォーム変更アシスタントはデフォルトの AWS 認証情報の場所を使用します。
  1. [IAM Instance Role] には、「設定」セクションの手順 1 で設定した IAM ロールの名前を入力します。この記事では、AmazonEC2RoleForSSM という名前を使用しました。
    これは、新しい EC2 インスタンスを起動するために使用される IAM インスタンスロールです。
  1. [AWS Region] には、AWS リージョンの名前を入力します。
    新しい EC2 インスタンスに移行する場合、これは新しい EC2 インスタンスが起動するリージョンです。この記事では us-east-1 リージョンを入力したので、新しい r4.4xlarge インスタンスがそこで起動します。
    次のスクリーンショットは、AWS 移行先の詳細を強調表示しています。
  1. [Click To Migrate] を選択します。
    プラットフォーム変更アシスタントが終了すると、移行された SQL Server データベースを含んで新しく起動されたインスタンスのインスタンス ID が表示されます。必ずこれを書き留めておいてください。
    次のスクリーンショットは、新しいインスタンスの詳細を示しています。
    これで、SQL Server データベースは Windows から新しく起動した EC2 Linux インスタンスに移行しました。新しく移行したデータベースを使用するには、新しい SQL Server インスタンスにサーバー管理者 (SA) パスワードを設定します。この記事では、2 番目のサンプル移行後の「SAパスワードの設定」セクションでこうした手順について説明します。

すべてのデータベースを既存の EC2 Linux SQL Server 2017 インスタンスに移行する

この 2 番目の例は、すべてのデータベースを既存の EC2 Linux SQL Server インスタンスに移行する方法を示しています。この記事では各フィールドの例を示しますが、プラットフォーム変更アシスタントを実際に実行する場合は、使用している SQL Server インスタンスに固有の情報を使用する必要があります。

次の手順を実行します。

  1. 次のコマンドを実行して、Microsoft SQL Server のための Windows から Linux へのプラットフォーム変更アシスタントを起動します: .\MigrateSQLServerToEC2Linux.ps1
  2. [SQL Server Name] には、SQL Server インスタンスの名前を入力します。
    このフィールドを空白のままにすると、プラットフォーム変更アシスタントはデフォルトで、実行しているサーバーの名前になります。ただし、複数の SQL Server インスタンスを実行している場合は、移行元として使用する SQL Server インスタンスを指定します。
  1. [Authentication Type] では、Windows を選択します。
    これは、SQL Server インスタンスにアクセスするための認証タイプです。この記事では Windows 認証を使用しているため、プラットフォーム変更アシスタントは Windows ユーザーの権限で SQL Server インスタンスへのアクセスを試みます。Windows を選択した場合は、Windows 管理者としてプラットフォーム変更アシスタントを実行していることを確認してください。SQL 認証オプションの使用例については、前の移行例を参照してください。
  1. [Databases to migrate] では、SAll databases を選択します。
    これは、アシスタントが移行元の SQL Server インスタンスをスキャンし、システムデータベース (mastermodelmsdbResourcetempdb) 以外のすべてのデータベースを移行することを意味します。
  1. [Path for local database backup] には、移行元の SQL Server インスタンスのローカルファイルパスを入力します。この記事では、C:\SQLServerBackups と入力しました。
    これは、プラットフォーム変更アシスタントが S3 にアップロードする前にデータベースのローカルバックアップを作成するパスです。
    次のスクリーンショットは、[Source SQL Server Details] の各フィールドを強調表示しています。
  1. [EC2 Instance ID] には、データベースを移行する既存の EC2 Linux SQL Server 2017 インスタンスのインスタンス ID を入力します。この記事では、i-1234abcd と入力しました。
    次のスクリーンショットは、[Existing EC2 Instance] のフィールドを強調表示しています。
  1. [AWS Profile Name] には、「設定」セクションの手順 6 で設定した AWS プロファイルの名前を入力します。この記事では、ReplatformUser という名前を使用しました。
    これは、SQL Server バックアップを S3 にアップロードし、SSM 自動化 AWSEC2-SQLServerDBRestore をトリガーするために使用される IAM ユーザーです。プロファイル名を指定しない場合、プラットフォーム変更アシスタントは、PowerShell に保存されているデフォルトのプロファイルを使用しようとします。
  1. 「設定」セクションの手順 6 で説明されている Set-Credential コマンドを使用せずに認証情報ファイルを手動で設定した場合は、[AWS Profile Location] に AWS プロファイルの場所を入力します。
    プロファイルの場所を指定しない場合、プラットフォーム変更アシスタントはデフォルトの AWS 認証情報の場所を使用します。
  1. [IAM Instance Role] には、「設定」セクションの手順 1 で設定した IAM ロールの名前を入力します。この記事では、AmazonEC2RoleForSSM という名前を使用しました。
    これは、EC2 インスタンスにアクセスするために使用される IAM インスタンスロールです。
  1. [AWS Region] には、移行先 SQL Server インスタンスを含む AWS リージョンを入力します。
    既存の EC2 インスタンスに移行する場合、これは既存の EC2 インスタンスが存在するリージョンです。既存の EC2 インスタンス i-1234abcdus-east-1 リージョンにあるため、この記事では us-east-1 を使用します。
    次のスクリーンショットは、AWS プロファイル、IAM ロール、リージョンのフィールドを強調表示しています。
  1. [Click to Migrate] を選択します。
    これで、SQL Server データベースは Windows から前に起動した EC2 Linux インスタンスに移行しました。新しく移行したデータベースを使用するには、次のセクションで説明するように、新しい SQL Server インスタンスで SA パスワードを設定します。

SA パスワードを設定する

SQL Server データベースを EC2 Linux SQL Server インスタンスに移行した後、移行先インスタンスで SQL Server SA パスワードを設定します。実行中、プラットフォーム変更アシスタントは SA パスワードをリセットしてデータベースの復元操作を実行するため、新しく移行したデータベースを使用する前に自分で設定する必要があります。

SQL Server SA パスワードを設定するには、次の手順を実行します。

  1. AWS EC2 コンソールの [Instances] ページで、移行先 EC2 インスタンスを選択します。
    次のスクリーンショットは、[Instances] ページを示しています。
  1. [Connect] を選択します。
    この手順で、インスタンスへのログインに必要な SSH コマンドを取得します (SSH を使用するには、以前のキーペアが必要です)。 次のスクリーンショットは、[Connect] を選択した後の [Connect To Your Instance] ダイアログを示しています。
  1. 前の手順の [Connect To Your Instance] ページで例として提供されている SSH コマンドを実行して、新しく起動したインスタンスに SSH で接続します。コマンドは次のようになります。
    ssh -i “sample-keypair.pem” ubuntu@ec2-123456789.amazonaws.com

  1. 次のコマンドを実行して SQL Server サービスを停止し、プロンプトが表示されたら SA パスワードを設定し、SQL Server サービスを再起動します。
    sudo systemctl stop mssql-server
    sudo /opt/mssql/bin/mssql-conf set-sa-password
    sudo systemctl restart mssql-server
    

これで、新しく移行した EC2 Linux SQL Server 2017 データベースを使用する準備が整いました。

まとめ

この記事では、Microsoft SQL Server データベースのための Windows から Linux へのプラットフォーム変更アシスタントを利用して、SQL Server ワークロードを Windows Server から Linux に移行しました。プラットフォーム変更アシスタントが終了すると、目的のデータベースを使用して Linux 上で SQL Server 2017 を実行する EC2 インスタンスが作成されます。プラットフォーム変更アシスタントを利用すると、SQL Server ワークロードを EC2 Linux でテスト実行できます。ネイティブの PowerShell ツールを使用し、ソースデータベースのダウンタイムを引き起こさない、自動化された低コミットメントのソリューションです。

 


著者について

 

Bini Berhe は、アマゾン ウェブ サービスのシニアソリューションアーキテクトです。彼は、AWS のお客様と協力して、AWS での Microsoft ワークロードの実行に関するガイダンスと技術支援を提供しています。

 

 

 

Jia Zhang は、アマゾン ウェブ サービスのソフトウェア開発エンジニアです。