Amazon Web Services ブログ

AWS Glue のクロスアカウントおよびクロスリージョンの接続を行う

AWS Glue は、抽出、変換、ロード (ETL) のための完全マネージド型サービスであり、分析のためのデータの準備と読み込みを簡単にします。AWS Glue は、AWS Glue ドキュメントで説明されているように、接続を使用して、特定のタイプのソースおよびターゲットのデータストアにアクセスします。

デフォルトでは、AWS Glue を使用して、AWS Glue リソースを備えているのと同じ AWS アカウントおよび AWS リージョンのデータストアへの接続を行うことができます。このブログ記事では、AWS Glue リソースを備えているのとは異なるアカウントや AWS リージョンのデータストアにアクセスする方法について説明します。

AWS Glue の接続

AWS Glue は、ドキュメントで説明されているように、AWS Glue データカタログで、接続を使用してデータストアのメタデータをクロールおよびカタログ作成します。また、AWS Glue ETL ジョブも、接続を使用してソースおよびターゲットのデータストアに接続します。AWS Glue は、Amazon RedshiftAmazon RDSJDBC データストアへの接続をサポートしています。

接続には、AWS Glue がデータストアにアクセスするために必要なプロパティが含まれています。こうしたプロパティには、ユーザー名とパスワード、データストアのサブネット ID、セキュリティグループなどの接続情報が含まれている場合があります。

データストアが Amazon VPC 内にある場合、AWS Glue は VPC のサブネット ID とセキュリティグループ ID という接続プロパティを使用して、データストアを含む VPC に Elastic Network Interface を設定します。これを行うことで、ETL ジョブとクローラを VPC 内のデータストアに安全に接続することができます。

データストアを含む VPC が AWS Glue リソースと同じアカウントおよび AWS リージョンにある場合、AWS Glue はこの Elastic Network Interface の設定を行うことができます。接続のプロパティで指定されたセキュリティグループは、それぞれのネットワークインターフェイスに適用されます。サブネットに関連付けられたセキュリティグループルールとネットワーク ACL が、サブネットを介してネットワークトラフィックをコントロールします。サブネットを経由するアウトバウンドトラフィックを許可するための正しいルールにより、AWS Glue はデータストアを含む VPC 内のすべてのサブネットとのネットワーク接続を確立できるため、ソースまたはターゲットのデータストアにアクセスできます。

VPC コンポーネントを相互リンクできるのは、同じ AWS リージョン内に存在する場合だけです。そのため、AWS Glue は別のリージョンの VPC内に Elastic Network Interface を作成することはできません。データストアを含む VPC が別のリージョンにある場合は、ネットワークルートを追加し、AWS Glue によって設定されたネットワークインターフェイスがデータストアとのネットワーク接続を確立できるようにする追加のネットワークインターフェイスを作成する必要があります。

このブログ記事では、AWS Glue リソースとは異なる AWS リージョンのデータストアに AWS Glue がアクセスできるためのネットワークルートとインターフェイスの設定方法について説明します。この例では、リージョン A にある AWS Glue をリージョン B にある Amazon Redshift データウェアハウスに接続します。

注意: ここの例では、Amazon Redshift クラスターは異なる AWS リージョンに属していますが、同じアカウントに属していると想定しています。同じ設定と手順は、別のアカウントの Amazon Redshift クラスターに対しても有効です。

AWS Glue の VPC コンポーネントの設定

AWS Glue には、接続先のデータストアへのネットワークルートを備えた VPC が必要です。このソリューションでは、セキュリティグループとルートテーブルが、プライベートサブネット内の AWS Glue によって設定された Elastic Network Interface がインターネットに到達したり、VPC 外のデータストアに接続したりできるように設定されています。次の図は、必要なコンポーネントとネットワークトラフィックフローを示しています。

VPC の設定に必要なコンポーネント:

  • リージョン A のプライベートサブネットにある AWS Glue リソース。
  • リージョン A のパブリックサブネットにある Elastic IP アドレスがアタッチされた NAT ゲートウェイ
  • プライベートサブネットからのアウトバウンドネットワークトラフィックが NAT ゲートウェイを通過できるようにするルートを含むプライベートルートテーブル。
  • リージョン A にある インターネットゲートウェイ
  • パブリックサブネットからのアウトバウンドネットワークトラフィックがインターネットゲートウェイを通過できるようにするルートを含むパブリックルートテーブル。

