Amazon DataZone（Preview）を試してみた

# 背景・目的
Amazon DataZone(以降、DataZoneといいます。)のPreview 版が公開されましたので、知識の整理と、簡単に動作を試してみました。

# 前提・留意点
:::note warn
2023年3月31日現在、Previewになっています。GAにより、下記に記載されている内容が変更になる可能性がありますのでご注意ください。
最新の情報は、ドキュメントをご確認ください。

2023年3月31日現在、利用できるリージョンは下記のとおりです。
- 米国西部 (オレゴン)
- 欧州 (アイルランド)
- 米国東部 (バージニア北部)
:::

# 概要
## DataZoneとは？
[こちらのドキュメント](https://docs.aws.amazon.com/ja_jp/datazone/latest/userguide/what-is-datazone.html)に記載されている内容を整理します。

DataZone は、下記を可能にするデータ管理サービス。
- Catalog
    - データプロデューサーがビジネス領域全体でデータをカタログ化して、データをより見つけやすくできる。
- Discover
    - データコンシューマーが関心のあるデータ資産を検索して簡単に見つけられるようにする。
- Govern
    - 下記を分離し、ガバナンスを簡素化できる。
        - ドメイン
        - プロデューサー
        - コンシューマー
- Share
    - プロデューサーがコンシューマーのデータアクセス要求を満たすことができる。
- Analyze
    - コンシューマーがアクセスできるデータを分析できる。

DataZone を使用すると、アカウントとサポートされているリージョン間でデータを共有してアクセスが可能。
Amazon DataZone は、Amazon Redshift、Amazon Athena、AWS Glue、AWS Lake Formation を含むがこれらに限定されない AWS サービス全体でのエクスペリエンスを簡素化する。

### AWSサービスのサービスと統合方法
下記の3種類の統合をサポートしている。

- Producer data source
    - Glue Data Catalog および Redshift のテーブルとビューに保存されているデータから、データを DataZone カタログにPublish可能
    - オブジェクトを S3から Amazon DataZone カタログに手動で発行することも可能
- Consumer tools
    - Athena、Redshiftクエリエディタを使用して、データにアクセスして分析可能
- Access control and fulfillment
    - LakeFormation管理のGlueテーブルとRedshiftテーブル、ビューへのアクセス許可をサポートする。
    - 他の全てのデータ資産について、DataZoneはユーザのアクション（サブスクリプションリクエストに対する承認など）に関連するイベントをEventBridgeに発行する。これらのイベントを通じてカスタム統合のために、AWSサービスまたは3rd Partyソリューションと統合可能

### Data Zoneへのアクセス
:::note warn
APIはプレビューではサポートされていない。
:::
2つのUIが利用できるようです。また、APIも利用できるようですが、プレビューリリースでは利用できないようです。

- DataZoneコンソール
    - マネジメントコンソールからアクセス。
    - DataZoneデータポータルの作成に使用する。
- DataZoneデータポータル
    - セルフサービス方式で、データに対して下記のことができるブラウザベースのWebアプリケーション
        - catalog
        - discover
        - govern
        - share
        - analyze
- DataZone HTTPS API
    - プレビューではサポートされていない

## Amazon DataZone Terminology and Concepts
### Amazon DataZone components
下記の4つの主要コンポーネントが含まれています。

|コンポーネント |説明 | 備考 |
|:---|:---|:---|
| Business data catalog| ・組織全体のデータをビジネスコンテキストともにカタログ化<BR>・組織内の全員がデータを素早く見つけて理解できるようにする| データカタログそのもの|
| Publish and subscribe workﬂows| 自動化されたワークフローを使用して、プロデューサーとコンシューマ間のデータをセルフサービス方式で保護し、適切な目的で適切なデータにアクセスできるようにする| ガバナンスを効かせることができる。|
|Projects | ・プロジェクトにより、下記をビジネスユースケースベースでグループ化する<BR>　・人<BR>　・データ資産<BR>　・分析ツール<BR>・プロジェクトメンバーがデータ資産を共有できるスペースを提供する。<BR>・デフォルトでは、明示的に追加されたユーザのみがプロジェクト内のデータおよび、分析ツールにアクセスできるようにプロジェクトが構成される。<BR>・コンシューマーがアクセスできるように、データスチュワードやドメイン管理者により適用されるプロジェクトポリシーに従い、生成されたデータ資産の所有権を管理する | 管理の単位と思われる|
| Data portal (outside the AWS Management Console) | ・様々なユーザが、セルフサービス方式でデータのカタログ化、発見、管理、共有、分析を行うことができるWebブラウザ<BR>・データポータルはAWS IAM Identity Center(AWS SSOの後継）を使用して、 IAM クレデンシャルまたは、IdPからの資格情報を使用して認証する。||


### What are Amazon DataZone domains?
DataZoneドメインにより、リソースを整理できるとのことです。ドメインとは、下記のコレクションを指しています。
- データアセット
- プロジェクト
- 関連するAWSアカウント
- Glue , Redshiftを含むデータソースなどのDataZoneオブジェクト

DataZoneドメインを通じて、下記の組織のビジネス領域とエンティティを柔軟に反映できるとのことです。これらのエンティティを使用することでDataZoneドメインを使用してDataZoneビジネスカタログにデータ資産を公開できる。その後そのドメインにアクセスできる関連付けられたAWSアカウントとリソースへのアクセスを制御できる。

| エンティティ| 説明 |
|:-- |:-- |
| Data assets |データオブジェクト（テーブル、ダッシュボード、ファイル等）|
| Data sources |Redshiftのテーブル/View、Glueデータカタログ、S3|
| Metadata forms| データスチュワードの操作を想定している。カスタム定義の属性を追加し、データ資産のメタデータモデルを拡張する。|
| Business glossaries| メタデータ属性を定義するために使用されるビジネス辞書。Metadata formsに追加され、データ資産に適用される。|
| Associated AWS accounts| DataZoneドメインを収容するAWSアカウントとの信頼関係がある。この関連によりデータプロデューサーは関連付けされたAWSアカウントからDataZoneドメインにデータ資産をPublishすることが可能になり、コンシューマーは関連付けられたAWSアカウントのデータ資産をサブスクライブできる。|

### What are Amazon DataZone projects and project profiles?
プロジェクトにより、ユーザーのグループは、DataZone カタログ内のデータ資産のPublish、検出、サブスクライブ、およびコンシュームを含むさまざまなビジネス ユース ケースで共同作業を行うことが可能になる。 各 DataZone プロジェクトには一連のアクセス制御が適用されているため、許可された個人、グループ、およびロールのみがプロジェクトと、このプロジェクトがサブスクライブするデータ資産にアクセスでき、プロジェクトのアクセス許可によって定義されたツールのみを使用できるとのこと。

| Project / Project proﬁles| 説明 |
|:-- |:-- |
| Projects| チームおよびグループの管理されたデータアクセスにプロジェクトが使用できる。<BR>プロジェクトは独自のアクセス制御になり、承認された個人、グループ、ロールのみがプロジェクトがサブスクライブしたプロジェクト及びデータ資産にアクセスし、プロジェクトで構成されたツールを使用できる。|
| Project proﬁles| プロジェクトを作成するための再利用可能なテンプレートを提供する事前に構成されたリソースと機能のセット<BR>プロジェクトがデプロイされるAWSアカウントやVPCなどの設定等が含まれる。|

### What are Amazon DataZone project capabilities?
プロジェクト機能は、プロジェクトの作成中に起動できるデプロイおよび構成パラメーターのスタックのセットを表すとのこと。
Project proﬁlesでは、1つ以上のプロジェクト機能を有効にし、DataZoneプロジェクトの作成に使用できる。
プロジェクトで有効化され他プロジェクト機能は、プロジェクトメンバーがDataZoneカタログのデータ資産を操作する際に使用できるAWSツールとサービス（Athena,Redshift）を定義する。

:::note info
プレビューでは、下記のプロジェクト機能がサポートされている。また、デフォルトのデータ レイク機能を他の機能と組み合わせることはできないとのことです。
:::


|Project capability name|説明|リソース|
|:--|:--|:--|
|Essential capability |DataZoneプロジェクトから選択された他のサービスを使用するための前提条件。|・KMSキー<BR>・IAMロール<BR>・S3バケット<BR>・CloudWatch Logs ロググループ<BR>・S3のVPCエンドポイント<BR>・CloudWatch の VPCエンドポイント|
|Data Lake Default Capability| ドメインの作成時に作成されたデフォルトのプロジェクト プロファイルを使用してプロジェクトを作成すると、デフォルトで選択される。<BR>カスタムプロジェクトプロファイルにより、この機能を選択できる。DataZoneプロジェクトのメンバーは、プロジェクト内でDataLakeプロデューサー、コンシューマサービスを起動できる。|デフォルトでは、ユーザはAthenaを使用してLake Formationテーブルを作成、クエリできる。|
|Data Lake Consumer Capability	 | DataZoneプロジェクトメンバーは、AthenaおよびLake FormationがサポートするクエリエンジンでLake Formationが管理するアセットのRead Onlyコピーに直接アクセスできる|・Athenaワークグループ<BR>・Read onlyのLake Formation権限を持つGlueデータベース<BR>・Read Only専用のIAM権限<BR>・GlueのVPCエンドポイント<BR>・AthenaのVPCエンドポイント<BR>・プロジェクトにより管理されるS3へのアクセス|
| Data Lake Producer Capability	| DataZoneプロジェクトメンバーがAthenaを使用して、新しいLakeFormation管理テーブルを作成し、それらをDataZoneカタログにPublishできる。|・Lake FormationのCreate、Grant<BR>・IAM Read、Write<BR>・タグ付けされたGlue ETL|
| Data Warehouse Consumer Capability |DataZone プロジェクト メンバーが独自の Redshift クラスターに接続して、リモート データ ストアにクエリを実行し、新しいデータ セットを作成して保存できるようにする。|・Redshiftクエリエディタへのアクセス<BR>・DataZoneカタログからサブスクライブされたデータソースへのRead Onlyアクセス<BR>・Redshiftのローカルデータ資産を作成する機能|
| Data Warehouse Producer Capability|DataZone プロジェクト メンバーが独自の Amazon Redshift クラスターに接続して、リモート データ ストアのクエリを実行し、新しいデータセットを作成し、それらを Amazon DataZone カタログに公開できるようにする。 |・Redshiftクエリエディタへのアクセス<BR>・DataZoneカタログからサブスクライブされたデータソースへのRead Onlyアクセス<BR>・Redshiftからアセットを作成、公開する機能 |

### What are Amazon DataZone publish and subscribe workflows?
DataZone は、データアセットを Amazon DataZone ドメインに発行するために使用されるプロジェクトを通じてセルフサービス分析を提供する。
プロジェクトは、ドメイン全体でアセットを検出し、サブスクライブすることもできる。 最後に、プロジェクトがデータにアクセスして分析できるようにすることで、サブスクリプションを実現できる。

- Publish
    - データを共有したいDataZoneプロジェクトは、最初にドメインとの有効なパブリッシング契約を結ぶ必要がある。
    - パブリッシャーとドメイン間の契約のように機能し、Publishとサブスクライブの条件を定義する。
    - Publish契約が成立したらプロジェクトで、Publishジョブを作成し、選択した一連の物理アセットのメタデータをキューレートできる。
    - Publishジョブの実行後、ドラフトアセットが作成されデータパブリッシャは追加のメタデータ、説明等を追加してデータ検出を改善する。
- Subscribe
    - データがドメインに公開されると、サブスクライバーはデータアセットを検出し、サブスクリプションを要求できる。
    - サブスクリプションプロセスは、サブスクライバーがカタログを検索及び参照し、必要なアセットを見つけることから始める。
    - DataZone ポータルから、正当な理由とリクエストの理由を含むサブスクリプション リクエストを送信することで、データ アセットをサブスクライブすることを選択する。
    - 次に、Publish契約で定義されているサブスクリプション承認者が、アクセス要求を確認する。 
        - このとき要求を承認または拒否ができる。 リクエストが承認された場合、サブスクリプションは付与されたと見なされる。
- Fulﬁllment
    - サブスクリプションが付与されると、サブスクライブしているプロジェクトのデータ資産へのアクセスを容易にするためのフルフィルメント プロセスが開始される。
    - データ資産のアクセス制御とフルフィルメントには、下記の 2 つのモードがある。
        - Managed assets
            - DataZone は、Lake Formation が管理する Glue テーブルや Redshift のテーブルとビューなど、管理対象データ資産のフルフィルメントとアクセス許可を管理できる。
        - Unmanaged assets
            - DataZone は、Lake Formation または Redshift のテーブルとビューによって管理されていないデータ資産のフルフィルメントとアクセス許可を管理できない。 これらのアセットについて、DataZone はユーザーのアクション (たとえば、サブスクリプション リクエストに対する承認) に関連する標準イベントを EventBridge に発行する。 これらの標準イベントを使用して、カスタム統合のために他の AWS サービスまたはサードパーティ ソリューションと統合できる。


### Who are the users of Amazon DataZone?
推奨されるDataZoneペルソナは下記の通り。

|ユーザ | ペルソナ |例|
| :--| :--|:--|
|Publisher |・データ資産をビジネスデータカタログにPublish<BR>・データ資産のメタデータを編集<BR>・Publish要求を承認できるユーザ | ・ETLエンジニア<BR>・データアナリスト<BR>・データエンジニア<BR>・データサイエンティスト|
|Subscriber | データ資産を検出、アクセス、コンシュームしたいユーザ|・ETLエンジニア<BR>・データアナリスト<BR>・データエンジニア<BR>・データサイエンティスト<BR>・ビジネスアナリスト<BR>・基幹業務ユーザ|
| Domain administrator|ドメインを作成し、データスチュワードとドメイン管理者をアサインし、Project Profileを作成し、プロジェクトの所有者を編集するユーザ。<BR>DataZoneルートドメイン管理者である場合、DataZoneにデータソースを追加し、AWSアカウントにInvitationを送信しDataZoneドメインに関連付けることもできる。|・データエンジニアリングマネージャー<BR>・ITマネージャー<BR>・インフラエンジニア|
|Data steward |Publish条件を設定し、PublisherがPublish契約を通じて、これらの条件を確実に遵守するようにするユーザ。<BR>メタデータフォームやビジネス用語集を作成したり、公開されたデータ資産をレビューしたり、DataZoneドメイン全体でサブスクリプションリクエストをレビューしたりできる。||

# 実践
今回は、OrganizationやIAM アイデンティティセンター(旧AWS SSO)を使用せずに試します。

## ドメインの作成
1. DataZoneトップページで、「ドメインを作成」をクリックします。
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206276/ae8d4eba-f870-23e6-ada5-dec6c920ec82.png)

1. ドメインを作成ページで、下記を入力し「ドメインを作成」をクリックします。
    - ドメイン名：ここでは、datazone-domain-test-1としています。
    - データ暗号化：AWS管理のKMSとするため、ここではチェックはしていません。
    - サービスアクセス:Use default role
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206276/fbab5f13-749f-a93d-a322-609a3af38c11.png)
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206276/1f672aa4-a44e-2e5e-1b54-e9cae48ee7e0.png)
1. しばらくするとステータスが「操作可能」になります。関連付けられているアカウントには、本アカウントが設定されています。
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206276/8555bd39-575d-4863-c49c-cd6056b4cd69.png)

