View a markdown version of this page

ゼロ ETL 統合のターゲットの設定 - AWS Glue

ゼロ ETL 統合のターゲットの設定

ゼロ ETL 統合のターゲットを設定する際には、AWS Glue が提供するいくつかのオプションがあります。ターゲットにできるのは、暗号化された Amazon Redshift データウェアハウスまたは Amazon SageMaker の Lakehouse アーキテクチャです。

ゼロ ETL 統合のターゲットを選択する前に、次のいずれかのターゲットリソースを設定する必要があります。ゼロ ETL 統合のターゲットの設定オプションは次のとおりです。

注記

作成後にゼロ ETL 統合のターゲットを変更することはできません。

汎用 S3 バケットターゲットの設定

このセクションでは、Amazon SageMaker の Lakehouse アーキテクチャを使用してゼロ ETL 統合でターゲットのストレージとして汎用 S3 バケットを設定する場合の前提条件とセットアップ手順について説明します。

汎用 S3 ストレージを使用して Amazon SageMaker の Lakehouse アーキテクチャでゼロ ETL 統合を作成する前に、次のセットアップタスクを完了する必要があります。

  • AWS Glue データベースをセットアップする

  • カタログ RBAC ポリシーを指定する

  • ターゲット IAM ロールを作成する

  • ターゲットロール、KMS (オプション)、接続 (オプション) をターゲットリソースに関連付ける

  • (オプション) ターゲットテーブルのプロパティを設定する

AWS Glue データベースのセットアップ

Amazon S3 汎用バケットの場所を使用してデータカタログ内でターゲットデータベースをセットアップする方法:

  1. AWS Glue コンソールのホームページで、[データカタログ] から [データベース] を選択します。

  2. 右上にある [データベースを追加] を選択します。既にデータベースを作成している場合は、Amazon S3 URI がある場所がデータベースに設定されていることを確認してください。

  3. 名前と場所 (Amazon S3 URI) を入力します。ゼロ ETL 統合には場所が必要であることに注意してください。完了したら、[データベースの作成] をクリックします。

注記

汎用の Amazon S3 バケットは、AWS Glue データベースと同じリージョンに存在している必要があります。

AWS Glue で新しいデータベースを作成する方法については、「データカタログの使用開始」を参照してください。

create-database CLI を使用して AWS Glue にデータベースを作成することもできます。--database-inputLocationUri は必須であることにご注意ください。

Iceberg テーブルの最適化

ターゲットデータベースで AWS Glue によってテーブルが作成されると、圧縮を有効にして Amazon Athena でのクエリを高速化できます。圧縮用のリソース (IAM ロール) の設定については、「テーブル最適化の前提条件」を参照してください。

統合によって作成された AWS Glue テーブルで圧縮を設定する方法の詳細については、「Iceberg テーブルの最適化」を参照してください。

カタログリソースベースアクセス (RBAC) ポリシーの指定

AWS Glue データベースを使用する統合の場合、ソースとターゲット間の統合を許可するには、カタログ RBAC ポリシーに次のアクセス許可を追加します。

注記

クロスアカウント統合の場合、統合ロールポリシーとカタログリソースポリシーの両方を作成したユーザーがリソースで glue:CreateInboundIntegration を許可する必要があります。同じアカウントの場合は、リソースポリシーまたはリソースで glue:CreateInboundIntegration を許可するロールポリシーのいずれかで十分です。どちらのシナリオでも、glue.amazonaws.com.rproxy.govskope.caglue:AuthorizeInboundIntegration に許可する必要があります。

[データカタログ] から [カタログの設定] にアクセスできます。次に、次のアクセス許可を指定し、不足している情報を入力します。

{ "Version": "2012-10-17", "Statement": [ { "Principal": { "AWS": [ "arn:aws:iam::123456789012:user/Alice" ] }, "Effect": "Allow", "Action": [ "glue:CreateInboundIntegration" ], "Resource": [ "arn:aws:glue:us-east-1:111122223333:catalog", "arn:aws:glue:us-east-1:111122223333:database/database-name" ], "Condition": { "StringLike": { "aws:SourceArn": "arn:aws:dynamodb:us-east-1:444455556666:table/table-name" } } }, { "Principal": { "Service": [ "glue.amazonaws.com" ] }, "Effect": "Allow", "Action": [ "glue:AuthorizeInboundIntegration" ], "Resource": [ "arn:aws:glue:us-east-1:111122223333:catalog", "arn:aws:glue:us-east-1:111122223333:database/database-name" ], "Condition": { "StringEquals": { "aws:SourceArn": "arn:aws:dynamodb:us-east-1:444455556666:table/table-name" } } } ] }