注意: VPC のデフォルトセキュリティグループを更新し、自己参照インバウンドルールとアウトバウンドルールを含めて、すべてのポートからのすべてのトラフィックを許可する必要があります。この例の後半では、このセキュリティグループを AWS Glue 接続にアタッチして、AWS Glue によって設定されたネットワークインターフェイスがプライベートサブネット内で互いに通信できるようにします。

コンポーネントを通過するネットワークトラフィックフロー:

プライベートサブネット内の AWS Glue リソースからプライベートサブネット外の任意の宛先またはデータストアへのアウトバウンドネットワークトラフィックは、NAT ゲートウェイ経由でルーティングされます。

NAT ゲートウェイはパブリックサブネットに存在し、関連する Elastic IP アドレスを備えています。インターネットゲートウェイを使用して、AWS Glue リソースからインターネットにネットワークトラフィックを転送します。

AWS Glue がプライベートサブネット外のデータストアとの接続を確立しようとすると、データストア側の着信ネットワークトラフィックは NAT ゲートウェイから送信されたように見えます。

データストア側では、データストアまたはそのセキュリティグループが、NAT ゲートウェイにアタッチされた Elastic IP アドレスからの着信ネットワークトラフィックを受け入れることを許可します。これは、下の「Amazon Redshift による AWS Glue からのネットワークトラフィックの受け入れ」のセクションに示されています。

AWS CloudFormation を使用する VPC コンポーネントの作成

GitHub でホストされている vpc_setup.yaml CloudFormation テンプレートを使用して、前述の VPC とすべてのコンポーネントの作成を自動化することができます。AWS アカウントにスタックを作成する手順は次のとおりです。

  1. 米国オレゴン (us-west-2) リージョンにスタックをデプロイ:

注意: この例では、us-west-2 リージョンで AWS Glue のリソースと接続を作成します。これを、AWS Glue の接続とリソースがある AWS リージョンに変更することができます。

スタック名と URL テンプレートのフィールドがあらかじめ入力されている AWS CloudFormation コンソールに移動します。

  1. [Next] を選択します。
  2. デフォルトの IP 範囲を使用し、[Next] を選択します。
  3. このステップを省略して、[Next] を選択します。
  4. 確認して、[Create] を選択します。
  5. スタックの作成が完了するまで待ちます。完了後、すべての VPC コンポーネントが作成され、必要な設定が行われます。
  6. VPC コンソールへ移動して、新しく作成された NAT の Elastic IP アドレスをコピーします。
    注意: この IP アドレスは、AWS Glue リソースからのアウトバウンドネットワークフローに使用されるため、データストア側でホワイトリストに登録する必要があります。詳細については、下の「Amazon Redshift による AWS Glue からのネットワークトラフィックの受け入れ」を参照してください。

データストアへの AWS Glue の接続を作成してテストする前に、作成したばかりの VPC コンポーネントに AWS Glue がアクセスできるようにする IAM ロールが必要です。

AWS Glue が Amazon VPC コンポーネントにアクセスできるようにする IAM ロールの作成

この例では、マネージド IAM ポリシー AWSGlueServiceRole をアタッチして TestAWSGlueConnectionIAMRole というロールを作成します。

  1. AWS Identity and Access Management (IAM) コンソールで [Roles] タブを選択します。
  2. [Create role] を選択し、信頼できるエンティティとして AWS Glue を選択します。

  1. AWS Glue が VPC コンポーネントにアクセスできるようにする IAM ロールに IAM ポリシーをアタッチします。この例では、設定に必要なすべての権限が含まれている、デフォルトの AWSGlueServiceRole ポリシーを使用しています。

  1. ロールに、TestAWSGlueConnectionRole という名前を付けます。

注意: カスタムロール TestAWSGlueConnectionIAMRole にアタッチしたデフォルトの GlueServiceRole ポリシーに、VPC コンポーネントへのアクセスの権限があります。デフォルトのポリシーの代わりにカスタムポリシーを使用している場合は、VPC コンポーネントにアクセスするための同じ権限も含める必要があります。

AWS CloudFormation を使用して Amazon Redshift クラスターを作成する

