

 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/)を参照してください。

# Amazon Redshift での AWS CloudFormation とのデータ共有の開始方法
<a name="data-sharing-within-account-CF"></a>

AWS CloudFormation スタックに AWS リソースのプロビジョニングを実行させることで、データ共有の設定を自動化できます。CloudFormation スタックは、同じ AWS アカウント内にある 2 つの Amazon Redshift クラスター間でのデータ共有を設定します。したがって、リソースをプロビジョニングする SQL ステートメントを実行することなく、データ共有を開始できます。

このスタックは、指定したクラスター上にデータ共有を作成します。作成されたデータ共有には、テーブルとサンプルの読み取り専用データが含まれています。このデータは、別の Amazon Redshift Redshift クラスターから読み取ることができます。

CloudFormation を使用せずに SQL ステートメントを実行してデータ共有を設定し、アクセス許可を付与しながら AWS アカウント内でデータ共有を開始する場合は、「[AWS アカウント 内のデータへの読み取りアクセスの共有](within-account.md)」を参照してください。

データ共有 CloudFormation スタックを実行する前に、IAM ロールと Lambda 関数を作成する許可を持つユーザーとしてログインしておく必要があります。また、同じアカウントに 2 つの Amazon Redshift クラスターが必要です。それらの内の 1 つ *producer* はサンプルデータの共有に使用し、もう一方の *consumer* はデータの読み取りに使用します。これらのクラスターに対する主な要件は、それぞれが RA3 ノードを使用していることです。追加の要件については、[Amazon Redshift でのデータ共有に関する考慮事項](datashare-considerations.md)を参照してください。

