Terraform Command 기본 사항
Terraform-on-AWS/02-Basic-Terraform/02-02-terraform-command at main · Arc1el/Terraform-on-AWS
Step-01: 소개
- 기본적인 Terraform Command 이해하기
- terraform init
- terraform validate
- terraform plan
- terraform apply
- terraform destroy
Step-02: EC2 Instance와 VPC 생성을 위한 테라폼 코드
- 전제조건
- 사용된 AMI이미지에 대해 존재하지 않을경우 업데이트된 이미지를 사용
- AWS Credentials가 설정되어있음
- Code
# Terraform Settings Block
terraform {
required_providers {
aws = {
source = "hashicorp/aws"
#version = "~> 3.21" # Optional but recommended in production
}
}
}
# Provider Block
provider "aws" {
profile = "default" # AWS Credentials Profile configured on your local desktop terminal $HOME/.aws/credentials
region = "ap-northeast-2"
}
resource "aws_vpc" "default" {
cidr_block = "10.0.0.0/16"
tags = {
Name = "myVPC"
"hmkim" = "terraform-vpc"
}
}
resource "aws_subnet" "example" {
vpc_id = aws_vpc.default.id
cidr_block = "10.0.1.0/24"
availability_zone = "ap-northeast-2a"
tags = {
"hmkim" = "terraform-subnet"
}
}
# Resource Block
resource "aws_instance" "terraformDemo" {
ami = "ami-09cd5dd529c3c1f40" # Amazon Linux in us-east-1, update as per your region
instance_type = "t3.micro"
subnet_id = aws_subnet.example.id
tags = {
"hmkim" = "terraform-instance"
}
}
- terraform 블록: 이 블록은 테라폼 설정을 지정합니다. 여기에서는 테라폼에서 AWS 공급자를 사용하도록 요구하며, 특정 버전이 아닌 최신 버전을 사용합니다.
- provider 블록: 이 블록은 Terraform에게 AWS 자원을 생성할 때 사용할 AWS 공급자를 지정합니다. 이 구성에서는 기본 프로필을 사용하며, 리전은 ap-northeast-2로 설정됩니다.
- resource "aws_vpc" "default" 블록: 이 블록은 AWS VPC를 생성합니다. VPC의 CIDR 블록은 10.0.0.0/16이며, VPC에 대한 태그를 지정합니다.
- resource "aws_subnet" "example" 블록: 이 블록은 AWS 서브넷을 생성합니다. 이 서브넷은 aws_vpc.default에서 생성한 VPC에 속하며, CIDR 블록은 10.0.1.0/24입니다. 이 서브넷은 ap-northeast-2a 가용 영역에 있습니다.
- resource "aws_instance" "terraformDemo" 블록: 이 블록은 EC2 인스턴스를 생성합니다. 이 인스턴스는 ami-09cd5dd529c3c1f40 Amazon Linux AMI를 사용하며, 인스턴스 유형은 t3.micro입니다. 이 인스턴스는 aws_subnet.example에서 생성한 서브넷에 속합니다. 마지막으로, 이 인스턴스에 대한 태그를 지정합니다.
Step-03: Terraform Core Commands
- 테라폼을 실행해봅니다
- Code
# Initialize Terraform
terraform init
# Terraform Validate
terraform validate
# Terraform Plan to Verify what it is going to create / update / destroy
terraform plan
# Terraform Apply to Create EC2 Instance
terraform apply
Step-04: Verify the EC2 Instance in AWS Management Console
- AWS 콘솔 → EC2 → 인스턴스 생성 확인
- AWS 콘솔 → VPC → VPC 생성 확인
Step-05: Destroy Infrastructure
- Destroy를 사용하여 생성된 인프라를 삭제합니다
# Destroy EC2 Instance
terraform destroy
# Delete Terraform files
rm -rf .terraform*
rm -rf terraform.tfstate*
Terraform 언어 문법
Terraform-on-AWS/02-Basic-Terraform/02-03-terraform-syntax at main · Arc1el/Terraform-on-AWS
Step-01: 소개
- 기본적인 Terraform의 신택스에 대해서 이해합니다
- Blocks
- Arguments, Attributes & Meta-Arguments
- Identifiers
- Comments
Step-02: Terraform 설정 언어 문법
# 템플릿
# 블록바디 시작
<BLOCK TYPE> "<BLOCK LABEL>" "<BLOCK LABEL>" {
# 아규먼트
<IDENTIFIER> = <EXPRESSION>
}
# AWS 예시
# 블록 시작
resource "aws_instance" "ec2demo" {
# 아규먼트
ami = "ami-04d29b6f966df1537"
# Variable Value 표현식을 가진 아규먼트
# Variable Value는 variables.tf 파일에서 대체되어짐
instance_type = var.instance_type
}
# 블록 끝
Step-03: Arguments, Attributes, Meta-Arguments 이해
- Arguments는 필수(required) 이거나 선택(optional)
- Attribues 포맷은 resource_type.resource_name.attribute_name 와 같은 형태이어야 합니다.
- Meta-Arguments 는 리소스 타입의 behavior (Example: count, for_each) 에 따라 바뀝니다.
- 🔗 Additional Reference
- 🔗 Resource: AWS Instance
- 🔗 Resource: AWS Instance Argument Reference
- 🔗 Resource: AWS Instance Attribute Reference
- 🔗 Resource: Meta-Arguments
Step-04: Terraform Top-Level Blocks 이해
Terraform에서는 다양한 Top-Level Block이 존재합니다. 이러한 블록들은 Terraform 파일의 최상위 수준에 위치하며, 테라폼 코드를 정의하고 Terraform의 동작을 설정하는 데 사용됩니다.
- Terraform Settings Block Terraform Settings Block은 테라폼 설정을 정의하는 데 사용됩니다. required_providers를 포함하여 AWS, GCP, Azure, DigitalOcean과 같은 공급자, 백엔드, 버전 제어 등과 같은 전역 Terraform 설정을 정의할 수 있습니다. 이 블록을 사용하여 다양한 옵션을 구성하고 프로젝트의 구성을 최적화할 수 있습니다.
- Provider Block Provider Block은 특정 공급자(예: AWS, GCP 등)와 연결된 자원을 정의합니다. 이 블록은 공급자와 상호 작용하고 프로젝트의 자원을 생성하고 관리합니다. 이 블록에서는 사용할 공급자를 지정하고 AWS, Azure, GCP와 같은 공급자의 인증 정보(예: API 키, 비밀 키)를 정의할 수 있습니다.
- Resource Block Resource Block은 인프라의 개별 리소스(예: EC2 인스턴스, VPC, 서브넷 등)를 정의합니다. 이 블록에서는 리소스 유형과 이름, 속성, 태그 등을 지정할 수 있습니다. 이 블록을 사용하여 인프라를 생성, 관리, 수정 및 삭제할 수 있습니다.
- Input Variables Block Input Variables Block은 템플릿에서 사용할 변수를 정의합니다. 변수는 Terraform 파일에서 사용할 수 있으며 템플릿에서 값을 전달받을 수 있는 방법을 제공합니다. 변수는 템플릿에서 사용할 데이터를 구성하는 데 도움이 되며, 코드 재사용성을 높일 수 있습니다.
- Output Values Block Output Values Block은 테라폼 실행 후 표시되는 값(예: IP 주소, 리소스 이름 등)을 정의합니다. 이 블록은 리소스의 출력을 정의할 수도 있습니다. 이 블록은 다른 Terraform 모듈에서 출력된 값을 사용하는 데 도움이 됩니다.
- Local Values Block Local Values Block은 지역 변수를 정의하는 데 사용됩니다. 이 블록에서는 다른 블록에서 사용할 지역 변수를 정의하고 사용할 수 있습니다. 이 블록을 사용하여 다른 블록에서 사용할 값을 계산하고 저장할 수 있습니다.
- Data Sources Block Data Sources Block은 인프라의 데이터를 정의합니다. 이블록에서는 인프라 상태의 데이터를 검색할 수 있는 방법을 제공합니다. 이 블록은 외부 시스템에서 데이터를 가져오는 데 사용됩니다. 이 블록에서는 외부 데이터 소스의 유형과 위치를 지정할 수 있습니다.
- Modules Block Modules Block은 Terraform 코드를 모듈화하는 데 사용됩니다. 모듈은 인프라의 동일한 유형의 리소스를 여러 번 생성하는 데 사용됩니다. 이 블록에서는 다른 Terraform 파일에서 모듈로 재사용할 수 있는 리소스와 구성을 정의할 수 있습니다. 모듈화를 사용하면 코드 재사용성을 높이고 유지보수 및 확장성을 개선할 수 있습니다.
블록을 적절하게 사용하여 인프라를 생성, 관리 및 수정할 수 있으며, 코드 재사용성을 높이고 유지보수성을 개선할 수 있습니다.
'Terraform' 카테고리의 다른 글
Terraform on AWS 2. 테라폼 설치 & AWS CLI 설치 (0) | 2023.11.30 |
---|---|
Terraform on AWS 1. 코드기반인프라의 개념과 중요성 (Infrastructure as Code : IAC) (0) | 2023.11.23 |