티스토리 뷰

테라폼으로 AWS CloudFront 를 생성할 때 ACM(AWS Certificate Manager) 인증서를 쓰려면 아래와 같이 코드가 개발됩니다.

resource "aws_cloudfront_distribution" "s3_distribution" {
  ...
  viewer_certificate {
    cloudfront_default_certificate = false
    acm_certificate_arn            = "..."
    minimum_protocol_version       = "..."
    ssl_support_method             = "..."
  }
}

 

cloudfront_default_certificate를 false로 설정하고 ACM 인증서의 ARN을 넣어주면 됩니다. 그런데 이 상태로 코드를 배포하면 아래와 같은 오류가 발생합니다.

╷
│ Error: creating CloudFront Distribution: InvalidViewerCertificate: The specified SSL certificate doesn't exist, isn't in us-east-1 region, isn't valid, or doesn't include a valid certificate chain.
│       status code: 400, request id: 1a9ead3e-7059-40aa-b00e-8749270e8c6a
│ 
│   with module.da_center_dev.aws_cloudfront_distribution.this,
│   on aws_cloudfront_distribution.tf line 1, in resource "aws_cloudfront_distribution" "this":
│    1: resource "aws_cloudfront_distribution" "s3_distribution" {
│

 

오류 내용만 보면 아주 명확합니다.

The specified SSL certificate doesn't exist, isn't in us-east-1 region

 

물론 인증서는 us-east-1에 없습니다. (한글 블로그인) 이 글을 읽는 대부분의 사람들은 인증서를 ap-northeast-2에 두고 사용하고 있겠죠. 테라폼이 모든 인프라가 배포되어 있는 ap-northeast-2에서 인증서를 찾을 것으로 기대했는데 도대체 왜 us-east-1에서 찾는 것인지 의아하죠. 테라폼 문서에서는 이와 관련된 내용을 찾을 수 없습니다. 하지만 AWS 콘솔에 들어가서 보면 힌트를 발견할 수 있습니다.

인증서는 N. Virginia. 즉, us-east-1에 있어야 한답니다

 

테라폼 코드를 작성할 때 대부분은 region을 인프라가 배포되어야 하는 곳으로 지정해서 사용을 하고 있을 겁니다. 예를 들어 LB에서 사용하는 인증서들 대부분은 ap-northeast-2에 있다고 가정합시다. 테라폼으로 구현되어 있는 거죠. 이 상황에서 우리는 CloudFront를 위해서 us-east-1에도 인증서를 배포해줘야 합니다.

먼저 디폴트로 사용하는 provider를 두고 us-east-1을 바라볼 provider를 추가로 등록해 줍니다.

provider "aws" {}

provider "aws" {
  region = "us-east-1"
  alias  = "virginia"
}

 

그리고 aws_cloudfront_distribution 리소스를 호출하는 모듈 쪽에 providers를 지정해 줍니다.

module "acm_virginia" {
  source = "./modules/aws_acm"
  ...
  providers = {
    aws = aws.virginia
  }
}

 

이게 끝입니다. 그럼 이제 acm_virginia 모듈이 배포될 때 us-east-1의 설정을 따르게 될 겁니다. 여기서는 CloudFront에 대한 예시로 작성했지만 멀티 리전에 서비스를 배포해야 하는 경우에도 동일하게 활용하실 수 있습니다. 인증서가 있는데 왜 못 찾냐며 고생하시는 분이 없기를 바랍니다. 저는 고생을 좀 했거든요 ;)

그리고 테라폼 코드만 들여다본다고 답이 나오지 않습니다. 클라우드 리소스를 생성해야 한다면 클라우드 콘솔 화면도 열어두고 테라폼에 어떤 설정이 콘솔 어디에 어떻게 매핑되는지 잘 챙겨야 경험치가 쌓이고 실력이 됩니다. 인프라 코드를 개발하시는 누군가에게 도움이 되셨기를 바랍니다 :-) 

 

댓글
최근에 올라온 글
최근에 달린 댓글
글 보관함
Total
Today
Yesterday