마짱짱의 지식창고

[GCP] BigQuery Omni - AWS S3 연동하여 쿼리 날리기 본문

Cloud/GCP

[GCP] BigQuery Omni - AWS S3 연동하여 쿼리 날리기

마짱짱 2023. 2. 17. 15:40
반응형

0. 개요

 BigQuery Omni를 사용하면 AWS S3 에 저장된 데이터에서 BigQuery 분석을 실행할 수 있습니다 . Google Cloud BigQuery와 AWS S3 사이에 승인된 연결을 만들고 데이터 이동 없이 S3 버킷에 있는 데이터를 쿼리하고 쿼리 결과를 다시 AWS S3 버킷에 씁니다. 

 

1. AWS IAM 정책 설정하기

BigQuery Omni는 Google Cloud의 승인된 연결을 통해 Amazon S3 데이터에 액세스합니다. 각 연결에는 고유한 Amazon Web Services(AWS) Identity and Access Management(IAM) 사용자가 있습니다. AWS IAM 역할을 통해 사용자에게 권한을 부여합니다. AWS IAM 역할 내의 정책은 각 연결에 대해 BigQuery가 액세스할 수 있는 데이터를 결정합니다.

먼저 Policy(정책)을 수정해야합니다.

 

AWS -> IAM -> Policy(정책) 에서 "bigquery-omni-connection-policy" 클릭

 없으시면 정책생성해서 S3 서비스만 선택하셔서 만드시면 됩니다.

 

정책 편집 클릭

 

JSON 편집으로 들어가 다음과 같은 코드를 입력합니다.

<BUCKET_NAME>에 S3 bucket이름을 적어주세요.

{
    "Statement": [
        {
            "Action": [
                "s3:ListBucket"
            ],
            "Effect": "Allow",
            "Resource": [
                "arn:aws:s3:::<BUCKET_NAME>"
            ],
            "Sid": "BucketLevelAccess"
        },
        {
            "Action": [
                "s3:GetObject"
            ],
            "Effect": "Allow",
            "Resource": [
                "arn:aws:s3:::<BUCKET_NAME>",
                "arn:aws:s3:::<BUCKET_NAME>/*"
            ],
            "Sid": "ObjectLevelGetAccess"
        },
        {
            "Action": [
                "s3:PutObject"
            ],
            "Effect": "Allow",
            "Resource": [
                "arn:aws:s3:::<BUCKET_NAME>",
                "arn:aws:s3:::<BUCKET_NAME>/*"
            ],
            "Sid": "ObjectLevelPutAccess"
        }
    ],
    "Version": "2012-10-17"
}

정책검토 클릭후 변경내용 저장합니다.

 

 

2. AWS IAM 검증하기

 

IAM -> 역할 -> bigquery-omni-connection 클릭

 

ARN 을 따로 적어둡니다.

 

3. GCP BigQuery에서 AWS Connection 만들기

GCP BigQuery에서 +ADD DATA 클릭

 

Connections to external data sources 클릭

 

Connection Type: BigLake on AWS(via BigQuery Omni)

Connection ID: bq-omni-aws-connector

AWS role ID:  <<AWS IAM ARN>>

 

설정합니다.

 

Connection 이 생성된 모습

 

4. AWS IAM Role 에서 Bigquery Connection에 대한 인증설정

신뢰 관계를 통해 BigQuery AWS Connection은 역할을 수임하고 역할 정책에 지정된 S3 데이터에 액세스할 수 있습니다.

 

AWS의 IAM > 역할 > bigquery-omni-connection > 신뢰관계 접근

 

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "Federated": "accounts.google.com"
      },
      "Action": "sts:AssumeRoleWithWebIdentity",
      "Condition": {
        "StringEquals": {
          "accounts.google.com:sub": "00000"
        }
      }
    }
  ]
}

신뢰할 수 있는 엔터티 부분에서 "00000" 부분을  BigQuery AWS Connector 에서 "BigQuery Google identity"의 값을 넣어줍니. 현재 예시사진에서 109446904973118957595 넣어주면 됩니다.

 

5. BigQuery에서 AWS S3의 데이터 세트 만들기

BigQuery Omni는 Amazon S3에 저장된 데이터를 관리하지 않습니다. S3 데이터에 액세스하려면 외부 테이블을 정의하십시오. 데이터가 BigQuery 관리 스토리지에 저장되지 않기 때문에 이 테이블을 외부 테이블이라고 합니다. 외부 테이블에 대한 자세한 내용은 외부 테이블을 참조하십시오 .

 

해당 프로젝트의 메뉴를 클릭하여 Create Dataset 클릭

 

Dataset ID, Region, aws-us-east-1 로 설정

현재 BigQuery Omni의 GA 환경이 많지 않습니다. 실제 구축시에는 참고 바랍니다.

 

생성한 dataset에서 create table을 클릭합니다.

 

Create table from : Amazon S3

Select S3 Path: s3://[S3 bucket name]/[object]

Dataset, Table 임의설정

Table Type : External table

Connection ID: 처음에 생성한 Connector 선택

Schema 는 필요시 직접 설정 or Auto detect

 

생성

 

 

Table 클릭시 해당 스키마가 올바르게 들어왔다면 정상적으로 연결 된 것

 

6. BigQuery에서 AWS S3 Data 쿼리해보기

 

정상적으로 조회 된 모습

 

조회뿐만 아니라 쿼리 결과값을 다시 AWS S3로 내보낼 수 있다.

 

내보낼때 쿼리문 에 대한 설명

EXPORT DATA WITH CONNECTION `CONNECTION_REGION.CONNECTION_NAME` \
OPTIONS(uri="s3://BUCKET_NAME/PATH", format="FORMAT", ...) \
AS QUERY
  • CONNECTION_REGION: 연결이 생성된 지역입니다.
  • CONNECTION_NAME: S3 버킷에 쓰기 위해 필요한 권한으로 생성한 연결 이름입니다.
  • BUCKET_NAME: 데이터를 쓰려는 Amazon S3 버킷.
  • PATH: 내보낸 파일을 쓸 경로
  • FORMAT: 지원되는 형식은 JSON, AVRO 및 CSV입니다.
  • QUERY: BigQuery 외부 테이블에 저장된 데이터를 분석하기 위한 쿼리입니다.

출처

https://www.cloudskillsboost.google/focuses/49746?catalog_rank=%7B%22rank%22%3A1%2C%22num_filters%22%3A0%2C%22has_search%22%3Atrue%7D&parent=catalog&search_id=22417237 

 

반응형