Terraform 세미나 #1

소프트웨어 마에스트로 14기로 활동하면서 전담 멘토님께서 주관하시는 Terraform 세미나을 수강하게 되었고, 해당 세미나를 통해 학습한 키워드를 재학습하여 내 지식으로 만들고자 게시글을 작성하게 되었다.


인프라 관리 도구

IaC

Network, IAM, Server, DB Provisioning

  • HashiCorp Terraform
    • Provider Agnostic
      • 그러면 하나의 코드로 AWS도 만들고, GCP도 만들 수 있냐 ⇒ X
      • 라이브러리가 각 프로바이더별로 제공된다.
    • Terraform Registry
      • 프로바이더를 공유
      • 모듈을 공유
      • 정책을 공유 (유료 버전 → 무시)
      • RUn Tasks (유료 버전 → 무시)
  • CDK for Terraform
  • AWS CDK
    • AWS API
  • Pulumi
  • AWS CloudFormation
    • AWS API
  • Ansible

Image Builder

VMware Image, AWS EC2 AMI, Docker Container Image, Virtual Box Image

  • HashiCorp Packer
  • AWS Image Builder

CM Tools (Configuration Management)

  • Ansible
  • Puppet
  • Chef
  • SaltStack

테라폼 (Terraform)

[DocumentationTerraformHashiCorp Developer](https://developer.hashicorp.com/terraform/docs)
  • 목표
  • VPC 네트워크를 코드로 다뤄보기
  • VPC 개수가 3-5개 정도 제한

핵심 개념 (Core Concepts)

주요 명령어

terraform init
terraform plan
terraform apply
terraform destroy

프로바이더 (Provider)

  • 서비스 제공자 → AWS / GCP / Azure / Google Workspace / GitHub / DataDog / Grafana / Kafka / Kubernetes

모듈 (Module)

-

워크스페이스 (Workspace)

  • 테라폼 상태를 관리하는 단위

테라폼 상태 (Terraform State)

  • 테라폼 코드가 관리중인 리소스들의 상태를 저장
  • 로컬 테라폼 상태 파일이 terraform.tfstate

테라폼 상태 저장소 ( Terraform State Backend / Terraform State Storage)

  • 로컬 저장소
  • 리모트 저장소 (Lock 지원 여부)
    • AWS S3 + DynamoDB
    • Terraform Cloud
    • Terafform Enterprise
    • Consul
    • Kubernetes ETCD

리소스 (Resource)

  • 인프라를 구성하고자 하는 자원을 정의 (VPC, S3 Bucket, EC2 Instance, ASG 등)
  • 실제로는 API 엔드포인트 단위인 경우가 많음
  • 참조 시에 resource_type.resource_name 혹은 resource_type.resource_name.attribute

데이터 소스 (Data Source)

  • 원격에서 데이터를 로드해서 활용하기 위해 사용
  • data {} 블록으로 정의
  • data.data_source_type.name 혹은 data.data_source_type.name.attribute로 참조

로컬 변수 (Local Variables)

  • 지역 변수를 정의하여 재활용 가능
  • locals {} 블록으로 정의
  • local.local_var_name

입력 변수 (Input Variables)

  • 워크스페이스의 입력 값을 정의
  • CLI 옵션: terraform apply -var key=val
  • 환경 변수: export TF_VAR_key=val
  • 파일 .tfvars 확장자
    • terraform apply -var-file=a.tfvars
    • .auto.tfvars 확장자 혹은 terraform.tfvars는 자동 적용
  • variable {} 블록으로 정의
  • 참조 시에 var.var_name

출력 변수 (Output Variables)

  • 워크스페이스의 출력 값을 정의
  • output {} 블록으로 정의

디렉터리 구성

  • 확장자는 .tf
  • 일반적인 구성 (소규모)
    • **main.tf**
    • **variables.tf**
    • **outputs.tf**
    • terraform.tf 혹은 providers.tf
    • versions.tf

AWS 신기능 업데이트 순서

  • AWS API > AWS CLI > AWS Web Console