안녕하세요. 이 글은 테라폼스터디 1주차 내용을 정리했습니다.
1. 리소스 참조란?
리소스가 다른 리소스와 관계가 있다면, 테라폼은 리소스 참조라는 기능을 제공하여 리소스 관계를 설정합니다.
예를 들어 aws EC2 Instance에서는 Securtiy Group이 필요합니다. Security Group을 먼저 생성한 후, EC2 Instance 리소스에서 {BLOCK LABEL}.{resource name}.{attribute}로 Security Group리소스에 접근할 수 있습니다.
2. 예제
테라폼 리소스 참조 예제는 EC2 Instance를 생성하고 외부에서 접속할 수 있도록 http 애플리케이션을 실행합니다. 외부에서는 EC2 Instance의 http://public_IP:8080으로 애플리케이션에 접근합니다.
외부에서 8080포트를 이용하여 EC2 Instance에 접속해야 하기 때문에, security group을 생성하고 8080포트 InBound규칙을 추가해야합니다. 그리고 EC2 Instance가 생성한 security group을 사용하면 됩니다.
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 "Hello, T101 Study" > index.html
nohup busybox httpd -f -p 8080 &
EOF
tags = {
Name = "t101-study-single-webSrv"
}
}
resource "aws_security_group" "instance" {
name = "terraform-example-instance"
ingress {
from_port = 8080
to_port = 8080
protocol = "tcp"
cidr_blocks = ["0.0.0.0/0"]
}
}
EOT
terraform apply명령어를 실행하여 테라폼 코드를 aws에 반영합니다.
terraform apply
상태목록을 조회하면 security group과 EC2 Instance가 있습니다.
terraform state list
aws EC2 Instance 대시보드드에서 생성한 ec2를 확인해보세요. Security group이 테라폼 코드에서 생성한 security group로 연결되어 있습니다. 그리고 InBound규칙에 8080포트가 허용되어 있습니다. 테라폼 코드 내용이 잘 적용되었네요.
EC2 Instance public ip를 확인 후, 8080포트로 접속하면 “Hello, T101 study”메세지를 볼 수 있습니다.
3. 종속성 그래프
테라폼 코드에 참조가 설정되면, 실행 순서가 어떻게 될까요? 테라폼은 관계를 분석하여 먼저 실행이 필요한 리소스부터 인프라에 반영합니다.
헷갈릴수 있는 내용은 테라폼 코드 위치가 실행순서에 관련없습니다. 아래 예제처럼 aws_security_group코드가 아래에 위치히지만, 2번쨰로 실행되었습니다.
종속성 그래프는 terrafrom graph명령어로 추출했습니다.
terraform graph | dot -Tsvg > graph.svg
dot 명령어를 실행하기 위해 graphviz리눅스 패키지 설치가 필요합니다
sudo apt-get install graphviz
'연재 시리즈' 카테고리의 다른 글
테라폼 시리즈 11편. 변수와 입력 (0) | 2022.10.22 |
---|---|
테라폼 시리즈 10편. 출력(Output) (0) | 2022.10.22 |
테라폼 시리즈 8편. 변경/변경불가능 속성 (0) | 2022.10.21 |
테라폼 시리즈 7편. 테라폼 상태파일(tfstate) (0) | 2022.10.21 |
테라폼 시리즈 6편. AWS EC2 Instance 생성 예제 (0) | 2022.10.19 |