Amazon Redshift クラスターの設定の開始方法については、「[Amazon Redshift のプロビジョニングされたデータウェアハウス](https://docs.aws.amazon.com/redshift/latest/gsg/new-user.html)」を参照してください。CloudFormation による設定の自動化の詳細については、「[AWS CloudFormation とは](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/Welcome.html)」を参照してください。

**重要**  
CloudFormation スタックを起動する前に、同じアカウント内に 2 つの Amazon Redshift クラスターが存在し、クラスターが RA3 ノードを使用することを確認します。各クラスターにデータベースとスーパーユーザーが存在することを確認します。詳細については、「[CREATE DATABASE](r_CREATE_DATABASE.md)」および「[スーパーユーザー](r_superusers.md)」を参照してください。

**Amazon Redshift のデータ共有のために CloudFormation スタックを起動するには**

1. [**[Launch CFN stack]** (CFN スタックを起動する)](https://console.aws.amazon.com/cloudformation/home?#/stacks/new?stackName=DataShare&templateURL=https://s3.amazonaws.com/redshift-downloads/docs-downloads/DataShare.yml) をクリックし、AWS マネジメントコンソール内の CloudFormation サービスを開きます。

   プロンプトが表示されたら、サインインします。

   Amazon S3 に保存されている CloudFormation テンプレートファイルを参照しながら、スタック作成プロセスが開始されます。CloudFormation *テンプレート*は、JSON 形式で作成されたテキストファイルで、スタックを構成する AWS リソースに関する宣言が記述されています。CloudFormation テンプレートの詳細については、「[テンプレートの基礎についての学習](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/gettingstarted.templatebasics.html)」を参照してださい。

1. **[Next]** (次へ) をクリックして、スタックの詳細を入力します。

1. **[Parameters]** (パラメータ) で、クラスターごとに次のように入力します。
   + Amazon Redshift のクラスター名 (例えば、**ra3-consumer-cluster**)
   + データベース名 (例えば、**dev**)
   + データベースのユーザー名 (例えば、**consumeruser**)

   スタックは複数のデータベースオブジェクトを作成するため、テスト用クラスターの使用が推奨されます。

   [**次へ**] を選択します。

1. スタックに関するオプションが表示されます。

   **[Next]** (次へ) をクリックして、デフォルト設定を受け入れます。

1. **[機能]** で、**[AWS CloudFormation によって IAM リソースが作成される場合があることを承認します]** を選択します。

1. **[スタックの作成]** を選択してください。

CloudFormation は、テンプレートを使用しながら 10 分程度で Amazon Redshift スタックを構築し、`myproducer_share` というデータ共有を作成します。スタックは、スタックの詳細で指定されたデータベースにデータ共有を作成します。このデータベースにあるオブジェクトのみが共有できます。

スタックの作成中にエラーが発生した場合は、以下の手順を実行します。
+ 各 Redshift クラスターに、クラスター名、データベース名、およびデータベースのユーザー名を正しく入力していることを確認します。
+ クラスターに RA3 ノードがあることを確認します。
+ IAM ロールと Lambda 関数を作成するアクセス許可を持っているユーザーとしてログインしていることを確認します。IAM ロールの作成についての詳細は、「[IAM ロールの作成](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create.html)」を参照してください。Λ関数作成のポリシーの詳細については、「[関数の開発](https://docs.aws.amazon.com/lambda/latest/dg/access-control-identity-based.html#permissions-user-function)」を参照してください。

## 作成したデータ共有に対するクエリ
<a name="data-sharing-within-account-CF-querying"></a>

以下の手順を使用するには、説明で示されている各クラスターでクエリを実行するための、アクセス許可が必要です。

**データ共有に対しクエリするには**

1. CloudFormation スタックの作成時に入力したデータベース上のプロデューサークラスターに、Amazon Redshift クエリエディタ v2 などのクライアントツールを使用して接続します。

1. データ共有へのクエリを実行します。

   ```
   SHOW DATASHARES;
                     
   +------------------+-------------+-----------------+-------------------+------------+------------+---------------------+-----------+------------------+--------------------------------------+
   |    share_name    | share_owner | source_database | consumer_database | share_type | createdate | is_publicaccessible | share_acl | producer_account |          producer_namespace          |
   +------------------+-------------+-----------------+-------------------+------------+------------+---------------------+-----------+------------------+--------------------------------------+
   | myproducer_share | 100         | sample_data_dev | myconsumer_db     | INBOUND    | NULL       | true                | NULL      |  {{producer-acct}}   |        {{your-producer-namespace}}       |
   +------------------+-------------+-----------------+-------------------+------------+------------+---------------------+-----------+------------------+--------------------------------------+
   ```

   前述のコマンドでは、スタックによって作成されたデータ共有の名前 (`myproducer_share`) を返します。同時に、データ共有 `myconsumer_db` に関連付けられたデータベースの名前も返します。

   後述のステップで使用するために、プロデューサーの名前空間識別子をコピーします。

1. データ共有内のオブジェクトの詳細を表示します。

   ```
   DESC DATASHARE myproducer_share;
                     
   +------------------+--------------------------------------+------------+------------------+-------------+-------------------------------------+-------------+
   | producer_account |          producer_namespace          | share_type |    share_name    | object_type |             object_name             | include_new |
   +------------------+--------------------------------------+------------+------------------+-------------+-------------------------------------+-------------+
   |   {{producer-acct}}  |        {{your-producer-namespace}}       | OUTBOUND   | myproducer_share | schema      | myproducer_schema                   | true        |
   |   {{producer-acct}}  |        {{your-producer-namespace}}       | OUTBOUND   | myproducer_share | table       | myproducer_schema.tickit_sales      | NULL        |
   |   {{producer-acct}}  |        {{your-producer-namespace}}       | OUTBOUND   | myproducer_share | view        | myproducer_schema.ticket_sales_view | NULL        |
   +------------------+--------------------------------------+------------+------------------+-------------+-------------------------------------+-------------+
   ```

   データ共有の詳細を表示すると、テーブルとビューに関するプロパティが出力されます。スタックは、サンプルデータを含むテーブルとビュー (例えば `tickit_sales` と `tickit_sales_view`) を、プロデューサーデータベースに追加します。TICKIT サンプルデータの詳細については、「[サンプルデータベース](c_sampledb.md)」を参照してください。

   クエリを実行するために、データ共有に対するアクセス許可を委任する必要はありません。スタックが必要な許可を付与します。

1. クライアントツールを使用してコンシューマークラスターに接続します。プロデューサの名前空間を指定しながら、データ共有の詳細を表示します。

   ```
   DESC DATASHARE myproducer_share OF NAMESPACE '<namespace id>'; --specify the unique identifier for the producer namespace
                     
   +------------------+--------------------------------------+------------+------------------+-------------+-------------------------------------+-------------+
   | producer_account |          producer_namespace          | share_type |    share_name    | object_type |             object_name             | include_new |
   +------------------+--------------------------------------+------------+------------------+-------------+-------------------------------------+-------------+
   |   {{producer-acct}}  |        {{your-producer-namespace}}       | INBOUND    | myproducer_share | schema      | myproducer_schema                   | NULL        |
   |   {{producer-acct}}  |        {{your-producer-namespace}}       | INBOUND    | myproducer_share | table       | myproducer_schema.tickit_sales      | NULL        |
   |   {{producer-acct}}  |        {{your-producer-namespace}}       | INBOUND    | myproducer_share | view        | myproducer_schema.ticket_sales_view | NULL        |
   +------------------+--------------------------------------+------------+------------------+-------------+-------------------------------------+-------------+
   ```

1. データ共有のデータベースとスキーマを指定して、データ共有内のテーブルに対しクエリを実行できます。詳細については、「[クロスデータベースクエリの例](cross-database_example.md)」を参照してください。次のクエリは、TICKIT サンプルデータベースの SALES テーブルから売上と販売者のデータを返します。詳細については、「[サンプルデータベース](c_sampledb.md)」を参照してください。

   ```
   SELECT * FROM myconsumer_db.myproducer_schema.tickit_sales_view;
                     
   +---------+--------+----------+---------+---------+--------+---------+-----------+------------+---------------------+
   | salesid | listid | sellerid | buyerid | eventid | dateid | qtysold | pricepaid | commission |      saletime       |
   +---------+--------+----------+---------+---------+--------+---------+-----------+------------+---------------------+
   |       1 |      1 |    36861 |   21191 |    7872 |   1875 |       4 |       728 |      109.2 | 2008-02-18 02:36:48 |
   |       2 |      4 |     8117 |   11498 |    4337 |   1983 |       2 |        76 |       11.4 | 2008-06-06 05:00:16 |
   |       3 |      5 |     1616 |   17433 |    8647 |   1983 |       2 |       350 |       52.5 | 2008-06-06 08:26:17 |
   |       4 |      5 |     1616 |   19715 |    8647 |   1986 |       1 |       175 |      26.25 | 2008-06-09 08:38:52 |
   |       5 |      6 |    47402 |   14115 |    8240 |   2069 |       2 |       154 |       23.1 | 2008-08-31 09:17:02 |
   +---------+--------+----------+---------+---------+--------+---------+-----------+------------+---------------------+
   ```
**注記**  
クエリは、共有スキーマ内のビューに対して実行されます。データ共有から作成されたデータベースに直接接続することはできません。これらのデータベースは読み取り専用です。

1. 集計を含むクエリを実行するには、次の例を使用します。

   ```
   SELECT * FROM myconsumer_db.myproducer_schema.tickit_sales ORDER BY 1,2 LIMIT 5;
                     
   +---------+--------+----------+---------+---------+--------+---------+-----------+------------+---------------------+
   | salesid | listid | sellerid | buyerid | eventid | dateid | qtysold | pricepaid | commission |      saletime       |
   +---------+--------+----------+---------+---------+--------+---------+-----------+------------+---------------------+
   |       1 |      1 |    36861 |   21191 |    7872 |   1875 |       4 |       728 |      109.2 | 2008-02-18 02:36:48 |
   |       2 |      4 |     8117 |   11498 |    4337 |   1983 |       2 |        76 |       11.4 | 2008-06-06 05:00:16 |
   |       3 |      5 |     1616 |   17433 |    8647 |   1983 |       2 |       350 |       52.5 | 2008-06-06 08:26:17 |
   |       4 |      5 |     1616 |   19715 |    8647 |   1986 |       1 |       175 |      26.25 | 2008-06-09 08:38:52 |
   |       5 |      6 |    47402 |   14115 |    8240 |   2069 |       2 |       154 |       23.1 | 2008-08-31 09:17:02 |
   +---------+--------+----------+---------+---------+--------+---------+-----------+------------+---------------------+
   ```

   このクエリは、サンプルの TICKIT データから売上データと出品者のデータを返します。

   データ共有に対するクエリの他の例については、「[AWS アカウント 内のデータへの読み取りアクセスの共有](within-account.md)」を参照してください。