#設定の背景
SQL Serverで複数インスタンスを立てることになったため、インスタンスごとにポートを分けることになりました。
EC2上のインスタンスにクライアントマシンから接続するのに手こずったので、設定内容を記録しておきます。
#環境
AWS EC2
Windows Server 2008 R2
SQL Server 2008
#リモート接続を許可
下準備として、作成したインスタンスのリモート接続を許可する設定を行います。
- SQL Server Management Studioでインスタンスに接続し、オブジェクトエクスプローラの
インスタンス名にカーソルを合わせて右クリック、「プロパティ」を開く - 「セキュリティ」ページのサーバー認証を「SQL Server認証モードとWindows認証モード」に
変更する - 「接続」ページのリモートサーバー接続にある「このサーバーへのリモート接続を許可する」に
チェックを入れる - 「OK」を押して画面を閉じる
ここで、クライアントマシンから接続する時に使用するユーザを必要に応じて設定しておいてください。
手順は[(インスタンス名)]→[セキュリティ]→[ログイン]を右クリックして「新しいログイン」から追加します。
#ポート番号変更の手順
###SQL Server 構成マネージャー
- スタートメニューから[SQL Server 構成マネージャー]を開く
- 「SQL Server ネットワークの構成」を開き、ポート番号を変更するインスタンスの「[インスタンス名]のプロトコル」を選択する
- プロトコル名の「TCP/IP」を右クリックし、プロパティを開く
- IPアドレスタブを下までスクロールし、「IPAll」の中にある「TCPポート」にポート番号を入力する
※「TCP 動的ポート」は空欄にする - 「OK」を押してプロパティを閉じ、再び「TCP/IP」を右クリックし、「有効化」を選択する(状態が「有効」となればOK)
- SQL Serverのサービス「SQL Server(インスタンス名)」を再起動する
###ファイアウォール
- [コントロールパネル]→[システムとセキュリティ]→[Windowsファイアウォール]→[詳細設定]を開く
- 「受信の規則」を右クリックし、「新しい規則」を選択する
- 規則の種類は「ポート」、プロトコルおよびポートは「TCP」「特定のローカルポート」を選択して
ポート番号を入力、操作は「接続を許可する」を選択、プロファイルは「ドメイン」「プライベート」「パブリック」全てに
チェックをつけ、名前・説明は任意の名前・説明を入力する
###AWSのセキュリティグループ(落とし穴)
色々調べたところ、上記の2つの設定が出てくることが多いのですが、SQL Serverのポート番号とファイアウォールを
設定してもつながらない・・・
エラー内容は確か下記
※インスタンス名がINSTANCE、ポート番号を1435とした場合
C:\Users\Hoge> sqlcmd -U fugafuga -S tcp:XXX.XXX.XXX.XXX\INSTANCE,1435
パスワード: Sqlcmd: エラー: 接続済みの呼び出し先が一定の時間を過ぎても正しく応答しなかったため、
接続できませんでした。または接続済みのホストが応答しなかったため、確立された接続は失敗しました。
SQL Server Management Studioで接続した場合は下記のようなエラーが返ってきます。
SQL Serverへの接続の確立中に、ネットワーク関連のエラーまたはインスタンス固有が発生しました。
サーバーが見つけられないか、アクセスできません。インスタンス名が正しいことと、SQL Serverが
リモート接続を許可するように構成されていることを確認してください。
Windows Server側でファイアウォール設定を変更しても繋がらない場合はAWSのセキュリティグループで
ポートが空いていない可能性があるため、下記の設定を行ってください。
- EC2ダッシュボードを開き、「◯個のセキュリティグループ」の部分を選択する
- 該当するセキュリティグループを選択し、インバウンドタブの「編集」を開く
- 「ルールの追加」を選択し、タイプを「カスタムTCPルール」、ポート範囲にインスタンスに設定したポート番号を登録
- 「保存」を押してインバウンドルールの編集画面を閉じる
これでクライアントマシンからEC2上のSQL Serverへリモート接続することができました。
まさかAWSとは・・・っていうか最初から疑えば良かったのに、思い込みって怖い。