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 を設定するには、次の要件を満たす必要があります。

サポートされている SSIS の機能の詳細については、SSIS に関する制限と推奨事項をご参照ください。

SSIS の設定

RDS インスタンスでの SSIS はオプショングループから有効化します。詳細については「オプショングループを使用する」をご参照ください。SQL Server 用のオプショングループは、RDS DB インスタンスのエディションに応じて、新たに作成するか既存のものを使用します。

  1. Amazon RDS コンソールで [オプショングループ] を選択します。
  2. [オプションの追加] を選択します。
  3. [オプション名] で [SSIS] を選択します。

Windows 認証済みユーザーの SSIS アクセス権限の設定

SSIS オプションの追加が完了すると、SSISDB という名前でデータベースが作成されます。SSIS のアクセス権限をセットアップするには、以下の手順を実行します。

  1. SQL Server Management Studio (SSMS) を起動します。
  2. SQL Server Authentication を使うマスターユーザーとして、SQL Server データベースエンジンに接続します。

次のスクリーンショットに示すような、SSISDB カタログが表示されます。

マスターユーザーには、ssis_adminssis_logreader の各ロールを、任意の他のユーザーに付与する権限があります。SSIS カタログを利用するために、SSIS には Windows で認証済みのユーザーが必要です。Windows 認証済みユーザーは、次のセクションでの手順を実行し作成します。

ssis_admin と ssis_logreader ロールのドメインユーザーへの付与

これらのロールは、次の手順を実行しドメインユーザーに付与します。

  1. SSMS のオブジェクトエクスプローラーで [Security (セキュリティ)] を選択します。
  2. [Logins (ログイン)] を選択します。
  3. リストの中から、[<domain>\<user>] ログインを選択します。
  4. [User Mappings (ユーザーマッピング)] を選択します。
  5. [Map (マップ)] で [SSIDB] を選択します。
  6. [Database role membership (データベースロールのメンバーシップ)] で、ssis_adminssis_logreader を選択します。
  7. [OK] をクリックします。

SSIS パッケージ実行に必要な権限の付与

SQL Server エージェントを使用して SSIS パッケージを実行するために、Windows 認証済みのユーザーには適切な権限が必要です。Windows 認証済みユーザーに対し必要な権限を付与するためには、SSMS から次のクエリを実行します。

 USE [msdb]
GO
CREATE USER [mydomain\user_name] FOR LOGIN [mydomain\user_name]
GRANT EXEC ON msdb.dbo.rds_msbi_task TO [mydomain\user_name] with grant option
GRANT SELECT ON msdb.dbo.rds_fn_task_status TO [mydomain\user_name] with grant option
GRANT EXEC ON msdb.dbo.rds_cancel_task TO [mydomain\user_name] with grant option
GRANT EXEC ON msdb.dbo.rds_download_from_s3 TO [mydomain\user_name] with grant option
GRANT EXEC ON msdb.dbo.rds_upload_to_s3 TO [mydomain\user_name] with grant option
GRANT EXEC ON msdb.dbo.rds_delete_from_filesystem TO [mydomain\user_name] with grant option
GRANT EXEC ON msdb.dbo.rds_gather_file_details TO [mydomain\user_name] with grant option
GRANT EXEC ON msdb.dbo.sp_add_proxy TO [mydomain\user_name] with grant option
GRANT EXEC ON msdb.dbo.sp_update_proxy TO [mydomain\user_name] with grant option
GRANT EXEC ON msdb.dbo.sp_grant_login_to_proxy TO [mydomain\user_name] with grant option
GRANT EXEC ON msdb.dbo.sp_revoke_login_from_proxy TO [mydomain\user_name] with grant option
GRANT EXEC ON msdb.dbo.sp_delete_proxy TO [mydomain\user_name] with grant option
GRANT EXEC ON msdb.dbo.sp_enum_login_for_proxy to [mydomain\user_name] with grant option
GRANT EXEC ON msdb.dbo.sp_enum_proxy_for_subsystem TO [mydomain\user_name] with grant option
GRANT EXEC ON msdb.dbo.rds_sqlagent_proxy TO [mydomain\user_name] WITH GRANT OPTION
ALTER ROLE [SQLAgentUserRole] ADD MEMBER [mydomain\user_name]
GO

USE [master]
GO
GRANT ALTER ANY CREDENTIAL TO [mydomain\user_name]
GO

SSIS プロジェクトのデプロイ

