cloudfront + s3 으로 정적인 웹호스팅을 만드는 과정에서 terraform state file로부터 s3 정보를 읽어오지 못하는 오류가 발생하였다.
분명히 존재하는 버킷인데 읽어오지 못한다는 것은 terraform이 s3를 어디 엉뚱한데서 찾고있다는 생각이 들었다.
Error: Failed getting S3 bucket (버킷명): BadRequest: Bad Request
status code: 400,
...
with data.aws_s3_bucket.hosting,
on main.tf line 30, in data "aws_s3_bucket" "hosting":
30: data "aws_s3_bucket" "hosting" {
# aws provider
provider "aws" {
version = "~> 3.0"
region = "us-east-1"
}
# S3 bucket
data "aws_s3_bucket" "hosting" {
bucket = "<버킷명>"
}
region 문제였다.
cloudfront는 항상 N. Virginia에서만 사용가능하기 때문에 aws provider의 기본 region을 us-east-1으로 설정을 해두었다.
그러나 s3 bucket은 Singapore(ap-southeast-1) region에 있었고, 그렇기에 'aws_s3_bucket' data source에서 'bucket' argument만으로는 원하는 s3 bucket을 찾아가지 못한 것이었다.
provider의 alias를 사용함으로써
다중 region을 구현할 수 있다.
# default aws provider
provider "aws" {
version = "~> 3.0"
region = "us-east-1"
}
# s3 alias aws provider
provider "aws" {
alias = "s3"
version = "~> 3.0"
region = "ap-southeast-1"
}
# S3 bucket
data "aws_s3_bucket" "hosting" {
provider = aws.s3 # set provider
bucket = "<버킷명>"
}