AWS CloudFormation으로 데이터 공유 관리 - Amazon Redshift

AWS CloudFormation으로 데이터 공유 관리

AWS 리소스를 프로비저닝하는 ㅂAWS CloudFormation스택을 사용하여 데이터 공유 설정을 자동화할 수 있습니다. 다음에 설명하는 CloudFormation 스택은 동일한 AWS 계정에 있는 두 Amazon Redshift 클러스터 간의 데이터 공유를 설정합니다. 따라서 리소스 프로비저닝을 위해 SQL 문을 실행하지 않고도 데이터 공유를 시작할 수 있습니다.

스택은 사용자가 지정하는 클러스터에 datashare를 생성합니다. datashare에는 테이블과 샘플 읽기 전용 데이터가 포함됩니다. 이 데이터는 다른 Amazon Redshift 클러스터에서 읽을 수 있습니다.

CloudFormation을 사용하지 않고 SQL 문을 실행하여 datashare를 설정하고 권한을 부여하여 AWS 계정에서 데이터 공유를 시작하려는 경우 AWS 계정 내 데이터에 대한 읽기 액세스 공유 섹션을 참조하세요.

데이터 공유 CloudFormation 스택을 실행하기 전에 IAM 역할과 Lambda 함수를 생성할 권한이 있는 사용자로 로그인해야 합니다. 또한 동일한 계정에 2개의 Amazon Redshift 클러스터가 필요합니다. 하나는 샘플 데이터를 공유하는 데 사용하는 생산자이고, 다른 하나는 샘플 데이터를 읽는 데 사용하는 소비자입니다. 이러한 클러스터의 기본 요구 사항은 각각 RA3 노드를 사용한다는 것입니다. 추가적인 필수 사항은 Amazon Redshift에서 데이터 공유를 사용할 때의 고려 사항 섹션을 참조하세요.

Amazon Redshift 클러스터 설정 시작하기에 관한 자세한 내용은 Amazon Redshift 프로비저닝 클러스터를 참조하세요. CloudFormation으로 설정 자동화에 대한 자세한 내용은 AWS CloudFormation이란 무엇인가요?를 참조하세요.

중요

CloudFormation 스택을 시작하기 전에 동일한 계정에 두 개의 Amazon Redshift 클러스터가 있고 클러스터가 RA3 노드를 사용하는지 확인합니다. 각 클러스터에 데이터베이스와 슈퍼유저가 있는지 확인합니다. 자세한 내용은 데이터베이스 생성superuser 단원을 참조하세요.

Amazon Redshift 데이터 공유를 위한 CloudFormation 스택을 시작하려면
  1. CFN 스택 시작(Launch CFN stack)을 클릭하여 AWS Management Console에서 CloudFormation 서비스로 이동합니다.

    메시지가 나타나면 로그인합니다.

    Amazon S3에 저장된 CloudFormation 템플릿 파일을 참조하여 스택 생성 프로세스가 시작됩니다. CloudFormation 템플릿은 스택을 구성하는 AWS 리소스를 선언하는 JSON 형식의 텍스트 파일입니다. CloudFormation 템플릿에 대한 자세한 내용은 템플릿 기본 사항 알아보기를 참조하세요.

  2. 다음(Next)을 선택하여 스택 세부 정보를 입력합니다.

  3. 파라미터(Parameters)에서 각 클러스터에 대해 다음을 입력합니다.

    • Amazon Redshift 클러스터 이름(예: ra3-consumer-cluster)

    • 데이터베이스 이름(예: dev)

    • 데이터베이스 사용자의 이름(예: consumeruser)

    스택은 여러 데이터베이스 객체를 생성하므로 테스트 클러스터를 사용하는 것이 좋습니다.

    Next(다음)를 선택합니다.

  4. 스택 옵션이 나타납니다.

    다음(Next)을 선택하여 기본 설정을 적용합니다.

  5. 기능(Capabilities)에서 AWS CloudFormation 에서 IAM 리소스를 생성할 수 있음을 승인합니다(I acknowledge that AWS CloudFormation might create IAM resources)를 선택합니다.

  6. 스택 생성을 선택합니다.

