Share via


Terraform 및 Bicep 비교

크기를 조정하기 위해 DevOps 팀은 항상 신뢰할 수 있고 반복 가능한 프로세스로 코드를 신속하게 배포할 수 있는 방법을 찾고 있습니다. 클라우드 및 인프라와 관련하여 이 프로세스는 IaC(Infrastructure-as-code)를 사용하여 점점 더 많은 작업을 수행하고 있습니다. IaC 도구는 범용 도구부터 특정 환경을 위한 도구에 이르기까지 다양합니다. Terraform은 이전의 예이며 Bicep은 Azure 관련 작업을 처리하도록 설계되었습니다.

이 문서에서는 Bicep 및 Terraform의 9가지 인프라 및 통합 기능을 비교합니다. 이러한 차이점을 이해하면 인프라 및 프로세스를 가장 잘 지원하는 도구를 결정할 수 있습니다.

상태 및 백 엔드

Terraform과 Bicep은 모두 DSC(필요한 상태 구성)이므로 IT 및 개발 인프라를 코드로 쉽게 관리할 수 있습니다. Terraform은 관리되는 인프라 및 구성에 대한 상태를 저장합니다. Terraform은 이 정보를 사용하여 실제 리소스를 구성에 매핑하고, 메타데이터를 추적하고, 더 큰 인프라의 성능을 향상시킵니다. 상태는 이름이 지정된 terraform.tfstate로컬 파일에 저장되지만 원격으로 저장할 수도 있습니다. 상태 파일을 백업하고 보호하는 것이 중요합니다. Terraform과 마찬가지로 Bicep은 선언적이고 목표를 추구합니다. 그러나 Bicep은 상태를 저장하지 않습니다. 대신 Bicep은 증분 배포에 의존합니다.

인프라 대상

클라우드 인프라 관리를 위해 Bicep과 Terraform을 비교할 때 대상 클라우드 환경을 고려하는 것이 중요합니다.

  • Azure 전용
  • 다중 또는 하이브리드 클라우드

Bicep은 Azure 전용이며 다른 클라우드 서비스와 작동하도록 설계되지 않았습니다.

다음 환경에 대한 배포를 자동화하는 것이 목표인 경우 Terraform이 더 나은 옵션일 수 있습니다.

  • 가상화 환경
  • Azure 및 기타 클라우드와 같은 다중 클라우드 시나리오
  • 온-프레미스 워크로드

Terraform은 공급자라는 플러그 인을 사용하여 다른 클라우드 공급자 또는 API와 상호 작용합니다. Azure 인프라를 관리할 수 있는 여러 Terraform Azure 공급자가 있습니다. Terraform 구성을 코딩할 때 사용 중인 필수 공급자를 지정합니다. terraform init를 실행하면 지정된 공급자가 설치되고 코드에서 사용할 수 있습니다.

CLI 도구

CLI(명령줄 인터페이스) 도구는 자동화 기술의 구현 및 관리를 통해 오케스트레이션에 중요한 역할을 합니다. Bicep과 Terraform은 모두 CLI 도구를 제공합니다.

Bicep은 Azure CLI와 통합되어 개발자가 다음과 같은 명령을 사용할 az 수 있도록 합니다.

Terraform CLI를 사용하면 Terraform 코드의 유효성 검사 및 서식 지정과 같은 작업을 수행하고 실행 계획을 만들고 적용할 수 있습니다.

  • 문서 빠른 시작: Terraform 을 사용하여 Azure 리소스 그룹 만들기에서는 여러 Terraform 명령을 사용하여 Azure 리소스 그룹을 만드는 방법을 보여 줍니다.

또한 Bicep은 Bicep을 Azure Pipelines와 쉽게 통합할 수 있는 기능을 제공합니다. Terraform에 사용할 수 있는 유사한 기능이 있지만 Visual Studio용 Azure Pipelines Terraform 작업 확장을 다운로드하여 설치해야 합니다. 설치되면 Azure Pipelines에서 Terraform CLI 명령을 실행할 수 있습니다. 또한 Terraform과 Bicep은 둘 다 GitHub Actions를 지원하여 소프트웨어 빌드, 테스트 및 배포를 자동화합니다.

처리

배포의 효율성과 최적화 측면에서 Bicep과 Terraform 간에는 몇 가지 중요한 차이점이 있습니다. Bicep을 사용하면 핵심 Azure 인프라 서비스 쪽 내에서 처리가 수행됩니다. 이 기능은 검사 정책에 대한 실행 전 처리 또는 지역 내에서 여러 인스턴스를 배포하기 위한 가용성과 같은 이점을 제공합니다. Terraform을 사용하면 Terraform 클라이언트 내에서 처리가 수행됩니다. 따라서 전처리에는 상태 및 HCL(HashiCorp Language)을 사용하여 필요한 변경 내용을 결정하기 때문에 Azure에 대한 호출이 포함되지 않습니다.