ターゲット IAM ロールの作成

以下の許可と信頼関係を持つターゲット IAM ロールを作成します。

{ "Version": "2012-10-17", "Statement": [ { "Action": "s3:ListBucket", "Resource": "arn:aws:s3:::amzn-s3-bucket", "Effect": "Allow" }, { "Action": [ "s3:GetObject", "s3:PutObject", "s3:DeleteObject" ], "Resource": "arn:aws:s3:::amzn-s3-demo-bucket/prefix/*", "Effect": "Allow" }, { "Action": [ "glue:GetDatabase" ], "Resource": [ "arn:aws:glue:us-east-1:111122223333:catalog", "arn:aws:glue:us-east-1:111122223333:database/database-name" ], "Effect": "Allow" }, { "Action": [ "glue:CreateTable", "glue:GetTable", "glue:GetTables", "glue:DeleteTable", "glue:UpdateTable", "glue:GetTableVersion", "glue:GetTableVersions", "glue:GetResourcePolicy" ], "Resource": [ "arn:aws:glue:us-east-1:111122223333:catalog", "arn:aws:glue:us-east-1:111122223333:database/database-name", "arn:aws:glue:us-east-1:111122223333:table/database-name/*" ], "Effect": "Allow" }, { "Action": [ "cloudwatch:PutMetricData" ], "Resource": "*", "Condition": { "StringEquals": { "cloudwatch:namespace": "AWS/Glue/ZeroETL" } }, "Effect": "Allow" }, { "Action": [ "logs:CreateLogGroup", "logs:CreateLogStream", "logs:PutLogEvents" ], "Resource": "*", "Effect": "Allow" } ] }

AWS Glue サービスがロールを引き受けるには、次の信頼ポリシーを追加します。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "glue.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }

ターゲットロール、KMS (オプション)、接続 (オプション) をターゲットリソースに関連付ける

上記のターゲットロールをターゲットリソース、つまり AWS Glue データベースに関連付けます。必要に応じて、ターゲット iceberg テーブルに保存する前にデータを暗号化するための KMS と、S3 バケットにアクセスするための接続 ARN をターゲット AWS Glue データベース用に設定することができます。これにより、AWS Glue は付与されたロールを使用してターゲット S3 の場所でデータにアクセスでき、さらにオプションで、付与された KMS キーを使用して暗号化を行うことができます。特定の VPC を使用してターゲット S3 バケットをアクセス可能に設定した場合、AWS Glue がその VPC 内で処理を実行できるように接続 ARN を関連付けることができます。VPC のセットアップに関する詳細については、「VPC を作成する」を参照してください。

このスクリーンショットは、ゼロ ETL 統合でのターゲットの設定を示しています。

あるいは AWS Glue CLI / API を使用する場合:

aws glue create-integration-resource-property \ --resource-arn arn:aws:glue:us-east-1:123456789012:database/database-name \ --target-processing-properties '{"RoleArn": "arn:aws:iam::123456789012:role/gmi_target_role"}' \ --region us-east-1

(オプション) ターゲットテーブルのプロパティを設定する

オプションで、ターゲットに同期されるターゲットテーブルのためにターゲットテーブルプロパティを設定することができます。

これらの設定は、AWS Glue コンソールの統合作成ワークフローの「出力設定」セクションで設定できます。

このスクリーンショットは、スキーマのネスト解除オプション、データパーティショニングオプション、ターゲットテーブル名設定を含む「出力設定」セクションを示しています。

[カスタムパーティションキーの指定] を選択すると、パーティションキー、およびそれらの関数と変換仕様を設定できます。

このスクリーンショットは、カスタムパーティションキー設定とパーティション仕様設定テーブルを含む「出力設定」を示しています。

ソースとターゲットが同じアカウントにある場合、この設定は AWS Glue コンソール UI の統合作成ワークフローの一部として実行できます。ただし、ターゲットが別のアカウントにある場合は、統合を作成する前にこの設定を完了する必要があります。CLI または API を使用する場合は、ソースとターゲットの両方が同じアカウントにある場合でも、Create-Integration API を呼び出す前にこの設定を行う必要があります。AWS Glue コンソール UI は、同じアカウントシナリオに対してこの API コールをカプセル化します。

この設定を行わない場合、テーブルの同期時にデフォルト値が使用されます。また、この設定は統合の作成後にいつでも変更できます。

注記

