적용 대상: 개발자 | 표준 | 프리미엄
이 문서에서는 Terraform 을 사용하여 Azure에서 API Management 인스턴스를 만드는 방법을 보여 줍니다. API Management 인스턴스에서 API 가져오기와 같은 일반적인 관리 작업에 Terraform을 사용할 수도 있습니다.
Azure API Management 를 사용하면 조직에서 외부, 파트너 및 내부 개발자에게 API를 게시하여 데이터 및 서비스의 잠재력을 발휘할 수 있습니다. API Management는 개발자 참여, 비즈니스 통찰력, 분석, 보안과 보호 등을 통해 성공적인 API 프로그램을 보장하는 핵심적인 역량을 제공합니다. API Management를 사용하면 어디에서나 호스트되는 기존 백 엔드 서비스에 대한 최신 API 게이트웨이를 만들고 관리할 수 있습니다.
Terraform 을 사용하면 클라우드 인프라의 정의, 미리 보기 및 배포가 가능합니다. Terraform을 사용하여 HCL 구문을 사용하여 구성 파일을 만듭니다. HCL 구문을 사용하면 클라우드 공급자(예: Azure) 그리고 클라우드 인프라를 구성하는 요소를 지정할 수 있습니다. 구성 파일을 만든 후에는 인프라 변경 내용을 배포하기 전에 미리 볼 수 있는 실행 계획을 만듭니다. 변경 내용을 확인 한 후에는 실행 계획을 적용하여 인프라를 배포합니다.
이 문서에서는 다음 방법을 설명합니다.
- random_pet 사용하여 Azure 리소스 그룹 이름에 대한 임의 애완 동물 이름 만들기
- azurerm_resource_group 사용하여 Azure 리소스 그룹 만들기
- random_string 사용하여 Azure API Management 서비스 이름에 대한 임의 문자열 만들기
- azurerm_api_management 사용하여 Azure API Management 서비스 만들기
필수 조건
Azure 구독이 없는 경우 시작하기 전에 체험 계정을 만듭니다.
Azure CLI의 경우:
Azure Cloud Shell에서 Bash 환경을 사용합니다. 자세한 내용은 Azure Cloud Shell 시작을 참조하세요.
CLI 참조 명령을 로컬로 실행하려면 Azure CLI를 설치 합니다. Windows 또는 macOS에서 실행 중인 경우 Docker 컨테이너에서 Azure CLI를 실행하는 것이 좋습니다. 자세한 내용은 Docker 컨테이너에서 Azure CLI를 실행하는 방법을 참조하세요.
로컬 설치를 사용하는 경우 az login 명령을 사용하여 Azure CLI에 로그인합니다. 인증 프로세스를 완료하려면 터미널에 표시되는 단계를 수행합니다. 다른 로그인 옵션은 Azure CLI를 사용하여 Azure에 인증을 참조하세요.
메시지가 표시되면 처음 사용할 때 Azure CLI 확장을 설치합니다. 확장에 대한 자세한 내용은 Azure CLI를 사용하여 확장 사용 및 관리를 참조하세요.
az 버전을 실행하여 설치된 버전 및 종속 라이브러리를 찾습니다. 최신 버전으로 업그레이드하려면 az upgrade를 실행합니다.
Azure PowerShell의 경우:
- Azure PowerShell을 로컬로 사용하도록 선택하는 경우:
- 최신 버전의 Az PowerShell 모듈을 설치합니다.
- Connect-AzAccount cmdlet을 사용하여 Azure 계정에 연결합니다.
- Azure Cloud Shell을 사용하도록 선택하는 경우:
- 자세한 내용은 Azure Cloud Shell 개요 를 참조하세요.
- Azure PowerShell을 로컬로 사용하도록 선택하는 경우:
Terraform 코드 구현
참고 항목
이 문서의 샘플 코드는 Azure Terraform GitHub 리포지토리에 있습니다. 현재 및 이전 버전의 Terraform에서 테스트 결과를 포함하는 로그 파일을 볼 수 있습니다.
Terraform을 사용하여 Azure 리소스를 관리하는 방법을 보여 주는 더 많은 문서 및 샘플 코드를 참조하세요.
샘플 Terraform 코드를 테스트 및 실행할 디렉터리를 만들고 현재 디렉터리로 만듭니다.
main.tf
라는 파일을 만들고 다음 코드를 삽입합니다.resource "random_pet" "rg_name" { prefix = var.resource_group_name_prefix } resource "azurerm_resource_group" "rg" { name = random_pet.rg_name.id location = var.resource_group_location } resource "random_string" "azurerm_api_management_name" { length = 13 lower = true numeric = false special = false upper = false } resource "azurerm_api_management" "api" { name = "apiservice${random_string.azurerm_api_management_name.result}" location = azurerm_resource_group.rg.location resource_group_name = azurerm_resource_group.rg.name publisher_email = var.publisher_email publisher_name = var.publisher_name sku_name = "${var.sku}_${var.sku_count}" }
outputs.tf
라는 파일을 만들고 다음 코드를 삽입합니다.output "resource_group_name" { value = azurerm_resource_group.rg.name } output "api_management_service_name" { value = azurerm_api_management.api.name }
providers.tf
라는 파일을 만들고 다음 코드를 삽입합니다.terraform { required_version = ">=1.0" required_providers { azurerm = { source = "hashicorp/azurerm" version = "~>3.0" } random = { source = "hashicorp/random" version = "~>3.0" } } } provider "azurerm" { features {} }
variables.tf
라는 파일을 만들고 다음 코드를 삽입합니다.variable "resource_group_location" { type = string default = "eastus" description = "Location for all resources." } variable "resource_group_name_prefix" { type = string default = "rg" description = "Prefix of the resource group name that's combined with a random ID so name is unique in your Azure subscription." } variable "publisher_email" { default = "test@contoso.com" description = "The email address of the owner of the service" type = string validation { condition = length(var.publisher_email) > 0 error_message = "The publisher_email must contain at least one character." } } variable "publisher_name" { default = "publisher" description = "The name of the owner of the service" type = string validation { condition = length(var.publisher_name) > 0 error_message = "The publisher_name must contain at least one character." } } variable "sku" { description = "The pricing tier of this API Management service" default = "Developer" type = string validation { condition = contains(["Developer", "Standard", "Premium"], var.sku) error_message = "The sku must be one of the following: Developer, Standard, Premium." } } variable "sku_count" { description = "The instance size of this API Management service." default = 1 type = number validation { condition = contains([1, 2], var.sku_count) error_message = "The sku_count must be one of the following: 1, 2." } }
Terraform 초기화
terraform init를 실행하여 Terraform 배포를 초기화합니다. 이 명령은 Azure 리소스를 관리하는 데 필요한 Azure 공급자를 다운로드합니다.
terraform init -upgrade
핵심 사항:
-
-upgrade
매개 변수는 필요한 공급자 플러그 인을 구성의 버전 제약 조건을 준수하는 최신 버전으로 업그레이드합니다.
Terraform 실행 계획 만들기
terraform 계획을 실행하여 실행 계획을 만듭니다.
terraform plan -out main.tfplan
핵심 사항:
-
terraform plan
명령은 실행 계획을 만들지만 실행하지는 않습니다. 대신 구성 파일에 지정된 구성을 만드는 데 필요한 작업을 결정합니다. 이 패턴을 사용하면 실제 리소스를 변경하기 전에 실행 계획이 예상과 일치하는지 확인할 수 있습니다. - 선택 사항인
-out
매개 변수를 사용하여 계획의 출력 파일을 지정할 수 있습니다.-out
매개 변수를 사용하면 검토한 계획이 정확하게 적용됩니다.
Terraform 실행 계획 적용
terraform 적용을 실행하여 클라우드 인프라에 실행 계획을 적용합니다.
terraform apply main.tfplan
핵심 사항:
- 예시
terraform apply
명령은 이전에terraform plan -out main.tfplan
를 실행했다고 가정합니다. -
-out
매개 변수에 다른 파일 이름을 지정한 경우terraform apply
에 대한 호출에서 동일한 파일 이름을 사용합니다. -
-out
매개 변수를 사용하지 않은 경우 매개 변수 없이terraform apply
를 호출합니다.
참고 항목
API Management 서비스를 만들고 활성화하는 데 30~40분이 걸릴 수 있습니다.
결과 확인
Azure 리소스 그룹 이름을 가져옵니다.
resource_group_name=$(terraform output -raw resource_group_name)
서비스 이름을 가져옵니다.
api_management_service_name=$(terraform output -raw api_management_service_name)
az apim show를 실행하여 새 서비스에 대한 정보를 표시합니다.
az apim show --resource-group $resource_group_name \ --name $api_management_service_name
리소스 정리
Terraform을 통해 리소스를 만들 필요가 더 이상 없으면 다음 단계를 수행합니다.
terraform 계획을 실행하고 플래그를 지정합니다
destroy
.terraform plan -destroy -out main.destroy.tfplan
핵심 사항:
-
terraform plan
명령은 실행 계획을 만들지만 실행하지는 않습니다. 대신 구성 파일에 지정된 구성을 만드는 데 필요한 작업을 결정합니다. 이 패턴을 사용하면 실제 리소스를 변경하기 전에 실행 계획이 예상과 일치하는지 확인할 수 있습니다. - 선택 사항인
-out
매개 변수를 사용하여 계획의 출력 파일을 지정할 수 있습니다.-out
매개 변수를 사용하면 검토한 계획이 정확하게 적용됩니다.
-
terraform을 실행하여 실행 계획을 적용합니다.
terraform apply main.destroy.tfplan
Azure의 Terraform 문제 해결
Azure에서 Terraform을 사용할 때 발생하는 일반적인 문제 해결