Ssoon

Chapter (04) 프로바이더 본문

Terraform 101 Study 2기

Chapter (04) 프로바이더

구구달스 2023. 7. 17. 23:04
CloudNet@ 가시다님이 진행하는 Terraform 101 Study 2기
"테라폼으로 시작하는 IaC" (한빛미디어) 도서로 진행!

✅ 프로바이더 구성

  • 프로바이더
    • 테라폼이 대상과의 상호작용을 할 수 있도록 하는 것
    • 플러그인 형태로 테라폼이 결합되어 대상이 되는 클라우드, SaaS, 기타 서비스 API를 사용해 동작을 수행
    • 각 프로바이더는 테라폼이 관리하는 리소스 유형과 데이터 소스를 사용할 수 있도록 연결
    • 테라폼 실행 파일과는 별도로 자체 관리되고 게시

https://registry.terraform.io/

 

Terraform Registry

 

registry.terraform.io

🧿 로컬 이름과 프로바이더 지정

  • required_providers 블록 내에 <로컬 이름> = { } 으로 정의
  • 동일한 http 접두사를 사용하는 다수의 프로바이더 사용 정의
terraform {
  required_providers {
    architect-http = {
      source = "architect-team/http"
      version = "~> 3.0"
    }
    http = {
      source = "hashicorp/http"
    }
    aws-http = {
      source = "terraform-aws-modules/http"
    }
  }
}

🧿 단일 프로바이더의 다중 정의

  • 동일한 프로바이더를 사용하지만 다른 조건을 갖는 경우 ---> alias를 명시하고 사용하는 리소스와 데이터 소스에서는 provider 메타인수를 사용해 특정 프로바이더를 지정 -> provider 메타인수에 지정되지 않은 경우 alias가 없는 프로바이더가 기본 프로바이더로 동작
provider "aws" {
  region = "us-west-1"
}

provider "aws" {
  alias = "seoul"
  redion = "ap-northeast-2"

resource "aws_instance" "app_server" {
  provider = aws.seoul
  ami = "subnet-03160a0de2f38a33e"
  instance_type = "t2.micro"
}

🧿 프로바이더 요구사항 정의

  • terraform 블록의 required_providers 블록에 여러 개를 정의할 수 있습니다.
  • source : 프로바이더 다운로드 경로 지정 
  • version : 버전 제약을 명시
  • 호스트 주소 : 프로바이더를 배포하는 주소
  • 네임스페이스 : 지정된 레지스트리 내에서 구분하는 네임스페이스
  • 유형 : 프로바이더에서 관리되는 플랫폼이나 서비스 이름
terraform {
  required_providers {
    <프로바이더 로컬 이름> = {
      source = [<호스트 주소>/]<네임스페이스>/<유형>
      version = <버전 제약>
    }

🧿 프로바이더 설치

  • terraform init
    • 정의된 프로바이거를 다운로드, 복사, 캐시에서 읽어옵니다.

✅ 프로바이더 에코시스템

  • Terraform 에코시스템을 통해 사용자는 다양한 사용 사례 및 환경에 Terraform을 적용할 수 있습니다

출처 : https://developer.hashicorp.com/terraform/docs/partnerships

✅ 프로바이더 경험하기

  • IAM > Users > Add users 에서 user를 생성합니다.

  • 해당 user에 권한을 부여합니다.

  • access_key 와 secret-access-key를 생성합니다

  • main.tf
terraform {
    required_providers {
        aws = {
            source = "hashicorp/aws"
            version = "~> 4.0"
        }
    }
    required_version = ">= 1.0"
}

provider "aws" {
    region = "ap-northeast-2"
    access_key = "AKIATU4765ECBYZ3ZET7"
    secret_key = "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"
}

data "aws_ami" "amzn2" {
    most_recent = true
    owners = ["amazon"]

    filter {
        name = "owner-alias"
        values = ["amazon"]
    }
    filter {
        name = "name"
        values = ["amzn2-ami-hvm*"]
    }
}

resource "aws_instance" "app_server" {
    ami = data.aws_ami.amzn2.id
    instance_type = "t2.micro"
}
  • terraform init / terraform apply 를 실행한 후 생성된 리소스를 확인합니다.

🧿 자격증명 정보를 환경 변수에 넣어 실행

    access_key = "AKIAxxxxxxxxxxxx"
    secret_key = "fzdmHfAjwflGxxxxxxxxxxxxxxxxxxxxxxxxxx"

를 제거합니다.

provider "aws" {
    region = "ap-northeast-2"
}

Comments