統合の作成後にこのプロパティがアップデートされた場合、アップデートされた設定が既存の設定と競合すると、テーブルの完全な再同期がトリガーされる可能性があります。たとえば、テーブルの「ネスト解除」を「No-Unnest」から「Full-Unnest」にアップデートした場合や、パーティション列を変更した場合です。

CLI または API の使用:

aws glue create-integration-table-properties \ --resource-arn arn:aws:glue:us-east-1:123456789012:database/database-name \ --table-name table-name \ --target-table-config '{ "UnnestSpec":"TOPLEVEL"|"FULL"|"NOUNNEST", "PartitionSpec": [ { "FieldName":"string", "FunctionSpec":"string", "ConversionSpec":"string"} ... ], "TargetTableName":"string" }' \ --region us-east-1

汎用の Amazon S3 ストレージで Amazon SageMaker の Lakehouse アーキテクチャを設定したら、ターゲットとの統合の設定 に進んで統合セットアップを完了できます。

Amazon S3 Tables バケットターゲットの設定

このセクションでは、Amazon SageMaker の Lakehouse アーキテクチャを使用して、ゼロ ETL 統合のターゲットとして Amazon S3 Tables を設定するための前提条件とセットアップ手順を説明します。

Amazon S3 Tables をターゲットとするゼロ ETL 統合を作成する前に、次のセットアップタスクを完了する必要があります。

  • Amazon S3 テーブルバケットのセットアップ (および分析サービス統合)

  • カタログ RBAC ポリシーを指定する

  • ターゲット IAM ロールを作成する

  • ターゲットロール、KMS (オプション)、接続 (オプション) をターゲットリソースに関連付ける

  • (オプション) ターゲットテーブルのプロパティを設定する

Amazon S3 テーブルバケットのセットアップ (および分析サービス統合)

  1. Getting started with Amazon S3 Tables」の手順に従って、アカウントに S3 テーブルバケットを作成します。

  2. Integrating AWS services with Amazon S3 Tables」の手順に従って、S3-Table バケットと Analytics の統合を有効にします。

  3. これにより、AWS Lake Formation に新しい S3-Table カタログが作成されます。

カタログ RBAC ポリシーを指定する

ソースと Amazon S3 Tables カタログターゲット間の統合を可能にするには、カタログ RBAC ポリシーに次のアクセス許可を追加する必要があります。

ターゲット AWS Glue カタログリソースポリシーには、AuthorizeInboundIntegration に対する AWS Glue サービスアクセス許可を含める必要があります。さらに、CreateInboundIntegration アクセス許可が、統合を作成するソースプリンシパルまたはターゲット AWS Glue リソースポリシーで必要になります。

注記

クロスアカウントシナリオでは、ソースプリンシパルとターゲット AWS Glue カタログリソースポリシーの両方に、リソースに対する glue:CreateInboundIntegration アクセス許可を含める必要があります。

{ "Version": "2012-10-17", "Statement": [ { "Principal": { "AWS": [ "arn:aws:iam::123456789012:user/Alice" ] }, "Effect": "Allow", "Action": [ "glue:CreateInboundIntegration" ], "Resource": [ "arn:aws:glue:us-east-1:111122223333:catalog/s3tablescatalog/*" ], "Condition": { "StringLike": { "aws:SourceArn": "arn:aws:dynamodb:us-east-1:444455556666:table/table-name" } } }, { "Principal": { "Service": [ "glue.amazonaws.com" ] }, "Effect": "Allow", "Action": [ "glue:AuthorizeInboundIntegration" ], "Resource": [ "arn:aws:glue:us-east-1:111122223333:catalog/s3tablescatalog/*" ], "Condition": { "StringEquals": { "aws:SourceArn": "arn:aws:dynamodb:us-east-1:444455556666:table/table-name" } } } ] }
注記

s3tablescatalog を S3 テーブルの親カタログ名に置き換えます (異なる場合)。これのデフォルト値 (同じアカウントにある S3-Table カタログをホストする場合) は s3tablescatalog です。

ターゲット IAM ロールを作成する

以下の許可と信頼関係を持つターゲット IAM ロールを作成します。

{ "Version": "2012-10-17", "Statement": [ { "Action": [ "s3tables:ListTableBuckets", "s3tables:GetTableBucket", "s3tables:GetTableBucketEncryption", "s3tables:GetNamespace", "s3tables:CreateNamespace", "s3tables:ListNamespaces", "s3tables:CreateTable", "s3tables:DeleteTable", "s3tables:GetTable", "s3tables:GetTableEncryption", "s3tables:ListTables", "s3tables:GetTableMetadataLocation", "s3tables:UpdateTableMetadataLocation", "s3tables:GetTableData", "s3tables:PutTableData" ], "Resource": "arn:aws:s3tables:us-east-1:111122223333:bucket/s3-table-bucket", "Effect": "Allow" }, { "Action": [ "cloudwatch:PutMetricData" ], "Resource": "*", "Condition": { "StringEquals": { "cloudwatch:namespace": "AWS/Glue/ZeroETL" } }, "Effect": "Allow" }, { "Action": [ "logs:CreateLogGroup", "logs:CreateLogStream", "logs:PutLogEvents" ], "Resource": "*", "Effect": "Allow" } ] }