この例では、米国バージニア北部 (us-east-1) リージョンの VPC にサンプルの Amazon Redshift クラスターを作成します。AWS アカウントにスタックを作成する手順は次のとおりです。

  1. us-east-1 リージョンの CloudFormation コンソールに移動し、ドキュメントに記載されているようにこの CloudFormation テンプレートを使用して新しいスタックを作成します。
  2. クラスターの設定ならびに MasterUsernameMasterUserPassword を指定します。MasterUserPassword は、以下の制約に従わなければなりません。
  • 長さが、8 〜 64 文字であること。
  • 少なくとも 1 つの大文字、1 つの小文字、1 つの数字を含む必要があります。
  • ‘ (一重引用符)、” (二重引用符)、:、\、/、@、スペース以外の任意の印刷可能な ASCII 文字 (ASCII コード 33-126) を使用できます。

  1. [Next] を選択し、スタックの作成を続行します。
  2. 設定を確認して、[Create] を選択します。

  1. スタックの作成が完了するまで待ちます。これには数分かかる場合があります。

  1. Amazon Redshift コンソールに移動し、クラスター名を選択してクラスターのプロパティを表示します。

  1. 後で使用するために、クラスターおよびアタッチされているセキュリティグループの JDBC URL に注意してください。

注意: ここでは、リージョン B の VPC 内にあるパブリックサブネットにサンプルの Amazon Redshift クラスターを作成しました。GitHub のサンプルに示すように、新しい Amazon Redshift クラスターを設定する際に、セキュリティと可用性を高めるためのベストプラクティスに従うことをお勧めします。

AWS Glue 接続の作成

これで、必要な VPC の設定、Amazon Redshift クラスター、IAM ロールが準備できました。次に、AWS Glue 接続を作成し、以下のようにテストすることができます。

  1. AWS Glue コンソールの [Connections] タブにある [Add Connection] を選択します。この接続を作成する AWS リージョンは、VPC の設定と同じ米国オレゴン (us-west-2) です。

  1. JDBC 接続タイプを選択します。データストアの設定に応じて、JDBC SSL を適用するかどうかを選択できます。

  1. 接続固有の設定を追加します。Amazon Redshift クラスターの URL に注意してください。Amazon Redshift クラスターが us-east-1 にあることを示しています。

注意: この接続用に作成した VPC (VPCForGlue) とプライベートサブネット (GluePrivateSubnet) を使用します。セキュリティグループについては、VPC のデフォルトのセキュリティグループを使用します。このセキュリティグループには、すべてのトラフィックを許可する自己参照インバウンドルールとアウトバウンドルールがあります。

  1. 設定を確認して、[Finish] を選択します。

これで、AWS Glue コンソールに、接続が正常に作成されたことが表示されるはずです。

注意: この手順の完了は、AWS Glue 接続が作成されたことを意味するだけです。AWS Glue が実際にデータストアに接続できることを保証するものではありません。接続をテストする前に、Amazon Redshift に AWS Glue からのネットワークトラフィックの受け入れを許可する必要もあります。

Amazon Redshift による AWS Glue からのネットワークトラフィックの受け入れ

AWS Glue とは異なる AWS リージョン (us-east-1) の Amazon Redshift クラスターは、AWS Glue からの着信ネットワークトラフィックを許可する必要があります。

このため、Amazon Redshift クラスターにアタッチされたセキュリティグループを更新し、AWS Glue VPC の NAT ゲートウェイにアタッチされた Elastic IP アドレスをホワイトリストに登録します。

AWS Glue 接続のテスト

ベストプラクティスとして、データストア接続を ETL ジョブで使用する前に、[Test connection] を選択します。AWS Glue は接続のパラメータを使用して、データストアにアクセスしてエラーをレポートできることを確認します。

  1. 作成したばかりの接続 TestAWSGlueConnection を選択し、[Test Connection] を選択します。
  2. AWS Glue リソースが VPC コンポーネントにアクセスできるように作成した TestAWSGlueConnectionIAMRole を選択します。

  1. 前のステップで [Test connection] ボタンを選択すると、AWS Glue がデータストアに正常に接続するまで数秒かかることがあります。接続すると、コンソールに「connected successfully to your instance」というメッセージが表示されます。

結論

ここで説明するような VPC 設定を作成することで、AWS Glue を別のアカウントまたは AWS リージョンのデータストアに接続させることができます。これを行うことで、AWS Glue リソースとデータストア間のネットワーク接続が確立されます。これで、ETL ジョブと AWS Glue クローラでこの AWS Glue 接続を使用して、データストアに接続することができます。

ご質問またはご提案については、以下でコメントを残してください。


その他の参考資料

この記事が参考になった場合は、「Connecting to and running ETL jobs across multiple VPCs using a dedicated AWS Glue VPC」および 「How to access and analyze on-premises data stores using AWS Glue」もぜひご覧ください。

 


著者について

Pankaj Malhotra は、アマゾン ウェブ サービスのソフトウェア開発エンジニアです。彼は、クラウドインフラストラクチャや分散システムに関連する問題を解決することを楽しんでいます。彼は、サーバーレス技術を使用した、マルチリージョン対応で復元力のあるサービスの開発を専門としています