마짱짱의 지식창고
[GCP] BigQuery Omni - AWS S3 연동하여 쿼리 날리기 본문
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 외부 테이블에 저장된 데이터를 분석하기 위한 쿼리입니다.
출처
'Cloud > GCP' 카테고리의 다른 글
[GCP] Dataprep을 이용한 파이프라인 구축 (0) | 2023.02.22 |
---|---|
[GCP] GKE에 Cloud Deploy를 사용하여 CD환경 구축하기 (0) | 2023.02.20 |
[GCP] Cloud Run으로 배포된 Application을 Canary 배포테스트 (0) | 2023.02.15 |
[GCP] Cloud Build 를 이용한 GKE 파이프라인 구축 (0) | 2023.02.14 |
[GCP] Cloud Code - VS Code 환경 구축 (0) | 2023.02.10 |