S3 Tables の VPC 接続
S3 Tables のすべてのテーブルは Apache Iceberg 形式で、2 種類の S3 オブジェクトで構成されます。これら 2 種類のオブジェクトは、異なる時点でデータファイルに関する情報を追跡するデータとメタデータファイルを保存するデータファイルです。すべてのテーブルバケット、名前空間、テーブルオペレーション (CreateNamespace、CreateTable など) は S3 Tables エンドポイント (s3tables.region.amazonaws.com) を介してルーティングされ、データとメタデータファイルを読み書きするすべてのオブジェクトレベルのオペレーションは引き続き S3 サービスエンドポイント (s3.region.amazonaws.com) を介してルーティングされます。
S3 Tables にアクセスするために、Amazon S3は AWS PrivateLink を使用して、ゲートウェイエンドポイントとインターフェイスエンドポイントの 2 つのタイプの VPC エンドポイントをサポートしています。ゲートウェイエンドポイントは、AWS ネットワーク経由で VPC から S3 にアクセスするために、ルートテーブルで指定するゲートウェイです。インターフェイスエンドポイントは、プライベート IP アドレスを使用して、VPC 内、オンプレミス、または VPC ピアリングや AWS Transit Gateway を使用する別の AWS リージョンにある VPC から Amazon S3 にリクエストをルーティングすることにより、ゲートウェイエンドポイントの機能を拡張します。
VPC から S3 Tables にアクセスするには、2 つの VPC エンドポイント (1 つは S3 用、もう 1 つは S3 Tables 用) を作成することをお勧めします。ファイル (オブジェクト) レベルのオペレーションを S3 にルーティングするゲートウェイまたはインターフェイスエンドポイント、およびバケットおよびテーブルレベルのオペレーションを S3 Tables にルーティングするインターフェイスエンドポイントを作成できます。S3 を使用して、ファイルレベルのリクエストに VPC エンドポイントを作成して使用できます。詳細については、「AWS PrivateLink ユーザーガイド」の「Gateway endpoints」を参照してください。
AWS PrivateLink を使用して S3 Tables のエンドポイントを作成および操作する方法の詳細については、以下のトピックを参照してください。VPC インターフェイスエンドポイントを作成するには、AWS PrivateLink ガイドの「VPC エンドポイントの作成」を参照してください。
トピック
S3 Tables の VPC エンドポイントの作成
VPC エンドポイントを作成すると、S3 Tables はエンドポイント固有の 2 つのタイプの DNS 名 (リージョンおよびゾーン) を生成します。
-
リージョン DNS 名は次の形式です。
VPCendpointID.s3tables.AWSregion.vpce.amazonaws.com。例えば、VPC エンドポイント IDvpce-1a2b3c4dの場合、生成される DNS 名はvpce-1a2b3c4d-5e6f.s3tables.us-east-1.vpce.amazonaws.comに似ている場合があります。 -
ゾーン DNS 名は次の形式です。
VPCendpointID-AvailabilityZone.s3tables.AWSregion.vpce.amazonaws.com。例えば、VPC エンドポイント IDvpce-1a2b3c4d-5e6f.の場合、生成される DNS 名はvpce-1a2b3c4d-5e6f-us-east-1a.s3tables.us-east-1.vpce.amazonaws.comに似ている場合があります。ゾーン DNS 名にはアベイラビリティーゾーンが含まれます。ゾーン DNS 名は、アーキテクチャがアベイラビリティーゾーンを分離する場合に使用できます。エンドポイント固有の S3 DNS 名は、S3 パブリック DNS ドメインから解決できます。
また、プライベート DNS オプションを使用すると、VPC エンドポイント経由の S3 トラフィックのルーティングが簡単になり、アプリケーションで使用できる最も低コストのネットワークパスを活用できます。プライベート DNS は、S3 Tables のパブリックエンドポイント、例えば s3tables.region.amazonaws.com を VPC のプライベート IP にマッピングします。プライベート DNS オプションを使用すると、インターフェイスエンドポイントのエンドポイント固有の DNS 名を使用するように S3 クライアントを更新することなく、Regional S3 トラフィックをルーティングできます。
AWS CLI を使用したエンドポイントを介するテーブルバケットとテーブルへのアクセス
AWS Command Line Interface (AWS CLI) を使用して、インターフェイスエンドポイントを介してテーブルバケットとテーブルにアクセスできます。AWS CLI を使用すると、aws s3 コマンドは Amazon S3 エンドポイントを介してトラフィックをルーティングします。aws s3tables AWS CLI コマンドは Amazon S3 Tables エンドポイントを使用します。
s3tables VPC エンドポイントの例は、vpce-0123456afghjipljw-nmopsqea.s3tables.region.vpce.amazonaws.com です。
s3tables VPC エンドポイントにはバケット名は含まれません。aws s3tables AWS CLI コマンドを使用して s3tables VPC エンドポイントにアクセスできます。
s3 VPC エンドポイントの例は、amzn-s3-demo-bucket.vpce-0123456afghjipljw-nmopsqea.s3.region.vpce.amazonaws.com です。
aws s3 AWS CLI コマンドを使用して s3 VPC エンドポイントにアクセスできます。
AWS CLI を使用してインターフェイスエンドポイントを介してテーブルバケットとテーブルにアクセスするには、-region- および --endpoint-url パラメータを使用します。テーブルバケットとテーブルレベルのアクションを実行するには、S3 Tables エンドポイント URL を使用します。オブジェクトレベルのアクションを実行するには、Amazon S3 エンドポイント URL を使用します。
次の例では、ユーザー入力用プレースホルダーを独自の情報に置き換えます。
例 1: エンドポイント URL を使用したアカウント内のテーブルバケットのリスト化
aws s3tables list-table-buckets --endpoint https://vpce-0123456afghjipljb-aac.s3tables.us-east-1.vpce.amazonaws.com —regionus-east-1
例 2: エンドポイント URL を使用したバケット内のテーブルのリスト化
aws s3tables list-tables --table-bucket-arn arn:aws:s3tables:us-east-1:123456789301:bucket/amzn-s3-demo-bucket--endpoint https://vpce-0123456afghjipljb-aac.s3tables.us-east-1.vpce.amazonaws.com --regionus-east-1
クエリエンジン使用時の VPC ネットワークの設定
クエリエンジンを使用する場合は、次のステップに従って、VPC ネットワークを設定します。
-
開始するには、VPC を作成または更新します。詳細については、「Create a VPC (VPC を作成する)」を参照してください。
-
S3 Tables にルーティングするテーブルおよびテーブルバケットレベルのオペレーションの場合は、新しいインターフェイスエンドポイントを作成します。詳細については、「インターフェイス VPC エンドポイントを使用して AWS サービスにアクセスする」を参照してください。
-
Amazon S3 にルーティングするすべてのオブジェクトレベルのオペレーションで、ゲートウェイエンドポイントまたはインターフェイスエンドポイントを作成します。ゲートウェイエンドポイントの詳細については、「Create a gateway endpoint」を参照してください。
-
次に、データリソースを設定し、Amazon EMR クラスターを起動します。詳細については、「Amazon EMR の開始方法」を参照してください。
-
その後、VPC エンドポイントから DNS 名を選択して、追加の設定で Spark アプリケーションを送信できます。例えば、
spark.sql.catalog.ice_catalog.s3tables.endpointおよびhttps://interface-endpoint.s3tables.です。詳細については、「Submit work to your Amazon EMR cluster」を参照してください。us-east-1.vpce.amazonaws.com
デュアルスタックエンドポイントを使用したテーブルとテーブルバケットへのアクセス
S3 Tables は、AWS PrivateLink のデュアルスタック接続をサポートしています。デュアルスタックエンドポイントを使用すると、ネットワークがサポートする内容に応じて、IPv4 プロトコルに加えて Internet Protocol バージョン 6 (IPv6) を使用して S3 テーブルバケットにアクセスできます。次の命名規則を使用して、デュアルスタックエンドポイントを介して S3 バケットにアクセスできます。
s3tables.<region>.api.aws
VPC 内で IPv6 経由で S3 テーブルおよびテーブルバケットにアクセスを試行する前に、以下の点について知っておく必要があります。
-
テーブルへのアクセスに使用するクライアントと S3 クライアントの両方でデュアルスタックが有効になっている必要があります。
-
VPC セキュリティグループでは、IPv6 インバウンドはデフォルトで有効になっていません。IPv6 アクセスを許可するには、HTTPS (TCP ポート 443) を許可する新しいルールをセキュリティグループに追加する必要があります。詳細については、「Amazon EC2 ユーザーガイド」の「セキュリティグループルールの設定」を参照してください。
-
VPC に IPv6 CIDR が割り当てられていない場合は、VPC に IPv6 CIDR ブロックを手動で追加する必要があります。詳細については、「AWS PrivateLink ユーザーガイド」の「VPC の IPv6 サポートを追加する」を参照してください。
-
IP アドレスフィルタリング IAM ポリシーを使用する場合は、IPv6 アドレスを処理するように更新する必要があります。IAM でのアクセス許可管理の詳細については、「Amazon S3 用 Identity and Access Management」を参照してください。
S3 Tables のデュアルスタックエンドポイントを使用する新しい VPC エンドポイントを作成するには、CLI コマンドの例を使用します。
aws ec2 create-vpc-endpoint \ --vpc-id vpc-id \ --service-name com.amazonaws.aws-region.s3tables \ --subnet-ids subnet-1 subnet-2 \ --vpc-endpoint-type Interface \ --ip-address-type dualstack \ --dns-options "DnsRecordIpType=dualstack" \ --security-group-ids sg-id \ --regionaws-region
VPC エンドポイントの作成の詳細については、VPC ユーザーガイドの「Create an interface endpoint」を参照してください。
ネットワークが IPv6 をサポートしており、VPC を更新して IPv6 を有効にする場合は、次の CLI コマンドを使用できます。
aws ec2 modify-vpc-endpoint \ --vpc-endpoint-id vpce-id \ --ip-address-type dualstack \ --dns-options "DnsRecordIpType=dualstack" \ --regionaws-region
VPC ネットワーク内の S3 Tables へのアクセスの制限
リソースベースのポリシーと同様に、テーブルとテーブルバケットへのアクセスを制御するエンドポイントポリシーを VPC エンドポイントにアタッチできます。次の例では、インターフェイスエンドポイントポリシーは特定のテーブルバケットのみへのアクセスを制限します。