

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

# Amazon DataZone 시작하기
<a name="getting-started"></a>

이 섹션의 정보는 Amazon DataZone 사용을 시작하는 데 도움이 됩니다. Amazon DataZone을 처음 사용하는 경우, 먼저 [Amazon DataZone 용어 및 개념](datazone-concepts.md) 섹션에 있는 개념과 용어를 알아 두세요.

이러한 빠른 시작 워크플로의 단계를 시작하기 전에 이 가이드의 [설정](setting-up.md) 섹션에 설명된 절차를 완료해야 합니다. 새 AWS 계정을 사용하는 경우 [Amazon DataZone 관리 콘솔을 사용하는 데 필요한 권한을 구성](create-iam-roles.md)해야 합니다. 기존 AWS Glue Data Catalog 객체가 있는 AWS 계정을 사용하는 경우 [Amazon DataZone에 대한 Lake Formation 권한도 구성](lake-formation-permissions-for-datazone.md)해야 합니다.

이 시작하기 섹션에서는 다음 Amazon DataZone 빠른 시작 워크플로를 안내합니다.

**Topics**
+ [AWS Glue 데이터를 사용한 Amazon DataZone 빠른 시작](quickstart-glue.md)
+ [Amazon Redshift 데이터를 사용한 Amazon DataZone 빠른 시작](quickstart-rs.md)
+ [샘플 스크립트를 사용한 Amazon DataZone 빠른 시작](quickstart-apis.md)

# AWS Glue 데이터를 사용한 Amazon DataZone 빠른 시작
<a name="quickstart-glue"></a>

다음 빠른 시작 단계를 완료하여 샘플 AWS Glue 데이터를 사용하여 Amazon DataZone의 전체 데이터 생산자 및 데이터 소비자 워크플로를 실행합니다.