CloudFormation에서 템플릿을 사용하여 Amazon Redshift 스택을 구축하고 myproducer_share라는 datashare를 생성하는 데 10분 정도 걸립니다. 스택은 스택 세부 정보에 지정된 데이터베이스에 datashare를 생성합니다. 해당 데이터베이스의 객체만 공유할 수 있습니다.

스택이 생성되는 동안 오류가 발생하면 다음을 수행합니다.

  • 각 Redshift 클러스터에 대해 올바른 클러스터 이름, 데이터베이스 이름 및 데이터베이스 사용자 이름을 입력했는지 확인합니다.

  • 클러스터에 RA3 노드가 있는지 확인합니다.

  • IAM 역할 및 Lambda 함수를 만들 수 있는 권한이 있는 사용자로 로그인했는지 확인하세요. IAM 역할 생성에 대한 자세한 내용은 IAM 역할 생성을 참조하세요. Λ 함수 생성 정책에 대한 자세한 내용은 함수 개발을 참조하세요.

생성한 datashare 쿼리

다음 절차를 사용하려면 설명된 각 클러스터에서 쿼리를 실행하는 데 필요한 권한이 있는지 확인해야 합니다.

datashare를 쿼리하려면
  1. Amazon Redshift 쿼리 에디터 v2와 같은 클라이언트 도구를 사용하여 CloudFormation 스택이 생성될 때 입력한 데이터베이스의 생산자 클러스터에 연결합니다.

  2. datashare를 쿼리합니다.

    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 | +------------------+-------------+-----------------+-------------------+------------+------------+---------------------+-----------+------------------+--------------------------------------+

    앞의 명령은 스택에 의해 생성된 datashare의 이름인 myproducer_share를 반환합니다. 또한 datashare와 연결된 데이터베이스의 이름인 myconsumer_db를 반환합니다.

    이후 단계에서 사용할 생산자 네임스페이스 식별자를 복사합니다.

  3. datashare의 객체를 설명합니다.

    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 | +------------------+--------------------------------------+------------+------------------+-------------+-------------------------------------+-------------+

    datashare를 설명하면 테이블 및 보기에 대한 속성이 반환됩니다. 스택은 샘플 데이터가 있는 테이블과 보기를 생산자 데이터베이스에 추가합니다(예: tickit_salestickit_sales_view). TICKIT 샘플 데이터베이스에 대한 자세한 내용은 샘플 데이터베이스를 참조하세요.

    쿼리를 실행하기 위해 datashare에 대한 권한을 위임할 필요가 없습니다. 스택은 필요한 권한을 부여합니다.

  4. 클라이언트 도구를 사용하여 소비자 클러스터에 연결합니다. 생산자의 네임스페이스를 지정하여 datashare를 설명합니다.

    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 | +------------------+--------------------------------------+------------+------------------+-------------+-------------------------------------+-------------+
  5. datashare의 데이터베이스와 스키마를 지정하여 datashare의 테이블을 쿼리할 수 있습니다. 자세한 내용은 데이터베이스 간 쿼리 사용 예 단원을 참조하십시오. 다음 쿼리는 TICKIT 샘플 데이터베이스의 SALES 테이블에서 판매 및 판매자 데이터를 반환합니다. 자세한 내용은 SALES 테이블 단원을 참조하십시오.

    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 | +---------+--------+----------+---------+---------+--------+---------+-----------+------------+---------------------+
    참고

    쿼리는 공유 스키마의 보기에 대해 실행됩니다. datashare에서 생성된 데이터베이스에는 직접 연결할 수 없습니다. 읽기 전용입니다.

  6. 집계를 포함하는 쿼리를 실행하려면 다음 예제를 사용합니다.

    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 데이터에서 매출 및 판매자 데이터를 반환합니다.

    datashare 쿼리의 추가 예는 AWS 계정 내 데이터에 대한 읽기 액세스 공유 섹션을 참조하세요.