수년에 걸쳐 클라우드 개발은 주요 패러다임의 변화를 겪었습니다. 새롭고 더 복잡한 애플리케이션이 다운타임을 최소화하기 위해 신속하게 클라우드에 배포되고 있습니다. 이러한 모든 과정 속에서 인프라를 코드로 관리하는 개념과 다양한 도구들이 애플리케이션 개발 과정을 단순화하기 위해 등장했습니다.

당신은 궁금할 수 있습니다: 인프라를 코드로 관리란 무엇인가요? 이것이 개발 과정과 경험을 어떻게 개선하며, Terraform은 이 과정에서 어떤 역할을 하나요? 자, 이 가이드에서 이 모든 것과 더 많은 내용을 탐구해 보겠습니다. 그러나 시작하기 전에 몇 가지 필수 조건이 있습니다:

  • 클라우드 및 클라우드 용어에 대한 기본 지식

  • 코드 예제를 구현할 PC 접근 권한

  • A GCP 계정

이제 시작해 보겠습니다.

다룰 내용은 다음과 같습니다:

  1. 인프라를 코드로 관리하는 개요

  2. Terraform이란 무엇인가?

  3. Terraform의 이점

  4. Terraform에서 사용되는 일반 용어

  5. 데모 프로젝트: Terraform 구성 작성 방법

  6. 결론

인프라스트럭처의 코드(IaC) 개요

인프라스트럭처의 코드는 코드 기반 구성 문서로 클라우드 인프라스트럭처 도구 및 응용프로그램을 생성하는 것을 의미합니다. 이 프로세스를 실행하면 데이터베이스, 가상 머신 및 서버를 생성하는 순서와 프로세스를 자동화합니다. 이는 특히 여러 개의 동일한 서비스에 대해 수동 클라우드 서비스 배포 빈도를 줄여 사용자 경험을 향상시킵니다.

인프라스트럭처의 코드에는 명령형 접근 방식과 선언형 접근 방식 두 가지가 있습니다.

인프라 생성에 선언적 접근 방식을 사용할 때는 생성할 인프라의 예상/희망하는 출력을 간단히 설명하고, 사용 중인 IaC 도구가 해당 출력물을 생성하는 방법을 찾아냅니다.

반면, 명령적 접근 방식은 원하는 인프라 상태를 달성하기 위해 필요한 정확한 단계를 지정하는 것을 포함합니다. 명령적 접근 방식은 복잡한 인프라 설정에 더 적합해 보이지만, 선언적 접근 방식도 잘 작동할 수 있습니다.

일부 도구는 두 가지 방식을 모두 처리할 수 있지만 다른 것은 한 가지 방식에만 적합합니다. 전 세계적으로 사용되는 인기 있는 IaC 도구의 예로는 Terraform IaC, AWS Cloud Formation, Ansible, Pulumi, Chef 등이 있습니다.

이름에서 알 수 있듯이 – 코드로서의 인프라 – 인프라를 생성하는 코드는 IaC 공간 내에서 다양한 템플릿 언어로 작성됩니다. 인기 있는 템플릿 언어로는 JSON, YAML, ARM 템플릿, HCL, Heat Scripts 등이 있습니다.

또한 클라우드 인프라를 실행하기 위해 스크립팅 도구를 사용할 수도 있습니다. 인기 있는 도구로는 Bash와 PowerShell 등이 있습니다. 이러한 도구는 대부분의 개인 컴퓨터에 미리 설치되어 있을 수도 있습니다.

이 모든 도구 중에서도 Terraform은 다양한 이유로 독특하며, 본 문서에서는 이를 살펴볼 것입니다.

Terraform이란?

Terraform은 2014년 HashiCorp에 의해 개발된 오픈 소스 도구입니다. 이 도구는 시간이 흐름에 따라 발전하여 현재 여러 클라우드 서비스 제공업체 간에 인프라를 생성할 수 있는 클라우드 갠닝스틱 인프라 도구로 사용됩니다.

Terraform은 또한 클라우드 기반의 소프트웨어 서비스 도구인 Terraform Cloud도 제공합니다. 이 도구는 예전의 지역 기반 방법 대신 클라우드 기반의 클라우드 도구를 배포할 수 있도록 해줍니다.