## プロデューサープロジェクトの作成
1. 作成したデータゾーンドメインで、「オープンデータポータル」をクリックします。
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206276/e6d4b633-75b4-dc4d-5f31-af625e7f46d9.png)

1. 別画面が表示されるので、「Browse all projects」をクリックします。
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206276/ddbdd2d0-c69f-ce27-1a3e-3d6bcaac0dbc.png)

1. 「CREATE PROJECT」をクリックします。
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206276/e06297f1-befd-e08f-f2d5-02e8121cddf4.png)

1. Nameを入力し、SELECT DOMAINをクリックします。
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206276/fdc2a1e7-8e3b-8987-e672-b2c05fd526e5.png)
1. 作成したドメインを選択し、「SELECT DOMAIN」をクリックします。
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206276/4f5380e0-2e45-239b-1e15-960a7f913fb6.png)
1. Project Profileに、「Default Project Profile」が表示されるので、最後に「CREATE PROJECT」をクリックします。
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206276/12607e20-d8ec-e063-48c8-470dd649da18.png)
1. しばらくするとActiveになります。（数分かかります。）
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206276/50ba49cc-10a7-b002-9f7f-719b9d3bf568.png)

## DataZoneで公開するデータを作成
1. プロジェクト名「datazone-project-1」をクリックします。
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206276/f0be2f02-f590-d57d-125c-38a99b61e2b2.png)
1. Query data（Athenaのクエリエディタ）をクリックします。
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206276/492e4c6a-3880-dc03-7da9-115a679ee490.png)

