Amazon RDS for SQL Serverでリンクサーバーを設定する

Amazon RDS for SQL Serverでリンクサーバーを設定する方法になります。

SQL Serverのバージョンは2019です。

RDSだと管理者権限が無いので設定できないと思ったのですが、設定できました。

 

以下、イメージ図です。

同じVPC内にあります。(AZ構成は省略)

f:id:rikues2012:20210910103021p:plain

イメージ構成図

前提

・RDSは作成済。

・SSMSで以下の操作からリンクサーバーを作成しようとするとエラーになる。

 「サーバーオブジェクト」→「リンクサーバー」で右クリック、「新しいリンクサーバー」をクリックすると、sysadminロールのメンバーでなければなりません。」と怒られます。

・なので、SSMSでTransact-SQLを使用して、リンクサーバーを作成する。

 

DB名:Test1(Testテーブル1つだけ作成)

f:id:rikues2012:20210910110324p:plain

 

DB名:Test2(Testテーブル1つだけ作成)

f:id:rikues2012:20210910105933p:plain

 

手順

Test1 から Test2へのリンクサーバーの設定を行う

 

1.  リンクサーバーを作成するクエリを2つ作る

 1-1. sp_addlinkedserverでリンクサーバーを設定

EXEC master.dbo.sp_addlinkedserver 
    @server = N'LINK_Test2', 
    @srvproduct='', 
    @provider='SQLNCLI', 
    @datasrc='xxxxx.xxxxx.ap-northeast-1.rds.amazonaws.com';

・server:作成するリンクサーバーの名前(何でもOK)
・srvproduct:リンクサーバーを作成するサーバー名(未指定で大丈夫)
・provider:リンクサーバーとして追加するOLE DBソース名(設定値:「SQLNCLI」)
         ※「SQLNCLI」を指定すると最新バージョンのClient OLE DBとなる
・datasrc:接続するRDSのエンドポイント

 

1-2. sp_addlinkedsrvloginでアクセスのための情報を設定

EXEC master.dbo.sp_addlinkedsrvlogin 
    @rmtsrvname=N'LINK_Test2',
    @useself='FALSE',
    @locallogin=NULL,
    @rmtuser='ユーザー名',
    @rmtpassword='パスワード';

・rmtsrvname:リンクサーバー名を指定(設定値:@serverと同じ名称)
・useself:基本はfalse(Windows認証したい場合は「true」)
・locallogin:ローカルサーバー上のログイン(設定値:NULL ※規定値もNULL)
・rmtuser:ユーザー名(@datasrcのDBに接続するユーザー名)
・rmtpassword:パスワード(@datasrcのDBに接続するパスワード)

 

2. クエリーを発行する。

f:id:rikues2012:20210910114246p:plain

SSMS リンクサーバー作成クエリ発行

リンクサーバーの設定により、別インスタンスにあるTest2内のテーブルが参照

することができました。

Test2 ⇒ Test1へのリンクサーバの設定も同様の手順で実施できます。

 

補足1

今回はRDS同士のリンクサーバーの設定でしたが、

EC2 on SQL Server と RDS for SQL Serverでもリンクサーバの設定は可能です。

※実施してはいませんが、公式サイトに記載がありました。

 

補足2

リンクサーバの削除はSSMSのGUIでできました。

削除するコマンド調べないで良かった。。

f:id:rikues2012:20210910120124p:plain

 

参考サイト

以下、公式サイトでの設定方法

 

以下、リンクサーバの設定方法