Amazon Web Services ブログ
Amazon RDS for SQL Server での Microsoft SQL Server Integration Services の使用
Microsoft SQL Server Integration Services (SSIS) を Amazon Relational Database Service (RDS) for SQL Server 上で定義できるようになりました。SSIS は、シングル AZ およびマルチ AZ の DB インスタンスにおいて Standard および Enterprise のエディションで機能します。使える SQL Server は、2016 もしくは 2017 の メジャーバージョンです。
従来も、RDS for SQL Server を SSIS のターゲットソースとして使用できましたが、SSIS を RDS for SQL Server データベース自体と同じサーバー上で動作させることはできませんでした。現在でも SSIS は Amazon Elastic Compute Cloud (Amazon EC2) 上で使用でき、そのためのユースケースもおそらく存在すると思いますが、RDS for SQL Server との直接的な統合では、RDS for SQL Server インスタンスをそのまま使えるということで、コスト効率が高くより良い操作性を実現できます。すでに、Amazon EC2 で SSIS をご利用中のお客様は、直接 SSIS を SQL Server データベースと同じ RDS DB インスタンスで使用すれば、コストの削減が図れます。
この記事では、RDS for SQL Server DB インスタンスでの、SSIS の設定と使用方法について説明します。その中で、SSIS プロジェクトのデプロイプロセスと、その実行を SQL Server エージェントを使いスケジュールする方法を解説していきます。
SSIS のための前提条件
Amazon RDS for SQL Server で SSIS を設定するには、次の要件を満たす必要があります。
- RDS for SQL Server インスタンスは、SQL Server 2016 の Standard または Enterprise エディション (13.00.5426.0.v1 以降) であるか、SQL Server 2017 の Standard または Enterprise エディション (14.00.3223.3.v1 以降) である必要があります。
- Windows 認証を有効にするために、インスタンスを AWS マネージドの Microsoft Active Directory に参加させる必要があります。この手順については「Windows Authentication for SQL Server DB インスタンスの設定」をご参照ください。
- インスタンスのパラメータグループを変更し、RDS インスタンスの CLR を有効にする必要があります。手順については、「DB パラメータグループのパラメータの変更」および「Amazon RDS DB インスタンスを変更する」をご参照ください。
- インスタンスと S3 バケットの間で SSIS パッケージと出力ファイルを転送するには、Amazon Simple Storage Service (Amazon S3) 統合を有効にする必要があります。この手順については「Amazon S3 で Amazon RDS を SQL Server DB インスタンス に統合」をご参照ください。
サポートされている SSIS の機能の詳細については、SSIS に関する制限と推奨事項をご参照ください。
SSIS の設定
RDS インスタンスでの SSIS はオプショングループから有効化します。詳細については「オプショングループを使用する」をご参照ください。SQL Server 用のオプショングループは、RDS DB インスタンスのエディションに応じて、新たに作成するか既存のものを使用します。
- Amazon RDS コンソールで [オプショングループ] を選択します。
- [オプションの追加] を選択します。
- [オプション名] で [SSIS] を選択します。
Windows 認証済みユーザーの SSIS アクセス権限の設定
SSIS オプションの追加が完了すると、SSISDB
という名前でデータベースが作成されます。SSIS のアクセス権限をセットアップするには、以下の手順を実行します。
- SQL Server Management Studio (SSMS) を起動します。
- SQL Server Authentication を使うマスターユーザーとして、SQL Server データベースエンジンに接続します。
次のスクリーンショットに示すような、SSISDB
カタログが表示されます。
マスターユーザーには、ssis_admin
と ssis_logreader
の各ロールを、任意の他のユーザーに付与する権限があります。SSIS カタログを利用するために、SSIS には Windows で認証済みのユーザーが必要です。Windows 認証済みユーザーは、次のセクションでの手順を実行し作成します。
ssis_admin と ssis_logreader ロールのドメインユーザーへの付与
これらのロールは、次の手順を実行しドメインユーザーに付与します。
- SSMS のオブジェクトエクスプローラーで [Security (セキュリティ)] を選択します。
- [Logins (ログイン)] を選択します。
- リストの中から、
[<domain>\<user>]
ログインを選択します。 - [User Mappings (ユーザーマッピング)] を選択します。
- [Map (マップ)] で [SSIDB] を選択します。
- [Database role membership (データベースロールのメンバーシップ)] で、ssis_admin と ssis_logreader を選択します。
- [OK] をクリックします。
SSIS パッケージ実行に必要な権限の付与
SQL Server エージェントを使用して SSIS パッケージを実行するために、Windows 認証済みのユーザーには適切な権限が必要です。Windows 認証済みユーザーに対し必要な権限を付与するためには、SSMS から次のクエリを実行します。
SSIS プロジェクトのデプロイ
SSIS パッケージをデプロイするには、ISPAC ファイルを DB インスタンスに移動し、SSAS ストアドプロシージャを実行する必要があります。RDS DB インスタンスへのプロジェクトの直接的なデプロイは、サポートされていません。次の手順を実行します。
- SQL Server データツールで新しい Integration Services プロジェクトを作成します (または先に作成したプロジェクトを開きます) 。
- [Solution Explorer (ソリューションエクスプローラー)] タブを開き、ソリューションを選択した上で、[Properties (プロパティ)] をクリックします。
- [Common Properties (共通プロパティ)] を開きます。
- Project Protection Level (プロジェクト保護レベル) では、[Do not save sensitive data (機密データを保存しない)] を選択します。
- [OK] をクリックします。
- 再び、[OK] をクリックします。
- 場合によると、プロジェクト内の既存パッケージで、
ProtectionLevel
プロパティを変更する必要があるとのメッセージを伝える、ポップアップウィンドウが表示されます。 - [OK] をクリックします。
- 次の手順を実行し、作成済みパッケージでの保護レベルを変更します。
- a.Solution Explorer で対象のパッケージを選択します。
- b.[Control Flow (制御フロー)] セクションから、空白のポジションを選択します (右クリック) 。
- c.[Properties (プロパティ)] をクリックします。
- d.[ProtectionLevel] で、[DontSaveSensitive] を選択します。
- この操作を、本プロジェクト内のすべてのパッケージに繰り返します。
- [Solution Explorer] タブで、プロジェクトを構築します。
Integration Services プロジェクトを構築すると、SQL Server Data Tools は、\Bin\Development
にファイルを生成します。デプロイに必要なのは、<project name>.ispac
ファイルです。 <project name>.ispac
ファイルを、Amazon S3 統合が有効化されている S3 バケットにアップロードします。- SSMS を開き、Windows 認証済みユーザーとして RDS for SQL Server インスタンスに接続します。その上で、次のストアドプロシージャを実行し、プロジェクトファイルを、S3 バケットからローカルの RDS インスタンスにある
D:\S3
フォルダーにダウンロードします。 - 以下のコードを使い、ストアドプロシージャのステータスを追跡します。
task_id
値は、実際のタスク ID です。task_id
に0
を入力した場合は、すべてのタスクが表示されます。タスクのlifecycle
にSUCCESS
と表示されるのを待ってから、次のステップに進みます。task_info
列には、タスクステータスに関する追加的な情報が表示されます。 - SSISDB Catalog を (右クリックで) 選択し、
sample-ssis-folder
のような名前でフォルダーを作成します。 SSIS_DEPLOY_PROJECT
ストアドプロシージャを呼び出し、プロジェクトを SSISDB にデプロイします。次にコードを示します。SSIS_DEPLOY_PROJECT
タスクのステータスがSUCCESS
に変更されたら、SSIS カタログの下部にプロジェクトがデプロイされたことを、SSMS から確認できます。
SSIS パッケージの実行
SSIS プロジェクトの SSIS カタログ内でのデプロイが完了すると、パッケージを SSMS から直接実行する (ワンタイム実行) か、SQL Server エージェントを使いそれらをスケジュールできるようになります。SSIS パッケージの実行には、Windows 認証済ログインが必要です。
SSIS プロジェクト用のデータベース接続マネージャーの設定
ローカルでのデータベース接続には、SQL 認証を使用できます。Windows 認証を使用したい場合は、接続文字列の中のサーバー名を、DB_instance_name.fully_qualified_domain_name
とします。たとえば、myssisinstance.corp-ad.example.com
の中で、myssisinstance
の部分に DB インスタンス名を、corp-ad.example.com
の部分に FQDN を適用します。
リモート接続の場合は、常に SQL 認証を使うようにします。
SSIS パッケージ実行のためのエージェントジョブの設定
SQL Server エージェントで SSIS パッケージの実行をスケジュールするには、次の手順を実行します。
- Windows 認証済みユーザーとしログインします。
- SSIS パッケージの実行に使う、SQL Server 認証情報を作成します。次にコードを示します。
'mydomain\user_name’
の部分はドメインユーザー名に、‘mysecret’
の部分はドメインユーザーのパスワードに、それぞれ置き換えます。 - SSIS プロキシを作成し、それへのアクセス権限を SSIS サブシステムに付与し、プロキシにドメインユーザーへのアクセス権限を付与します。次にコードを示します。
'mydomain\user_name’
の部分はドメインユーザー名に置き換えます。 - ジョブのオーナーとしてドメインユーザーを使い、パッケージ実行のための SQL Server エージェントジョブを追加します。
- SSIS パッケージを実行する Step を、次の点に注意しながら追加します。
- a.Step の [Run as:] は、先に作成済みのプロキシに変更します。
- b.[Server:] には、
DB_instance_name.fully_qualified_domain_name
を入力します。たとえば、myssisinstance.corp-ad.example.com
の中で、myssisinstance
の部分に DB インスタンス名を、corp-ad.example.com
の部分に FQDN を適用します。 - c.[Package:] では、この Step で実行するパッケージを指定します。
まとめ
この記事では、Amazon RDS で実行中である、既存および新規の SQL Server DB インスタンス (2016 および 2017) 上での、SSIS の設定と使用の方法を解説しました。また、SSIS for RDS SQL Server を実行する上での、サポート範囲と依存関係、および制約についても説明しました。RDS での SSIS 機能を使うと、既存、もしくは新らしい RDS for SQL Server で SSIS を実行できるようになります。Amazon EC2 やオンプレミスで、分離したインスタンスを SSIS 用にホスティングする必要はありません。SSIS on RDS for SQL Server を今すぐお試しください。ご意見やご質問は、コメント覧で受け付けております。
著者について
Sumit Ahluwalia は、アマゾン ウェブ サービスのソフトウェア開発エンジニアです。彼は Amazon RDS チームと協力して、商用データベースエンジンと SQL Server に力を入れています。彼は Amazon RDS で技術的な課題に取り組むことを楽しんでいて、チームの同僚や AWS のお客様から、知識を学び共有することに情熱を感じています。
Chinni Bolapati は、アマゾン ウェブ サービスのシニアデータベースエンジニアです。彼は Amazon RDS チームのメンバーとして、商用データベースエンジンや、SQL Server、Oracle などに焦点を当てています。
Garry Singh はアマゾン ウェブ サービスのスペシャリストソリューションアーキテクトです。