본문 바로가기

AWS/Terraform

[AWS Terraform 기초]12. EC2 인스턴스 생성

반응형

이번 포스팅까지의 진행 구성도

 

1. Terraform Docs 예시

https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/instance

 

Terraform Registry

 

registry.terraform.io

 

 

예시:

 

 

인수:

 

 

2. Terraform 코드 작성

 

# 11_ec2.tf
resource "aws_instance" "pmh_ma" {
  ami                         = "ami-0ea4d4b8dc1e46212"
  instance_type               = "t2.micro"
  key_name                    = "pmh-key"
  vpc_security_group_ids      = [aws_security_group.pmh_sg.id]
  availability_zone           = "ap-northeast-2a"
  private_ip                  = "10.0.0.10"
  user_data                   = <<eof
    #! /bin/bash
    yum install -y httpd
    echo "Hello Terraform" > /var/www/html/index.html
    systemctl start httpd
    eof
  subnet_id                   = aws_subnet.pmh_pub[0].id
  associate_public_ip_address = true

  tags = {
    Name = "pmh-pub"
  }
}

 

 

resource "aws_instance" "pmh_ma"

pmh_ma 라는 이름의 aws_instance 리소스를 정의

 

ami = "ami-ami-0ea4d4b8dc1e46212"

인스턴스를 생성할 AMI(Amazon Machine Image)의 ID를 지정


instance_type = "t2.micro"

인스턴스 유형 설정


key_name = "pmh-key"

SSH 키 페어 이름 지정합니다.

(앞서 만들었던 SSH 키 페어)


vpc_security_group_ids = [aws_security_group.pmh_sg.id]

인스턴스에 할당할 보안 그룹 ID

(앞서 만들었던 보안 그룹)


availability_zone = "ap-northeast-2a"

인스턴스를 생성할 가용 영역 지정


private_ip = "10.0.0.10"

인스턴스에 할당할 사설 IP 주소 설정


user_data

인스턴스가 시작될 때 실행될 사용자 데이터

- Bash 스크립트로 구성

- Aache HTTP 서버를 설치하고 "Hello Terraform"이라는 내용의 인덱스 파일을 생성


subnet_id = aws_subnet.pmh_puba.id

인스턴스가 속할 서브넷 ID 지정

(앞서 만들었던 서브넷 중 puba 서브넷을 지정)


associate_public_ip_address = true

인스턴스에 공개 IP 주소를 자동으로 연결할지 여부를 설정

 

tags = { Name = "pmh-pub" }

리소스에 태그 지정

(인스턴스에 식별 가능한 이름 지정)

 

 

3. Terraform 분석 및 적용

 

terraform 파일이 있는 위치에서 아래 명령어 실행

 

# 변경 사항 검토 및 확인
terraform plan

# (대화형 승인 없이)변경 사용항 적용
terraform apply -auto-approve

 

4. 결과

 

 

+ 변수처리하는 방법

 

region, tag 변수 파일 생성

# var.tf
variable "region" {
  type        = string
  description = "region name"
  default     = "ap-northeast-2"
}

variable "tag" {
  type        = string
  default     = "pmh"
}

 

 

# 11_ec2.tf
resource "aws_instance" "pmh_ma" {
  ami                         = "ami-0ea4d4b8dc1e46212"
  instance_type               = "t2.micro"
  key_name                    = "${var.tag}-key"
  vpc_security_group_ids      = [aws_security_group.pmh_sg.id]
  availability_zone           = "${var.region}a"
  private_ip                  = "10.0.0.10"
  user_data                   = <<eof
    #! /bin/bash
    yum install -y httpd
    echo "Hello Terraform" > /var/www/html/index.html
    systemctl start httpd
    eof
  subnet_id                   = aws_subnet.pmh_pub[0].id
  associate_public_ip_address = true

  tags = {
    Name = "${var.tag}-pub"
  }
}

 

 

반응형