1. Athenaのクエリエディタで、[下記のサンプルクエリ](https://docs.aws.amazon.com/ja_jp/datazone/latest/userguide/produce-data-gs.html)を実行します。
    ```
    CREATE TABLE catalog_sales AS 
    SELECT 146776932 AS order_number, 23 AS quantity, 23.4 AS wholesale_cost, 45.0 as list_price, 43.0 as sales_price, 2.0 as discount, 12 as ship_mode_sk,13 as warehouse_sk, 23 as item_sk, 34 as catalog_page_sk, 232 as ship_customer_sk, 4556 as bill_customer_sk
    UNION ALL SELECT 46776931, 24, 24.4, 46, 44, 1, 14, 15, 24, 35, 222, 4551
    UNION ALL SELECT 46777394, 42, 43.4, 60, 50, 10, 30, 20, 27, 43, 241, 4565
    UNION ALL SELECT 46777831, 33, 40.4, 51, 46, 15, 16, 26, 33, 40, 234, 4563
    UNION ALL SELECT 46779160, 29, 26.4, 50, 61, 8, 31, 15, 36, 40, 242, 4562
    UNION ALL SELECT 46778595, 43, 28.4, 49, 47, 7, 28, 22, 27, 43, 224, 4555
    UNION ALL SELECT 46779482, 34, 33.4, 64, 44, 10, 17, 27, 43, 52, 222, 4556
    UNION ALL SELECT 46779650, 39, 37.4, 51, 62, 13, 31, 25, 31, 52, 224, 4551
    UNION ALL SELECT 46780524, 33, 40.4, 60, 53, 18, 32, 31, 31, 39, 232, 4563
    UNION ALL SELECT 46780634, 39, 35.4, 46, 44, 16, 33, 19, 31, 52, 242, 4557
    UNION ALL SELECT 46781887, 24, 30.4, 54, 62, 13, 18, 29, 24, 52, 223, 4561
    ```

    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206276/90960890-eca3-9ffa-e4c5-d592653df140.png)

