크기를 조정하기 위해 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(명령줄 인터페이스) 도구는 자동화 기술의 구현 및 관리를 통해 오케스트레이션에 중요한 역할을 합니다. Bicep과 Terraform은 모두 CLI 도구를 제공합니다.
Bicep은 Azure CLI와 통합되어 개발자가 다음과 같은 명령을 사용할 az
수 있도록 합니다.
az bicep
: az bicep 명령을 사용하면 Bicep 설치 및 Bicep 파일 빌드 및 게시와 같은 작업을 수행할 수 있습니다.
az deployment
: Bicep 및 Azure CLI를 사용하여 리소스를 배포하는 방법 문서에서는 Bicep 파일과 함께 Azure CLI를 사용하여 Azure에 리소스를 배포하는 방법을 설명합니다.
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가지 기능을 고려하여 조직에 가장 적합한 옵션을 선택해야 합니다.
오늘날의 조직은 많은 유연성과 민첩성이 필요한 동적 문제에 직면해 있습니다. 퍼블릭 클라우드 환경은 자동화를 통해 특히 IaC(Infrastructure as Code)를 통해 이러한 요구를 충족합니다. 두 가지 주요 IaC 옵션은 Hashicorp Terraform과 Bicep입니다. Terraform은 DevOps 전문가가 선언적 코드를 사용하여 온-프레미스 및 클라우드 서비스를 관리하는 데 도움이 되는 오픈 소스 도구입니다. Microsoft Bicep은 선언적 구문을 활용하여 Azure 리소스 배포를 간소화합니다.
이 문서에서는 몇 가지 주요 사용자 환경 기능을 비교하여 Terraform과 Bicep 간의 유사점과 차이점을 식별합니다.
언어 구문
Bicep 및 Terraform은 사용하기 쉽고 개발자 시간을 절약하기 기본 DSL(특정 언어)입니다. 두 도구 모두 유사한 키워드(keyword) 개념과 개념을 통합합니다. 이러한 개념 중 일부는 매개 변수화, 다중 파일 프로젝트 지원 및 외부 모듈에 대한 지원입니다. 그러나 Terraform은 특정 작업에 대한 보다 풍부한 기본 제공 기능 라이브러리를 제공합니다. 둘 중에서 결정하는 것은 선호도와 경험의 문제입니다. 다음은 간략한 개요 및 각 언어 구문에서 제공하는 사용자에게 친숙한 기능 중 일부입니다.
Bicep은 선언적 언어입니다. 따라서 코드에서 요소가 정의된 순서는 배포 처리 방식에 영향을 주지 않습니다. Bicep의 기본 대상 범위는 resourceGroup
. 사용자는 변수를 사용하여 복잡한 식을 캡슐화하고 Bicep 파일을 더 읽기 쉽게 만들 수 있습니다. 모듈의 개념을 통해 프로젝트 또는 팀 간에 Bicep 코드를 다시 사용할 수 있습니다.
Terraform은 HCL(HashiCorp 구성 언어)을 사용하는 선언적 언어이기도 합니다. HCL의 주요 목적은 리소스를 선언하는 것입니다. 다른 언어 기능은 리소스를 보다 편리하게 정의하는 데 도움이 됩니다. Bicep과 마찬가지로 Terraform 구성 파일의 코드 순서는 중요하지 않습니다.
언어 도우미
Bicep과 Terraform은 모두 코딩 작업을 간소화하는 언어 도우미를 제공합니다. 둘 다 사용자에게 친숙하기 때문에 선택은 주로 기본 설정 및 요구 사항에 따라 달라집니다.
Bicep은 코드를 보다 동적으로 유연하게 만드는 식을 지원합니다. Bicep 파일에서 다양한 형식의 함수를 사용할 수 있습니다. 이러한 함수 형식 중 일부는 논리, 숫자 및 반대 함수입니다. 루프는 리소스, 모듈, 속성, 변수 또는 출력의 여러 복사본을 정의할 수 있습니다. 루프를 사용하면 Bicep 파일에서 구문이 반복되는 것을 방지할 수 있습니다.
Terraform은 식 내에서 값을 변환하고 결합하기 위해 호출되는 기본 제공 함수도 제공합니다. Bicep과 마찬가지로 Terraform 식에는 리소스에서 내보낸 데이터에 대한 참조 및 조건부 평가와 같은 복잡한 식이 포함될 수 있습니다. 루프는 컬렉션을 처리할 수 있으며 코드를 반복할 필요 없이 리소스의 여러 인스턴스를 생성할 수 있습니다.
모듈
Bicep과 Terraform은 모두 모듈의 개념을 지원합니다. 모듈을 사용하면 코드에서 재사용 가능한 구성 요소를 만들 수 있습니다. 모듈은 인프라 크기를 조정하고 구성 클린 유지하는 데 중요한 역할을 합니다. 모듈은 리소스 그룹을 캡슐화하므로 유사한 인프라 구성 요소에 대해 개발해야 하는 코드의 양을 줄입니다. 모듈은 Bicep 및 Terraform에서 유사하게 작동하지만 구현은 다양합니다.
Bicep에서 모듈은 다른 Bicep 파일에서 배포되는 Bicep 파일일 뿐입니다. Bicep 모듈은 Bicep 파일의 가독성을 향상시키는 역할을 합니다. 이러한 모듈도 확장 가능합니다. 사용자는 코드 중복을 방지하고 오류를 줄이기 위해 팀 간에 모듈을 공유할 수 있습니다. Bicep 모듈 정의에 대한 자세한 내용은 Bicep 모듈을 참조 하세요.
Terraform 에서 모듈 은 팀 전체에서 리소스 구성을 패키징하고 재사용하는 기본 수단입니다. Terraform 모듈은 단일 논리 단위로 패키지되는 여러 리소스에 대한 컨테이너입니다. 모듈은 디렉터리에 함께 저장된 파일 컬렉션 .tf
및/또는 .tf.json
파일로 구성됩니다. Terraform은 로컬 파일 시스템의 모듈 외에도 다양한 원본에서 모듈을 로드할 수 있습니다. 이러한 원본에는 레지스트리, 로컬 경로, 모듈 및 GitHub가 포함됩니다.
프로비전 수명 주기
Terraform과 Bicep을 모두 사용하면 개발자가 배포 전에 구성의 유효성을 검사한 다음 변경 내용을 적용할 수 있습니다. Terraform은 특정 구성으로 관리되는 모든 원격 개체를 삭제하는 더 많은 유연성을 제공합니다. 이 기능은 작업이 완료되면 임시 개체를 클린 데 유용합니다. 최상의 옵션을 선택할 때 일반적인 인프라 배포의 수명 주기 요구 사항을 고려하는 것이 중요합니다.
Bicep은 Bicep 파일을 배포하기 전에 변경 내용을 미리 볼 수 있는 가상 작업을 제공합니다. Azure Resource Manager는 작업을 제공 what-if
하며 기존 리소스를 변경하지 않습니다. 그런 다음 Bicep 파일과 함께 Azure PowerShell 또는 Azure CLI를 사용하여 Azure에 리소스를 배포할 수 있습니다. Azure PowerShell 및 Azure CLI는 원격 Bicep 파일의 배포를 지원하지 않습니다. 그러나 Bicep CLI를 사용하여 Bicep 파일을 JSON 템플릿에 빌드한 다음 JSON 파일을 원격 위치에 로드할 수 있습니다.
Terraform 에서 terraform plan 명령은 Bicep what-if
작업과 유사합니다. 이 terraform plan
명령을 사용하면 실행 계획을 적용하기 전에 미리 볼 수 있는 실행 계획을 만듭니다. 그런 다음 terraform apply 명령을 통해 실행 계획을 적용합니다 . Terraform을 사용하여 수행하는 거의 모든 작업은 명령과 terraform apply
명령을 모두 terraform plan
사용하는 것입니다.
시작하기
Bicep과 Terraform은 모두 시작하는 데 도움이 되는 리소스를 제공합니다. Bicep용 Learn 모듈을 사용하면 Azure 리소스를 구성하는 방법을 정의할 수 있습니다. 또한 여러 Azure 리소스의 배포를 안내하여 실습 환경을 제공합니다.
마찬가지로 HashiCorp Learn은 Terraform을 설치하고 사용하는 방법을 알려주는 다양한 Terraform 교육 리소스 를 사용자에게 제공합니다. 이러한 리소스에는 Terraform을 사용하여 Azure에서 인프라를 프로비전하는 방법을 보여 주는 정보가 포함됩니다.
코드 작성
코드 작성 환경은 선택한 편집기에서 사용할 수 있는 추가 기능 수에 따라 달라집니다. 다행히 Bicep과 Terraform은 모두 코드 작성 효율성을 개선하기 위한 리소스를 제공합니다.
Bicep의 경우 가장 효과적인 추가 기능 중 하나는 Bicep Visual Studio Code 확장입니다. 확장은 코드 유효성 검사, Intellisense, dot-property 액세스 및 속성 자동 완성과 같은 기능을 제공합니다.
Terraform의 경우 Terraform 언어 서버를 사용하는 Terraform Visual Studio Code 확장은 Bicep Visual Studio Code 확장과 동일한 많은 기능을 제공합니다. 예를 들어 확장은 구문 강조 표시, IntelliSense, 코드 탐색 및 모듈 탐색기를 지원합니다. 또한 HashiCorp는 Terraform 언어 서버를 구성하고 사용하기 위한 GitHub 리포지토리(https://github.com/hashicorp/terraform-ls/blob/main/docs/USAGE.md)에 [자세한 설치 지침]을 제공합니다.
Azure 적용 범위
Bicep은 Azure 리소스를 구성할 때 Terraform보다 유리합니다. Bicep은 Azure 서비스와 긴밀하게 통합되어 있습니다. 또한 새 Azure 기능에 대한 즉각적인 지원을 제공합니다. Terraform은 사용자가 Azure를 관리할 수 있는 두 가지 공급자인 AzureRM 및 AzAPI를 제공합니다. AzureRM 공급자는 안정적인 Azure 서비스를 위한 완벽한 맞춤형 환경을 제공합니다. 경우에 따라 이 맞춤형 환경에 들어가면 약간의 지연이 발생할 수 있습니다. AzAPI 공급자는 Azure Resource Manager REST API 위에 있는 씬 계층으로, Bicep과 같이 새로운 Azure 기능을 즉시 지원할 수 있습니다. 결정을 내리기 전에 조직의 인프라 요구 사항과 완전히 지원되는지 여부를 고려하는 것이 중요합니다.
커뮤니티 및 지원
커뮤니티는 과제를 배우고 극복하는 데 핵심적인 역할을 합니다. Terraform 및 Bicep 커뮤니티는 모두 높은 수준의 참여와 지원을 제공합니다.
Bicep 지원의 경우 도움말을 찾는 위치는 문제의 특성에 따라 달라집니다.
- 설명서 버그: Microsoft Learn의 Bicep 설명서와 관련된 문제의 경우 각 문서에 피드백 섹션이 있습니다.
- Bicep 소스 코드 및 버그 제출: Microsoft Bicep GitHub 리포지토리를 방문하여 오픈 소스 Bicep 제품 및 파일 버그에 기여합니다.
Terraform 지원의 경우 도움말을 찾는 위치는 문제의 특성에 따라 달라집니다.
설명서 버그: Microsoft Learn의 Terraform 설명서와 관련된 문제의 경우 각 문서에 피드백 섹션이 있습니다.
공급자 소스 코드 및 버그 제출: Microsoft에는 버그를 제출하고 오픈 소스 Terraform Azure 공급자에 기여할 수 있는 GitHub 리포지토리가 있습니다. 사용 가능한 공급자를 나열하려면 Azure GitHub 조직으로 이동하여 리포지토리 찾기... 필드에 입력 terraform-provider-
합니다.
Terraform 핵심 질문: HashiCorp 커뮤니티 포털의 Terraform 섹션을 방문 하세요.
Terraform 공급자 관련 질문: HashiCorp 커뮤니티 포털의 Terraform 공급자 섹션을 방문하세요.
요약
Bicep 및 Terraform은 Azure 리소스를 쉽게 구성하고 배포할 수 있는 두 가지 주요 IaC 옵션입니다. 둘 다 조직이 효율성과 생산성을 높이는 데 도움이 되는 사용자 친화적인 기능을 제공합니다. 조직에 가장 적합한 것을 평가할 때 인프라 요구 사항 및 기본 설정을 신중하게 고려합니다.