templatefile 기능인 Terraform을 사용하여 Athena의 Saved queries 관리
작은 단락이라 떳떳하지 못하다.
발단
어느 날, 저는 업무 중에 데이터 협업 시스템의 WFAmazon Athnea를 만들었습니다.Athena는 S3 파일에서 SQL을 수행할 수 있지만, DDL 문구나 코드 관리를 고려해 테라form으로 관리하기로 최종 결정했다.
거부
Athena에 대해서는 자세히 설명하지 않습니다.
SQL 파일 구성
.tf 파일은 같은 층의queries 디렉토리에서 템플릿의 SQL 파일을 구성합니다.
tree
.
├── その他.tf
├── athena.tf
└── queries
├── create_table1.sql
└── create_table2.sql
DDL 문 템플릿
workspace, 데이터베이스,bucket 등은 환경에 따라 동적 전환하는 값
${something}
과 같이 변수로 변한다.${something}
변수가 아니라 조회의 문법으로 사용할 때 요점은 $${something}
의 형식으로 피하는 것이다.다음은 샘플입니다.
queries/create_table1.sql
CREATE EXTERNAL TABLE IF NOT EXISTS `${database}.users` (
id INT,
name STRING,
email STRING,
address STRING)
PARTITIONED BY ( date string )
ROW FORMAT DELIMITED
FIELDS TERMINATED BY '\t'
ESCAPED BY '\\'
LINES TERMINATED BY '\n'
LOCATION 's3://${bucket}/users/'
TBLPROPERTIES (
'classification'='csv',
'compressionType'='gzip',
'delimiter'='\t',
'projection.date.format'='yyyy-MM-dd',
'projection.date.interval'='1',
'projection.date.interval.unit'='DAYS',
'projection.date.range'='1992-01-01,NOW',
'projection.date.type'='date',
'projection.enabled'='true',
'storage.location.template'='s3://${bucket}/users/date=$${date}',
'typeOfData'='file');
templatefile을 사용하여 SQL 파일 읽기
templatefile를 사용하여 SQL 파일을 읽습니다aws_athena_named_query.
여러 개의 파일fileset을 총괄적으로 정의했기 때문에 사용for_each이 목적을 달성했다.
athena.tf
resource "aws_athena_named_query" "my-saved-queries" {
for_each = fileset("${path.module}/queries", "*.sql")
name = trimsuffix(each.value, ".sql")
description = "managed by terraform"
workgroup = aws_athena_workgroup.my-workgroup.name
database = aws_athena_database.my-database.name
query = templatefile("${path.module}/queries/${each.value}", {
database = aws_athena_database.my-database.name,
bucket = aws_s3_bucket.my-bucket.bucket
})
}
약간 힘찬 느낌이지만 이렇게 완성이 됐어요.이후terraform apply
면AthenaSaved queries
에 보관됩니다.검색은 수동으로 실행해야 한다는 것을 잊지 마세요.
끝맺다
Reference
이 문제에 관하여(templatefile 기능인 Terraform을 사용하여 Athena의 Saved queries 관리), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://zenn.dev/t_horikoshi/articles/25f3f2216a7108텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)