## DataZoneでデータ資産をPublish
1. プロジェクトで「PUBLISH DATA」をクリックします。
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206276/da1974f9-7c93-acba-7cc5-903a7527b219.png)
1. 下記を入力し、「CREATE PUBLISHING JOB」をクリックします。
    - Choose publishing method：Automated publish
    - Publishing job details: sales-producer-projectとしました。
    - Publishing agreement：デフォルト
    - Data source:デフォルト
    - Data selection: publishing dbに記載されているデータベース名を指定
    - Selection criteria:デフォルト
    - Data Asset publishing:Draft（デフォルト）
    - Publishing job schedule:Run once(デフォルト)
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206276/a0c7311a-1665-8e07-deaf-3183eeaa9849.png)
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206276/559c7900-29de-0cbc-43ea-96117d9c9a9a.png)
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206276/5cb55ce2-d29b-faff-412b-72e7b071eb36.png)


1. プロジェクトで「PUBLISHED DATA」タブをクリックすると作成した「catalog_sales」テーブルが見えました。ここで、テーブル名「catalog_sales」をクリックしてみます。
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206276/ad32f5f3-219b-39e0-1215-e33070fab120.png)

1. METADATAタブ、SCHEMAタブ、SUBSCRIPTIONSタブをクリックして確認してみます。
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206276/4afe89f9-6b65-e3cd-4056-e2c011ce3d21.png)
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206276/363bc19c-9555-f2b7-85a5-c48524e01c68.png)
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206276/dae77f0c-234c-fe7d-864a-bbdb16571a5a.png)