또한, 템플릿 언어를 활용하는 다른 IaC 도구들과 마찬가지로, Terraform에서 인프라를 생성하는 데 사용되는 템플릿 프레임워크는 HashiCorp 템플릿 언어 (HCL)입니다.

Terraform의 장점들

이제 클라우드 엔지니어로서 Terraform을 사용하는 데 장점 중 일부와 이 도구의 클라우드 생태계에서의 주요 역할을 강조하겠습니다.

1. 선언적 방식

이 클라우드 인프라 자동화 방식은 배포할 필요가 있는 모든 인프라(데이터베이스, 서버 등)가 명시적으로 명시되고 그에 따라 실행됨을 보장합니다. 이는 충돌을 피하는 데 도움이 됩니다.

2. 충돌 처리

테라폼은 효율적인 클라우드 도구 자동화 능력 외에도 견고한 충돌 감지 및 처리 속성을 가지고 있습니다. 충돌을 처리하는 방법 중 하나는 Terraform plan 함수를 통해 이루어집니다. 이 함수는 인프라 오케스트레이션의 인지된 또는 잠재적 충돌을 강조하며 배포 전에 쉽게 수정할 수 있도록 합니다. 다음 섹션에서 이에 대해 자세히 다루겠습니다.

3. 클라우드에 독립적

테라폼은 주요 클라우드 서비스 제공업체(AWS, GCP 및 Azure) 간에 효율적인 인프라 자동화 능력을 가진 다목적, 다중 클라우드 자동화 서비스 제공업체입니다. 하이브리드 및 간 클라우드 제공자 자동화도 가능합니다.

4. 사용자 친화적

테라폼은 가장 큰 사용자 커뮤니티를 갖춘 대형 클라우드 자동화 도구 중 하나입니다. 초보자 친화적인 많은 자습서가 있어 빠르게 도구에 익숙해지도록 도와줍니다. 여기에는 더 깊이 파고들 수 있는 문서 링크가 있습니다.

5. 파일 관리 능력

테라폼은 로컬 컴퓨터에 자동화 상태의 로컬 백업을 자동으로 생성하여 문제가 발생할 경우 즉시 복구 및 파일 처리를 보장합니다. 필요한 경우 원격 클라우드 서비스 제공업체로의 원격 백업 옵션도 제공합니다.

6. 버전 관리

Git 버전 관리 시스템과 마찬가지로, Terraform은 Terraform 파일의 변경 사항을 추적할 수 있는 내장 버전 관리 시스템을 제공합니다. 예를 들어 현재 버전에 오류가 있을 경우 이전 버전의 코드로 되돌릴 수 있습니다.

7. 코드 재사용성

Terraform은 개발자 문서 페이지에서 쉽게 재사용할 수 있는 다양한 코드 템플릿을 제공합니다.

Terraform의 이점을 강조했으니, 이제 Terraform에서 사용되는 일반적인 용어와 그 의미를 알아보겠습니다.

Terraform에서 사용되는 일반 용어들

Terraform을 사용하기 시작하기 전에 자주 등장하는 몇 가지 핵심 용어에 익숙해져야 합니다. 알아야 할 내용은 다음과 같습니다:

  1. 프로바이더: Terraform에서 프로바이더는 Terraform이 다양한 API 및 클라우드 서비스와 상호 작용할 수 있게 해주는 프로그래밍 인터페이스입니다. 예를 들어 GCP나 Azure와 같은 클라우드 서비스 제공업체와 인터페이스하기 위해 프로바이더를 사용합니다.

  2. 모듈: 모듈은 Terraform 프레임워크 내에서 특별히 생성되며, 클라우드 서비스를 쉽게 조정할 수 있도록 해주는 재사용 가능한 구성 요소로 작용합니다. 또한 모듈에 클라우드 서비스와 관련된 중요한 정보를 저장할 수 있으며, 모듈 변수를 사용하여 고유성을 보장하기 위해 이를 수정할 수 있습니다.

  3. 리소스: Terraform에서 리소스는 생성할 클라우드 인프라 구성 요소를 가리킵니다. 예시로는 클라우드 네트워크, 가상 머신, 가용 영역 및 기타 인프라가 포함됩니다.

  4. 상태: Terraform의 상태 개념은 효율성의 기초를 형성합니다. 상태는 인프라 리소스의 현재 구성을 추적하며 Terraform이 생성, 수정 또는 삭제한 모든 리소스에 대한 세부 정보를 포함합니다. Terraform의 버전 관리 시스템은 코드 파일에 가한 모든 변경 사항을 추적하고 해당 정보를 사용하여 필요에 따라 인프라를 파괴하고 프로비저닝합니다.

  5. 작업 공간: 작업 공간은 작업 파일 주위에 일종의 제약을 생성하므로 버전 관리 시스템과 유사하게 기능합니다. 작업 공간을 사용하면 동일한 백엔드 내에서 단일 인프라 구성의 여러 인스턴스를 깔끔하고 격리된 방식으로 관리할 수 있습니다. 작업 공간을 사용하여 동일한 Terraform 구성을 사용하면서 개발, 스테이징 및 프로덕션과 같은 환경을 분리할 수 있습니다.

