코드로 인프라를 관리하는 것을 의미한다.
서버, DB, 네트워크, 로그, 애플리케이션 구성, 문서, 자동화된 테스트, 배포 프로세스 등 거의 모든 작업을 코드로 관리
*AWS-계정
윈도우, 리눅스 , Mac
테라폼 설치, AWS CLI 설치, 윈도우(CMD) ==> VS Code
https://www.terraform.io/downloads ( 다운 압축 해제 C:\terraform 폴더 생성해서 넣기 )
cmd / terrform 입력 하면 안됨 ⇒ 환경변수 등록
내컴퓨터 / 속성 / 고급시스템 설정 / 고급탭 선택 환경변수 /


새로만들기 / C:\terraform 입력
CMD창을 새로 열어서 / terraform -version으로 확인
*AWS CLI 설치
https://docs.aws.amazon.com/ko_kr/cli/v1/userguide/install-windows.html
AWSCLIV2 기본으로 설치 후 재부팅
*VS Code 설치

C에 생성한 Terraform 폴더 지정
Terraform 폴더에 테라폼 main.tf 파일 생성
-AWS 사용자 계정 생성을 하고, 사용자에게 권한을 부여해야함.
엑세스키, 비밀키 메모 해 놓고
cmd창에 aws configure 입력하고
액세스키 와 비밀키 등록
리전과 json은 그냥 엔터 해주면 됨
-AWS EC2 인스턴스 AMI를 ID를 복사 ami-0d6e6a06d11d7777d

terraform init ⇒ 초기화 명령어로 최초 한번만 실행
terraform validate ⇒ 작성한 코드에 대해 문법 검사
terraform plan ⇒ 코드 작성한것 가상실행
terraform apply ⇒ 코드가 적용됨 ( EC2 등이 생성 되고 수정 )
terraform show ⇒ 리소스 상태 확인
terraform destroy ⇒ 리소스 삭제
코드 작성
provider : 공급자 지정 ( aws , ansible, docker, k8s )
resource : 구성 요소를 지정 ( ami , instance_type ) 저장 / 실행

인스턴스 실행

인스턴스 수정
추가, 제거, 수정할 내용을 입력하고 실행 , EC2에 이름 지정 (tags)
terraform plan, terraform apply로 수정

키페어 추가, ( key_name = "soldesk.pem", 인스턴스 삭제 후 생성 )
포트 추가 ( ingress: 규칙 , 네트워크 관련 )
port = [ 80, 22, 443 ] ( 포트 지정 ),
from_port = 8080, to_port = 8080 ( 8080~8080, 8080만 포트 지정)
protocol = "tcp",
cidr_blocks = ["0.0.0.0/0"]
보안 그룹 지정
vpc_security_group_ids = [aws_security_group.instance.id]
resource "aws_security_group" "instance" {
ingress {
--from_port = 8080
--to_port = 8080
--protocol = "tcp"
--cidr_blocks = ["0.0.0.0/0"]
} , ( 보안 그룹의 인바운드 규칙 지정 )

⇒ 5가지 과정을 단계별로 실행 하면서 생성되는것 확인
EC2만 생성 /실행 ⇒ tags 지정/실행 ⇒ 키페어 지정/실행 ⇒ 포트 지정 /실행 ⇒ userdata 입력 /실행
반복적인 작업이 필요할 때 테라폼을 사용하면 유용하다

provider : 공급자 지정 ( aws,ansible,docker,k8s )
resource : 구성 요소를 지정 ( ami,instance_type,포트등) resource는 여러개로 구분 가능함.
#main.tf 코드 ================================================
provider "aws" { #AWS 사용선언
region = "ap-northeast-2" #리전 지정
}
resource "aws_instance" "example" {
ami = "ami-0c55b159cbfafe1f0" ⇒ OS 이미지 ami
instance_type = "t2.micro" ⇒ 여기까지만 하면 기본 껍데기가 생성됨.
vpc_security_group_ids = [aws_security_group.instance.id] ⇒ 기본 VPC지정
tags = { ⇒ EC2 이름 지정하기
Name = "terraform-example"
}
}
resource "aws_security_group" "instance" { ⇒ 보안그룹에 포트 지정
ingress {
from_port = 8080 -> 80
to_port = 8080 -> 22
protocol = "tcp" -> tcp
cidr_blocks = ["0.0.0.0/0"]
}
**ingress** {
from_port = 22 -> port = [ 80 , 22 ]
to_port = 22
protocol = "tcp"
cidr_blocks = ["0.0.0.0/0"]
}
}
-웹서버 생성시 필요한 정보 리소스 입력 ⇒ 자동 실행
user_data = <<-EOF
-#!/bin/bash
-echo "Today 06-04" > index.html
-nohup busybox httpd -f -p 8080 &
-EOF
주어진 내용을 백그라운드로 실행하는 스크립트
ec2 접속해서 디렉터리와 웹페이지 접속 확인
VPC 생성
resource "aws_vpc" "main" {
cidr_block = "10.0.0.0/16"
tags = {
Name = "terraform-vpc"
}
서브넷 생성
- resource "aws_subnet" "PUB-sub1-2a" {
----**vpc_id = aws_vpc.main.id**
----cidr_block = "10.0.1.0/24"
----availability_zone = "ap-northeast-2a"
----tags = {
------Name = "PUB-s1-2a"
----}
}
⇒ 실행후 서브넷 생성된것 확인 하고 "10.0.10.0/24", "10.0.20.0/24" 수정 / 실행 해서
수정(~)된 부분이 적용되는지 확인
- resource "aws_internet_gateway" "i-gw" {
----vpc_id = aws_vpc.main.id
----tags = {
------Name = "main-igw"
----}
}
*라우팅 테이블 생성 ( 내부 / 외부 네트워크 연결 )
- resource "aws_route_table" "rt" {
----vpc_id = aws_vpc.main.id
----tags = {
------Name = "main-rt"
----}
}
- resource "aws_route_table_association" "rt-association-PUB-sub1-2a" {
----subnet_id = aws_subnet.PUB-sub1-2a.id
----**route_table_id** = aws_route_table.rt.id
}
- resource "aws_eip" "eip" {
----vpc = true
----**lifecycle** {
------create_before_destroy = true
----}
}
- resource "aws_nat_gateway" "nat_gw1" {
----allocation_id = aws_eip.eip.id
----subnet_id = aws_subnet.PUB-sub1-2a.id
----tags = {
------Name = "PUB-Nat-gw1"
----}
}
vpc 생성 및 서브넷 4개 생성 ( PUB-2개)
인터넷 게이트웨이 생성
라우팅 테이블 생성
프라이빗 서브넷 2개 더 생성 하고 NAT gateway 구성 한 내용.
IaC 관련 기사
https://www.comworld.co.kr/news/articleView.html?idxno=50396
https://www.redhat.com/ko/topics/automation/what-is-infrastructure-as-code-iac
Terraform
https://developer.hashicorp.com/terraform/intro
Terraform CLI
https://developer.hashicorp.com/terraform/cli/config/config-file
provider
https://developer.hashicorp.com/terraform/language/providers
Provider_ovirt
https://registry.terraform.io/providers/oVirt/ovirt/latest/docs
Resource
https://developer.hashicorp.com/terraform/language/resources
Variable
https://developer.hashicorp.com/terraform/language/values/variables