이 자습서에서는 Go용 Azure SDK를 사용하여 Azure Resource Manager 템플릿을 배포합니다.
Azure Resource Manager는 Azure용 배포 및 관리 서비스입니다. Azure 계정에서 리소스를 만들고, 업데이트하고, 삭제할 수 있습니다. Azure Resource Manager 템플릿은 JSON 문서의 코드로 인프라를 선언적으로 설명합니다.
이 자습서를 마치면 Go를 사용하여 Azure Resource Manager 템플릿을 작성하고 배포합니다.
필수 조건
- Azure 구독: Azure 구독이 아직 없는 경우 시작하기 전에 체험 계정을 만듭니다.
새 모듈 만들기
이 섹션에서는 새 Go 모듈을 만들고 필요한 Azure SDK 패키지를 설치합니다. 그런 다음 기본 애플리케이션 파일을 만들고 Azure Resource Manager 템플릿을 배포하는 코드를 추가합니다.
라는
deployARM-how-to새 디렉터리를 만듭니다. 그런 다음 해당 디렉터리로 변경합니다.mkdir deployARM-how-to cd deployARM-how-togo mod init명령을 실행하여go.mod파일 및go.sum파일을 만듭니다.go mod init deployARM-how-toAzure SDK for Go에는 Azure 작업을 위한 여러 패키지가 포함되어 있습니다. 이 자습서에서는 ,
azcore/to및azidentity패키지가 필요합니다armresources.go get명령을 실행하여 다음 패키지를 다운로드합니다.go get github.com/Azure/azure-sdk-for-go/sdk/azcore/to go get github.com/Azure/azure-sdk-for-go/sdk/azidentity go get github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/resources/armresources이름이
main.go인 파일을 만듭니다.touch main.go편집기에서 열고
main.goAzure에 인증하고, 리소스 그룹을 만들고, Azure Resource Manager 템플릿을 배포하는 다음 코드를 추가합니다.package main import ( "context" "encoding/json" "fmt" "log" "os" "github.com/Azure/azure-sdk-for-go/sdk/azcore/to" "github.com/Azure/azure-sdk-for-go/sdk/azidentity" "github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/resources/armresources" ) const ( resourceGroupName = "deployARM-how-to" resourceGroupLocation = "eastus" deploymentName = "deployARM-how-to" templateFile = "template.json" ) var ( ctx = context.Background() ) // Read a JSON file from the given path. func readJSON(path string) (map[string]interface{}, error) { data, err := os.ReadFile(path) if err != nil { log.Fatalf("failed to read file: %v", err) } contents := make(map[string]interface{}) _ = json.Unmarshal(data, &contents) return contents, nil } func main() { subscriptionId := os.Getenv("AZURE_SUBSCRIPTION_ID") // Authenticate to Azure cred, err := azidentity.NewDefaultAzureCredential(nil) if err != nil { log.Fatalf("failed to obtain a credential: %v", err) } // Create a resource group. client, err := armresources.NewResourceGroupsClient(subscriptionId, cred, nil) if err != nil { log.Fatalf("failed to create client: %v", err) } resp, err := client.CreateOrUpdate(context.Background(), resourceGroupName, armresources.ResourceGroup{ Location: to.Ptr(resourceGroupLocation), }, nil) if err != nil { log.Fatalf("failed to obtain a response: %v", err) } log.Printf("resource group ID: %s\n", *resp.ResourceGroup.ID) // Read the template file. template, err := readJSON(templateFile) if err != nil { return } // Deploy the Azure Resource Manager template. deploymentsClient, err := armresources.NewDeploymentsClient(subscriptionId, cred, nil) if err != nil { log.Fatalf("failed to create client: %v", err) } deploy, err := deploymentsClient.BeginCreateOrUpdate( ctx, resourceGroupName, deploymentName, armresources.Deployment{ Properties: &armresources.DeploymentProperties{ Template: template, Mode: to.Ptr(armresources.DeploymentModeIncremental), }, }, nil, ) if err != nil { log.Fatalf("failed to deploy template: %v", err) } fmt.Println(deploy) }
Azure Resource Manager 템플릿 만들기
deployARM-how-to디렉터리에서template.json이라는 새 파일을 만드세요.template.json파일을 열고 Azure Storage 계정을 만드는 다음 Azure Resource Manager 템플릿 코드를 추가합니다.{ "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#", "contentVersion": "1.0.0.0", "parameters": { }, "functions": [], "variables": {}, "resources": [{ "name": "<StorageAccountName>", "type": "Microsoft.Storage/storageAccounts", "apiVersion": "2021-04-01", "tags": { "displayName": "<StorageAccountDisplayName>" }, "location": "EastUS", "kind": "StorageV2", "sku": { "name": "Premium_LRS", "tier": "Premium" } }], "outputs": {} }<StorageAccountName>및<StorageAccountDisplayName>을(를) 유효한 스토리지 이름 값으로 대체하십시오.
Azure Resource Manager 템플릿에 대한 자세한 내용은 Azure Resource Manager 템플릿 개요를 참조하세요.
Azure에 로그인
이 문서의 코드는 Go용 Azure ID 모듈의 DefaultAzureCredential 형식을 사용하여 Azure에 인증합니다.
DefaultAzureCredential 에서는 Microsoft Entra ID와 함께 OAuth를 사용하여 Azure 인증을 위한 다양한 자격 증명 유형을 지원합니다. 이 문서에서는 Azure CLI에 로그인하는 사용자 자격 증명을 사용합니다.
아직 로그인하지 않은 경우 Azure CLI에 로그인합니다.
az login
여러 구독이 계정에 연결된 경우 az account list 명령을 사용하여 해당 구독 목록을 가져옵니다. az account set 명령을 사용하여 활성 구독을 설정합니다. 활성 구독을 설정하여 이 문서의 나머지 부분에서 실행하는 CLI 명령이 의도한 구독에 대해 실행되는지 확인합니다.
비고
로컬로 DefaultAzureCredential 실행하는 경우 AZD(Azure Developer CLI) 로그인 자격 증명 또는 환경 변수에서 구성하는 Azure 서비스 주체도 지원합니다. 지원되는 모든 자격 증명 유형에 대한 자세한 내용은 Go용 Azure ID 모듈을 사용하여 Azure 인증을 참조하세요.
애플리케이션 실행
템플릿을 배포하려면 Azure 구독 ID를 환경 변수로 정의해야 합니다.
구독 ID를 가져오려면 다음 az account show 명령을 실행합니다.
az account show --query id --output tsv구독 ID를 사용하여
AZURE_SUBSCRIPTION_ID환경 변수를 설정합니다.<AzureSubscriptionId>는 구독 ID로 바꿉니다.export AZURE_SUBSCRIPTION_ID=<AzureSubscriptionId>go run명령을 실행하여 템플릿을 배포합니다.go run main.go
Troubleshoot
스토리지 계정 배포가 실패하면 유효한 스토리지 이름 값을 사용했는지 확인합니다. 스토리지 계정 이름은 3~24자 사이여야 하고 소문자 및 숫자만 포함할 수 있습니다.
프로그램에서 인증 또는 권한 부여와 관련된 오류를 반환하는 경우 다음 항목을 확인합니다.
오류가 타임스탬프와 다음 텍스트로 시작하는 경우 : "응답을 얻지 못했습니다. DefaultAzureCredential: 토큰을 획득하지 못했습니다.", 이전에 설명한 대로 Azure CLI에 로그인했는지 확인합니다.
오류가 권한 부여 또는 금지 오류(상태 코드 401 또는 403)인 경우 사용자 계정이 리소스 그룹을 만들고 구독에 리소스를 추가할 수 있는 권한을 부여하는 Azure 역할에 있는지 확인합니다. 예를 들어 기여자 또는 소유자 같은 Azure 기본 제공 역할이 있습니다. 사용자에게 Azure 역할을 할당하는 방법을 알아보려면 Azure CLI를 사용하여 Azure 역할 할당을 참조하세요.
자세한 문제 해결 지침은 Azure ID 인증 문제 해결을 참조하세요.
Azure에서 리소스 확인
여러 Azure CLI 명령을 사용하여 리소스가 Azure에서 성공적으로 생성되었는지 확인할 수 있습니다. 다음 명령은 몇 가지 예입니다.
리소스 그룹이 있는지 확인하려면 az group exists 명령을 실행합니다.
az group exists --name deployARM-how-to
az resource list 명령을 사용하여 그룹의 리소스를 나열할 수 있습니다.
az resource list --resource-group deployARM-how-to
az deployment group show 명령을 사용하여 배포 결과(outputResources) 및 속성을 검사할 수 있습니다.
az deployment group show -g deployARM-how-to -n deployARM-how-to
자원을 정리하세요
Azure의 리소스는 지속적인 요금이 발생할 수 있습니다. 이 문서에서 만든 리소스를 정리해야 합니다.
전체 모드에서 빈 템플릿을 배포하면 리소스 그룹 내의 모든 리소스가 삭제됩니다. 리소스 그룹 자체를 삭제하지 않고 리소스를 정리하는 깔끔한 방법입니다.
라는 빈 템플릿을 새로 만듭니다
empty-template.json.편집기에서 열고
empty-template.json다음 코드를 추가합니다.{ "$schema": "https://schema.management.azure.com/schemas/2019-08-01/deploymentTemplate.json#", "contentVersion": "1.0.0.0", "parameters": {}, "variables": {}, "resources": [], "outputs": {} }main.go파일을 엽니다.상수
templateFile값을 으로 업데이트합니다empty-template.json.const ( resourceGroupName = "deployARM-how-to" resourceGroupLocation = "eastus" deploymentName = "deployARM-how-to" templateFile = "empty-template.json" )배포 모드 속성을 증분에서 완료로 변경하여 배포 시간을 변경합니다. 배포 모드에 대한 자세한 내용은 Azure Resource Manager 배포 모드참조하세요.
deploy, err = deploymentsClient.BeginCreateOrUpdate( ctx, resourceGroupName, deploymentName, armresources.Deployment{ Properties: &armresources.DeploymentProperties{ Template: template, Mode: to.Ptr(armresources.DeploymentModeComplete), //Deployment Mode is here }, }, nil, )go run명령을 실행하여 빈 템플릿을 배포하고 이전에 만든 스토리지 계정을 삭제합니다.go run main.go
배포를 사용하는 대신 다음 Azure CLI 명령을 실행하여 리소스 그룹 및 모든 리소스를 삭제할 수 있습니다.
az group delete --resource-group deployARM-how-to