Amazon Web Services ブログ
AWS Lake Formation と Amazon RDS for SQL Server の統合
ビジネスを成長および発展させるには、無数のソース (リレーショナルデータベース、NoSQL データベース、クリックストリーム、IoT イベントなど) からデータを収集し、分析を用いてそのデータを組み合わせて洞察を抽出する必要があります。AWS Lake Formation により、さまざまなソースからのデータを Amazon S3 に基づくデータレイクに取り込むことがでるようになります。さらに、Lake Formation を使用すれば、単一の場所からこのデータへのアクセスが制御できます。
この投稿では、Lake Formation ブループリントを使用して Amazon RDS から Amazon S3 のデータレイクにデータを取り込む方法と、Amazon Athena から抽出されたデータに対して SQL クエリを実行するための列レベルのアクセス制御を行う方法を示します。
ブループリント とは、データをデータレイクに簡単に取り込むことができるデータ管理テンプレートです。Lake Formation は、リレーショナルデータベースや AWS CloudTrail ログなど、予め定義されたソースタイプごとにいくつかのブループリントを提供します。ブループリントから、ワークフローを作成できます。ワークフローは、AWS Glue クローラー、ジョブ、およびデータのロードと更新を調整するトリガーで構成されています。ブループリントは、データソース、データターゲット、およびスケジュールを入力として取り、ワークフローを設定します。
Lake Formation の詳細については、「AWS Lake Formation: How It Works」をご参照ください。
チュートリアルの概要
データレイクは、集中管理された安全なリポジトリで、すべてのデータを元の形式のデータと分析のためにデータの両方を保存します。データレイクを使用すると、データサイロを分解し、さまざまなタイプの分析を組み合わせて、洞察を得たり、より適切なビジネス上の意思決定に導くことができます。
Lake Formation を使用すると、安全なデータレイクを簡単にすばやく設定できます。このチュートリアルには、次の手順が含まれています。
- S3 バケットをデータレイクストレージとして登録する
- データを表すテーブルを保持する論理データベースを作成する
- Amazon RDS for SQL Server からデータレイクにデータを取り込むためのワークフローを作成する
- データレイク内のテーブルにアクセスする権限を付与する
前提条件
このチュートリアルを完了するには、次の前提条件を満たしている必要があります。
- Amazon RDS for SQL Server が稼働している
- Lake Formation、Amazon S3、AWS Glue、Athena へのアクセス権を持つ IAM ユーザー
Amazon S3 ストレージの登録
S3 バケットを登録するには、次の手順を実行します。
- AWS Lake Formation コンソールで、[開始]をクリックします。
- [場所を登録]を選択します。
- Amazon S3パスの場合は、[参照]を選択します。
- データレイク用に指定した S3 バケットを選択します。
- 選択した S3 バケットに、Lake Formation を操作するための正しい IAM 権限があることを確認してください。
- [場所の権限を確認]を選択します。
- IAM ロールの場合、Lake Formation が S3 バケットでデータを読み書きできるように指定された IAM ロールを選択します。Lake Formation で権限を持ち IAM ロールを作成するオプション、または既存の IAM ロールを選択するオプションがあります。
- [場所を登録] を選択します。
- AWS Lake Formationコンソールの [登録と取込み]で、[データレークの場所] を選択します。登録されている S3 バケットを確認できます。
データベースの作成
これで、データレイクテーブルを保持するデータベースを作成する準備ができました。データベースは論理的で、名前空間として扱うことができます。これらは、AWS Glue データカタログを保存するメタデータテーブル用のコンテナです。データベースは、オプションの場所プロパティを持つことができます。この場所は、Lake Formation に登録されている Amazon S3 の場所にある必要があります。
データベースを設定するには、次の手順を実行します。
- [データベースを作成] を選択します。
- [名前] に、グループ名を入力します。
- [データ場所] で S3 バケットの場所を入力します。
- [データベースを作成] を選択します。
データを取り込むワークフローを作成する
データレイクが設定されたので、データ取り込みの準備ができました。Lake Formation にはブループリントと呼ばれる機能があり、MySQL、PostgreSQL、Oracle、SQL Server データベースからデータレイクにデータを取り込むことができます。ブループリントを用いて、テーブルをコピーする、あるいは新しく挿入されたデータを徐々にロードして、データを取り込むことができます。ブループリントを使用すると、AWS Glue ワークフローとすべての関連するジョブとクローラーが作成され、データの検出と移動が可能になります。
データを取り込むワークフローを作成するには、次の手順を実行します。
- Lake Formation コンソールの [登録と取り込み] の下にある [ブループリント] を選択します。
- [ブループリントの概要] セクションで、[ブループリントを使用] を選択します。
- ブループリントタイプで、データレイクに取り込むデータのタイプを選択します。このチュートリアルの場合、ソーステーブルがそれほど大きくないため、データベーススナップショットを選択します。大きなテーブルの場合、増分データベースの方が適している場合があります。データレイクにデータを取り込むには、パラメーターを用いてデータベース接続を定義し、AWS Glue がソースデータベースにアクセスできるようにする必要があります。
- [ソースのインポート] セクションの [データベース接続] で、[AWS Glue で接続を作成する] を選択します。そうすることで、AWS Glue コンソールにリダイレクトされます。
- [接続] ページの [接続名] に、接続の名前を入力します。
- 接続タイプで、ドライバーを選択します。ドライバーは、Amazon RDS、Amazon Redshift、JDBC から選択できます。このチュートリアルでは、JDBCを選択して、ジョブが同じ接続構成を使用してAmazon EC2 上の Amazon RDS と SQL Server の両方と通信できるようにします。
- 接続に SSL が必要であれば選択します。
- [次へ] を選択します。
- JDBC URLの場合、AWS Glue のドキュメントに記載されているパス構造に従う必要があります。JDBC URL の MYRDSENDPOINT の値を、ご自身の環境での実際の Amazon RDS エンドポイントに変更します。
- データベースの読み込み権限を持つユーザー名とパスワードを入力します。
- データベースインスタンスが実行されているVPCとサブネットを選択します。
- AWS Glue がデータベースインスタンスに接続できるようにするセキュリティグループを選択します。
- [次へ] を選択します。
- [すべてのステップを確認] ページで、[完了] を選択します。Lake Formation コンソールに戻ります。
- [ソースのインポート] セクションで、[データベース接続]ドロップダウンメニューの横にある [更新] ボタンをクリックします。
- 作成した接続を選択します。
- [ソースデータパス] にデータベース名を入力します。特定のテーブルのみを読み込む場合は、このフィールドを更新して、必要なデータベース、スキーマ、テーブルを確実に反映できます。ワイルドカードを使用できます。
- オプションとして、除外パターンを入力して、データレイクに取り込みたくないデータを除外します。詳細については、「Include and Exclude Patterns」をご覧ください。これで、ワークフローのターゲットを設定する準備ができました。
- [ターゲットのインポート] セクションの [ターゲットデータベース] で、作成したデータベースを選択します。
- [ターゲットストレージの場所] に、作成したデータレイクの場所を入力します。
- [データ形式] で [Parquet] を選択します。Parquet の詳細については、Apache Parquet のWeb サイトをご参照ください。
- [インポートの頻度] でインポートの頻度を選択します。このチュートリアルでは、[オンデマンドで実行] を選択します。
- [インポートオプション] セクションの [ワークフロー名] に、ワークフロー名を入力します。
- IAM ロールの場合は、AWS Glue がユーザーに代わって AWS サービスを呼び出すことができる [IAM ロール]を選択します。この IAM ロールの設定手順については、ドキュメントをご参照ください。
- テーブルプレフィックス には、データレイクに最終的な出力テーブルを作成するときにジョブが使用するテーブルプレフィックスを入力します。この投稿では、ワークフローが取り込むテーブルをすばやく検出する方法として
sqlserver
を入力します。 - [最大キャパシティ] には、ジョブの実行時に割り当てる DPU の数を入力します。この投稿では、
5
を入力します。 - [同時実行数] に、このジョブで許可される同時実行数の最大値を入力します。この投稿では、
5
を入力します。 - [作成] を選択します。
- Lake Formation コンソールで、[ブループリント] を選択します。作成したワークフローは、[ワークフロー]に表示されます。
- ワークフローを選択します。
- [アクション] ドロップダウンメニューから、[開始] を選択します。取り込みと変換の処理は、データベースのサイズによって異なります。
- ワークフローを選択します。
- 現在の実行中の ID を選択します。この手順により、AWS Glue コンソールにリダイレクトされ、ワークフローの各タスクをより詳しく知ることができます。
アクセス許可の付与
Amazon S3 のデータレイクにデータがあり、データカタログのデータベースにメタデータテーブルがあるので、ユーザーにデータへのアクセス権限を付与できます。次の手順を実行します。
- [アクセス権限を付与] を選択します。
- IAM ユーザーとロールの場合、データへのアクセスが許可されている IAM ユーザーまたはロールを選択します。データベース、データベース内のテーブルのセット、またはテーブル内の特定の列のセットへのアクセスを許可するオプションがあります。
この投稿では、ログインは Active Directory Federation Services (ADFS) を通じてフェデレーションされます。Active Directory Domain Services Groups (ADDS) はアクセス権限を管理します。ユーザーはどの IAM ロールを引き受けるかを選択できます。
この投稿では、IAM ロール
ADFS-Marketing
が引き受けます。データベースLakeformationdatabase
とテーブルsqlserver_appdatabase01_dbo_customer
にアクセスできます。さらに、このロールには電話の列にアクセスする権限がありません。これで、権限が期待どおりに機能していることを確認できます。 ADFS-Marketing
ロールを引き受けるフェデレーションユーザーでログインします。次のスクリーンショットは、電話
の列が使用できないことを示しています。
ただし、特定のすべてのテーブルにアクセスできるロールを引き受ける場合は、電話の列を表示できます。そのスクリーンショットを次に示します。
まとめ
この投稿では、Lake Formation に Amazon S3 データレイクをすばやく登録し、ブループリントを使用して稼働中の SQL Server データベースからデータを取り込み、列レベルでアクセス権限を付与する方法を示しました。これだけでなく、AWS サービスを使用してサードパーティツールのライセンスコストを削減できることも顧客にアピールできます。
著者について
Marcio Morales は、AWS のシニア Microsoft Specialist SA です。