데모 프로젝트: Terraform 구성 작성 방법

이 섹션에서는 몇 줄의 코드로 Google Cloud 프로그램 가상 머신을 조정하기 위해 첫 번째 Terraform 파일을 작성하는 방법을 자세히 살펴보겠습니다. 그러나 시작하기 전에 데모 프로젝트를 구현하기 전에 이해해야 할 다양한 명령에 대해 논의하겠습니다.

일반 Terraform 명령

  • Terraform init: 이 명령은 Terraform 도구를 초기화하고 필수 클라우드 공급자별 파일을 다운로드합니다. 또한 Terraform과 관련된 클라우드 공급자 간의 연결을 설정합니다. 우리의 경우, 이는 GCP와 Terraform 공급자 사이의 연결입니다.
  • Terraform fmt: 이 명령은 자동으로 최적의 코드 포맷팅과 들여쓰기를 보장합니다. 코드의 순서적 실행을 보장하고 오류를 최소화합니다.

  • Terraform plan: 이 명령은 Terraform 코드 실행 단계를 개요로 제시하고 실행 중 발생할 수 있는 오류를 감지합니다. 또한 실행을 방해할 수 있는 Terraform 코드의 오류를 강조합니다. 마지막으로 상태 관리와 함께 작동하여 상태 변경을 감지하고 필요한 경우 프로비전 해제 또는 추가 클라우드 서비스를 생성합니다.

  • 테라폼 적용: 이 명령은 테라폼 계획 명령에 의해 구현된 계획된 테라폼 상태를 실행합니다.

  • 테라폼 파괴: 이 명령은 테라폼 계획 명령을 사용하여 생성된 모든 클라우드 서비스를 비활성화하거나 제거하는 테라폼 체계의 최종 명령입니다. 인프라가 올바르게 생성되도록하려면 위에 나열된 명령을 순차적으로 실행해야합니다.

Google Cloud Platform 가상 머신 생성

이 중요한 명령어들을 배웠으니, 이제 처음 만드는 IaC-Powered GCP 가상 머신을 만들어서 테스트해 봅시다.

코드 편집기에서 다음 코드를 입력하십시오:

provider "google" {
  project = "your-gcp-project-id"  # Replace with your GCP Project ID
  region  = "us-central1"          
  zone    = "us-central1-a"        
}

이 코드는 필요한 클라우드 리소스를 생성하기 위해 사용하는 클라우드 제공 업체를 강조합니다. 우리의 경우 Google 클라우드 프로그램을 사용하고 있습니다. 할당된 이름은 단순히 “google”입니다. 다른 클라우드 제공 업체인 AWS와 Azure는 각각 “aws”와 “azure”입니다.

두 번째 줄은 각 GCP 계정에 고유한 GCP 구독 식별자를 식별합니다 (정확한 통합을 돕습니다). 제공된 공간에 귀하의 것을 사용해야 합니다.

또한 적절한 리소스 지역 및 리소스 가용 영역을 포함해야 합니다. 이것은 가상 머신을 실행할 수 있도록 생성할 가상 머신의 물리적 기반 역할을 합니다. 이 시나리오에서는 각각 미국 중부 지역과 1-a 가용 영역을 선택했습니다. 클라우드 지역 및 가용 영역에 대해 더 많은 정보는 여기에서 확인할 수 있습니다.

