Search

Terraform & 설치 및 환경 구성

Date
2022/10/17
Catagory
Terraform
Keyword
week1
1 more property

Terraform 이란?

Terraform은 클라우드 및 온프레미스 리소스를 안전하고 효율적으로 빌드, 변경 및 버전화할 수 있는 코드형 인프라 도구입니다. 컴퓨팅, 스토리지 및 네트워킹 리소스와 같은 하위 수준 구성 요소 뿐만 아니라 DNS 항목 및 SaaS 기능과 같은 상위 수준 구성 요소도 관리할 수 있습니다.

Terraform 구성 요소

provider : Infrastructure 공급자를 정의합니다. (AWS, GCP, Azure…)
provider "aws" { region = "ap-northeast-2" profile = "ljyoon" }
JSON
https://registry.terraform.io/browse/providers
resource : 생성할 인프라 자원을 정의합니다. (VPC, EC2, ELB…)
resource "aws_instance" "example" { ami = "ami-0e9bfdb247cc8de84" instance_type = "t2.micro"
JSON
output : 인프라 프로비저닝 terraform apply 후 생성된 리소스를 확인하기 위해 사용합니다.
output "public_ip" { value = aws_instance.example.public_ip description = "The public IP of the Instance" }
JSON
backend : Terraform의 상태를 저장하는 공간입니다. 정의하지 않으면 로컬에 저장됩니다.
backend "s3" { bucket = "tfstate-ljyoon" key = "workspaces-default/terraform.tfstate" region = "ap-northeast-2" dynamodb_table = "terraform-locks-ljyoon" }
JSON
module : 공통적으로 활용할 수 있는 코드를 모듈로 정의합니다.
module "webserver_cluster" { source = "../../../modules/services/webserver-cluster" }
JSON
remote state : 다른 경로의 state를 참조합니다. backend에서 output 정보들을 가져올 때 사용합니다.
data "terraform_remote_state" "vpc" { backend = "remote" config = { organization = "hashicorp" workspaces = { name = "vpc-prod" } } }
JSON
variable
data

Terraform 동작 방식

Terraform은 API(응용 프로그래밍 인터페이스)를 통해 클라우드 플랫폼 및 기타 서비스에서 리소스를 생성하고 관리합니다.
1.
Write : 서버, 로드밸런서 등과 같은 인프라 내 리소스를 정의합니다. main.tf
2.
Initialize(초기화/준비) : Terraform에서 인프라를 관리하는 데 필요한 플러그인을 설치합니다.
지정한 backend에 상태 저장을 위한 terraform.tfstate 파일이 생성됩니다.
local에는 tfstate에 정의된 내용을 담은 .terraform 가 생성됩니다.
동시성 처리를 위한 .terraform.lock.hcl 파일도 생성됩니다.
3.
Plan : 정의한 코드로 만들어질 인프라 내역에 대한 예측 결과를 미리 보여줍니다. 결과에 에러가 없다고 하더라도, Apply 시 에러가 발생할 수 있습니다.
4.
Apply : 정의한 코드로 인프라를 배포합니다. Apply가 완료되면 AWS 상에 실제로 해당 인프라가 생성되고 작업 결과가 backend의 .tfstate, local의 .terraform 에도 저장됩니다.

Terraform, AWS CLI 설치 및 환경 구성

# homebrew를 통한 설치 brew install terraform # 버전 확인 terraform version Terraform v1.3.2 # terraform 명령어 자동완성 설정 terraform -install-autocomplete cat ~/.zshrc autoload -U +X bashcompinit && bashcompinit complete -o nospace -C /usr/local/bin/terraform terraform # homebrew를 통한 설치 brew install awscli # profile 설정 cat .aws/credentials [ljyoon] aws_access_key_id = **************** aws_secret_access_key = *********************************** cat .aws/config [profile ljyoon] region = ap-northeast-2 output = json # pager 비활성화 # awscli 명령어 결과 출력 시 pager를 통해 편리하게 읽기 및 검색이 가능합니다. 하지만 단순히 결과 출력만 필요한 경우 불편하므로 비활성화합니다. export AWS_PAGER="" set AWS_PAGER="" # 실습에 유용한 Tool 설치 brew install tree jq watch
Bash
pager 활성화
pager 비활성화
참고
Terraform UP & Running
가시다님 스터디 자료