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"
}
테라폼은 실행을 위한 플러그인 설치가 필요
테라폼은 수많은 provider와 리소스를 지원하기 때문에, 관련기능이 내장되어 있지 않고 플러그인 방식으로 동작
이를 위한 명령어가 Terraform init
terraform init
아래와 같은 플러그인 파일들이 설치된다
인프라에 바로 반영하기 전에 테라폼은 plan이라는 명령어로 예상결과를 먼저 확인할 수 있다.
terraform plan
또한, 정확한 리소스 정의를 하지 않았을 경우(ex. 오타), 어디서 문제가 일어났는지 알려주기도 한다.
테라폼 코드가 인프라에 적용되는 명령어이다.
terraform apply
코드를 인프라에 반영한 것을 삭제하고 싶다면 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