Skip to main content

Terraform


설치

AWS

curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"
unzip awscliv2.zip
sudo ./aws/install
  • AWS Access Key ID and Access Key: IAM -> 사용자 -> <user> -> 보안 자격 증명 -> 액세스 키 만들기
aws configure --profile <profile>

S3

  • ACL 비활성화됨
  • 모든 퍼블릭 액세스 차단
  • 버킷 버전 관리 활성화
  • 기본 암호화 활성화

Terraform

wget -O- https://apt.releases.hashicorp.com/gpg | sudo gpg --dearmor -o /usr/share/keyrings/hashicorp-archive-keyring.gpg
echo "deb [signed-by=/usr/share/keyrings/hashicorp-archive-keyring.gpg] https://apt.releases.hashicorp.com $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/hashicorp.list
sudo apt update && sudo apt install terraform
terraform -install-autocomplete

Tutorial

  • https://developer.hashicorp.com/terraform/language/files
    • Terraform은 *.tf 파일이 있는 디렉토리를 하나의 모듈로 간주합니다.
    • terraform 명령어는 별도의 선언 없이 모듈 내의 모든 *.tf 파일을 실행합니다.
    • 디렉토리 내의 디렉토리 또는 다른 위치의 디렉토리는 별도의 모듈로 간주되며, 별도의 선언이 있어야지만 실행됩니다.
    • terraform 명령어를 실행시키는 위치 또는 별도 선언으로 지정한 모듈이 루트 모듈이 됩니다.
mkdir test && cd test
main.tf
terraform {
required_providers {
aws = {
source = "hashicorp/aws"
version = ">= 4.8, < 5.0"
}
}

required_version = ">= 1.7,< 2.0" # `terraform version`

backend "s3" {
bucket = "<bucket>"
key = "<path>/terraform.tfstate"
region = "us-west-2"
dynamodb_table = "<terraform-table>-locks" # LockID: <bucket>/<key>-md5
encrypt = true
}
}

provider "aws" {
region = "us-west-2"
profile = "<profile>"
}
terraform init
ec2.tf
resource "aws_instance" "app_server" {
ami = "ami-090717c950a5c34d3"
instance_type = "t3.micro"
tags = {
"Name" = "app_server"
}
}

output "instance_id" {
value = aws_instance.app_server.id
}

output "instance_public_ip" {
value = aws_instance.app_server.public_ip
}
terraform refresh
terraform apply
terraform destroy

Reference