연재 시리즈

테라폼 시리즈 12편. 1주차 과제

악분 2022. 10. 22. 11:58
반응형

안녕하세요. 이 글은 테라폼스터디 1주차 과제를 정리했습니다.

 

1. 과제1

1.1 목표

EC2 Instance에 Apache 실행합니다. 외부에서 Apache에 접속하면 NICKNAME을 리턴합니다.

 

1.2 요구사항

  • user_data를 이용하여 EC2 Instance에 apache를 설치합니다.
  • index.html은 닉네임을 출력하도록 설정합니다. 작업내용은 user_data에 설정합니다.
  • 잘 반영되었는지 닉네임 출력을 확인합니다.

 

1.3 실습내용

  • user-data
    • apache를 설치하는 스크립트를 추가했습니다.
    • 외부에서 http를 호출하면 닉네임을 출력해야하므로 index.html파일 내용을 수정했습니다.
  • security-group
    • apache를 설치하기 위해 ubuntu 패키지 목록을 업데이트해야 합니다. 그래서 OutBound를 모두 열어줬습니다.
    • 외부에서 http를 호출하기 위해 Ingress에 80번을 허용했습니다.
cat <<EOT > main.tf

provider "aws" {
  region = "ap-northeast-2"
}

resource "aws_instance" "example" {
  ami                    = "ami-0e9bfdb247cc8de84"
  instance_type          = "t2.nano"
  vpc_security_group_ids = [aws_security_group.instance.id]

  user_data = <<-EOF
  #!/bin/bash
  sudo apt update -y
  sudo apt install apache2 -y
  sudo echo "akbun" > /var/www/html/index.html
  EOF

  tags = {
    Name = "t101-week1-project1"
  }
}

resource "aws_security_group" "instance" {
  name = var.security_group_name

  ingress {
    from_port   = 80
    to_port     = 80
    protocol    = "tcp"
    cidr_blocks = ["0.0.0.0/0"]
  }

  egress {
    from_port   = 0
    to_port     = 0
    protocol    = "-1"
    cidr_blocks = ["0.0.0.0/0"]
  }
}

variable "security_group_name" {
  description = "The name of the security group"
  type        = string
  default     = "terraform-my-instance"
}

output "public_ip" {
  value       = aws_instance.example.public_ip
  description = "The public IP of the Instance"
}
EOT

 

terraform apply명령어를 실행하여 코드를 aws에 반영합니다. 반영이 성공하면 마지막에 output에 설정한 public_ip가 출력됩니다.

 

웹 브라우저에 public_ip로 접속하면 닉네임이 보입니다.

 

2. 과제2

2.1 목표

EC2 Instance에 web application을 실행하고 외부에서 접속하는 예제를 실습합니다. 

 

2.2 요구사항

  • 접속PORT는 다른사람이 수정할 수 있도록 변수로 설정합니다. 변수이름은 sevrer_port입니다. 변수는 variables.tf파일에 저장합니다.
  • 적절한 방법으로 변수를 초기화 합니다. 접속PORT는 50000입니다.
  • EC2 Instance의 public IP를 output에 저장합니다.

 

2.3 실습내용

요구사항에 변수가 variables.tf파일에 저장해야하므로 variables.tf파일에 변수를 설정합니다. 요구사항 2번에 server_port의 값이 명시되어 있어, default로 50000번으로 변수 값을 초기화합니다.

cat <<EOT > variables.tf
variable "server_port" {
  description = "The port the server will use for HTTP requests"
  type        = number
  default     = 50000
}
EOT

 

security_group과 EC2 Instance리소스를 설정합니다. security group에서 변수 server_port를 참조합니다. EC2 Instance는 user_data라는 속성에서 server_port변수를 참조해야 하므로 ${}를 사용합니다. 주의사항은 escape(\)도 같이 사용해야 합니다.

cat <<EOT > main.tf
provider "aws" {
  region = "ap-northeast-2"
}

resource "aws_instance" "example" {
  ami                    = "ami-0e9bfdb247cc8de84"
  instance_type          = "t2.nano"
  vpc_security_group_ids = [aws_security_group.instance.id]

  user_data = <<-EOF
              #!/bin/bash
              echo "My Web Server - var test" > index.html
              nohup busybox httpd -f -p \${var.server_port} &
              EOF

  user_data_replace_on_change = true

  tags = {
    Name = "Single-MyWebSrv"
  }
}

resource "aws_security_group" "instance" {
  name = var.security_group_name

  ingress {
    from_port   = var.server_port
    to_port     = var.server_port
    protocol    = "tcp"
    cidr_blocks = ["0.0.0.0/0"]
  }
}

variable "security_group_name" {
  description = "The name of the security group"
  type        = string
  default     = "terraform-my-instance"
}

output "public_ip" {
  value       = aws_instance.example.public_ip
  description = "The public IP of the Instance"
}
EOT

 

terraform apply명령어를 실행하여 테라폼 코드를 aws에 반영합니다.

terraform init
terraform apply

 

http://public_ip:50000으로 접근하면 EC2 Instance에 실행되고 있는 웹 애플리케이션 응답을 볼 수 있습니다.

 

3. 리소스 삭제

실습이 끝나고 리소스를 삭제합니다.

terraform destroy
반응형