인증

Azure 인증 기능은 Bicep과 Terraform에 따라 다릅니다. Bicep을 사용하면 Bicep 파일 및 ARM 템플릿을 제출하도록 요청하는 동안 권한 부여 토큰이 제공됩니다. ARM은 지정된 템플릿 내에서 배포를 만들고 리소스를 배포할 수 있는 권한이 있는지 확인합니다. Terraform은 Azure CLI, 서비스 주체 또는 Azure 리소스에 대한 관리 ID와 같은 공급자 자격 증명을 기반으로 각 API를 인증합니다. 또한 단일 구성에서 여러 공급자 자격 증명을 활용할 수 있습니다.

Azure 통합

또한 Azure Policy와 같은 Azure 기능의 사용 및 각 기능이 다른 도구 및 언어와 상호 작용하는 방법도 고려해야 합니다. Bicep의 실행 전 유효성 검사는 리소스가 정책을 준수하지 않아 배포 전에 실패하는지 여부를 결정합니다. 따라서 개발자는 제공된 ARM 템플릿을 사용하여 정책을 사용하여 리소스를 수정할 수 있습니다. ARM 템플릿을 사용하여 자동화된 수정을 위해 다른 리소스에 대한 정책 할당을 만들 수 있습니다. 그러나 Terraform은 정책으로 인해 허용되지 않는 리소스가 배포되면 실패합니다.

포털 통합

Bicep이 Terraform에 비해 가지는 주요 이점 중 하나는 포털 작업을 자동화하는 기능입니다. Bicep을 사용하면 Azure Portal을 사용하여 템플릿을 내보낼 수 있습니다. 템플릿을 내보내면 리소스를 배포하는 구문과 속성을 이해할 수 있습니다. 내보낸 템플릿부터 시작하여 필요에 맞게 수정하여 향후 배포를 자동화할 수 있습니다. Terraform 템플릿이 지원될 때까지 내보낸 템플릿을 수동으로 변환해야 합니다.

Terraform은 Bicep과 동일한 포털 통합을 제공하지 않지만 Terraform용 Azure Export를 사용하여 Terraform 관리에서 기존 Azure 인프라를 사용할 수 있습니다. (Terraform용 Azure Export는 Azure/aztfexport GitHub 리포지토리에서 Microsoft가 소유하고 기본 오픈 소스 도구입니다.)

대역 외 변경 내용

대역 외 구성 변경은 도구의 컨텍스트 외부에 있는 디바이스 구성에 대한 변경 내용입니다. 예를 들어 Bicep 또는 Terraform을 사용하여 Virtual Machine Scale Set을 배포한다고 가정해 보겠습니다. 포털을 사용하여 가상 머신 확장 집합을 변경하는 경우 변경 내용은 "대역 외"이며 IaC 도구에 알 수 없습니다.

Bicep을 사용하는 경우 다음 배포에서 이러한 변경 내용을 덮어쓰지 않도록 대역 외 변경 내용을 Bicep 및 ARM 템플릿 코드와 조정해야 합니다. 이러한 변경 내용은 배포를 차단하지 않습니다.

Terraform을 사용하는 경우 대역 외 변경 내용을 Terraform 상태로 가져오고 HCL을 업데이트해야 합니다.

따라서 환경에 대역 외 변경이 자주 발생하는 경우 Bicep은 사용자에게 더 친숙합니다. Terraform을 사용하는 경우 대역 외 변경 내용을 최소화해야 합니다.

클라우드 프레임워크

CAF(클라우드 채택 프레임워크)는 클라우드 경험 전반에 걸쳐 클라우드 채택을 가속화하기 위한 설명서, 모범 사례 및 도구 모음입니다. Azure는 랜딩 존을 배포하기 위한 네이티브 서비스를 제공합니다. Bicep은 ARM 템플릿 및 랜딩 존 구현을 기반으로 포털 환경으로 이 프로세스를 간소화합니다. Terraform은 엔터프라이즈 규모 랜딩 존 모듈 을 활용하여 Azure를 배포, 관리 및 운영합니다.

요약

Bicep 및 Terraform은 많은 사용자 친화적인 인프라 및 통합 기능을 제공합니다. 이러한 기능을 사용하면 자동화 기술을 보다 쉽게 구현하고 관리할 수 있습니다. 환경에 가장 적합한 클라우드를 결정할 때 둘 이상의 클라우드에 배포하는지 또는 인프라가 다중 또는 하이브리드 클라우드 환경으로 구성되는지 여부를 고려하는 것이 중요합니다. 또한 이 문서에서 설명하는 9가지 기능을 고려하여 조직에 가장 적합한 옵션을 선택해야 합니다.