templatefile 기능인 Terraform을 사용하여 Athena의 Saved queries 관리

terraform Advent Calendar 2020 9일째 보도다.
작은 단락이라 떳떳하지 못하다.

발단


어느 날, 저는 업무 중에 데이터 협업 시스템의 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에 보관됩니다.
검색은 수동으로 실행해야 한다는 것을 잊지 마세요.

끝맺다

좋은 웹페이지 즐겨찾기