-
Terraform - AWS S3
IaC/Terraform AWS 2023. 9. 16. 22:25(이 글은 AWS S3에 대한 이해를 전제로 작성되었습니다. 관련 내용은 https://kh-archive.tistory.com/26 를 참고하세요)
Terraform으로 AWS의 S3를 생성하는 코드에 대해서 살펴보겠습니다.
resource "aws_s3_bucket" "cloudman_s3_sample_bucket" { bucket = "cloudman-s3-bucket-01" bucket_prefix = "logs/" tags = { log = "yes" expired = "yes" } }
코드가 이게 다인가요?
네! 놀랍게도 이게 다입니다.
만들어지는 S3의 내용을 살펴보면
S3 bucket의 이름은 "cloudman-s3-bucket-01"이고,
bucket의 prefix를 "logs"로 만들고
해당 bucket에 log와 expired라는 키 값으로 태깅을 한다라는 의미로 해석할 수 있습니다.
사실 태깅정보나 prefix가 없어도 필수값인 이름만 설정해도 바로 AWS S3 bucket을 만들 수 있습니다.
그러면 여러가지 S3의 설정들은 어떻게 하는거죠? 그냥 자동으로 되나요?
네! 이렇게 이름만 정해서 S3 bucket을 생성하면 모든 S3 설정은 default 설정으로 만들어집니다.
물론 S3의 설정들을 따로 리소스로 만들면 custom으로 하는 것도 가능합니다.
그러면 가볍게 하나만 S3 lifecycle을 설정하는 테라폼 코드를 한번 보겠습니다.
S3 lifecycle은 수명을 정해주는 규칙으로 이해하시면 됩니다.
예를 들어 "S3 bucket에서 log라고 된 prefix를 가진 데이터는 90일이 지나면 제거한다" 라는
규칙을 정해놓으면 해당 규칙에 맞춰서 자동으로 데이터의 수명을 관리하게 됩니다.
그러면 저희가 만든 S3 bucket에 lifecycle 설정을 해봅시다.
resource "aws_s3_bucket" "cloudman_s3_sample_bucket" { bucket = "cloudman-s3-bucket-01" bucket_prefix = "logs/" tags = { log = "yes" expired = "yes" } } resource "aws_s3_bucket_lifecycle_configuration" "cloudman_s3_lifecycle" { bucket = aws_s3_bucket.cloudman_s3_sample_bucket.id rule { id = "logs" expiration { days = 30 } filter { and { prefix = "logs/" tags = { log = "yes" expired = "yes" } } } status = "Enabled" } }
"aws_s3_bucket_lifecycle_configureation"에서 설정한 내용을 살펴보면,
우리가 만든 S3 bucket인 aws_s3_bucket.cloudman_s3_sample_bucket를 대상으로 하고
logs라는 prefix와 해당 태그정보에 해당하는 데이터라면
30일이 지났을 때 모두 데이터를 삭제라는 rule을 가진
유효한 lifecycle라고 읽을 수 있습니다. 해석한 것처럼 lifecyle 규칙이 적용되면
해당 filter의 조건에 부합하는 데이터는 30일이 지나면 자동으로 삭제가 될 겁니다.
이렇게 간단하게 S3 bucket을 생성하고 S3에 lifecyle 규칙을 설정하는 것까지 알아보았는데요.
사실 이것 외에도 S3 policy나 ACL, KMS 등 다양한 설정이 테라폼으로 가능합니다.
앞으로 하나씩 주제로 다뤄보도록 하겠습니다.
'IaC > Terraform AWS' 카테고리의 다른 글
Terraform - AWS IAM (0) 2023.09.17