반응형
안녕하세요. 이 글은 테라폼스터디 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
반응형
'연재 시리즈' 카테고리의 다른 글
테라폼 시리즈 15편. vpc, subnet, internetgateway 생성 (0) | 2022.10.25 |
---|---|
ArgoCD 9편 - Project 상세내용 (0) | 2022.10.23 |
테라폼 시리즈 11편. 변수와 입력 (0) | 2022.10.22 |
테라폼 시리즈 10편. 출력(Output) (0) | 2022.10.22 |
테라폼 시리즈 9편. 리소스 참조 (0) | 2022.10.22 |