52/120

김건호·2022년 4월 25일
0
post-custom-banner

반복

count를 이용해 리소스를 반복적으로 생성 가능

https://www.terraform.io/language/meta-arguments/count

EC2 인스턴스 4개 생성

resource "aws_instance" "server" {
  count = 4 # create four similar EC2 instances

  ami           = "ami-a1b2c3d4"
  instance_type = "t2.micro"

  tags = {
    Name = "Server ${count.index}"
  }
}

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
}

modulo / modular

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

백엔드(Backend)

현재 사용하고 있는 백엔드: 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
  • 생성된 API 토큰 주소로 접속
  • 토큰 복사하여 로컬에 붙여넣기
  • 연결 완료

모듈관리


모듈 디렉토리에 모듈들을 따로 관리하고, 시스템 별로 모듈을 참조하여 입력변수를 다르게 해서 사용하기

Azure

리소스 그룹

모든 리소스들을 한 눈에 관리 가능

그룹지우면 관련된 리소스 전부 삭제 -> 모든 리소스는 그룹으로 관리

영역 어디에 배치할 것인가 -> 만들어지는 리소스는 다른 영역에 있을 수 있음

리소스 그룹 단순히 리소스의 목록을 관리해주는 시스템 -> 목록을 어디데이터센터에서 관리를 할 것인가
ex)서울 중부에 리소스 그룹이 있다고 해서, 리소스들이 반드시 서울 중부에 있는 것은 아님 -> 리소스들의 목록이 서울중부에 있다는 뜻

azure 구독

구독 ID 에 크레딧을 걸거나 신용카드를 걸어둘 수 있음

사용자 그룹, 접근 제어 관리

  • 소유자 -> 리소스를 소유하고 잇는 리소스에 대해 모든걸 할 수 있음
  • 기여자 -> 모든 리소스 관리 가능 -> 권한 할당은 불가능
  • 독자-> 읽기만 가능
  • 각 서비스별 권한 부여도 가능

가상 네트워크

  • 가상 네트워크 생성 시, 인터넷 게이트웨이 생성
  • azure는 NAT게이트웨이가 없어도 프라이빗 가상머신이 인터넷에 연결이 가능
  • 서브넷 만들때 별도의 가용영역 지정하지 않음 -> 서브넷이 리전 전체에 걸쳐서 만들어짐

가상머신

유일하게 패스워드 인증 제공
사용자이름 지정가능

bastion

azure에서는 bastion 호스트를 관리형 서비스로 사용 가능

오늘의 여담

퍼블릭 클라우드 -> azure aws gcp 불특정 다수에게 서비스 제공
프라이빗 클라우드 -> 회사내에서만 사용하는
하이브리드 -> 위의 두개 합쳐서
멀티 -> 여러개의 퍼블릭 같이 사용
DevOps팀의 Terraform 모험

profile
Ken, 🔽🔽 거노밥 유튜브(house icon) 🔽🔽
post-custom-banner

0개의 댓글