ご無沙汰しております。Sarasaです。
最近仕事の関係でSQLを勉強し始めたのですが、ただのExelかと思いきや、「ほかのプログラミング言語と組み合わせることでコード画面を開かずにデータを編集できる」 とんでもツールなのですね・・!
練習でC#と接続してみたのですが、これは便利過ぎる・・!
せっかくなので周辺知識も固めようと思い、Amazon RDSをDBエンジンに繋げるべくいろいろと勉強してみました。
データベースを作成してみたものの。。
RDSでデータベースを作成する上でやったことは以下のとおりです。
- RDS上でデータベースを作成
- データベースエンジンはSQL Serverを選択。ポート番号は1433
-
パブリックアクセスを許可
他は既定の値を用いて設定を行いました。
また、データベースエンジンの方もManegement Officeもインストール済みのため、
エンドポイント,ポート番号をサーバー名の欄に記載し、ログイン名やパスワードをRDSのデータベース画面に従って入力すれば接続できるはずなのですが、、
インスタンスは起動してるし、パブリックアクセスも許可してるはずなんだけどなあ~~
そもそも前提部分ができていないのか??(DBエンジン編)
これまではデータベース側をいじっていることがほとんどだったのでSQL Server側も見直してみようかと。
- SQL Serverはリモート接続を許可しているか→YES
- SQL Server構成マネージャーはTCP/UDPを有効にしているか?→無効だったので有効に。SQL Serverも開始
- ファイヤーウォールの状態を確認→TCP/UDP共にポート1433を有効に
とりあえずこの辺りを見直してみましたが、残念ながらエラー258は継続。。。
(そしてこのエラー文も意味が理解できない~~
そもそも前提部分ができていないのか??(RDS編)
改めてRDSも確認してみます。
DBエンジン側のファイヤーウォールに問題がないとしたら、データベース側はどうでしょう?
AWSでは、「セキュリティグループ」というものがファイヤーウォールの役割を果たしており、「どことのアクセスを許可するか??」を設定できます。
サービス>EC2からセキュリティーグループを選択し、インバウンドルールを確認すると、
接続を許可するIPアドレスが設定されていなかったようです。。。
「インバウンドルールを編集」からソースを「Anywhere-IPv4」に設定し、すべてのIPv4からのMSSQLへの接続を許可すると、
IPバージョンが表示されるようになりました。
早速Manegement Officeからログインしてみると、
接続に成功しました!
インバウンドルール・アウトバウンドルールとは??
今回はセキュリティグループのインバウンドルールに問題があったのですが、そもそもこのインバウンドルールとはアウトバウンドルールと対になるものです。
公式ホームページによると、
インバウンドルールはインスタンスへの受信トラフィックを制御し、
アウトバウンドルールはインスタンスからの受信トラフィックを制御しているのだそう。
しかも、デフォルトのセキュリティグループではインバウンドルールが設定されていません。そのため、接続の前提となる部分で「こことなら通信してもいいよ~」という許可をしてあげないと、データベースをDBエンジンと接続することができないのです。
おまけ
ちなみに、繋げるだけならソース「マイIP」でも繋がりますが、IPアドレスはちょくちょく変わるので、設定直後は繋がったのにしばらくしたら繋がらなくなった。。ということが起こります。
「マイIP」は自分のPCしかアクセスできない設定のため安全性は高そうですが、接続のたびにコンソールから設定をいじらないといけなくなるので、DBエンジンだけ指定して、他はフリーにしてあげた方が面倒をなくせそうです。