**Topics**
+ [1단계 - Amazon DataZone 도메인 및 데이터 포털 생성](#create-domain-gs-glue)
+ [2단계 - 게시 프로젝트 생성](#create-publishing-project-gs-glue)
+ [3단계 - 환경 생성](#create-environment-gs-glue)
+ [4단계 - 게시를 위한 데이터 생성](#produce-data-for-publishing-gs-glue)
+ [5단계 - AWS Glue에서 메타데이터 수집](#gather-metadata-from-glue-gs-glue)
+ [6단계 - 데이터 자산 큐레이팅 및 게시](#curate-data-asset-gs-glue)
+ [7단계 - 데이터 분석을 위한 프로젝트 생성](#create-project-for-data-analysis-gs-glue)
+ [8단계 - 데이터 분석을 위한 환경 생성](#create-environment-gs2-glue)
+ [9단계 - 데이터 카탈로그 검색 및 데이터 구독](#search-catalog-subscribe-gs-glue)
+ [10단계 - 구독 요청 승인](#approve-subscription-request-gs-glue)
+ [11단계 - Amazon Athena에서 쿼리를 빌드하고 데이터 분석](#analyze-data-gs-glue)

## 1단계 - Amazon DataZone 도메인 및 데이터 포털 생성
<a name="create-domain-gs-glue"></a>

이 섹션에서는 이 워크플로에 대한 Amazon DataZone 도메인 및 데이터 포털을 생성하는 단계를 설명합니다.

Amazon DataZone 도메인을 생성하려면 다음 절차를 완료하세요. Amazon DataZone 도메인에 대한 자세한 내용은 [Amazon DataZone 용어 및 개념](datazone-concepts.md) 섹션을 참조하세요.

1. [https://console.aws.amazon.com/datazone](https://console.aws.amazon.com/datazone)에서 Amazon DataZone 콘솔로 이동하여 로그인한 다음 **도메인 생성**을 선택합니다.
**참고**  
이 워크플로에 기존 Amazon DataZone 도메인을 사용하려면 **도메인 보기**를 선택한 다음 사용하려는 도메인을 선택한 다음 게시 프로젝트 생성의 2단계로 이동합니다.

1. **도메인 생성** 페이지에서 다음 필드에 값을 입력합니다.
   + **이름** - 도메인의 이름을 지정합니다. 이 워크플로를 위해 이 도메인 **Marketing**을 직접적으로 호출할 수 있습니다.
   + **설명** - 선택적 도메인 설명을 지정합니다.
   + **데이터 암호화** - 데이터는 기본적으로가 AWS 소유하고 관리하는 키로 암호화됩니다. 이 사용 사례의 경우 기본 데이터 암호화 설정을 그대로 둘 수 있습니다.

     사용자 지정 고객 관리형 키 사용에 대한 자세한 내용은 [Amazon DataZone에 대한 저장 데이터 암호화](encryption-rest-datazone.md) 섹션을 참조하세요. 데이터 암호화에 자체 KMS 키를 사용하는 경우 기본 [AmazonDataZoneDomainExecutionRole](AmazonDataZoneDomainExecutionRole.md)에 다음 문을 포함해야 합니다.

------
#### [ JSON ]

****  

     ```
     {
         "Version":"2012-10-17",		 	 	 
         "Statement": [
             {
                 "Sid": "Statement1",
                 "Effect": "Allow",
                 "Action": [
                     "kms:Decrypt",
                     "kms:DescribeKey",
                     "kms:GenerateDataKey"
                 ],
                 "Resource": [
                     "arn:aws:kms:us-east-1:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab"
                 ]
             }
         ]
     }
     ```

------
   + **서비스 액세스** - 기본적으로 선택한 상태로 둡니다. **기본 역할 사용** 옵션은 변경되지 않습니다.
**참고**  
이 워크플로에 기존 Amazon DataZone 도메인을 사용하는 경우 **기존 서비스 역할 사용** 옵션을 선택한 다음 드롭다운 메뉴에서 기존 역할을 선택할 수 있습니다.
   + **빠른 설정**에서 **데이터 소비 및 게시를 위해 이 계정 설정**을 선택합니다. 이 옵션은 **데이터 레이크** 및 **데이터 웨어하우스** 의 내장 Amazon DataZone 블루프린트를 활성화하고 이 계정에 필요한 권한, 리소스, 기본 프로젝트, 기본 데이터 레이크 및 데이터 웨어하우스 환경 프로파일을 구성합니다. Amazon DataZone 블루프린트에 대한 자세한 내용은 [Amazon DataZone 용어 및 개념](datazone-concepts.md) 섹션을 참조하세요.
   + **권한 세부 정보** 아래에 있는 나머지 필드는 변경하지 않습니다.
**참고**  
기존 Amazon DataZone 도메인이 있는 경우 **기존 서비스 역할 사용** 옵션을 선택한 다음 드롭다운 메뉴에서 **Glue 액세스 관리 역할**, **Redshift 액세스 역할** 및 **프로비저닝 역할**에 대한 기존 역할을 선택할 수 있습니다.
   + **태그** 아래의 필드는 변경되지 않습니다.
   + **도메인 생성(Create domain)**을 선택합니다.

1. 도메인이 성공적으로 생성되면 이 도메인을 선택하고 도메인의 요약 페이지에서 이 도메인의 **데이터 포털 URL**을 기록해 둡니다. 이 URL을 사용하여 Amazon DataZone 데이터 포털에 액세스하여 이 워크플로의 나머지 단계를 완료할 수 있습니다. **데이터 포털 열기**를 선택하여 데이터 포털로 이동할 수도 있습니다.

**참고**  
Amazon DataZone 의 현재 릴리스에서 도메인이 생성되면 데이터 포털에 대해 생성된 URL을 수정할 수 없습니다.

도메인 생성을 완료하는 데 몇 분 정도 걸릴 수 있습니다. 다음 단계로 진행하기 전에 도메인의 상태가 **사용 가능**이 될 때까지 기다립니다.

## 2단계 - 게시 프로젝트 생성
<a name="create-publishing-project-gs-glue"></a>

이 섹션에서는 이 워크플로에 대한 게시 프로젝트를 생성하는 데 필요한 단계를 설명합니다.

1. 위의 1단계를 완료하고 도메인을 생성하면 **Amazon DataZone입니다.** 창이 표시됩니다. 이 창에서 **프로젝트 생성**을 선택합니다.

1. 프로젝트 이름을 지정합니다. 예를 들어 이 워크플로의 경우 이름을 **SalesDataPublishingProject**로 지정한 다음 나머지 필드를 변경하지 않고 **생성**을 선택합니다.

## 3단계 - 환경 생성
<a name="create-environment-gs-glue"></a>

이 섹션에서는 이 워크플로의 환경을 생성하는 데 필요한 단계를 설명합니다.

1. 위의 2단계를 완료하고 프로젝트를 생성하면 **프로젝트가 준비 완료되었습니다\$1** 창이 표시됩니다. 이 창에서 **환경 생성**을 선택합니다.

1. **환경 생성** 페이지에서 다음을 지정한 다음 **환경 생성**을 선택합니다.

1. 다음 필드의 값을 지정합니다.
   + **이름** - 환경의 이름을 지정합니다. 이 연습에서는 `Default data lake environment`라고 부를 수 있습니다.
   + **설명** - 환경에 대한 설명을 지정합니다.
   + **환경 프로파일** - **DataLakeProfile** 환경 프로파일을 선택합니다. 이를 통해이 워크플로에서 Amazon DataZone을 사용하여 Amazon S3, AWS Glue 카탈로그 및 Amazon Athena의 데이터로 작업할 수 있습니다.
   + 이 연습에서는 나머지 필드를 변경하지 않고 유지합니다.

1. **환경 생성**을 선택합니다.

## 4단계 - 게시를 위한 데이터 생성
<a name="produce-data-for-publishing-gs-glue"></a>

이 섹션에서는 이 워크플로에 게시하기 위한 데이터를 생성하는 데 필요한 단계를 설명합니다.

1. 위의 3단계를 완료한 후 `SalesDataPublishingProject` 프로젝트에서 오른쪽 패널의 **분석 도구** 아래에서 **Amazon Athena**를 선택합니다. 이렇게 하면 인증을 위해 프로젝트의 자격 증명을 사용하여 Athena 쿼리 편집기가 열립니다. **Amazon DataZone 환경** 드롭다운에서 게시 환경을 선택하고 쿼리 편집기에서와 같이 `<environment_name>%_pub_db` 데이터베이스를 선택해야 합니다.

1. 이 연습에서는 **테이블을 셀렉트로 생성**(CTAS) 쿼리 스크립트를 사용하여 Amazon DataZone에 게시할 새 테이블을 생성합니다. 쿼리 편집기에서 이 CTAS 스크립트를 실행하여 게시하고 검색 및 구독에 사용할 수 있는 `mkt_sls_table` 테이블을 생성합니다.

   ```
   CREATE TABLE mkt_sls_table AS
   SELECT 146776932 AS ord_num, 23 AS sales_qty_sld, 23.4 AS wholesale_cost, 45.0 as lst_pr, 43.0 as sell_pr, 2.0 as disnt, 12 as ship_mode,13 as warehouse_id, 23 as item_id, 34 as ctlg_page, 232 as ship_cust_id, 4556 as bill_cust_id
   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
   ```

   왼쪽의 **테이블 및 뷰** 섹션에서 **mkt\$1sls\$1table** 테이블이 성공적으로 생성되었는지 확인합니다. 이제 Amazon DataZone 카탈로그에 게시할 수 있는 데이터 자산이 있습니다.

## 5단계 - AWS Glue에서 메타데이터 수집
<a name="gather-metadata-from-glue-gs-glue"></a>

이 섹션에서는이 워크플로에 대해 AWS Glue에서 메타데이터를 수집하는 단계를 설명합니다.

1. 위의 4단계를 완료하면 Amazon DataZone 데이터 포털에서 `SalesDataPublishingProject` 프로젝트를 선택한 다음 **데이터** 탭을 선택하고 왼쪽 패널에서 **데이터 소스**를 선택합니다.

1. 환경 생성 프로세스의 일부로 생성된 소스를 선택합니다.

1. **작업** 드롭다운 메뉴 옆의 **실행**을 선택한 다음 새로 고침 버튼을 선택합니다. 데이터 소스 실행이 완료되면 자산이 Amazon DataZone 인벤토리에 추가됩니다.

## 6단계 - 데이터 자산 큐레이팅 및 게시
<a name="curate-data-asset-gs-glue"></a>

이 섹션에서는 이 워크플로에서 데이터 자산을 큐레이팅하고 게시하는 단계를 설명합니다.

1. 위의 5단계를 완료한 후 Amazon DataZone 데이터 포털에서 이전 단계에서 생성한 `SalesDataPublishingProject` 프로젝트를 선택하고 **데이터** 탭을 선택한 다음 왼쪽 패널에서 **인벤토리 데이터**를 선택하고 `mkt_sls_table` 테이블을 찾습니다.

1. `mkt_sls_table` 자산의 세부 정보 페이지를 열어 자동으로 생성된 비즈니스 이름을 확인합니다. 자산 및 열에 대해 자동 생성된 이름을 보려면 **자동 생성된 메타데이터** 아이콘을 선택합니다. 각 이름을 개별적으로 수락하거나 거부하거나 **모두 수락**을 선택하여 생성된 이름을 적용할 수 있습니다. 선택적으로 사용 가능한 메타데이터 양식을 자산에 추가하고 용어집 용어를 선택하여 데이터를 분류할 수도 있습니다.

1. **자산 게시**를 선택하여 `mkt_sls_table` 자산을 게시합니다.

## 7단계 - 데이터 분석을 위한 프로젝트 생성
<a name="create-project-for-data-analysis-gs-glue"></a>

이 섹션에서는 데이터 분석을 위한 프로젝트를 생성하는 단계를 설명합니다. 이는 이 워크플로의 데이터 소비자 단계의 시작입니다.

1. 위의 6단계를 완료한 후 Amazon DataZone 데이터 포털에서 **프로젝트** 드롭다운 메뉴에서 **프로젝트 생성**을 선택합니다.

1. **프로젝트 생성** 페이지에서 프로젝트 이름을 지정합니다. 예를 들어 이 워크플로의 경우 이름을 **MarketingDataAnalysisProject**를 지정한 다음 나머지 필드를 변경하지 않고 그대로 둔 다음 **생성**을 선택합니다.

## 8단계 - 데이터 분석을 위한 환경 생성
<a name="create-environment-gs2-glue"></a>

이 섹션에서는 데이터 분석을 위한 환경을 생성하는 단계를 설명합니다.

1. 위의 7단계를 완료하면 Amazon DataZone 데이터 포털에서 `MarketingDataAnalysisProject` 프로젝트를 선택한 다음 **환경** 탭을 선택하고 **환경 생성**을 선택합니다.

1. **환경 생성** 페이지에서 다음을 지정한 다음 **환경 생성**을 선택합니다.
   + **이름** - 환경의 이름을 지정합니다. 이 연습에서는 `Default data lake environment`라고 부를 수 있습니다.
   + **설명** - 환경에 대한 설명을 지정합니다.
   + **환경 프로파일** - 내장된 **DataLakeProfile** 환경 프로파일을 선택합니다.
   + 이 연습에서는 나머지 필드를 변경하지 않고 유지합니다.

## 9단계 - 데이터 카탈로그 검색 및 데이터 구독
<a name="search-catalog-subscribe-gs-glue"></a>

이 섹션에서는 데이터 카탈로그를 검색하고 데이터를 구독하는 단계를 설명합니다.

1. 위의 8단계를 완료한 후 Amazon DataZone 데이터 포털에서 Amazon DataZone 아이콘을 선택하고 Amazon DataZone **검색** 필드에서 데이터 포털의 **검색** 표시줄에서 키워드(예: '카탈로그' 또는 '판매')를 사용하여 데이터 자산을 검색합니다.

   필요한 경우 필터 또는 정렬을 적용하고 **제품 판매 데이터** 자산을 찾으면 이를 선택하여 자산의 세부 정보 페이지를 열 수 있습니다.

1. **카탈로그 판매 데이터** 자산의 세부 정보 페이지에서 **구독**을 선택합니다.

1. **구독** 대화 상자에서 드롭다운에서 **MarketingDataAnalysisProject** 소비자 프로젝트를 선택한 다음 구독 요청 이유를 지정한 다음 **구독**을 선택합니다.

## 10단계 - 구독 요청 승인
<a name="approve-subscription-request-gs-glue"></a>

이 섹션에서는 구독 요청을 승인하는 단계를 설명합니다.

1. 위의 9단계를 완료한 후 Amazon DataZone 데이터 포털에서 자산을 게시한 **SalesDataPublishingProject** 프로젝트를 선택합니다.

1. **데이터** 탭을 선택한 다음 **게시된 데이터**를 선택한 다음 **들어오는 요청**을 선택합니다.

1. 이제 승인이 필요한 새 요청의 행을 볼 수 있습니다. **테이블 보기**를 선택합니다. 승인 이유를 입력하고 **승인**을 선택합니다.

## 11단계 - Amazon Athena에서 쿼리를 빌드하고 데이터 분석
<a name="analyze-data-gs-glue"></a>

이제 Amazon DataZone 카탈로그에 자산을 성공적으로 게시하고 구독했으므로 분석할 수 있습니다.

1. Amazon DataZone 데이터 포털에서 **MarketingDataAnalysisProject** 소비자 프로젝트를 선택한 다음 오른쪽 패널의 **분석 도구** 에서 Amazon Athena를 사용하여 **데이터 쿼리** 링크를 선택합니다. 이렇게 하면 인증에 대한 프로젝트의 자격 증명을 사용하여 Amazon Athena 쿼리 편집기가 열립니다. 쿼리 편집기의 **Amazon DataZone 환경** 드롭다운에서 **MarketingDataAnalysisProject** 소비자 환경을 선택한 다음 데이터베이스 드롭다운에서 프로젝트의 `<environment_name>%sub_db`를 선택합니다.

1. 이제 구독한 테이블에서 쿼리를 실행할 수 있습니다. **테이블 및 뷰**에서 테이블을 선택한 다음 **미리 보기**를 선택하여 편집기 화면에 선택한 문을 표시할 수 있습니다. 쿼리를 다시 실행하여 결과를 확인합니다.

# Amazon Redshift 데이터를 사용한 Amazon DataZone 빠른 시작
<a name="quickstart-rs"></a>

다음 빠른 시작 단계를 완료하여 샘플 Amazon Redshift 데이터를 사용하여 Amazon DataZone의 전체 데이터 생산자 및 데이터 소비자 워크플로를 실행합니다.

**Topics**
+ [1단계 - Amazon DataZone 도메인 및 데이터 포털 생성](#create-domain-gs-rs)
+ [2단계 - 게시 프로젝트 생성](#create-publishing-project-gs-rs)
+ [3단계 - 환경 생성](#create-environment-gs-rs)
+ [4단계 - 게시를 위한 데이터 생성](#produce-data-for-publishing-gs-rs)
+ [5단계 - Amazon Redshift에서 메타데이터 수집](#gather-metadata-from-glue-gs-rs)
+ [6단계 - 데이터 자산 큐레이팅 및 게시](#curate-data-asset-gs-rs)
+ [7단계 - 데이터 분석을 위한 프로젝트 생성](#create-project-for-data-analysis-gs-rs)
+ [8단계 - 데이터 분석을 위한 환경 생성](#create-environment-gs2-rs)
+ [9단계 - 데이터 카탈로그 검색 및 데이터 구독](#search-catalog-subscribe-gs-rs)
+ [10단계 - 구독 요청 승인](#approve-subscription-request-gs-rs)
+ [11단계 - Amazon Redshift에서 쿼리를 빌드하고 데이터 분석](#analyze-data-gs-rs)

## 1단계 - Amazon DataZone 도메인 및 데이터 포털 생성
<a name="create-domain-gs-rs"></a>

Amazon DataZone 도메인을 생성하려면 다음 절차를 완료합니다. Amazon DataZone 도메인에 대한 자세한 내용은 [Amazon DataZone 용어 및 개념](datazone-concepts.md) 섹션을 참조하세요.

1. [https://console.aws.amazon.com/datazone](https://console.aws.amazon.com/datazone)에서 Amazon DataZone 콘솔로 이동하여 로그인한 다음 **도메인 생성**을 선택합니다.
**참고**  
이 워크플로에 기존 Amazon DataZone 도메인을 사용하려면 도메인 보기를 선택한 다음 사용하려는 도메인을 선택한 다음 게시 프로젝트 생성의 2단계로 이동합니다.

1. **도메인 생성** 페이지에서 다음 필드에 값을 입력합니다.
   + **이름** - 도메인의 이름을 지정합니다. 이 워크플로를 위해 이 도메인 `Marketing`을 직접적으로 호출할 수 있습니다.
   + **설명** - 선택적 도메인 설명을 지정합니다.
   + **데이터 암호화** - 데이터는 기본적으로가 AWS 소유하고 관리하는 키로 암호화됩니다. 이 연습에서는 기본 데이터 암호화 설정을 그대로 둘 수 있습니다.

     사용자 지정 고객 관리형 키 사용에 대한 자세한 내용은 [Amazon DataZone에 대한 저장 데이터 암호화](encryption-rest-datazone.md) 섹션을 참조하세요. 데이터 암호화에 자체 KMS 키를 사용하는 경우 기본 [AmazonDataZoneDomainExecutionRole](AmazonDataZoneDomainExecutionRole.md)에 다음 문을 포함해야 합니다.

------
#### [ JSON ]

****  

     ```
     {
         "Version":"2012-10-17",		 	 	 
         "Statement": [
             {
                 "Sid": "Statement1",
                 "Effect": "Allow",
                 "Action": [
                     "kms:Decrypt",
                     "kms:DescribeKey",
                     "kms:GenerateDataKey"
                 ],
                 "Resource": [
                     "arn:aws:kms:us-east-1:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab"
                 ]
             }
         ]
     }
     ```

------
   + **서비스 액세스** - **사용자 지정 서비스 역할 사용** 옵션을 선택한 다음 드롭다운 메뉴에서 **AmazonDataZoneDomainExecutionRole**을 선택합니다.
   + **빠른 설정**에서 **데이터 소비 및 게시를 위해 이 계정 설정**을 선택합니다. 이 옵션은 **데이터 레이크** 및 **데이터 웨어하우스** 의 기본 제공 Amazon DataZone 블루프린트를 활성화하고 이 워크플로의 나머지 단계를 완료하는 데 필요한 권한과 리소스를 구성합니다. Amazon DataZone 블루프린트에 대한 자세한 내용은 [Amazon DataZone 용어 및 개념](datazone-concepts.md) 섹션을 참조하세요.
   + **권한 세부 정보** 및 **태그**의 나머지 필드를 변경하지 않고 유지한 다음 **도메인 생성**을 선택합니다.

1. 도메인이 성공적으로 생성되면 이 도메인을 선택하고 도메인의 요약 페이지에서 이 도메인의 **데이터 포털 URL**을 기록해 둡니다. 이 URL을 사용하여 Amazon DataZone 데이터 포털에 액세스하여 이 워크플로의 나머지 단계를 완료할 수 있습니다.

**참고**  
Amazon DataZone의 현재 릴리스에서 도메인이 생성되면 데이터 포털에 대해 생성된 URL을 수정할 수 없습니다.

도메인 생성을 완료하는 데 몇 분 정도 걸릴 수 있습니다. 다음 단계로 진행하기 전에 도메인의 상태가 **사용 가능**이 될 때까지 기다립니다.

## 2단계 - 게시 프로젝트 생성
<a name="create-publishing-project-gs-rs"></a>

다음 섹션에서는 이 워크플로에서 게시 프로젝트를 생성하는 단계를 설명합니다.

1. 1단계를 완료하면 데이터 포털 URL을 사용하여 Amazon DataZone 데이터 포털로 이동하고 SSO(Single Sign-On) 또는 AWS IAM 자격 증명을 사용하여 로그인합니다.

1. **프로젝트 생성**을 선택하고 프로젝트 이름을 지정합니다. 예를 들어, 이 워크플로의 경우 이름을 **SalesDataPublishingProject**로 지정한 다음 나머지 필드를 변경하지 않은 상태로 두고 **생성**을 선택합니다.

## 3단계 - 환경 생성
<a name="create-environment-gs-rs"></a>

다음 섹션에서는 이 워크플로에서 환경을 생성하는 단계를 설명합니다.

1. 2단계를 완료한 후 Amazon DataZone 데이터 포털에서 이전 단계에서 생성한 `SalesDataPublishingProject` 프로젝트를 선택한 다음 **환경** 탭을 선택하고 **환경 생성**을 선택합니다.

1. **환경 생성** 페이지에서 다음을 지정한 다음 **환경 생성**을 선택합니다.
   + **이름** - 환경의 이름을 지정합니다. 이 연습에서는 `Default data warehouse environment`라고 부를 수 있습니다.
   + **설명** - 환경에 대한 설명을 지정합니다.
   + **환경 프로파일** - **DataWarehouseProfile** 환경 프로파일을 선택합니다.
   + 데이터가 저장되는 Amazon Redshift 클러스터의 Amazon Redshift 클러스터 이름, 데이터베이스 이름 및 보안 암호 ARN을 입력합니다.
**참고**  
 AWS Secrets Manager의 보안 암호에 다음 태그(키/값)가 포함되어 있는지 확인합니다.  
Amazon Redshift 클러스터의 경우 - datazone.rs.cluster: <cluster\$1name:database name>  
Amazon Redshift Serverless 작업 그룹의 경우 - datazone.rs.workgroup: <workgroup\$1name:database\$1name>
AmazonDataZoneProject: <projectID> 
AmazonDataZoneDomain: <domainID>
자세한 내용은 [AWS Secrets Manager에 데이터베이스 자격 증명 저장](https://docs.aws.amazon.com//redshift/latest/mgmt/data-api-access.html#data-api-secrets)을 참조하세요.  
 AWS Secrets Manager에 제공하는 데이터베이스 사용자에게는 슈퍼 사용자 권한이 있어야 합니다.

## 4단계 - 게시를 위한 데이터 생성
<a name="produce-data-for-publishing-gs-rs"></a>

다음 섹션에서는 이 워크플로에 게시할 데이터를 생성하는 단계를 설명합니다.

1. 3단계를 완료하면 Amazon DataZone 데이터 포털에서 `SalesDataPublishingProject` 프로젝트를 선택한 다음 오른쪽 패널의 **분석 도구** 아래에서 **Amazon Redshift**를 선택합니다. 이렇게 하면 인증에 대한 프로젝트의 자격 증명을 사용하여 Amazon Redshift Query Editor가 열립니다.

1. 이 연습에서는 **테이블을 셀렉트로 생성**(CTAS) 쿼리 스크립트를 사용하여 Amazon DataZone에 게시할 새 테이블을 생성합니다. 쿼리 편집기에서 이 CTAS 스크립트를 실행하여 게시하고 검색 및 구독에 사용할 수 있는 `mkt_sls_table` 테이블을 생성합니다.

   ```
   CREATE TABLE mkt_sls_table AS
   SELECT 146776932 AS ord_num, 23 AS sales_qty_sld, 23.4 AS wholesale_cost, 45.0 as lst_pr, 43.0 as sell_pr, 2.0 as disnt, 12 as ship_mode,13 as warehouse_id, 23 as item_id, 34 as ctlg_page, 232 as ship_cust_id, 4556 as bill_cust_id
   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
   ```

   **mkt\$1sls\$1table** 테이블이 성공적으로 생성되었는지 확인합니다. 이제 Amazon DataZone 카탈로그에 게시할 수 있는 데이터 자산이 있습니다.

## 5단계 - Amazon Redshift에서 메타데이터 수집
<a name="gather-metadata-from-glue-gs-rs"></a>

다음 섹션에서는 Amazon Redshift에서 메타데이터를 수집하는 단계를 설명합니다.

1. 4단계를 완료하면 Amazon DataZone 데이터 포털에서 `SalesDataPublishingProject` 프로젝트를 선택한 다음 **데이터** 탭을 선택하고 **데이터 소스**를 선택합니다.

1. 환경 생성 프로세스의 일부로 생성된 소스를 선택합니다.

1. **작업** 드롭다운 메뉴 옆의 **실행**을 선택한 다음 새로 고침 버튼을 선택합니다. 데이터 소스 실행이 완료되면 자산이 Amazon DataZone 인벤토리에 추가됩니다.

## 6단계 - 데이터 자산 큐레이팅 및 게시
<a name="curate-data-asset-gs-rs"></a>

다음 섹션에서는 이 워크플로에서 데이터 자산을 큐레이팅하고 게시하는 단계를 설명합니다.

1. 5단계를 완료하면 Amazon DataZone 데이터 포털에서 `SalesDataPublishingProject` 프로젝트를 선택한 다음 **데이터** 탭을 선택하고, **인벤토리 데이터**를 선택하고, `mkt_sls_table` 테이블을 찾습니다.

1. `mkt_sls_table` 자산의 세부 정보 페이지를 열어 자동으로 생성된 비즈니스 이름을 확인합니다. 자산 및 열에 대해 자동 생성된 이름을 보려면 **자동 생성된 메타데이터** 아이콘을 선택합니다. 각 이름을 개별적으로 수락하거나 거부하거나 **모두 수락**을 선택하여 생성된 이름을 적용할 수 있습니다. 선택적으로 사용 가능한 메타데이터 양식을 자산에 추가하고 용어집 용어를 선택하여 데이터를 분류할 수도 있습니다.

1. **게시**를 선택하여 `mkt_sls_table` 자산을 게시합니다.

## 7단계 - 데이터 분석을 위한 프로젝트 생성
<a name="create-project-for-data-analysis-gs-rs"></a>

다음 섹션에서는 이 워크플로에서 데이터 분석을 위한 프로젝트를 생성하는 단계를 설명합니다.

1. 6단계를 완료하면 Amazon DataZone 데이터 포털에서 **프로젝트 생성**을 선택합니다.

1. **프로젝트 생성** 페이지에서 프로젝트 이름을 지정합니다. 예를 들어 이 워크플로의 경우 이름을 **MarketingDataAnalysisProject**를 지정한 다음 나머지 필드를 변경하지 않고 그대로 둔 다음 **생성**을 선택합니다.

## 8단계 - 데이터 분석을 위한 환경 생성
<a name="create-environment-gs2-rs"></a>

다음 섹션에서는 이 워크플로에서 데이터 분석을 위한 환경을 생성하는 단계를 설명합니다.

1. 7단계를 완료한 후 Amazon DataZone 데이터 포털에서 이전 단계에서 생성한 `MarketingDataAnalysisProject` 프로젝트를 선택한 다음 **환경** 탭을 선택하고 **환경 추가**를 선택합니다.

1. **환경 생성** 페이지에서 다음을 지정한 다음 **환경 생성**을 선택합니다.
   + **이름** - 환경의 이름을 지정합니다. 이 연습에서는 `Default data warehouse environment`라고 부를 수 있습니다.
   + **설명** - 환경에 대한 설명을 지정합니다.
   + **환경 프로파일** - **DataWarehouseProfile** 환경 프로파일을 선택합니다.
   + 데이터가 저장되는 Amazon Redshift 클러스터의 Amazon Redshift 클러스터 이름, 데이터베이스 이름 및 보안 암호 ARN을 입력합니다.
**참고**  
 AWS Secrets Manager의 보안 암호에 다음 태그(키/값)가 포함되어 있는지 확인합니다.  
Amazon Redshift 클러스터의 경우 - datazone.rs.cluster: <cluster\$1name:database name>  
Amazon Redshift Serverless 작업 그룹의 경우 - datazone.rs.workgroup: <workgroup\$1name:database\$1name>
AmazonDataZoneProject: <projectID> 
AmazonDataZoneDomain: <domainID>
자세한 내용은 [AWS Secrets Manager에 데이터베이스 자격 증명 저장](https://docs.aws.amazon.com//redshift/latest/mgmt/data-api-access.html#data-api-secrets)을 참조하세요.  
 AWS Secrets Manager에 제공하는 데이터베이스 사용자에게는 슈퍼 사용자 권한이 있어야 합니다.
   + 이 연습에서는 나머지 필드를 변경하지 않고 유지합니다.

## 9단계 - 데이터 카탈로그 검색 및 데이터 구독
<a name="search-catalog-subscribe-gs-rs"></a>

다음 섹션에서는 데이터 카탈로그를 검색하고 데이터를 구독하는 단계를 설명합니다.

1. 8단계를 완료하면 Amazon DataZone 데이터 포털에서 데이터 포털의 **검색** 표시줄에서 키워드(예: '카탈로그' 또는 '판매')를 사용하여 데이터 자산을 검색합니다.

   필요한 경우 필터 또는 정렬을 적용하고 제품 판매 데이터 자산을 찾으면 이를 선택하여 자산의 세부 정보 페이지를 열 수 있습니다.

1. 제품 판매 데이터 자산의 세부 정보 페이지에서 **구독**을 선택합니다.

1. 대화 상자에서 드롭다운에서 소비자 프로젝트를 선택하고 액세스 요청 이유를 입력한 다음 **구독**을 선택합니다.

## 10단계 - 구독 요청 승인
<a name="approve-subscription-request-gs-rs"></a>

다음 섹션에서는 이 워크플로에서 구독 요청을 승인하는 단계를 설명합니다.

1. 9단계를 완료한 후 Amazon DataZone 데이터 포털에서 자산을 게시한 **SalesDataPublishingProject** 프로젝트를 선택합니다.

1. **데이터** 탭을 선택한 다음 **게시된 데이터**를 선택한 다음 **들어오는 요청**을 선택합니다.

1. 요청 보기 링크를 선택한 다음 **승인**을 선택합니다.

## 11단계 - Amazon Redshift에서 쿼리를 빌드하고 데이터 분석
<a name="analyze-data-gs-rs"></a>

이제 Amazon DataZone 카탈로그에 자산을 성공적으로 게시하고 구독했으므로 분석할 수 있습니다.

1. Amazon DataZone 데이터 포털의 오른쪽 패널에서 Amazon Redshift 링크를 클릭합니다. 이렇게 하면 인증에 대한 프로젝트의 자격 증명을 사용하여 Amazon Redshift Query Editor가 열립니다.

1. 이제 구독한 테이블에서 쿼리(문 선택)를 실행할 수 있습니다. 테이블(세 개의 수직 점 옵션)을 클릭하고 미리 보기를 선택하여 편집기 화면에서 문을 선택할 수 있습니다. 쿼리를 실행하여 결과를 확인합니다.

# 샘플 스크립트를 사용한 Amazon DataZone 빠른 시작
<a name="quickstart-apis"></a>

관리 포털 또는 Amazon DataZone 데이터 포털을 통해 Amazon DataZone에 액세스하거나 서비스에 직접 HTTPS 요청을 발급할 수 있는 Amazon DataZone HTTPS API를 사용하여 프로그래밍 방식으로 액세스할 수 있습니다. 이 섹션에는 다음과 같은 일반적인 작업을 완료하는 데 사용할 수 있는 Amazon DataZone API를 간접적으로 호출하는 샘플 스크립트가 포함되어 있습니다.

**Topics**
+ [Amazon DataZone 도메인 및 데이터 포털 생성](#create-domain-gs-glue-api)
+ [게시 프로젝트 생성](#create-publishing-project-gs-glue-api)
+ [환경 프로파일 생성](#create-environment-profile-gs-glue-api)
+ [환경 생성](#create-environment-gs-glue-api)
+ [AWS Glue에서 메타데이터 수집](#gather-metadata-from-glue-gs-glue-api)
+ [데이터 자산 큐레이팅 및 게시](#curate-data-asset-gs-glue-api)
+ [데이터 카탈로그 검색 및 데이터 구독](#search-catalog-subscribe-gs-glue-api)
+ [데이터 카탈로그에서 자산 검색](#search-catalog-subscribe-gs-glue-api)
+ [기타 유용한 샘플 스크립트](#other-useful-scripts-api)

## Amazon DataZone 도메인 및 데이터 포털 생성
<a name="create-domain-gs-glue-api"></a>

다음 샘플 스크립트를 사용하여 Amazon DataZone 도메인을 생성할 수 있습니다. Amazon DataZone 도메인에 대한 자세한 내용은 [Amazon DataZone 용어 및 개념](datazone-concepts.md) 섹션을 참조하세요.

```
import sys
import boto3

// Initialize datazone client
region = 'us-east-1'
dzclient = boto3.client(service_name='datazone', region_name='us-east-1')

// Create DataZone domain
def create_domain(name):
    return dzclient.create_domain(
        name = name,
        description = "this is a description",
        domainExecutionRole = "arn:aws:iam::<account>:role/AmazonDataZoneDomainExecutionRole",
    )
```

## 게시 프로젝트 생성
<a name="create-publishing-project-gs-glue-api"></a>

다음 샘플 스크립트를 사용하여 Amazon DataZone에서 게시 프로젝트를 생성할 수 있습니다.

```
// Create Project
def create_project(domainId):
    return dzclient.create_project(
        domainIdentifier = domainId,
        name = "sample-project"
    )
```

## 환경 프로파일 생성
<a name="create-environment-profile-gs-glue-api"></a>

다음 샘플 스크립트를 사용하여 Amazon DataZone에서 환경 프로파일을 생성할 수 있습니다.

이 샘플 페이로드는 `CreateEnvironmentProfile` API가 간접적으로 호출될 때 사용됩니다.

```
Sample Payload
{
    "Content":{
        "project_name": "Admin_project",
        "domain_name": "Drug-Research-and-Development",
        "blueprint_account_region": [
            {
                "blueprint_name": "DefaultDataLake",
                "account_id": ["066535990535",
                "413878397724",
                "676266385322", 
                "747721550195", 
                "755347404384"
                ],
                "region": ["us-west-2", "us-east-1"]
            },
            {
                "blueprint_name": "DefaultDataWarehouse",
                "account_id": ["066535990535",
                "413878397724",
                "676266385322", 
                "747721550195", 
                "755347404384"
                ],
                "region":["us-west-2", "us-east-1"]
            }
        ]
    }
}
```

이 샘플 스크립트는 `CreateEnvironmentProfile` API를 간접적으로 호출합니다.

```
def create_environment_profile(domain_id, project_id, env_blueprints)    
        try:
            response = dz.list_environment_blueprints(
                domainIdentifier=domain_id,
                managed=True
            )
            env_blueprints = response.get("items")
            env_blueprints_map = {}
            for i in env_blueprints:
                env_blueprints_map[i["name"]] = i['id']
            
            print("Environment Blueprint map", env_blueprints_map)
            for i in blueprint_account_region:
                print(i)
                for j in i["account_id"]:
                    for k in i["region"]:
                        print("The env blueprint name is", i['blueprint_name'])
                        dz.create_environment_profile(
                            description='This is a test environment profile created via lambda function',
                            domainIdentifier=domain_id,
                            awsAccountId=j,
                            awsAccountRegion=k,
                            environmentBlueprintIdentifier=env_blueprints_map.get(i["blueprint_name"]),
                            name=i["blueprint_name"] + j + k + "_profile",
                            projectIdentifier=project_id
                        )
        except Exception as e:
            print("Failed to created Environment Profile")
            raise e
```

`CreateEnvironmentProfile` API가 간접적으로 호출될 때 샘플 출력 페이로드입니다.

```
{
    "Content":{
        "project_name": "Admin_project",
        "domain_name": "Drug-Research-and-Development",
        "blueprint_account_region": [
            {
                "blueprint_name": "DefaultDataWarehouse",
                "account_id": ["111111111111"],
                "region":["us-west-2"],
                "user_parameters":[
                    {
                        "name": "dataAccessSecretsArn",
                        "value": ""
                    }
                ] 
            }
        ]
    }
}
```

## 환경 생성
<a name="create-environment-gs-glue-api"></a>

다음 샘플 스크립트를 사용하여 Amazon DataZone에서 환경을 생성할 수 있습니다.

```
def create_environment(domain_id, project_id,blueprint_account_region ):
         try:
            #refer to get_domain_id and get_project_id for fetching ids using names.
            sts_client = boto3.client("sts")
            # Get the current account ID
            account_id = sts_client.get_caller_identity()["Account"]
            print("Fetching environment profile ids")
            env_profile_map = get_env_profile_map(domain_id, project_id)

            for i in blueprint_account_region:
                for j in i["account_id"]:
                    for k in i["region"]:
                        print(" env blueprint name", i['blueprint_name'])
                        profile_name = i["blueprint_name"] + j + k + "_profile"
                        env_name = i["blueprint_name"] + j + k + "_env"
                        description = f'This is environment is created for {profile_name}, Account {account_id} and region {i["region"]}'
                        try:
                            dz.create_environment(
                                description=description,
                                domainIdentifier=domain_id,
                                environmentProfileIdentifier=env_profile_map.get(profile_name),
                                name=env_name,
                                projectIdentifier=project_id
                            )
                            print(f"Environment created - {env_name}")
                        except:
                            dz.create_environment(
                                description=description,
                                domainIdentifier=domain_id,
                                environmentProfileIdentifier=env_profile_map.get(profile_name),
                                name=env_name,
                                projectIdentifier=project_id,
                                userParameters= i["user_parameters"] 
                            )
                            print(f"Environment created - {env_name}")
        except Exception as e:
            print("Failed to created Environment")
            raise e
```

## AWS Glue에서 메타데이터 수집
<a name="gather-metadata-from-glue-gs-glue-api"></a>

이 샘플 스크립트를 사용하여 AWS Glue에서 메타데이터를 수집할 수 있습니다. 이 스크립트는 표준 일정에 따라 실행됩니다. 샘플 스크립트에서 파라미터를 검색하여 전역으로 만들 수 있습니다. 표준 함수를 사용하여 프로젝트, 환경 및 도메인 ID를 가져옵니다. AWS Glue 데이터 소스는 스크립트의 cron 섹션에서 업데이트할 수 있는 표준 시간에 생성되고 실행됩니다.

```
def crcreate_data_source(domain_id, project_id,data_source_name)
        print("Creating Data Source")
        data_source_creation = dz.create_data_source(
            # Define data source : Customize the data source to which you'd like to connect
            # define the name of the Data source to create, example: name ='TestGlueDataSource'
            name=data_source_name,
            # give a description for the datasource (optional), example: description='This is a dorra test for creation on DZ datasources'
            description=data_source_description,
            # insert the domain identifier corresponding to the domain to which the datasource will belong, example: domainIdentifier= 'dzd_6f3gst5jjmrrmv'
            domainIdentifier=domain_id,
            # give environment identifier , example: environmentIdentifier= '3weyt6hhn8qcvb'
            environmentIdentifier=environment_id,
            # give corresponding project identifier, example: projectIdentifier= '6tl4csoyrg16ef',
            projectIdentifier=project_id,
            enableSetting="ENABLED",
            # publishOnImport used to select whether assets are added to the inventory and/or discovery catalog .
            # publishOnImport = True : Assets will be added to project's inventory as well as published to the discovery catalog
            # publishOnImport = False : Assets will only be added to project's inventory.
            # You can later curate the metadata of the assets and choose subscription terms to publish them from the inventory to the discovery catalog.
            publishOnImport=False,
            # Automated business name generation : Use AI to automatically generate metadata for assets as they are published or updated by this data source run.
            # Automatically generated metadata can be be approved, rejected, or edited by data publishers.
            # Automatically generated metadata is badged with a small icon next to the corresponding metadata field.
            recommendation={"enableBusinessNameGeneration": True},
            type="GLUE",
            configuration={
                "glueRunConfiguration": {
                    "dataAccessRole": "arn:aws:iam::"
                    + account_id
                    + ":role/service-role/AmazonDataZoneGlueAccess-"
                    + current_region
                    + "-"
                    + domain_id
                    + "",
                    "relationalFilterConfigurations": [
                        {
                            #
                            "databaseName": glue_database_name,
                            "filterExpressions": [
                                {"expression": "*", "type": "INCLUDE"},
                            ],
                            #    "schemaName": "TestSchemaName",
                        },
                    ],
                },
            },
            # Add metadata forms to the data source (OPTIONAL).
            # Metadata forms will be automatically applied to any assets that are created by the data source.
            # assetFormsInput=[
            #     {
            #         "content": "string",
            #         "formName": "string",
            #         "typeIdentifier": "string",
            #         "typeRevision": "string",
            #     },
            # ],
            schedule={
                "schedule": "cron(5 20 * * ? *)",
                "timezone": "UTC",
            },
        )
        # This is a suggested syntax to return values
        #        return_values["data_source_creation"] = data_source_creation["items"]
        print("Data Source Created")


//This is the sample response payload after the CreateDataSource API is invoked:

{
    "Content":{
        "project_name": "Admin",
        "domain_name": "Drug-Research-and-Development",
        "env_name": "GlueEnvironment",
        "glue_database_name": "test",
        "data_source_name" : "test",
        "data_source_description" : "This is a test data source"
    }
}
```

## 데이터 자산 큐레이팅 및 게시
<a name="curate-data-asset-gs-glue-api"></a>

다음 샘플 스크립트를 사용하여 Amazon DataZone에서 데이터 자산을 큐레이션하고 게시할 수 있습니다.

다음 스크립트를 사용하여 사용자 지정 양식 유형을 생성할 수 있습니다.

```
 
def create_form_type(domainId, projectId):
    return dzclient.create_form_type(
        domainIdentifier = domainId,
        name = "customForm",
        model = {
            "smithy": "structure customForm { simple: String }"
        },
        owningProjectIdentifier = projectId,
        status = "ENABLED"
    )
```

다음 샘플 스크립트를 사용하여 사용자 지정 자산 유형을 생성할 수 있습니다.

```
def create_custom_asset_type(domainId, projectId):
    return dzclient.create_asset_type(
        domainIdentifier = domainId,
        name = "userCustomAssetType",
        formsInput = {
            "Model": {
                "typeIdentifier": "customForm",
                "typeRevision": "1",
                "required": False
            }
        },
        owningProjectIdentifier = projectId,
    )
```

다음 샘플 스크립트를 사용하여 사용자 지정 자산을 생성할 수 있습니다.

```
def create_custom_asset(domainId, projectId):
    return dzclient.create_asset(
        domainIdentifier = domainId,
        name = 'custom asset',
        description = "custom asset",
        owningProjectIdentifier = projectId,
        typeIdentifier = "userCustomAssetType",
        formsInput = [
            {
                "formName": "UserCustomForm",
                "typeIdentifier": "customForm",
                "content": "{\"simple\":\"sample-catalogId\"}"
            }
        ]
    )
```

다음 샘플 스크립트를 사용하여 용어집을 생성할 수 있습니다.

```
def create_glossary(domainId, projectId):
    return dzclient.create_glossary(
        domainIdentifier = domainId,
        name = "test7",
        description = "this is a test glossary",
        owningProjectIdentifier = projectId
    )
```

다음 샘플 스크립트를 사용하여 용어집 용어를 생성할 수 있습니다.

```
def create_glossary_term(domainId, glossaryId):
    return dzclient.create_glossary_term(
        domainIdentifier = domainId,
        name = "soccer",
        shortDescription = "this is a test glossary",
        glossaryIdentifier = glossaryId,
    )
```

다음 샘플 스크립트를 사용하여 시스템 정의 자산 유형을 사용하여 자산을 생성할 수 있습니다.

```
def create_asset(domainId, projectId):
    return dzclient.create_asset(
        domainIdentifier = domainId,
        name = 'sample asset name',
        description = "this is a glue table asset",
        owningProjectIdentifier = projectId,
        typeIdentifier = "amazon.datazone.GlueTableAssetType",
        formsInput = [
            {
                "formName": "GlueTableForm",
                "content": "{\"catalogId\":\"sample-catalogId\",\"columns\":[{\"columnDescription\":\"sample-columnDescription\",\"columnName\":\"sample-columnName\",\"dataType\":\"sample-dataType\",\"lakeFormationTags\":{\"sample-key1\":\"sample-value1\",\"sample-key2\":\"sample-value2\"}}],\"compressionType\":\"sample-compressionType\",\"lakeFormationDetails\":{\"lakeFormationManagedTable\":false,\"lakeFormationTags\":{\"sample-key1\":\"sample-value1\",\"sample-key2\":\"sample-value2\"}},\"primaryKeys\":[\"sample-Key1\",\"sample-Key2\"],\"region\":\"us-east-1\",\"sortKeys\":[\"sample-sortKey1\"],\"sourceClassification\":\"sample-sourceClassification\",\"sourceLocation\":\"sample-sourceLocation\",\"tableArn\":\"sample-tableArn\",\"tableDescription\":\"sample-tableDescription\",\"tableName\":\"sample-tableName\"}"
            }
        ]
    )
```

다음 샘플 스크립트를 사용하여 자산 개정을 생성하고 용어집 용어를 연결할 수 있습니다.

```
def create_asset_revision(domainId, assetId):
    return dzclient.create_asset_revision(
        domainIdentifier = domainId,
        identifier = assetId,
        name = 'glue table asset 7',
        description = "glue table asset description update",
        formsInput = [
            {
                "formName": "GlueTableForm",
                "content": "{\"catalogId\":\"sample-catalogId\",\"columns\":[{\"columnDescription\":\"sample-columnDescription\",\"columnName\":\"sample-columnName\",\"dataType\":\"sample-dataType\",\"lakeFormationTags\":{\"sample-key1\":\"sample-value1\",\"sample-key2\":\"sample-value2\"}}],\"compressionType\":\"sample-compressionType\",\"lakeFormationDetails\":{\"lakeFormationManagedTable\":false,\"lakeFormationTags\":{\"sample-key1\":\"sample-value1\",\"sample-key2\":\"sample-value2\"}},\"primaryKeys\":[\"sample-Key1\",\"sample-Key2\"],\"region\":\"us-east-1\",\"sortKeys\":[\"sample-sortKey1\"],\"sourceClassification\":\"sample-sourceClassification\",\"sourceLocation\":\"sample-sourceLocation\",\"tableArn\":\"sample-tableArn\",\"tableDescription\":\"sample-tableDescription\",\"tableName\":\"sample-tableName\"}"
            }
        ],
        glossaryTerms = ["<glossaryTermId:>"]
    )
```

다음 샘플 스크립트를 사용하여 자산을 게시할 수 있습니다.

```
def publish_asset(domainId, assetId):
    return dzclient.create_listing_change_set(
        domainIdentifier = domainId,
        entityIdentifier = assetId,
        entityType = "ASSET",
        action = "PUBLISH",
    )
```

## 데이터 카탈로그 검색 및 데이터 구독
<a name="search-catalog-subscribe-gs-glue-api"></a>

다음 샘플 스크립트를 사용하여 데이터 카탈로그를 검색하고 데이터를 구독할 수 있습니다.

```
def search_asset(domainId, projectId, text):
    return dzclient.search(
        domainIdentifier = domainId,
        owningProjectIdentifier = projectId,
        searchScope = "ASSET",
        searchText = text,
    )
```

다음 샘플 스크립트를 사용하여 자산의 목록 ID를 가져올 수 있습니다.

```
def search_listings(domainId, assetName, assetId):
    listings = dzclient.search_listings(
        domainIdentifier=domainId,
        searchText=assetName,
        additionalAttributes=["FORMS"]
    )
    
    assetListing = None
    for listing in listings['items']:
        if listing['assetListing']['entityId'] == assetId: 
            assetListing = listing
    
    return listing['assetListing']['listingId']
```

다음 샘플 스크립트를 사용하여 목록 ID를 사용하여 구독 요청을 생성할 수 있습니다.

```
create_subscription_response = def create_subscription_request(domainId, projectId, listingId):
    return dzclient.create_subscription_request(
        subscribedPrincipals=[{
            "project": {
                "identifier": projectId
            }
        }],
        subscribedListings=[{
            "identifier": listingId
        }],
        requestReason="Give request reason here."
    )
```

위의 `create_subscription_response`를 사용하여 ` subscription_request_id`를 가져온 다음 다음 다음 샘플 스크립트를 사용하여 구독을 수락/승인합니다.

```
subscription_request_id = create_subscription_response["id"]

def accept_subscription_request(domainId, subscriptionRequestId): 
    return dzclient.accept_subscription_request(
        domainIdentifier=domainId,
        identifier=subscriptionRequestId
    )
```

## 데이터 카탈로그에서 자산 검색
<a name="search-catalog-subscribe-gs-glue-api"></a>

자유 텍스트 검색을 사용하는 다음 샘플 스크립트를 사용하여 Amazon DataZone 카탈로그에서 게시된 데이터 자산(목록)을 검색할 수 있습니다.
+ 다음 예제에서는 도메인에서 자유 텍스트 키워드 검색을 수행하고 제공된 키워드 'credit'과 일치하는 모든 목록을 반환합니다.

  ```
  aws datazone search-listings \
    --domain-identifier dzd_c1s7uxe71prrtz \
    --search-text "credit"
  ```
+ 여러 키워드를 결합하여 검색 범위를 더욱 좁힐 수도 있습니다. 예를 들어 멕시코에서 판매와 관련된 데이터가 있는 모든 게시된 데이터 자산(목록)을 찾는 경우 두 개의 키워드 'Mexico'와 'sales'를 사용하여 쿼리를 공식화할 수 있습니다.

  ```
              aws datazone search-listings \
    --domain-identifier dzd_c1s7uxe71prrtz \
    --search-text "mexico sales"
  ```

필터를 사용하여 목록을 검색할 수도 있습니다. SearchListings API의 `filters` 파라미터를 사용하면 도메인에서 필터링된 결과를 검색할 수 있습니다. API는 여러 기본 필터를 지원하며 두 개 이상의 필터를 결합하고 해당 필터에서 AND/OR 작업을 수행할 수도 있습니다. 필터 절에는 두 가지 파라미터인 속성과 값이 있습니다. 지원되는 기본 필터 속성은 `typeName`, `owningProjectId` 및 `glossaryTerms`입니다.
+ 다음 예제에서는 목록이 Redshift Table의 유형인 `assetType` 필터를 사용하여 지정된 도메인의 모든 목록을 검색합니다.

  ```
              aws datazone search-listings \
  --domain-identifier dzd_c1s7uxe71prrtz \
  --filters '{"or":[{"filter":{"attribute":"typeName","value":"RedshiftTableAssetType"}} ]}'
  ```
+ AND/OR 연산자를 사용하여 다중 필터를 결합할 수 있습니다. 다음 예제에서는 `typeName` 및 `project` 필터를 결합합니다.

  ```
              aws datazone search-listings \
  --domain-identifier dzd_c1s7uxe71prrtz \
  --filters '{"or":[{"filter":{"attribute":"typeName","value":"RedshiftTableAssetType"}},  {"filter":{"attribute":"owningProjectId","value":"cwrrjch7f5kppj"}} ]}'
  ```
+ 필터와 함께 자유 텍스트 검색을 결합하여 정확한 결과를 찾고 다음 예제와 같이 목록의 생성/최종 업데이트 시간별로 추가로 정렬할 수도 있습니다.

  ```
              aws datazone search-listings \
  --domain-identifier dzd_c1s7uxe71prrtz \
  --search-text "finance sales" \
  --filters '{"or":[{"filter":{"attribute":"typeName","value":"GlueTableViewType"}} ]}' \
  --sort '{"attribute": "UPDATED_AT", "order":"ASCENDING"}'
  ```

## 기타 유용한 샘플 스크립트
<a name="other-useful-scripts-api"></a>

다음 샘플 스크립트를 사용하여 Amazon DataZone에서 데이터를 작업할 때 다양한 작업을 완료할 수 있습니다.

다음 샘플 스크립트를 사용하여 기존 Amazon DataZone 도메인을 나열합니다.

```
def list_domains():
    datazone = boto3.client('datazone')
    response = datazone.list_domains(status='AVAILABLE')
    [print("%12s | %16s | %12s | %52s" % (item['id'], item['name'], item['managedAccountId'], item['portalUrl'])) for item in response['items']]
    return
```

다음 샘플 스크립트를 사용하여 기존 Amazon DataZone 프로젝트를 나열합니다.

```
def list_projects(domain_id):
    datazone = boto3.client('datazone')
    response = datazone.list_projects(domainIdentifier=domain_id)
    [print("%12s | %16s " % (item['id'], item['name'])) for item in response['items']]
    return
```

다음 샘플 스크립트를 사용하여 기존 Amazon DataZone 메타데이터 양식을 나열합니다.

```
def list_metadata_forms(domain_id):
    datazone = boto3.client('datazone')
    response = datazone.search_types(domainIdentifier=domain_id, 
        managed=False,
        searchScope='FORM_TYPE')
    [print("%16s | %16s | %3s | %8s" % (item['formTypeItem']['name'], item['formTypeItem']['owningProjectId'],item['formTypeItem']['revision'], item['formTypeItem']['status'])) for item in response['items']]
    return
```