Programming/IaC

[IaC] Working with Multiple Providers

Hayley Shim 2023. 10. 28. 17:54

안녕하세요. CloudNet@ Terraform Study를 진행하며 해당 내용을 이해하고 공유하기 위해 작성한 글입니다. 도서 ‘Terraform: Up & Running(By Yevgeniy Brikman)’ 의 내용 및 스터디 시간 동안 언급된 주요 내용 위주로 간단히 정리했습니다.

Working with One Provider

  • Provider : 테라폼 코어를 위한 플러그인, 각 플러그인은 ‘AWS, Azure, GCP’ 등 외부 플랫폼과 통신

Provider 설정

provider "aws" {
  region = "us-east-2"
}

$ terraform init

Initializing provider plugins...
- Finding hashicorp/aws versions matching "4.19.0"...
- Installing hashicorp/aws v4.19.0...
- Installed hashicorp/aws v4.19.0 (signed by HashiCorp)
...

Provider 상세 설정

terraform {
  required_providers {
    <LOCAL_NAME> = {
      source  = "<URL>"
      version = "<VERSION>"
    }
  }
}
  • LOCAL_NAME : provider 가 사용할 local name 이며, 각 provider 에서 유일한 이름이여야 함. 드문 경우 지만 만약 두 공급자가 http 중복 사용 시 로컬 이름으로 구별 할 수 있음
  • URL : 해당 provider 다운로드 URL 이며, 형식은 [<HOSTNAME>/]<NAMESPACE>/<TYPE 이다

— 예) aws 공급자 전체 URL) registry.terraform.io/hashicorp/aws → 생략 표현 가능 hashicorp/aws

  • 아래는 aws 4.x 공급자 버전 설치를 지정하는 코드 예시입니다.
terraform {
  required_providers {
    aws = {
      source  = "hashicorp/aws"
      version = "~> 4.0"
    }
  }
}

실습)

Working with Multiple copies of the same provider

1. 2개의 리전에 배포 시

 

output 상태

2. 2개의 리전에 Ubuntu EC2 배포 시

  • 기존에 생성한 multiple-provider.tf 파일에 아래 초드를 추가해줍니다.
  • 리전 별 AMI ID값이 다르므로, 필터를 활용합니다.
 
 

output 상태

3. Primary RDS 의 replica RDS를 다른 리전에 배포 시

  • Primary RDS 는 backup_retention_period 설정이 0보다 커야 되며, replicate_source_db ARN 설정 시 replica RDS입니다.
  • 코드 참고

S3/DynamoDB 생성

  • S3/DynamoDB 생성을 위한 환경변수 지정
# 환경변수에 지정
export TF_VAR_bucket_name=hayley
export TF_VAR_table_name=hayley-t101-locks
terraform init
terraform plan && terraform apply -auto-approve

# 확인
aws s3 ls
aws dynamodb list-tables --output text
  • Primary RDS 리소스 생성 코드 내용 확인 — 링크
  • Replica RDS 리소스 생성 코드 내용 확인
module "mysql_replica" {
  source = "../../../../modules/data-stores/mysql"

  # Make this a replica of the primary
  replicate_source_db = module.mysql_primary.arn
}

MySQL on RDS example (prod environment)

주의사항

  1. Warning 1 : Multiregion is hard 프로덕션 수준의 멀티 리전은 어렵습니다.
  • Active-Active 멀티 리전 서비스를 위해서 ‘지역간 지연 시간, 고유 ID, 최종 일관성’ 등 여러가지 고려사항이 많아서 쉽지 않습니다.

2. Warning 2 : Use aliases sparingly Alias 를 빈번하게 사용하지 마세요.

  • 별칭을 사용하여 두 리전에 배포하는 단일 테라폼 모듈은 한 리전이 다운 시, plan 과 apply 시도가 실패합니다.
  • 프로덕션 환경은 멀티 리전의 별칭을 사용하는 것보다는 환경을 완전히 격리해야 합니다. 이를 통해 영향도를 최소화 할 수 있습니다.

 

 

blog migration project

written in 2022.12.11

https://medium.com/techblog-hayleyshim/iac-working-with-multiple-providers-b119e487b55d