Terraform 단일 웹 서버 배포

변재한·2023년 4월 12일
0
post-thumbnail

AWS에 인스턴스 배포

AWS에 인스턴스를 배포하기 위해 AWS Provider를 설정, resource는 aws_instance BLOCK LABLE 사용

# Configure the AWS Provider
provider "aws" {
  region = "ap-northeast-2"
}

# Create a EC2 Instance
resource "aws_instance1" "example" {
  ami = "ami-0e38c97339cddf4bd"
  instance_type = "t2.micro"
}

terraform init

테라폼은 실행을 위한 플러그인 설치가 필요

테라폼은 수많은 provider와 리소스를 지원하기 때문에, 관련기능이 내장되어 있지 않고 플러그인 방식으로 동작

이를 위한 명령어가 Terraform init

terraform init

아래와 같은 플러그인 파일들이 설치된다

terraform plan

인프라에 바로 반영하기 전에 테라폼은 plan이라는 명령어로 예상결과를 먼저 확인할 수 있다.

terraform plan

또한, 정확한 리소스 정의를 하지 않았을 경우(ex. 오타), 어디서 문제가 일어났는지 알려주기도 한다.

terraform apply

테라폼 코드가 인프라에 적용되는 명령어이다.

terraform apply

terraform destroy

코드를 인프라에 반영한 것을 삭제하고 싶다면 terraform destroy를 실행한다.

terraform destroy

단일 웹 서버 배포

구조

주의사항: user_data 부분에서 var.server_port값의 참조를 위해 escape()를 사용해야 한다.

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

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

# 쉘스크립트가 종료된 뒤에도 백그라운드로 busybox가 계속 동작하도록 nohup 명령어 사용
  user_data = <<-EOF
              #!/bin/bash
              echo "Hello, World" > index.html
              nohup busybox httpd -f -p \${var.server_port} &
              EOF

  tags = {
    Name = "terraform-example"
  }
}

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 "server_port" {
  description = "The port the server will use for HTTP requests"
  type        = number
  default     = 8080
}
 
output "public_ip" {
  value       = aws_instance.example.public_ip
  description = "The public IP of the Instance"
}

terraform apply 명령어로 성공적으로 인프라에 반영이 되면 output BLOCK타입에 설정한 public_ip가 출력된다.

종속성 그래프

테라폼 코드에서 하나의 리소스가 다른 리소스와의 관계가 있을 때, 리소스 참조 기능을 사용하여 관계를 정의할 수 있다.

예시는 resource "aws_instance" "example" 와 resource "aws_security_group" "instance"에 나타나 있다.

이러한 종속성 관계를 테라폼은 아래의 명령어로 표시하도록 하고 있다.

terraform graph

profile
Infra and Devops 엔지니어가 되고 싶어용

0개의 댓글