resource "google_compute_instance" "vm_instance" {
  name         = "example-vm"      
  machine_type = "e2-medium"          

  boot_disk {
    initialize_params {
      image = "debian-cloud/debian-11" 
    }
  }

위의 코드 조각은 우리가 조정할 정확한 컴퓨팅 리소스를 지정합니다. 이 경우에는 “vm_instance”로 코드화된 가상 머신 인스턴스입니다. 'example-vm'은 이 프로젝트를 위해 생성할 가상 머신에 할당하려는 이름입니다. 가상 머신 이름도 고유해야 한다는 점을 중요하게 기억해야 합니다. 우리가 선택한 가상 머신 유형은 E2(일반 목적)-중간 유형 VM이었습니다. 가상 머신 유형에 대한 자세한 정보는 여기에서 확인할 수 있습니다.

더 나아가서 우리는 예상하는 부팅 운영 체제(“boot_disk”)를 지정합니다. 이 경우에는 Debian Linux 운영 체제 버전 11 이미지입니다.

  network_interface {
    network = "default"  # Attach to the default VPC network
    access_config {

    }
  }

output "instance_ip" {
  value = google_compute_instance.vm_instance.network_interface[0].access_config[0].nat_ip
}

가상 머신을 생성하려면 가상 네트워크를 설정하여 VM에 원격 액세스를 허용해야 합니다. 네트워크 인터페이스 블록은 GCP에서 제공하는 기본 VPC(Virtual Private Cloud) 네트워크에 가상 머신을 연결합니다. VPC 네트워크 없이는 가상 머신과 인터페이스할 수 없습니다. 출력 블록에는 터미널에 표시된 기본 액세스 IP 주소도 표시되어 있어 해당 주소를 사용하여 가상 머신에 연결할 수 있습니다.

다음은 최종 예상 코드입니다:


provider "google" {
  project = "your-gcp-project-id"  # Replace with your GCP Project ID
  region  = "us-central1"          
  zone    = "us-central1-a"       
}

resource "google_compute_instance" "vm_instance" {
  name         = "example-vm"         
  machine_type = "e2-medium"          

  boot_disk {
    initialize_params {
      image = "debian-cloud/debian-11"  
    }
  }

  network_interface {
    network = "default"  # Attach to the default VPC network
    access_config {

    }
  }

output "instance_ip" {
  value = google_compute_instance.vm_instance.network_interface[0].access_config[0].nat_ip
}

이후 이미지에서 강조된 명령을 사용하여 이 코드를 실행할 것입니다:

terraform -v 명령은 터미널에 Terraform이 성공적으로 설치되었음을 확인합니다. 예상 출력은 설치된 Terraform 도구의 버전입니다.

다음 실행되는 명령은 terraform init 함수로, 클라우드 서비스 제공업체인 GCP와의 통신을 초기화합니다. 필요한 종속성도 설치됩니다.

terraform fmt 명령도 실행되어 코드 형식 및 들여쓰기가 적절한지 확인됩니다. 그런 다음 순차적으로 terraform plan 명령이 실행됩니다.

이미지에서 볼 수 있듯이 Terraform이 예상하는 가상 머신 생성에 사용할 단계가 표시됩니다.

Terraform plan이 성공적으로 실행되면, 이제 Terraform plan에서 설명한 단계를 실행하기 위해 terraform apply 함수를 실행할 것입니다.

이로써 Terraform 실행을 확인하는 메시지가 표시됩니다. “Yes”를 입력하면 작업이 원활하게 진행됩니다.

성공적으로 실행되면 위에 표시된대로 성공 메시지가 표시됩니다. 이로써 우리는 코드만으로 클라우드 인프라를 생성했습니다. 그런 다음 terraform destroy 명령을 사용하여 생성된 가상 머신을 제거할 수 있습니다.

결론

이 기사에서는 코드로 인프라를 구축하는 기본을 배웠습니다. 우리는 Terraform, 그 이점 및 일부 주요 기능 및 명령에 대해 논의했습니다. 또한 데모 프로젝트에서의 활용을 설명했습니다.

지식을 더 향상시키기 위해 더 많은 코드 예제를 위해 Terraform 문서를 참조하실 수 있습니다. 또한 새롭게 습득한 지식을 활용하여 실생활에서 프로젝트를 자동화하는 것을 권장합니다.

의견이나 질문이 있으시면 언제든지 메시지를 보내주세요. 또한 다른 기사를 확인하실 수 있습니다 여기. 다음 번에 또 만나요, 계속 코딩해주세요!