1. 「SUBSCRIPTION REQUESTS」をクリックします。
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206276/8f42c6f8-9ab5-3f8f-9cb1-f0dfd5c58a93.png)

1. 「PUBLISHING JOBS」をクリックします。
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206276/9cd2c5d0-ae37-1e6d-bf6f-da1577143134.png)

1. 「PUBLISHING AGREEMENTS」をクリックします。
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206276/f27d7253-f490-1bb4-abec-7a6174c35e3d.png)

1. 作成したデータセットで「Edit name and description」をクリックします。
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206276/3ffba464-5c4a-2dc4-481a-93a704792654.png)

1. タイトルに「Product Sales Data」を入力し、「SAVE CHANGES」をクリックします。
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206276/a064d06b-06dd-1831-b949-c4260dcaffe2.png)

1. 「SET ASSET TO ACTIVE」をクリックします。
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206276/70d63468-044a-b47a-6de4-f29bb178a896.png)

## コンシューマープロジェクトの作成
1. 「CREATE PROJECT」をクリックします。
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206276/e06297f1-befd-e08f-f2d5-02e8121cddf4.png)
1. 下記を入力し、「CREATE PROJECT」をクリックします。
    - Name: marketing-consumer-project
    - Domain: 作成したドメイン
    - Project profile:デフォルト
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206276/19b40c14-34f5-d04f-21e1-c2e534574c5c.png)

