

 Amazon Redshift は、パッチ 198 以降、新しい Python UDF の作成をサポートしなくなります。既存の Python UDF は、2026 年 6 月 30 日まで引き続き機能します。詳細については、[ブログ記事](https://aws.amazon.com/blogs/big-data/amazon-redshift-python-user-defined-functions-will-reach-end-of-support-after-june-30-2026/)を参照してください。

# AWS Lake Formation マネージドデータ共有の開始方法
<a name="lf-getting-started"></a>

Amazon Redshift では、AWS Lake Formation マネージドデータ共有を通じて、AWS アカウントと Amazon Redshift クラスター間でライブデータへのアクセスと共有が可能です。AWS Lake Formation データ共有を使用すると、データプロバイダーは Amazon S3 データレイクのライブデータを、他の AWS アカウントや Amazon Redshift クラスターを含む任意のコンシューマーと安全に共有できます。

# プロデューサーとして Lake Formation 管理のデータ共有を使用する
<a name="lake-formation-getting-started-producer"></a>

Amazon Redshift では、AWS Lake Formation データ共有を介して共有されるデータにアクセスして分析できます。AWS Lake Formation データ共有を使用すると、基盤データをコピーまたは移動することなく、AWS アカウントと Amazon Redshift クラスター間で安全なデータ共有が可能になります。

AWS Lake Formation でデータを共有すると、Amazon Redshift データ共有の AWS Lake Formation アクセス許可を一元的に定義し、データ共有内のオブジェクトへのユーザーアクセスを制限できます。

Amazon Redshift では、 AWS Lake Formation マネージドデータ共有をプロデューサーとして使用して、AWS アカウントと Amazon Redshift クラスター間でライブデータを安全に共有できます。Lake Formation マネージドデータ共有は、Amazon Redshift クラスターのライブデータを他の AWS アカウントやサービスと共有できるオブジェクトです。

プロデューサークラスターまたはワークグループの管理者は、以下のステップに従って、Lake Formation とデータ共有を行います。

1. クラスター内にデータ共有を作成し、AWS Lake Formation にデータ共有に対するアクセス権を付与します。

   クラスターのスーパーユーザーとデータベースの所有者は、データ共有を作成できます。各データ共有は、作成時にデータベースに関連付けられます。そのデータベースのオブジェクトのみがそのデータ共有で共有できます。同じデータベース上に、同じ粒度または異なる粒度のオブジェクトを使用して、複数のデータ共有を作成できます。クラスター上に作成できるデータ共有の数に制限はありません。

   ```
   CREATE DATASHARE salesshare;
   ```

1. データ共有にオブジェクトを追加します。プロデューサークラスターまたはワークグループの管理者は、使用可能なデータ共有オブジェクトの管理を継続します。データ共有にオブジェクトを追加するには、オブジェクトを追加する前にスキーマを追加します。スキーマを追加する場合、Amazon Redshift はその下にすべてのオブジェクトを追加するわけではありません。それらを明示的に追加する必要があります。詳細については、「[データ共有の変更](https://docs.aws.amazon.com/redshift/latest/dg/r_ALTER_DATASHARE.html)」を参照してください。

   ```
   ALTER DATASHARE salesshare ADD SCHEMA PUBLIC;
   ALTER DATASHARE salesshare ADD TABLE public.tickit_sales_redshift;
   ALTER DATASHARE salesshare ADD ALL TABLES IN SCHEMA PUBLIC;
   ```

   データ共有にビューを追加することもできます。標準ビュー、遅延バインディングビューおよびマテリアライズドビューがサポートされます。

   ```
   CREATE VIEW public.sales_data_summary_view AS SELECT * FROM public.tickit_sales_redshift;
   ALTER DATASHARE salesshare ADD TABLE public.tickit_sales_redshift;
   ```

   ALTER DATASHARE を使用して、特定のスキーマ内のスキーマ、テーブル、ビューを共有します。スーパーユーザー、データ共有の所有者、またはデータ共有に対する ALTER または ALL 許可を持つユーザーは、データ共有を変更して、それに対するオブジェクトの追加または削除を実行できます。データベースユーザーは、オブジェクトの所有者であるか、またはオブジェクトに対する SELECT、USAGE、もしくは ALL 許可を持っている必要があります。

   スキーマを指定して作成された新しいテーブル、ビューをデータ共有に追加するには、INCLUDENEW 句を使用します。データ共有とスキーマの各ペアについて、このプロパティを変更できるのはスーパーユーザーのみです。

   ```
   ALTER DATASHARE salesshare ADD SCHEMA PUBLIC;
   ALTER DATASHARE salesshare SET INCLUDENEW = TRUE FOR SCHEMA PUBLIC;
   ```

1. Lake Formation 管理者アカウントにデータ共有へのアクセスを許可します。

   ```
   GRANT USAGE ON DATASHARE salesshare TO ACCOUNT '012345678910' VIA DATA CATALOG;
   ```

   使用を取り消すには、次のコマンドを使用します。

   ```
   REVOKE USAGE ON DATASHARE salesshare FROM ACCOUNT '012345678910' VIA DATA CATALOG;
   ```

1. `aws redshift authorize-data-share` API オペレーションを使用して Lake Formation のデータ共有へのアクセスを許可します。これにより、Lake Formation はサービスアカウント内のデータ共有を認識して、コンシューマーのデータ共有への関連付けを管理できます。

   ```
   aws redshift authorize-data-share 
   --data-share-arn arn:aws:redshift:us-east-1:{PRODUCER_ACCOUNT}:datashare:{PRODUCER_CLUSTER_NAMESPACE}/salesshare 
   --consumer-identifier {"DataCatalog/<consumer-account-id>"}
   ```

    Lake Formation 管理のデータ共有から認可を削除するには、`aws redshift deauthorize-data-share` API オペレーションを使用します。これにより、AWS Lake Formation がサービスアカウント内のデータ共有を認識できるようになり、認可を削除することができます。

   ```
   aws redshift deauthorize-data-share 
   --data-share-arn arn:aws:redshift:us-east-1:{PRODUCER_ACCOUNT}:datashare:{PRODUCER_CLUSTER_NAMESPACE}/salesshare 
   --consumer-identifier {"DataCatalog/<consumer-account-id>"}
   ```

    プロデューサークラスターまたはワークグループの管理者がコンシューマークラスターまたはワークグループとデータを共有する必要がなくなったと判断した場合は、いつでも、DROP DATASHARE を使用してデータ共有を削除し、データ共有の承認を解除し、またはデータ共有アクセス許可を取り消すことができます。Lake Formation 内に関連付けられたアクセス許可とオブジェクトは自動的には削除されません。

   ```
   DROP DATASHARE salesshare;
   ```

    Lake Formation アカウントにデータ共有の管理を許可すると、Lake Formation 管理者はデータ共有を見つけ、データカタログの ARN にデータ共有を関連付け、データ共有にリンクする AWS Glue Data Catalog 内にデータベースを作成できます。AWS CLI を使用してデータ共有を関連付けるには、[associate-data-share-consumer](https://docs.aws.amazon.com/cli/latest/reference/redshift/associate-data-share-consumer.html) コマンドを使用します。AWS リージョン 全体でデータ共有を共有するには、`associate-data-share-consumer` コマンドで `--region` パラメータを指定するか、AWS コンソールを使用してデータコンシューマーを選択します。次の例は、Lake Formation 管理のデータ共有をリージョン間で共有する方法を示します。

   ```
   aws redshift associate-data-share-consumer --region <region-1>
   --data-share-arn 'arn:aws:redshift:us-east-1:12345678912:datashare:035c45ea-61ce-86f0-8b75-19ac6102c3b7/sample_share' 
   --consumer-arn 'arn:aws:glue:<region-1>:111912345678:catalog'
   ```

   Lake Formation 管理者は、データ共有内のオブジェクトが Lake Formation 内のオブジェクトにどのようにマッピングされるかを定義するローカルリソースを作成する必要もあります。データ共有の検出とローカルリソースの作成の詳細については、「[Amazon Redshift データ共有でのデータに対するアクセス許可の管理](https://docs.aws.amazon.com/lake-formation/latest/dg/data-sharing-redshift.html)」を参照してください。

# コンシューマーとしての Lake Formation 管理のデータ共有を使用する
<a name="lake-formation-getting-started-consumer"></a>

Amazon Redshift では、AWS Lake Formation データ共有を通じて共有されたデータにアクセスして分析できます。データ共有は、さまざまなデータソースからのテーブルやデータベースなどのデータオブジェクトのコレクションを含むデータ製品です。

 AWS Lake Formation 管理者がデータ共有への招待を発見して、そのデータ共有にリンクする AWS Glue Data Catalog にデータベースを作成した後、コンシューマークラスターまたはワークグループの管理者は、クラスターをデータ共有と AWS Glue Data Catalog 内のデータベースに関連付け、コンシューマークラスターまたはワークグループのローカルデータベースを作成し、Amazon Redshift コンシューマークラスターまたはワークグループ内のユーザーおよびロールにクエリを開始するアクセス許可を付与できます。以下のステップに従って、クエリのアクセス許可を設定します。

1. 必要に応じて、Amazon Redshift コンソールで、コンシューマークラスターまたはワークグループとして機能する Redshift クラスターを作成します。クラスターの作成方法については、「[クラスターの作成](https://docs.aws.amazon.com/redshift/latest/mgmt/managing-clusters-console.html#create-cluster)」を参照してください。

1. AWS Glue Data Catalog コンシューマークラスターまたはワークグループ内のどのデータベースにユーザーがアクセスできるかを一覧表示するには、[SHOW DATABASES](https://docs.aws.amazon.com/redshift/latest/dg/r_SHOW_DATABASES.html) コマンドを実行します。

   ```
   SHOW DATABASES FROM DATA CATALOG [ACCOUNT <account-id>,<account-id2>] [LIKE <expression>]
   ```

   これにより、AWS Glue データベースの ARN、データベース名、データ共有に関する情報など、データカタログから利用できるリソースが一覧表示されます。

1. SHOW DATABASES から得られた AWS Glue データベース ARN を使用して、コンシューマークラスターまたはワークグループにローカルデータベースを作成します。詳細については、「[データベースの作成](https://docs.aws.amazon.com/redshift/latest/dg/r_CREATE_DATABASE.html)」を参照してください。

   ```
   CREATE DATABASE lf_db FROM ARN <lake-formation-database-ARN> WITH [NO] DATA CATALOG SCHEMA [<schema>];
   ```

1. 必要に応じて、データ共有から作成されたデータベースおよびスキーマ参照に対するアクセス許可を、コンシューマークラスターまたはワークグループ内のユーザーおよびロールに付与します。詳細については、「[許可](https://docs.aws.amazon.com/redshift/latest/dg/r_GRANT.html)」または「[取り消し](https://docs.aws.amazon.com//redshift/latest/dg/r_REVOKE.html)」を参照してください。[CREATE USER](https://docs.aws.amazon.com/redshift/latest/dg/r_CREATE_USER.html) コマンドで作成されたユーザーは、Lake Formation と共有されているデータ共有内のオブジェクトにはアクセスできないことに注意してください。Redshift と Lake Formation の両方にアクセスできる IAM ユーザーのみが、Lake Formation と共有されているデータ共有にアクセスできます。

   ```
   GRANT USAGE ON DATABASE sales_db TO IAM:Bob;
   ```

    コンシューマークラスターまたはワークグループの管理者は、データ共有から作成されたデータベース全体に対するアクセス許可のみをユーザーおよびロールに割り当てることができます。場合によっては、データ共有から作成されたデータベースオブジェクトのサブセットに対して、詳細なコントロールが必要になります。

    また、共有オブジェクトの上に遅延バインディングビューを作成し、これらを使用して詳細なアクセス許可を割り当てることもできます。また、プロデューサークラスターまたはワークグループで必要な詳細度で追加のデータ共有を作成するよう検討することもできます。データ共有から作成されたデータベースへのスキーマ参照は、いくつでも作成できます。

1. データベースユーザーは、SVV\$1EXTERNAL\$1TABLES ビューと SVV\$1EXTERNAL\$1COLUMNS ビューを使用して、AWS Glue データベース内のすべての共有テーブルまたは列を検索できます。

   ```
   SELECT * from svv_external_tables WHERE redshift_database_name = 'lf_db';
                           
   SELECT * from svv_external_columns WHERE redshift_database_name = 'lf_db';
   ```

1. データ共有内の共有オブジェクト内のデータをクエリします。

   コンシューマークラスターまたはワークグループ上のコンシューマデータベースおよびスキーマに対するアクセス許可を持つユーザーおよびロールは、任意の共有オブジェクトのメタデータを探索およびナビゲートできます。また、コンシューマークラスターまたはワークグループ内のローカルオブジェクトを探索およびナビゲートすることもできます。これを行うには、JDBC または ODBC ドライバー、または SV\$1ALL および SV\$1EXTERNAL ビューを使用します。

   ```
   SELECT * FROM lf_db.schema.table;
   ```

   SELECT ステートメントは、共有オブジェクトに対してのみ使用できます。ただし、別のローカルデータベース内の共有オブジェクトからデータをクエリすることで、コンシューマークラスターにテーブルを作成できます。

   ```
   // Connect to a local cluster database
               
   // Create a view on shared objects and access it.
   
   CREATE VIEW sales_data 
   AS SELECT * 
   FROM sales_db.public.tickit_sales_redshift 
   WITH NO SCHEMA BINDING;
   
   SELECT * FROM sales_data;
   ```