본문 바로가기

Terraform

(11)
[Terraform] Terraform 프로바이더, 반복문 이번 시간에는 Terraform Provider와 반복문에 대해서 알아보겠습니다 Terraform Provider 모듈에서 사용되는 모든 리소스는 관련 프로바이더의 정의가 필요합니다. 사용자는 프로바이더 정의를 모듈 ( 자식 모듈에서 provider 정의, 부모 모듈에서 provider 정의) 자식 모듈에서 프로바이더 정의 프로바이더 버전과 구성에 민감하거나, 루트 모듈에서 프로바이더 정의 없이 자식 모듈이 독립적인 구조일 때 고려할 방법 모듈에서 사용하는 프로바이더 버전과 구성 상세를 자식 모듈에서 고정하는 방법 동일한 프로바이더가 루트와 자식 양쪽에 또는 서로 다른 자식 모듈에 버전 조건 합의가 안 되면, 오류가 발생하고 모듈에 반복문을 사용할 수 없다는 단점이 있으므로 잘 사용하지 않습니다. 루트 ..
[Terraform] Terraform module 이번 시간에는 module에 대해서 알아보겠습니다. Terraform module 단일 구조의 문제점 테라폼 구성에서 원하는 항목을 찾고 수정하는 것이 점점 어려워짐 리소스들 간의 연관 관계가 복잡해질수록 변경 작업의 영향도를 분석하기 위한 노력이 늘어남 개발/스테이징/프로덕션 환경으로 구분된 경우 비슷한 형태의 구성이 반복되어 업무 효율이 줄어듦 새로운 프로젝트를 구성하는 경우 기존 구성에서 취해야 할 리소스 구성과 종속성 파악이 어려움 https://developer.hashicorp.com/terraform/language/modules [Modules Overview - Configuration Language | Terraform | HashiCorp Developer Modules are co..
[Terraform] Terraform Workspace 이번 시간에는 Terraform Worksapce에 대해서 알아보겠습니다. Terraform Worksapce Workspace란 State를 관리하는 논리적인 가상 공간을 워크스페이스라고 합니다. 테라폼 구성 파일은 동일하지만 작업자는 서로 다른 State를 갖는 실제 대상을 프로비저닝할 수 있습니다. 워크스페이스는 기본 default로 정의되고 로컬 작업 환경의 워크스페이스 관리를 위한 CLI 명령어로 workspace가 있다. terraform workspace list * default 환경을 격리하는 방법 환경을 격리하는 방법은 2가지가 있습니다. 작업 공간을 통한 격리 동일한 구성에서 빠르고 격리된 테스트 환경에 유용 파일 레이아웃을 이용한 격리 보다 강력하게 분리해야 하는 운영 환경에 적합 ..
[Terraform] Terraform 상태관리 및 격리방안 이번에는 상태 관리 및 격리 방안에 대해서 알아보겠습니다. 테라폼 상태 관리 상태 파일은 배포할 때마다 변경되는 파일입니다. 프라이빗 API이기 때문에 Terraform 내부에서만 사용됩니다. 상태 파일은 Terraform 관련 명령어를 제외한 다른 것들로 편집하면 안됩니다. state 관련 파일은 terraform.tfstate에 기록이 됩니다. State는 대상 환경의 관리 Resource 판별 및 결과를 기록합니다. 또한, 테라폼 구성과 실제를 동기화 Resource마다 고유한 ID로 맵핑하고 Resource 종속성과 같은 메타데이터를 저장 및 추적을 하면서 프로비저닝 결과를 캐싱하는 역할을 해줍니다. Terrform을 팀 단위로 운영시 문제점 상태파일을 저장하는 공유 스토로지 사용 ex) s3 테..
[Terraform] Terraform 기본 사용법 조건문, 함수, Provisioners, moved, 시스템 변수 이번 시간에는 테라폼의 기본 사용법 중 조건문, terraform에서 제공하는 내장함수, 프로비저닝, moved 블록, 시스템 환경 변수에 대해서 알아보겠습니다. 조건문 테라폼에서의 조건식은 3항 연산자 형태를 갖습니다. 조건은 true 또는 false로 확인되는 모든 표현식을 사용할 수 있습니다. 타 언어의 조건식과 사용법은 동일합니다. # 3항 연산자 사용법 # ? : # Terraform 조건문 예시 var.a != "" ? var.a : "default-a" 함수 Terraform은 프로그래밍 언어적인 특성을 가지고 있습니다. 기본적으로 사용자 지정 함수는 사용할 수 없으나 Terraform에서 제공 해주는 내장 함수는 사용 할 수 있습니다. Numeric Functions, String Funt..
[Terraform] Terrafrom 사용법 반복문 이번 시간에는 반복문에 대해서 알아보겠습니다. Terrafrom의 반복문은 count, for_each. for, dynamic 이 있습니다. count count는 반복문, 정수 값만큼 리소스나 모듈을 생성합니다. 아래와 같이 count를 이용 할 수 있습니다. // 유저 목록을 변수로 선언 variable "user_names" { description = "Create IAM users with these names" type = list(string) default = ["test1", "test2", "test3"] } // provider는 aws로 설정 provider "aws" { region = "ap-northeast-2" } // count를 이용하여 변수에 선언한 유저 목록만큼 생성..
[Terraform] Terrafrom 기본 사용법 Local / Output 이번 시간에는 Local / Output 에 대해서 알아보겠습니다. Local ‘local’은 입력 변수와 달리 선언된 모듈 내에서만 접근 가능하고, 변수처럼 실행 시에 입력받을 수 없다. 로컬은 사용자가 테라폼 코드를 구현할 때 값이나 표현식을 반복적으로 사용할 수 있는 편의를 제공합니다. 하지만 빈번하게 여러 곳에서 사용되는 경우 실제 값에 대한 추적이 어려워져 유지 관리 측면에서 부담이 발생할 수 있으므로 주의가 필요합니다. variable "prefix" { default = "hello" } locals { name = "terraform" content = "${var.prefix} ${local.name}" my_info = { age = 20 region = "KR" } my_nums = ..
[Terraform] Terrform 사용법 데이터소스 / 변수(Variable) 이번에는 데이터소스와 변수에 대해서 알아보겠습니다. 데이터소스 데이터소스는 테라폼으로 정의되지 않은 외부 리소스 또는 저장된 정보를 테라폼 내에서 참조할 때 사용합니다. 데이터소스의 구성은 아래와 같이 구성을 할 수 있습니다. 또한, data 로 시작하고 "데이터 소스 유형"을 정의합니다. # Terraform Code data "" "" { = } 참조하기 위해서는 data... 를 사용합니다. 예를 들면 아래와 같이 최신 AWS AMI 버전을 가져 온 후 ec2를 생성 합니다. // AWS AMI 최신 버전 가져오는 data soruce data "aws_ami" "ubuntu" { most_recent = true filter { name = "name" values = ["ubuntu/images..