웹사이트 검색

Terraform에서 루프를 사용하는 방법


네트워킹 인프라는 많은 조직에서 중요한 요소입니다. 클라우드 서비스 사용의 이점으로 인해 많은 조직에서 워크로드를 클라우드로 이전했습니다. 이러한 클라우드 인프라 내부의 리소스를 효율적으로 관리하려면 고급 기술(도구)과 풍부한 경험이 필요합니다. 오늘날 클라우드 기반 인프라를 자동화하는 데 사용할 수 있는 많은 도구가 있습니다. Terraform은 최근 DevOps 세계에서 엄청난 인기를 얻은 도구 중 하나입니다.

Terraform은 무엇에 관한 것입니까?

Terraform은 HashiCorp에서 개발 및 유지 관리하는 오픈 소스 도구입니다. 자체 Hashicorp 구성 언어인 HCL을 사용하여 여러 클라우드 서비스 공급자를 프로비저닝합니다. 기본적으로 Terraform은 현재 인프라 구성을 원하는 상태와 비교하고 원하는 상태에 도달하는 데 필요한 인프라 부분만 수정합니다.

Terraform은 AWS, Azure, vSphere 등과 같은 다양한 클라우드 및 엔터프라이즈 서비스 공급자에 해당하는 공급자라고 부르는 플러그인을 사용합니다. Terraform 프로젝트는 다양한 프로젝트 관련 파일이 포함된 자체 디렉터리 내에 포함됩니다. Terraform은 클라우드 계정의 모든 리소스에 영향을 미치지 않습니다. 계획을 통해 관리되는 구성 요소만 처리합니다. 상태 파일(JSON 형식)을 사용하여 인프라의 현재 상태를 저장합니다.

무엇이 Terraform을 돋보이게 합니까?

다른 도구와 차별화되는 Terraform의 흥미로운 점 중 하나는 사용자가 원하는 것을 말할 수 있게 해주며 이를 수행하기 위한 모든 기본 수준 명령에 대해 걱정할 필요 없이 원하는 것을 얻는 방법을 해결할 수 있다는 것입니다. 덜 알려진 또 다른 사실(또는 이미 알고 있을 수도 있음)은 클라우드 서비스 공급자의 API와 바인딩되는 플러그인이 현재 클라우드 서비스 공급자가 직접 설계했다는 것입니다. 즉, AWS 자체에서 Terraform용 AWS 공급자를 유지 관리합니다. 공급자가 AWS API 공간으로 업데이트된 상태를 유지하므로 이는 좋은 일입니다.

여기서 무엇을 배울까요?

이 자습서에서는 Terraform에서 루프 구성을 사용하는 방법을 보여줍니다. 일부 루프 구성을 사용하는 몇 가지 예를 볼 수 있습니다. 이제 이 게시물을 계속 진행하겠습니다.

시작하자…

terraform에는 다양한 유형의 루프 구성이 있으며 각각 고유한 사용 사례가 있습니다.

1. count' 매개변수: 리소스 또는 모듈의 여러 복사본을 생성합니다. count 인수는 해당 리소스 또는 모듈에 대한 count 값만큼 많은 개체를 생성합니다. count 인수는 정수를 사용합니다.

count 인수와 함께 작동하는 count 유형 개체도 있습니다. 이 개체를 사용하여 인스턴스별로 구성을 변경합니다. 유일한 속성으로 '인덱스'를 사용합니다. 색인 번호는 0부터 시작합니다. 나중에 각 경우의 용도를 살펴보겠습니다.

'count' 매개변수 사용 예:

아래 예는 여러 개의 동일한 EC2 인스턴스를 생성하는 절차를 보여줍니다.

resource "aws_instance" "web-ec2" {
  count         = 5
  ami           = “ami-xxxx”
  instance_type = “t2.micro”
}

샘플 출력:

Plan: 5 to add, 0 to change, 0 to destroy.
Do you want to perform these actions?
  Terraform will perform the actions described above.
  Only 'yes' will be accepted to approve.
Enter a value:





위의 코드는 5개의 동일한 EC2 인스턴스를 생성합니다. 이름이 다른 여러 EC2 인스턴스를 생성해야 하는 경우 위 코드는 다음과 같이 수정됩니다.

resource "aws_instance" "web-ec2" {
  count         = 5
  ami           = ami-xxxx
  instance_type = t2.micro
tags {
Name = “my-server-${count.index}”
}
}

위의 구성은 이름이 my-server-0에서 my-server-4로 지정된 5개의 EC2 인스턴스를 생성합니다.

2. 'for' 표현식: Terraform의 'for' 표현식은 목록, 지도, 객체 등 내부의 항목을 반복합니다. 구문은 다음과 같습니다.

[for <item or element> in <Name_of_List> : <OUTPUT>]

여기서 'Name_of_List'는 반복할 목록의 이름입니다. 'Item' 또는 'element'는 위 LIST의 모든 요소에 붙은 변수의 이름입니다.

'for' 표현식 사용 예: 아래 코드는 목록 내 항목의 대문자 버전을 인쇄합니다.

variable "demo" {
 description = "A list of items"
 type        = list(string)
 default     = ["one", "two", "three"]
}
output "upper_case" {
 value = [for name in var.demo : upper(name)]
}



3. 'for_each' 표현식: Terraform은 버전 0.12부터 'for_each' 표현식을 도입했습니다. 이 표현식을 사용하여 리스트, 세트 및 맵 내부의 항목을 반복할 수 있습니다. 이 표현식을 사용하여 전체 리소스의 수많은 복제본 또는 리소스 내부의 인라인 블록 복제본을 만들 수 있습니다. 'for_each' 식의 기본 형식은 다음과 같습니다.

resource "<Name_of_the_Provider>_<Type_of_resource>" "<identifier>" {
 for_each = <COLLECTION(set or map)>  
[Code ...]
}

여기에서 'Name_of_the_Provider' 대신 공급자를 지정합니다. 'Type_of_resource'는 산출할 자원의 유형을 지정합니다.

'for_each' 식 사용 예: 아래 예는 'for_each' 식을 사용하여 IAM 사용자를 생성하는 방법을 보여줍니다.

resource "aws_iam_user" "iam-accounts" {
  for_each = toset( ["tecofers", "HowToForge", "Demo"] )
  name     = each.key
}

'toset' 함수는 집합으로 변환하는 데 사용됩니다. 'each.key'는 인스턴스에 상대적인 맵 키입니다. 마찬가지로 'each.value'는 인스턴스에 상대적인 맵 값입니다. 위의 코드는 목록 내에서 언급된 세 명의 IAM 사용자를 생성합니다.

참고: count 및 for_each 구성은 모두 동시에 존재할 수 없습니다.

마무리

이 가이드에서는 Terraform의 다양한 루프 구성과 사용 방법에 대해 살펴보았습니다. 다음 게시물에서는 Terraform 모듈을 탐색하려고 시도하므로 HowToForge를 계속 지켜봐 주시기 바랍니다.

참조: https://mediaspace.wisc.edu/media/Introduction+to+and+Managing+Infrastructure+with+Terraform+-+Brian+Hill/1_qhr9c1os