Introduction
Providers
해당 링크에서 Terraform Provider 목록 확인
해당 링크에서 AWS Provider 설정 확인
Terraform 코드를 저장할 디렉토리 생성
mkdir terraform && cd terraform
Terraform 코드를 작성할 파일 생성
touch main.tf
아래의 코드 블록을 추가하고 저장
terraform { required_providers { aws = { source = "hashicorp/aws" version = "5.45.0" } } }
Provider 다운로드
terraform init
생성된 디렉토리 및 파일 확인
find .
Dependency Lock 파일 확인
cat .terraform.lock.hcl
Dependency Lock 파일 복제본 생성
cp .terraform.lock.hcl .terraform.lock.hcl.copy
다수의 개발자가 다양한 플랫폼에서 협업한다고 가정하고 Dependency Lock 파일 업데이트
terraform providers lock \ --platform=linux_arm64 \ --platform=linux_amd64 \ --platform=darwin_amd64 \ --platform=windows_amd64
Dependency Lock 파일의 변경사항 확인
diff .terraform.lock.hcl.copy .terraform.lock.hcl -y
복사한 Dependency Lock 파일 삭제
rm .terraform.lock.hcl.copy
해당 링크를 통해서 Terraform 코드에 사용되는 .gitignore 파일 확인
리소스 생성
해당 링크를 통해서 EC2 인스턴스 생성에 사용되는 코드 블록 확인
Terraform 코드에 아래의 코드블록을 추가하고 저장
resource "aws_instance" "web" {}
인프라 변경 사항 확인
terraform plan
위의 링크를 통해서 EC2 인스턴스 생성시 요구되는 변수 확인
위에서 추가한 코드 블록을 아래와 같이 수정하고 저장
resource "aws_instance" "web" { ami = "ami-0c031a79ffb01a803" instance_type = "t2.micro" }
인프라 변경 사항 확인
terraform plan
인프라 변경 사항 반영
terraform apply
해당 링크를 통해서 AWS Provider에 AWS 자격증명을 설정하는 방법 확인
AWS 자격 증명 설정
aws configure
AWS API를 호출하는 AWS 자격증명 확인
aws sts get-caller-identity
인프라 변경 사항 반영
terraform apply
AWS 자격증명 재설정 - region에 ap-northeast-2 입력
aws configure
AWS CLI 설정 파일 확인
cat ~/.aws/config
인프라 변경 사항 반영
terraform apply
해당 링크를 통해서 aws_instance 리소스가 제공하는 속성 정보 확인
Terraform 코드에 아래의 코드블록을 추가하고 저장
output "web_instance_id" { value = aws_instance.web.id }
인프라 변경 사항 확인
terraform plan
Terraform 상태 파일 확인
cat terraform.tfstate
인프라 변경 사항 반영
terraform apply --auto-approve
Terraform 상태 파일의 변경 사항 확인
diff terraform.tfstate.backup terraform.tfstate -y
EC2 인스턴스가 실제로 생성되었는지 확인
aws ec2 describe-instances --instance-ids \ $(terraform output --raw web_instance_id) --no-cli-pager
해당 링크를 통해서 EC2 인스턴스를 생성하는 AWS Provider 소스코드 확인
해당 링크를 통해서 EC2 인스턴스 생성에 사용되는 AWS API 확인
CloudTrail을 통해서 RunInstances API가 호출되었는지 확인
aws cloudtrail lookup-events \ --lookup-attributes AttributeKey=EventName,AttributeValue=RunInstances \ --query 'Events[0]' \ --no-cli-pager
AWS CLI를 통해서 Terraform을 통해서 생성된 리소스 수정
{ curl -sLO "https://raw.githubusercontent.com/awsdocs/aws-doc-sdk-examples/main/aws-cli/bash-linux/ec2/change-ec2-instance-type/change_ec2_instance_type.sh" curl -sLO "https://raw.githubusercontent.com/awsdocs/aws-doc-sdk-examples/main/aws-cli/bash-linux/ec2/change-ec2-instance-type/awsdocs_general.sh" source change_ec2_instance_type.sh change_ec2_instance_type -i $(terraform output --raw web_instance_id) -t t2.small -r -f -v rm change_ec2_instance_type.sh rm awsdocs_general.sh }
인스턴스 타입이 변경되었는지 확인
aws ec2 describe-instances --instance-ids \ $(terraform output --raw web_instance_id) \ --query 'Reservations[0].Instances[0].InstanceType' \ --output text
수동으로 수정한 인프라 변경 사항을 감지하는지 확인
terraform plan
Terraform 코드에 맞게 리소스 수정
terraform apply --auto-approve
인스턴스 타입이 변경되었는지 확인
aws ec2 describe-instances --instance-ids \ $(terraform output --raw web_instance_id) \ --query 'Reservations[0].Instances[0].InstanceType' \ --output text
리소스 삭제
terraform destroy --auto-approve
main.tf 파일에서 아래의 코드 블록 삭제
terraform { required_providers { aws = { source = "hashicorp/aws" version = "5.45.0" } } }
main.tf 파일을 제외한 모든 파일 삭제
{ find . ! -name 'main.tf' -type f -exec rm -f {} + find . -type d -exec rm -rf {} + }
Terraform 환경 생성
terraform init
해당 문서를 통해서 Terraform 플러인 설치 동작 원리 확인
인프라 변경 사항 확인
terraform plan
코드 삭제
cd ~/environment && rm -rf terraform
Last updated