AWS Glue サービスがターゲット IAM ロールを引き受けることができるようにするには、次の信頼ポリシーを追加します。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "glue.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }
注記

S3-Tables バケットリソースポリシーに、このターゲット IAM ロールの明示的な DENY ステートメントがないことを確認します。明示的な DENY があると、任意の ALLOW 許可が上書きされ、統合が正しく機能しなくなります。

ターゲットロール、KMS (オプション)、接続 (オプション) をターゲットリソースに関連付ける

上記のターゲットロールをターゲットリソースに関連付けます。必要に応じて、ターゲット iceberg テーブルに保存する前にデータを暗号化するための KMS と、ターゲット S3 バケットにアクセスするための接続 ARN を設定することができます。特定の VPC を使用してターゲット S3 バケットをアクセス可能に設定した場合、AWS Glue がその VPC 内で処理を実行できるように接続 ARN を関連付けることができます。VPC のセットアップに関する詳細については、「VPC を作成する」を参照してください。

AWS Glue CLI / API を使用する場合:

aws glue create-integration-resource-property \ --resource-arn arn:aws:glue:us-east-1:123456789012:catalog/s3tablescatalog/S3 table bucket name \ --target-processing-properties '{ "RoleArn": "arn:aws:iam::123456789012:role/target_role" }' \ --region us-east-1

(オプション) ターゲットテーブルのプロパティを設定する

オプションで、ターゲットに同期されるターゲットテーブルのためにターゲットテーブルプロパティを設定することができます。汎用 S3 ターゲットセクションで説明されているルールと同じものが適用されます。

CLI または API を使用する場合:

aws glue create-integration-table-properties \ --resource-arn arn:aws:glue:us-east-1:123456789012:catalog/s3tablescatalog/S3 table bucket name \ --table-name table-name \ --target-table-config '' \ --region us-east-1

Amazon SageMaker の Lakehouse アーキテクチャを使用して Amazon S3 Tables ストレージを設定したら、ターゲットとの統合の設定 に進んで統合セットアップを完了できます。

Amazon Redshift マネージドストレージターゲットの設定

このセクションでは、Amazon SageMaker の Lakehouse アーキテクチャを使用して、ゼロ ETL 統合のターゲットとして Amazon Redshift マネージドストレージ (RMS) を設定するための前提条件とセットアップ手順を説明します。

Redshift マネージドストレージを使用して Amazon SageMaker の Lakehouse アーキテクチャでゼロ ETL 統合を作成する前に、次のセットアップタスクを完了する必要があります。

  • Amazon Redshift クラスターまたは Serverless ワークグループをセットアップする

  • Lake Formation と Amazon Redshift の統合を登録する

  • Lake Formation でマネージドカタログを作成する

  • IAM 許可を設定する

Amazon Redshift マネージドストレージのセットアップ

ゼロ ETL 統合用の Amazon Redshift マネージドストレージのセットアップをするには、以下を行います。

  • Amazon Redshift クラスターまたはサーバーレスワークグループを作成するか、または既存のものを使用します。正常に統合するため、ターゲットの Amazon Redshift ワークグループまたはクラスターで enable_case_sensitive_identifier パラメータが有効になっていることを確認します。大文字と小文字の区別を有効にする方法の詳細については、Amazon Redshift 管理ガイドの「データウェアハウスの大文字と小文字の区別を有効にする」を参照してください。

  • Redshift から AWS Lake Formation のカタログに統合を登録します。「Amazon Redshift クラスターと名前空間のデータカタログへの登録」を参照してください。

  • AWS Lake Formation でフェデレーションカタログまたはマネージドカタログを作成します。詳細については、以下を参照してください。

  • ターゲットロールの IAM アクセス許可を設定します。ロールには、Redshift リソースと Lake Formation リソースの両方にアクセスするためのアクセス許可が必要です。ロールに最低限必要となるアクセス許可は以下のとおりです。

    • Redshift クラスターまたはワークグループへのアクセス許可

    • Lake Formation カタログへのアクセス許可

    • カタログでテーブルを作成および管理するためのアクセス許可

    • モニタリングのための CloudWatch および CloudWatch Logs のアクセス許可

