Windows 10 환경에서 Terraform을 이용한 AWS 자원 배포 - 개인과제
1. Ubuntu EC2에 apache(httpd) 를 설치하고 index.html 파일을 생성해 임의의 문장 출력
2. Terraform 변수를 활용해 httpd 포트를 50000으로 변경하고 접속 가능하도록 구성
echo provider "aws" { > main.tf
echo region = "ap-northeast-2" >> main.tf
echo } >> main.tf
echo. >> main.tf
echo resource "aws_instance" "example" { >> main.tf
echo ami = "ami-0e9bfdb247cc8de84" >> main.tf
echo instance_type = "t2.micro" >> main.tf
echo vpc_security_group_ids = [aws_security_group.instance.id] >> main.tf
echo. >> main.tf
echo user_data = "${templatefile("userdata-web.tftpl", {server_port = var.server_port})}" >> main.tf
echo. >> main.tf
echo user_data_replace_on_change = true >> main.tf
echo. >> main.tf
echo tags = { >> main.tf
echo Name = "Single-MyWebSrv" >> main.tf
echo } >> main.tf
echo } >> main.tf
echo. >> main.tf
echo resource "aws_security_group" "instance" { >> main.tf
echo name = var.security_group_name >> main.tf
echo. >> main.tf
echo ingress { >> main.tf
echo from_port = var.server_port >> main.tf
echo to_port = var.server_port >> main.tf
echo protocol = "tcp" >> main.tf
echo cidr_blocks = ["0.0.0.0/0"] >> main.tf
echo } >> main.tf
echo egress { >> main.tf
echo from_port = 0 >> main.tf
echo to_port = 0 >> main.tf
echo protocol = "-1" >> main.tf
echo cidr_blocks = ["0.0.0.0/0"] >> main.tf
echo } >> main.tf
echo } >> main.tf
echo. >> main.tf
echo variable "security_group_name" { >> main.tf
echo description = "The name of the security group" >> main.tf
echo type = string >> main.tf
echo default = "terraform-my-instance" >> main.tf
echo } >> main.tf
echo. >> main.tf
echo output "public_ip" { >> main.tf
echo value = aws_instance.example.public_ip >> main.tf
echo description = "The public IP of the Instance" >> main.tf
echo } >> main.tf
type main.tf
echo #!/bin/bash > userdata-web.tftpl
echo sudo apt-get update >> userdata-web.tftpl
echo sudo apt install -y apache2 >> userdata-web.tftpl
echo sudo systemctl start apache2 >> userdata-web.tftpl
echo sudo systemctl enable apache2 >> userdata-web.tftpl
echo sudo sed -i 's/Listen 80/Listen ^${server_port}/' /etc/apache2/ports.conf >> userdata-web.tftpl
echo echo "Hello, Ersia. This is test HTTP WEB." ^| sudo tee /var/www/html/index.html >> userdata-web.tftpl
echo sudo systemctl restart apache2 >> userdata-web.tftpl
type userdata-web.tftpl
echo variable "server_port" { > variables.tf
echo description = "The port the server will use for HTTP requests" >> variables.tf
echo type = number >> variables.tf
echo default = 50000 >> variables.tf
echo } >> variables.tf
type variables.tf
수행결과
과제 중 특이사항
- windows cmd에서는 구글링해서 나오는 terraform 문법과 다소 차이가 있어 동작하는 코드로 수정하는데 다소 시간이 소요됨 (예시: " 과 ' 의 차이 또는 특수문자 인식 등)
- windows cmd에서는 EOF가 적용되지 않아 server_port 변수를 userdata에 전달할 방법이 별도로 필요함
-> 이를 위해 templatefile을 사용 - userdata의 오타나 명령어 미스로 인해 접속이 되지 않을 경우 원인을 찾는데 다소 시간이 소요됨