1. しばらくするとActiveになります。
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206276/26d5cf09-9302-3faa-c093-2d6cc141dcab.png)

## サブスクライブの設定
ACTIVEになった「Product Sales Data」をコンシュームします。

1. 検索フィールドに「Sales」を入力すると、「Product Sales Data」が表示されます。次にクリックすると当該ページに画面遷移します。
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206276/4228b22e-9e14-1880-d1f4-623fe6c604f5.png)

1. 「SUBSCRIBE」をクリックします。
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206276/6e46c10c-3eb7-737d-075d-d98b32cfb5e4.png)

1. Subscribe to Product Sales Data で、下記を入力し、「SUBSCRIBE」をクリックします。
    - Project: 作成した「marketing-consumer-project」を選択
    - Reason for request: 適当にコメントを入力
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206276/38f95cfa-8faf-7968-cc12-07d088ca86ef.png)

1. SUBSCRIPTIONSに追加されました。View requestをクリックします。
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206276/bc56c971-fef1-aa40-0c31-8e1068fa18f6.png)

1. リクエスト内容が確認できます。そのまま「Close」をクリックします。
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206276/7cbad308-0cd3-7fd7-cace-de507b53e49c.png)

1. しばらくすると、右上のアイコンをクリックすると「Tasks」としてリクエスト内容が表示されます。
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206276/3324e085-cc5b-d0a1-65db-bb30ec1d5604.png)

## Approveする
1. プロデューサ側のプロジェクトを選択します。
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206276/a3d57a9f-4353-3473-74eb-8248fda8541d.png)

1. 「PUBLISHED DATA」＞「SUBSCRIPTION REQUESTS」をクリックし、「View request」をクリックします。
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206276/629d34f5-e174-7c98-cfab-f06c41dee693.png)

1. ポップアップでSubscription requestが表示されるので、「APPROVE」をクリックします。
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206276/2541c460-afd2-f238-cd01-797bcd1d47dc.png)

1. Approve this requestに理由を入力し、「APPROVE」をクリックします。
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206276/65a5dd95-c288-3955-26b9-9f446e9f6cb1.png)

1. Subscription requestsは消えました。
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206276/6fc4e520-560e-cf5f-48a7-1c6f72110bed.png)

