Terraform 기초 실습 스터디를 진행하고 있으며, 커리큘럼 4주차에 해당하는 내용입니다.
* [테라폼으로 시작하는 IaC] 도서 참조
이전 포스팅에서 테라폼의 기본 사용법의 전반에 대해 학습을 마무리하였다.
이번 포스팅에서는 책 내용의 CHAPTER 4. 프로바이더 에 대해 알아보도록 하겠다.
테라폼은 terraform 바이너리 파일을 시작으로 원격 환경에서 원하는 대상을 호출하는 방식으로 실행된다.
여기서 '원하는 대상' 은 프로바이더가 제공하는 API 를 호출해 상호작용을 한다.
즉, 테라폼이 대상과의 상호작용을 할 수 있도록 하는 것이 '프로바이더' 이다.
테라폼은 프로바이더 없이는 어떤 종류의 인프라와 서비스도 관리할 수 없다.
테라폼 레지스트리 사이트에서 주요 프로바이더를 확인할 수 있다.
프로바이더 구성
테라폼 레지스트리에서 AWS 프로바이더 사용 정의를 확인할 수 있다.
프로바이더 구성 1. 단일 프로바이더의 다중 정의
동일한 프로바이더를 사용하지만 다른 조건을 갖는 경우, 사용되는 리소스마다 별도로 선언된 프로바이더를 지정해야하는 경우가 있다.
예를 들어, AWS 프로바이더를 사용하는데 서로 다른 권한의 IAM 을 갖는 Access ID 또는 다른 리전을 사용하는 경우다. 이때는 프로바이더 선언에서 alias 를 명시하고 사용하는 리소스와 데이터 소스에서는 provider 메타인수를 사용해 특정 프로바이더를 지정할 수 있다.
provider 메타인수를 지정하지 않는 경우 alias 가 없는 프로바이더가 기본 프로바이더로 적용된다.
다음은 리전을 다르게 구성한 AWS 프로바이더를 aws_instance 에 지정하는 예시이다.
provider "aws" {
region = "us-west-1"
}
provider "aws" {
alias = "seoul"
region = "ap-northeast-2"
}
resource "aws_instance" "app_server" {
provider = aws.seoul
ami = "ami-0e1d09d8fa897"
instance_type = "t2.micro"
}
프로바이더 구성 2. 프로바이더 요구사항 정의
테라폼 실행 시 요구되는 프로바이더 요구사항은 terraform 블록의 required_providers 블록에 여러개를 정의할 수 있다.
source 에는 다운로드 경로를 지정하고 version 은 버전 제약을 명시한다.
terraform {
required_providers {
<프로바이더 로컬 이름> = {
source = [<호스트 주소>/]<네임스페이스>/<유형>
version = <버전 제약>
}
...
}
}
프로바이더 구성 3. 프로바이더 설치
테라폼을 실행하기 전 terraform init 명령을 통해 정의된 프로바이더를 다운로드, 복사, 캐시에서 읽어오게 된다.
항상 지정된 구성에 대해 동일한 프로바이더를 설치하도록 하려면, 명시적으로 terraform 블록에 정의하거나 .terraform.lock.hcl 잠금파일을 코드 저장소에 공유하는 방안을 사용한다.
테라폼 0.13 버전 이후에는 terraform 블록에서 required_providers 에 명시하여 다운로드한다.
required_providers 에 지정하지 않더라도 테라폼 구성 코드상에서 사용된 프로바이더는 테라폼이 추론하여 최신 버전의 프로바이더를 사용한다.
프로바이더 경험해보기 (AWS, Azure, GCP...)
대표적인 클라우드 서비스 프로바이더인 AWS, Azure, GCP 등을 활용하여 퍼블릭 클라우드를 프로비저닝할 수 있다.
그 중 클라우드 시장에서 점유율이 가장 높고, 업무 중 대부분에서 다루고 있는 AWS 로 인프라 구축 테스트를 진행할 예정이다.
테라폼으로 AWS 를 프로비저닝하려면, 가입된 계정의 API 를 위한 자격증명 정보가 필요하다.AWS 계정 액세스 키 ID 와 보안 액세스 키를 획득하여 프로바이더에 정의하거나 환경변수로 선언한다.(해당 과정을 통한 AWS 리소스 배포는 추후, EKS 구축 프로젝트 진행을 통해 실습해보겠다.)
해당 포스팅을 통해 테라폼의 프로바이더에 대해 알아보았다.
다음은 State 에 대해 알아보자.