count
를 이용해 리소스를 반복적으로 생성 가능
resource "aws_instance" "server" {
count = 4 # create four similar EC2 instances
ami = "ami-a1b2c3d4"
instance_type = "t2.micro"
tags = {
Name = "Server ${count.index}"
}
}
생성된 리소스를 참조할 때 사용
resource "aws_eip" "app_server_eip" {
count = var.instance_count
instance = aws_instance.app_server[count.index].id
vpc = true
tags = local.common_tags
}
output 블록에서는 count 아규먼트를 사용할 수 없음
*
을 사용하여 표시할 수 있음output "app_server_elastic_ip" { value = aws_eip.app_server_eip.*.public_ip }
count
가 5이고 서브넷 수가 4인경우 subnet[4]를 만드려고 시도하기 때문에 에러가 남 -> modulo 연산을 통해 순환
%
M % N = R(emain: 나머지)
M mod N = R
0 % 4 = 0
1 % 4 = 1
2 % 4 = 2
3 % 4 = 3
4 % 4 = 0
5 % 4 = 1
6 % 4 = 2
7 % 4 = 3
subnet_id = module.app_vpc.public_subnets[count.index % length(module.app_vpc.public_subnets)]
리로스 aws_ami 데이터소스 aws_ami
https://registry.terraform.io/providers/hashicorp/aws/latest/docs/data-sources/ami
프로바이더에서 정보를 가져온다.
data "aws_ami" "example" {
executable_users = ["self"]
most_recent = true
name_regex = "^myami-\\d{3}"
owners = ["self"]
filter {
name = "name"
values = ["myami-*"]
}
filter {
name = "root-device-type"
values = ["ebs"]
}
filter {
name = "virtualization-type"
values = ["hvm"]
}
}
참조
data.aws_ami.example.id
현재 사용하고 있는 백엔드: Local Backend
s3, dynamo DB 를 이용한 원격 백엔드
https://www.terraform.io/language/settings/backends/s3
다른 사람과 협업할 때 설정파일이 서로 동기화 되지 않기 때문에 사용하는 서비스
terraform {
backend "remote" {
organization = "example_corp"
workspaces {
name = "my-app-prod"
}
}
}
terrafrom login
모듈 디렉토리에 모듈들을 따로 관리하고, 시스템 별로 모듈을 참조하여 입력변수를 다르게 해서 사용하기
모든 리소스들을 한 눈에 관리 가능
그룹지우면 관련된 리소스 전부 삭제 -> 모든 리소스는 그룹으로 관리
영역 어디에 배치할 것인가 -> 만들어지는 리소스는 다른 영역에 있을 수 있음
리소스 그룹 단순히 리소스의 목록을 관리해주는 시스템 -> 목록을 어디데이터센터에서 관리를 할 것인가
ex)서울 중부에 리소스 그룹이 있다고 해서, 리소스들이 반드시 서울 중부에 있는 것은 아님 -> 리소스들의 목록이 서울중부에 있다는 뜻
구독 ID 에 크레딧을 걸거나 신용카드를 걸어둘 수 있음
유일하게 패스워드 인증 제공
사용자이름 지정가능
azure에서는 bastion 호스트를 관리형 서비스로 사용 가능
퍼블릭 클라우드 -> azure aws gcp 불특정 다수에게 서비스 제공
프라이빗 클라우드 -> 회사내에서만 사용하는
하이브리드 -> 위의 두개 합쳐서
멀티 -> 여러개의 퍼블릭 같이 사용
DevOps팀의 Terraform 모험