## Publishされたデータ資産をコンシューマーで分析する
コンシューマーでAthenaで分析します。

1. コンシューマーのプロジェクトで「SUBSCBED DATA」で「APPROVED」をクリックし、上記でApproveしたデータが参照できることを確認します。
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206276/2afafed5-0ece-b6b3-7342-66f34ec6fa56.png)

1. 「Query data」をクリックしAthenaのクエリエディタを開きます。
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206276/7c313bfe-5df9-60f7-d74d-5970d7efc18a.png)
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206276/73a184ec-ff2d-2aeb-4e40-ec29a5da1343.png)

1. データベースで「marketingconsumerproject_sub_db」を選択すると、Publisherのテーブルが参照できました。
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206276/69a4d169-c345-8527-7add-340f1808bf55.png)

1. 以下のクエリを実行し、データを読み込んでみます。
    ```
    SELECT * FROM "marketingconsumerproject_sub_db"."datazoneproject1_pub_db-catalog_sales-XXXXXXX" limit 10;
    ```
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206276/ff404e7f-ecbe-be87-1c22-657930e2160f.png)

## 分析データを使用してDataZoneカタログに公開する
1. データベースを切り替えます。
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206276/e360e06e-a228-0986-00e8-b5cf41bef465.png)

1. 下記のクエリを実行し、サブスクライブしたテーブルを元に、Publish用のデータベースにテーブルとデータを作成します。
    ```
    CREATE TABLE "marketingconsumerproject_pub_db"."top_three_discounted_items" AS SELECT 'PUBLISH_TEST' AS TMP_COLUMN ,* FROM "marketingconsumerproject_sub_db"."datazoneproject1_pub_db-catalog_sales-XXXXXXXXX" order by discount desc LIMIT 3;
    ```
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206276/ba1ea6a4-5c35-8a18-f11a-526882546b22.png)

1. DataZoneポータルで、Consumer のプロジェクトを選択し、「PUBLISHED DATA」タブで「PUBLISHED DATA」をクリックします。
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206276/8b91289e-305c-8e17-b68f-eb4efcb0bc81.png)

1. 上記と同様にPublish dataでPublishing job details、Database name等を入力し「CREATE PUBLISHING JOB」をクリックします。
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206276/a5b239a7-957d-a912-8659-cb804fd0cbdf.png)
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206276/718b9a9b-1e06-3be5-344b-90a48208ca9f.png)

1. 先程無かった、PUBLISHED DATAに登録したジョブが表示されました。
   ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206276/1541edf1-a3a1-95c5-eb54-6dd15f7289a8.png)
 
1. あとは同様にタイトル等を入力しPublishします。PUBLISHEDに変わりました。
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206276/06e27917-b1dd-6b66-de31-8ebbe56b4519.png)

1. 「SUBSCRIBE」をクリックします。
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206276/a1849dbe-d35a-afed-1746-882b30f3f6a2.png)

1. 今度は、Projectにdatazone-project-1を選択し、SUBSCRIBEをクリックします。
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206276/754981c1-2537-a1a5-16c9-b092540445e0.png)

1. 後は先程と同様にApproveする。

1. クエリエディタで、先程のデータが参照ができました。
    ```
    SELECT * FROM "datazoneproject1_sub_db"."marketingconsumerproject_pub_db-top_three_discounted_items-XXXXX" limit 10;
    ```
    
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206276/ad5f5334-3098-cee2-c11b-6c20cba17c19.png)

# 考察
今回のチュートリアルを通して、DataZoneポータルを介して、データのPublishとSubscribeの流れを試してみました。
なんとなく、PublisherとConsumer間でガバナンスを効かせながら、公開していくイメージが持てました。
今回は、単一アカウントで試しましたが次回はOrganizationや AWS IAM アイデンティティセンターを使用して複数アカウントで試してみたいと思います。

# 参考
https://aws.amazon.com/jp/about-aws/whats-new/2023/03/aws-amazon-datazone-preview/

https://docs.aws.amazon.com/ja_jp/datazone/latest/userguide/what-is-datazone.html