DEA / ドメイン1 データの取り込みと変換
データソースへの接続 (JDBC/ODBC と許可リスト)
データパイプラインは、、のデータベース、他社のデータベース、 など、さまざまな場所からデータを読みます。データベースへの接続では、ドライバーの規格 (/ODBC) と、ネットワークの到達経路、接続元の許可 (やファイアウォールの許可リスト) の3つがそろって初めてつながります。DEA では、接続できない原因の切り分けと、許可リストに登録する アドレスの作り方が問われます。
Point
- JDBC = Java Database Connectivity は、Java (と Spark など JVM 上の処理) からデータベースへ接続する標準の API です。
- ODBC = Open Database Connectivity は、言語に依存しない接続の標準で、BI ツールや Excel などで使います。
- 許可リスト (allowlist) は、接続を許す送信元の IP アドレスなどの一覧です。以前はホワイトリストと呼ばれていました。
- 和訳
- Connectivity: 接続性
- Weblio英和辞書「connectivity」
概要
| 必要なもの | 内容 |
|---|---|
| ドライバーと接続文字列 | の URL (jdbc:mysql://ホスト:3306/db など)、ODBC のデータソース |
| 認証情報 | ユーザー名とパスワード ( で保管)、 認証 |
| ネットワークの経路 | 同じ 、、、、、 経由のインターネット |
| 接続元の許可 | 送信先の、ネットワーク 、社外のファイアウォールの許可リスト |
主要技術
①JDBC と ODBC
| 規格 | 主な利用者 | AWS での例 |
|---|---|---|
| Java、Scala、 (、) | Glue の JDBC 接続で ・・の DB を読む。Redshift や の JDBC ドライバー | |
| ODBC | ツール、Excel、Python (pyodbc) など | Athena や Redshift の ODBC ドライバーで BI ツールから問い合わせる |
Glue ジョブや EMR は JDBC でデータベースを読み書きします。BI ツールから Athena や Redshift へ問い合わせるときは、それぞれのサービスが提供する JDBC/ODBC ドライバーを使います。JDBC で接続できないデータソースには、Glue のカスタムコネクタや のコネクタを使います。
②AWS Glue の接続 ⚠️ 頻出
の接続 (Connection) は、データストアへの接続情報 ( の URL、認証情報、・・) をまとめたものです。ジョブやに接続を付けると、Glue は指定したサブネットに (ネットワークインターフェイス) を作り、そこからデータストアへ接続します。
| 要件 | 内容 |
|---|---|
| 自己参照のインバウンドルール | Glue のコンポーネント同士が通信するため、接続に付けるセキュリティグループに、同じセキュリティグループを送信元とする全 のインバウンドルールが必要 |
| データベース側の許可 | DB のセキュリティグループで、Glue のセキュリティグループからの DB のポートを許可 |
| への経路 | ENI はプライベート だけを持つため、S3 へは S3 のゲートウェイ VPC か ゲートウェイが必要 |
| サブネットの IP アドレス | ワーカーの数だけ IP アドレスを使う。サブネットの空きが足りないとジョブが失敗する |
| 認証情報 | のシークレットを参照できる |
⚠️ 頻出: 「Glue ジョブに VPC 内の への接続を追加したら、S3 の読み書きができなくなった」は、S3 のゲートウェイエンドポイント (または NAT ゲートウェイ) がないことが原因です。「接続のテストが失敗する」は、自己参照のルールや DB 側のセキュリティグループを確かめます。
③許可リストのための固定の送信元 IP ⚠️ 頻出
社外のデータベースや が「接続元の アドレスを許可リストに登録してほしい」と求める場合、AWS 側の送信元 IP を固定する必要があります。
| 構成 | 送信元 IP | 許可リストに登録するもの |
|---|---|---|
| の / → ゲートウェイ → インターネット | NAT ゲートウェイの | その Elastic IP |
| に接続しない Lambda | AWS が管理する変動する IP | 固定できないため、VPC に接続して NAT ゲートウェイを通す |
| の DB へ ・ | VPC のプライベート IP | ジョブを動かすの |
Glue ジョブや VPC 内の Lambda はパブリック IP を持たないため、インターネット上のデータベースへ出るには NAT ゲートウェイを通ります。NAT ゲートウェイに割り当てた Elastic IP は変わらないので、相手の許可リストに登録できます。
④AWS サービスからの接続を許可する
| 場面 | 許可の方法 |
|---|---|
| → パブリックアクセス可能な | Redshift ので、そのの Firehose の アドレス範囲を許可 |
| → 内の /Redshift | Quick Sight の VPC 接続を作り、セキュリティグループで許可 |
| → ソース DB | インスタンスの IP やセキュリティグループを許可 |
| → VPC 内の RDS | Lambda のセキュリティグループを送信元として、DB のセキュリティグループで許可 |
同じ VPC の中では、IP アドレスではなく、送信元のセキュリティグループを指定して許可するのが基本です。IP は変わりますが、セキュリティグループの参照は変わりません。
⑤他の VPC やオンプレミスへの到達経路
| 接続先 | 経路 |
|---|---|
| 同じアカウントの別の | 、 (とも設定) |
| 他アカウントのサービス | (サービス) |
| のデータセンター | 、 |
| AWS サービスの (、) | ゲートウェイ VPC エンドポイント |
| その他の AWS サービスの API (、、 など) | インターフェイス VPC エンドポイント |
Glue の接続でオンプレミスの DB を読むには、ジョブのからオンプレミスへのルートと、オンプレミス側のファイアウォールでサブネットの を許可することが必要です。 名で接続するなら、名前解決 ( Resolver のエンドポイントなど) も必要です。
⑥接続できないときの切り分け
| 症状 | 確かめること |
|---|---|
| タイムアウト | ルート (、ピアリング、)、、ネットワーク 、相手のファイアウォールの許可リスト |
| 接続拒否 | ポート番号、DB が起動しているか、DB 側の |
| 認証エラー | ユーザー名とパスワード、シークレットの値、 認証の設定 |
| 名前解決できない | の の設定、の DNS との連携 |
| だけ失敗する | S3 のゲートウェイまたは NAT ゲートウェイ |
試験対策
①判断マトリクス
| 問題文のキーワード | 選ぶ対処 |
|---|---|
| 社外の DB が接続元 の登録を求める | ゲートウェイの を許可リストに登録 |
| 外の から固定 IP で出たい | Lambda を VPC に接続し NAT ゲートウェイ経由に |
| ジョブが VPC 内の を読めない | 自己参照のインバウンドルール、DB ので許可 |
| Glue ジョブが接続を付けたら に届かない | S3 のゲートウェイ VPC |
| Glue ジョブがの IP 不足で失敗 | 大きなサブネット、ワーカー数の調整 |
| ツールから / へ | /ODBC ドライバー |
| JDBC で接続できないデータソース | Glue のカスタムコネクタ、Marketplace のコネクタ |
| の DB を Glue で読む | / + Glue の JDBC 接続 |
| DB のパスワードをコードに書かない | を Glue の接続から参照 |
②よくある誤答
- 内のリソースの許可に、変わり得るプライベート を直接書くこと。を参照します。
- VPC に接続しない の送信元 IP を許可リストに登録しようとすること。固定されません。
- だけでから外へ出られると考えること。 ゲートウェイが必要です。
- 接続の問題を の権限だけで解決しようとすること。ネットワークの経路と許可も必要です。