AWS Glue CrawlerでRedshiftをクロールするための設定をしてみた

2022.01.31

はじめに

データアナリティクス事業本部のkobayashiです。

AWS Glue Data Catalogを使って様々なデータソースのメタデータ管理を行っている中で、RedshiftをデータソースとしてRedshiftのテーブルをデータカタログに登録する必要がありました。データカタログはGlueのCrawlerを使ってRedshiftをクロールし定期的にメタデータを更新したかったのですが、その際の設定でつまずいた箇所があったのでまとめます。

AWS Glue CrawlerでS3をクロールする内容の記事が弊社ブログにありますのでそちらも御覧ください。

AWS Glue CrawlerでRedshiftをクロールしてみる

AWS Glue Crawlerでクロールできるデータソースは以下になっています。

  • ネイティブ対応
    • Amazon S3
    • Amazon DynamoDB
  • JDBC接続で対応
    • Amazon Redshift
    • Amazon Aurora
    • MariaDB
    • Microsoft SQL Server
    • MySQL
    • Oracle
    • PostgreSQL
  • MongoDB クライアント対応
    • MongoDB

今回はRedshiftをクロールするためJDBC接続を以下の手順で進めます。

  • AWS Glue Crawlerで使うロールを作成する
  • VPCエンドポイント,セキュリティグループの設定をする
  • Redshiftへの接続を作成する
  • Crawlerを作成する
  • Crawlerを実行する

では設定をおこないたいと思います。

なお今回の環境としてはインターネットと遮断したプライベートサブネットのみの環境(NAT ゲートウェイもない)を想定しています。

AWS Glue Crawlerで使うロールを作成する

はじめにCrawlerに付与するロールを作成します。今回は簡易に設定を行っているため厳密なポリシー管理は行っていません。本番環境などではこのまま使用せずに、環境に応じてポリシー設定を変更してください。

手順1)IAM > ロール > ロールを作成にて適当な名前でIAMロールを作成する

手順2)信頼されたエンティティでGlueを選択する

手順3)ポリシーにAWSGlueServiceRole、AmazonS3FullAccessを付与する

より詳細な設定は下記のAWSの公式ドキュメントをご確認ください。

VPC,セキュリティグループの設定を行う

次にVPCにエンドポイントの作成とセキュリティグループの設定を行います。

VPCエンドポイントの作成

AWS Glue Crawlerを使う際にはAWS Glue CrawlerからS3へアクセスする必要がありますが、今回の環境ではNTAのないプライベートサブネットのためS3 VPC ゲートウェイエンドポイントを作成して、このエンドポイント経由でS3へアクセスさせる必要があります。( AWS Glue エラー「VPC S3 エンドポイントの検証に失敗しました」のトラブルシューティングを行います。 )

手順1)VPC > エンドポイントに進む。

手順2)エンドポイントの作成を押下してエンドポイントの作成に進む。

手順3)エンドポイントの設定を行い、エンドポイントの作成を押下してエンドポイントを作成する。

  • エンドポイントの設定
    • 名前タグ : 適当な名前を入力
    • サービスカテゴリ : AWSのサービスを選択
  • サービス
    • タイプ列がGatewaycom.amazonaws.{リージョン名}.s3を選択する
  • VPC
    • VPCエンドポイントを作成するVPCを選択する

以下の様にエンドポイントが作成されます。

セキュリティグループの設定

AWS Glue CrawlerでRedshiftへ接続するのでそのアクセスを許可する必要があります。これにはRedshiftに付与されているセキュリティグループにすべてのTCPに対する自己参照型のインバウンドルールを設定する必要があります。( JDBC データストアに接続するための VPC の設定 - AWS Glue

手順1)Amazon Redshift > クラスターに進む。

手順2)接続するRedshiftクラスターを選択する。

手順3)プロパティタブを押下し、ネットワークとセキュリティの設定でアタッチしているセキュリティグループを選択する。

手順4)セキュリティグループの設定画面に遷移するので、インバウンドルールタブを押下しインバウンドのルール編集を選択する。

手順5)ルールを追加を押下し、すべてのTCPに対する自己参照型のインバウンドルールを設定する。

  • タイプ : すべてのTCPを選択
  • ソース : カスタムを選択し セキュリティグループIDと同じものを入力

今回はRedshiftの設定を行っていますが、接続先がRDSの場合も同様の設定を行います。

Redshiftの接続を作成する

次にCrawlerがRedshiftへ接続するための接続を作成します。

手順1)AWS Glue > データカタログ > データベース > 接続に進む。

手順2)接続の追加を押下して接続作成に進む。

手順3)接続のプロパティの設定を行い次へを押下する。

  • 接続名 : 適当な名前を入力
  • 接続タイプ : Amazon Redshiftを選択
    • SSL接続が必要ですをチェック(Redshiftの設定に合わせてください)

手順4)データストアへのアクセス設定の設定を行い次へを押下する。

  • クラスター : 接続先のクラスターを選択
  • データベース名 : データベース名を入力
  • ユーザー名 : ユーザー名を入力
  • パスワード : パスワードを入力

手順5)最後に確認画面が出るので問題なければ完了を押下し接続を作成する。

接続が作成されたら接続のテストにて接続確認を行っておきます。問題なければ正常にインスタンスに接続されましたのメッセージが出ます。

Crawlerを作成する

次にAWS Glue Crawlerでクローラを作成します。

手順1)AWS Glue > データカタログ > クローラに進む。

手順2)クローラの追加を押下してクローラ作成に進む。

手順3)クローラに関する情報の追加の設定を行い次へを押下する。

手順4)Specify crawler source typeの設定を行い次へを押下する。

手順5)データストアの追加の設定を行い次へを押下する。

  • データストアの選択 : JDBCを選択
  • データストアの選択 : 先に作成したRedshiftの接続を選択
  • インクルードパス : クロールしてデータカタログを作成したいデータベースやスキーマを{データベース名}/{スキーマ名}で入力

手順6)別のデータストアの追加で必要なら追加で別のデータストアを追加する。なければそのまま次へを押下する。

手順7)IAMロールの選択で先に作成したIAMロールを選択し次へを押下する。

手順8)クローラのスケジュールの設定を行い次へを押下する。

今回はスケジュール実行ではなくオンデマンド実行を選択していますが、1時間単位からの設定やCron形式(最小5分間隔)で指定できます。

手順9)クローラの出力の設定を行い次へを押下する。

  • データベース : データカタログを作成したいデータベースのデータカタログを選択

任意項目に関してはすべての新規および既存のパーティションをテーブルからのメタデータで更新します。にチェックを入れていますが、こちらはお好みで設定をします。

手順10)最後に確認画面が出るので問題なければ完了を押下し接続を作成する。

以上でクローラが作成できたので最後にクロールを行ってデータカタログを作成します。

Crawlerを実行する

クローラ一覧から作成したクローラを選択し、クロールの実行を行います。しばらくするとクロールした結果が表示されます。

クローラにより作成されたテーブル情報をAWS Glue > データカタログ > テーブルにて確認してみるとRedshift上のテーブルのデータが取得できていることが確認できます。

まとめ

AWS Glue Crawlerを使ってプライベート環境にあるRedshiftのテーブル情報からデータカタログを作成してみました。通常のクローラ設定に加え、「Gateway型のS3VPCエンドポイントの作成」、「セキュリティグループに自己参照型のインバウンドルール」を設定する必要があるのでその点注意が必要です。

最後まで読んで頂いてありがとうございました。