SSIS パッケージをデプロイするには、ISPAC ファイルを DB インスタンスに移動し、SSAS ストアドプロシージャを実行する必要があります。RDS DB インスタンスへのプロジェクトの直接的なデプロイは、サポートされていません。次の手順を実行します。

  1. SQL Server データツールで新しい Integration Services プロジェクトを作成します (または先に作成したプロジェクトを開きます) 。
  2. [Solution Explorer (ソリューションエクスプローラー)] タブを開き、ソリューションを選択した上で、[Properties (プロパティ)] をクリックします。
  3. [Common Properties (共通プロパティ)] を開きます。
  4. Project Protection Level (プロジェクト保護レベル) では、[Do not save sensitive data (機密データを保存しない)] を選択します。
  5. [OK] をクリックします。
  6. 再び、[OK] をクリックします。
  7. 場合によると、プロジェクト内の既存パッケージで、ProtectionLevel プロパティを変更する必要があるとのメッセージを伝える、ポップアップウィンドウが表示されます。
  8. [OK] をクリックします。
  9. 次の手順を実行し、作成済みパッケージでの保護レベルを変更します。
    • a.Solution Explorer で対象のパッケージを選択します。
    • b.[Control Flow (制御フロー)] セクションから、空白のポジションを選択します (右クリック) 。
    • c.[Properties (プロパティ)] をクリックします。
    • d.[ProtectionLevel] で、[DontSaveSensitive] を選択します。
  1. この操作を、本プロジェクト内のすべてのパッケージに繰り返します。
  2. [Solution Explorer] タブで、プロジェクトを構築します。
    Integration Services プロジェクトを構築すると、SQL Server Data Tools は、\Bin\Development にファイルを生成します。デプロイに必要なのは、<project name>.ispac ファイルです。
  3. <project name>.ispac ファイルを、Amazon S3 統合が有効化されている S3 バケットにアップロードします。
  4. SSMS を開き、Windows 認証済みユーザーとして RDS for SQL Server インスタンスに接続します。その上で、次のストアドプロシージャを実行し、プロジェクトファイルを、S3 バケットからローカルの RDS インスタンスにある D:\S3 フォルダーにダウンロードします。
    exec msdb.dbo.rds_download_from_s3 
    @s3_arn_of_file='arn:aws:s3:::sample-s3-bucket/testProject.ispac' ,
    @rds_file_path='D:\S3\testProject.ispac' ,
    @overwrite_file=1
  5. 以下のコードを使い、ストアドプロシージャのステータスを追跡します。
    SELECT * FROM dbo.rds_fn_task_status(NULL,task_id)

    task_id 値は、実際のタスク ID です。task_id0 を入力した場合は、すべてのタスクが表示されます。タスクの lifecycleSUCCESS と表示されるのを待ってから、次のステップに進みます。task_info 列には、タスクステータスに関する追加的な情報が表示されます。

  6. SSISDB Catalog を (右クリックで) 選択し、sample-ssis-folder のような名前でフォルダーを作成します。
  7. SSIS_DEPLOY_PROJECT ストアドプロシージャを呼び出し、プロジェクトを SSISDB にデプロイします。次にコードを示します。
    exec msdb.dbo.rds_msbi_task 
    @task_type='SSIS_DEPLOY_PROJECT',
    @file_path='d:\S3\testProject.ispac',
    @folder_name='sample-ssis-folder',
    @project_name='testProject';
  8. 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 パッケージの実行をスケジュールするには、次の手順を実行します。

  1. Windows 認証済みユーザーとしログインします。
  2. SSIS パッケージの実行に使う、SQL Server 認証情報を作成します。次にコードを示します。
    USE [master]
    GO
    CREATE CREDENTIAL [SSIS_Credential] WITH IDENTITY = N'mydomain\user_name’, SECRET = N‘mysecret’
    GO

    'mydomain\user_name の部分はドメインユーザー名に、mysecretの部分はドメインユーザーのパスワードに、それぞれ置き換えます。

  3. SSIS プロキシを作成し、それへのアクセス権限を SSIS サブシステムに付与し、プロキシにドメインユーザーへのアクセス権限を付与します。次にコードを示します。
    USE [msdb]
    GO
    EXEC msdb.dbo.sp_add_proxy @proxy_name=N'SSIS_Proxy',@credential_name=N'SSIS_Credential',@description=N''
    EXEC msdb.dbo.sp_grant_login_to_proxy @proxy_name=N'SSIS_Proxy',@login_name=N'mydomain\user_name’
    EXEC msdb.dbo.rds_sqlagent_proxy @task_type='GRANT_SUBSYSTEM_ACCESS',@proxy_name='SSIS_Proxy',@proxy_subsystem='SSIS'
    GO

    'mydomain\user_name’ の部分はドメインユーザー名に置き換えます。

  4. ジョブのオーナーとしてドメインユーザーを使い、パッケージ実行のための SQL Server エージェントジョブを追加します。
  5. 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 はアマゾン ウェブ サービスのスペシャリストソリューションアーキテクトです。