Amazon Redshift マネージドストレージを使用して Amazon SageMaker Lakehouse カタログを設定したら、ターゲットとの統合の設定 に進んで統合セットアップを完了できます。

Amazon Redshift データウェアハウスターゲットの設定

このセクションでは、ゼロ ETL 統合のターゲットとして Amazon Redshift データウェアハウスを設定するための前提条件とセットアップ手順について説明します。

Amazon Redshift データウェアハウスターゲットとのゼロ ETL 統合を作成する前に、次のセットアップタスクを完了する必要があります。

  • Amazon Redshift クラスターまたは Serverless ワークグループをセットアップする

  • 大文字と小文字の区別を設定する

  • IAM 許可を設定する

Amazon Redshift データウェアハウスのセットアップ

ゼロ ETL 統合用の Amazon Redshift データウェアハウスを設定するには、次を行います。

  1. [Amazon Redshift コンソール] に移動し、[クラスターの作成] をクリックするか、既存のクラスターを使用します。Amazon Redshift クラスターを作成するには、「クラスターの作成」を参照してください。Amazon Redshift Serverless の場合、[ワークグループを作成] をクリックします。Amazon Redshift Serverless ワークグループを作成するには、「名前空間を伴うワークグループの作成」を参照してください。

  2. 新しいクラスターを作成する場合は、適切なクラスターサイズを選択し、クラスターが暗号化されていることを確認します。Serverless の場合は、要件に応じてワークグループ設定を構成します。

  3. 正常に統合するため、ターゲットの Amazon Redshift ワークグループまたはクラスターで enable_case_sensitive_identifier パラメータが有効になっていることを確認します。大文字と小文字の区別を有効にする方法の詳細については、Amazon Redshift 管理ガイドの「データウェアハウスの大文字と小文字の区別を有効にする」を参照してください。

  4. ゼロ ETL 統合が Amazon Redshift データウェアハウスにアクセスできるように IAM アクセス許可を設定します。以下のアクセス許可を持つ IAM ロールを作成する必要があります。

    • Amazon Redshift クラスターまたはワークグループへのアクセス許可

    • Amazon Redshift でデータベースとテーブルを作成および管理するためのアクセス許可

    • モニタリングのための CloudWatch および CloudWatch Logs のアクセス許可

  5. Amazon Redshift ワークグループまたはクラスターのセットアップが完了したら、ゼロ ETL 統合のためにデータウェアハウスを設定する必要があります。詳細については、Amazon Redshift 管理ガイドの「ゼロ ETL 統合の開始方法」を参照してください。

注記

Amazon Redshift データウェアハウスをターゲットとして使用すると、統合により、指定されたデータベースにスキーマが作成され、レプリケートされたデータが保存されます。スキーマ名は統合名から導出されます。

注記

正常に統合するには、ターゲットの Amazon Redshift ワークグループまたはクラスターで enable_case_sensitive_identifier パラメータが有効になっている必要があります。

Amazon Redshift データウェアハウスを設定したら、ターゲットとの統合の設定 に進み、統合セットアップを完了できます。

ターゲットとの統合の設定

ソースリソースとターゲットリソースを設定したら、以下の手順に従って統合設定を完了します。

  1. 「ゼロ ETL 統合」ページに移動し、統合作成ワークフローを開始します。

  2. 前のステップで設定したソースリソースを選択します。

  3. 前のステップで設定したターゲットリソース (同じアカウントまたはクロスアカウント) を選択または指定します。

  4. 以前に設定したターゲット IAM ロールを選択します。

  5. [修正をお願いする] オプションを選択します (ターゲットが同じアカウントにある場合にのみ使用可)。

    • 通常の Amazon S3 (AWS Glue データベース) および S3-Table (カタログ) ターゲットの場合、次のようになります。

      • ターゲットカタログリソースポリシーの承認済みサービスプリンシパルが適用されます。

      • ターゲットカタログリソースポリシーの承認済み AWS Glue ソースプリンシパルが適用されます。

    • Amazon Redshift ターゲットの場合、これは次のようになります。

      • Amazon Redshift クラスターまたは Serverless ワークグループで承認されたサービスプリンシパルを適用します。

      • 承認された AWS Glue ソース ARN を Amazon Redshift クラスターまたは Serverless ワークグループに適用します。

      • 新しいパラメータグループを enable_case_sensitive_identifier = true に関連付けます。

API または CLI 経由で統合を作成するには、CreateIntegration API を使用します。