다음을 통해 공유


Go용 Azure SDK를 사용하여 리소스 그룹 관리

이 문서에서는 Go용 Azure SDK 관리 라이브러리를 사용하여 리소스 그룹을 만들고 관리하는 방법을 알아봅니다.

1. Azure 리소스 설정

이 문서의 단계를 완료하려면 다음 Azure 리소스 및 식별자가 필요합니다.

  • Azure 구독: Azure 구독이 없는 경우 시작하기 전에 먼저 무료 계정 만드세요.

  • Azure 구독 ID가져옵니다.

  • Microsoft Entra 테넌트 ID획득합니다.

  • 서비스 주체만듭니다. 서비스 주체의 애플리케이션(클라이언트) ID 및 비밀을 기록합니다. 또한 지침에 따라 구독의 기여자 역할을 애플리케이션에 할당해야 합니다. 기여자 역할은 구독의 모든 리소스를 관리할 수 있는 권한을 부여하는 권한 있는 관리자 역할입니다.

다음 섹션으로 이동하기 전에, 귀하의 서비스 주체에 대한 구독 ID(Guid), 테넌트 ID(Guid), 클라이언트/애플리케이션 ID(Guid) 및 비밀을 적어 두었는지 확인하십시오.

2. 인증 설정

요구 사항에 맞는 인증 방법을 선택합니다. 서버 및 로컬 환경에서 호스트되는 앱에 대해 자격 증명이 없는 인증 방법을 여러 가지 제공합니다. Go용 Azure SDK 문서를 사용하여 Azure 서비스에 Go 앱을 인증하면 시나리오에 가장 적합한 인증 메커니즘을 결정하는 데 도움이 됩니다.

3. 리소스 그룹 만들기

  1. 샘플 Go 코드를 테스트하고 실행하기 위해 디렉터리를 만들고 이를 현재 디렉터리로 설정합니다.

  2. go mod init 실행하여 현재 디렉터리에 모듈을 만듭니다.

    go mod init <module_path>
    

    핵심 사항:

    • <module_path> 매개 변수는 일반적으로 github.com/<your_github_account_name>/<directory>같은 GitHub 리포지토리의 위치입니다.
    • 명령줄 앱을 테스트로 만들고 앱을 게시하지 않는 경우 <module_path> 실제 위치를 참조할 필요가 없습니다.
  3. 명령어 를 실행한 후을 사용하여 필요한 Azure SDK for Go 모듈을 다운로드, 빌드 및 설치하십시오.

    go get github.com/Azure/azure-sdk-for-go/sdk/azcore
    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
    

    중요하다

    Azure 리소스 관리 라이브러리의 현재 버전에 해당하는 패키지는 sdk/**/arm**에 위치해 있습니다. 이전 버전의 관리 라이브러리에 대한 패키지는 /services아래에 있습니다. 이전 버전을 사용하는 경우 Azure SDK for Go 마이그레이션 가이드을 참조하세요.

  4. main.go 파일을 만들고 다음 코드를 추가합니다. 코드의 각 섹션은 해당 목적을 설명하기 위해 주석으로 작성됩니다.

    package main
    
    // Import key modules.
    import (
    	"context"
    	"log"
    	"os"
    
    	"github.com/Azure/azure-sdk-for-go/sdk/azcore"
    	"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"
    )
    
    // Define key global variables.
    var (
    	subscriptionId    = "<your_subscription_id>"
    	location          = "<your_region>"
    	resourceGroupName = "<your_resource_group_name>" // !! IMPORTANT: Change this to a unique name in your subscription.
    	ctx               = context.Background()
    )
    
    // Define the function to create a resource group.
    func createResourceGroup(subscriptionId string, credential azcore.TokenCredential) (armresources.ResourceGroupsClientCreateOrUpdateResponse, error) {
    	rgClient, _ := armresources.NewResourceGroupsClient(subscriptionId, credential, nil)
    
    	param := armresources.ResourceGroup{
    		Location: to.Ptr(location),
    	}
    
    	return rgClient.CreateOrUpdate(ctx, resourceGroupName, param, nil)
    }
    
    // Define the standard 'main' function for an app that is called from the command line.
    func main() {
    
    	// Create a credentials object.
    	cred, err := azidentity.NewDefaultAzureCredential(nil)
    	if err != nil {
    		log.Fatalf("Authentication failure: %+v", err)
    	}
    
    	// Call your function to create an Azure resource group.
    	resourceGroup, err := createResourceGroup(subscriptionId, cred)
    	if err != nil {
    		log.Fatalf("Creation of resource group failed: %+v", err)
    	}
    
    	// Print the name of the new resource group.
    	log.Printf("Resource group %s created", *resourceGroup.ResourceGroup.ID)
    }
    

    핵심 사항:

    • subscriptionId 값은 AZURE_SUBSCRIPTION_ID 환경 변수에서 검색됩니다.
    • locationresourceGroupName 문자열은 값을 테스트하도록 설정됩니다. 필요한 경우 해당 값을 위치 및 구독에 적합한 값으로 변경합니다.
  5. go mod tidy를 실행하여 소스 코드에 따라 go.mod 파일의 종속성을 정리합니다.

    go mod tidy
    
  6. go run 실행하여 앱을 빌드하고 실행합니다.

    go run .
    

4. 결과 확인

  1. Azure 포털로 이동합니다.

  2. 로그인하고 Azure 구독을 선택합니다.

  3. 왼쪽 메뉴에서리소스 그룹을 선택합니다.

  4. 새 리소스 그룹은 Azure 구독의 리소스 그룹 중 하나입니다.

5. 리소스 그룹 업데이트

  1. main.go 파일로 돌아가세요.

  2. main 함수 바로 위에 다음 코드를 삽입합니다.

    // Update the resource group by adding a tag to it.
    func updateResourceGroup(subscriptionId string, credential azcore.TokenCredential) (armresources.ResourceGroupsClientUpdateResponse, error) {
        rgClient, _ := armresources.NewResourceGroupsClient(subscriptionId, credential, nil)
    
        update := armresources.ResourceGroupPatchable{
            Tags: map[string]*string{
                "new": to.Ptr("tag"),
            },
        }
        return rgClient.Update(ctx, resourceGroupName, update, nil)
    }
    

코드를 추가한 후 다음 섹션으로 이동합니다. 이후 섹션에서 코드를 실행합니다.

6. Azure 구독의 리소스 그룹 나열

  1. main.go 파일로 돌아가세요.

  2. main 함수 바로 위에 다음 코드를 삽입합니다.

    // List all the resource groups of an Azure subscription.
    func listResourceGroups(subscriptionId string, credential azcore.TokenCredential) ([]*armresources.ResourceGroup, error) {
        rgClient, _ := armresources.NewResourceGroupsClient(subscriptionId, credential, nil)
    
        pager := rgClient.NewListPager(nil)
    
        var resourceGroups []*armresources.ResourceGroup
        for pager.More() {
            resp, err := pager.NextPage(ctx)
            if err != nil {
                return nil, err
            }
            if resp.ResourceGroupListResult.Value != nil {
                resourceGroups = append(resourceGroups, resp.ResourceGroupListResult.Value...)
            }
        }
        return resourceGroups, nil
    }
    

코드를 추가한 후 다음 섹션으로 이동합니다. 이후 섹션에서 코드를 실행합니다.

7. 리소스 그룹 삭제

  1. main.go 파일로 돌아가세요.

  2. main 함수 바로 위에 다음 코드를 삽입합니다.

    // Delete a resource group.
    func deleteResourceGroup(subscriptionId string, credential azcore.TokenCredential) error {
        rgClient := armresources.NewResourceGroupsClient(subscriptionId, credential, nil)
    
        poller, err := rgClient.BeginDelete(ctx, resourceGroupName, nil)
        if err != nil {
            return err
        }
        if _, err := poller.PollUntilDone(ctx, nil); err != nil {
            return err
        }
        return nil
    }
    

코드를 추가한 후 다음 섹션으로 이동합니다. 이후 섹션에서 코드를 실행합니다.

8. 주 함수 업데이트

이전 섹션에서는 리소스 그룹을 만들고 업데이트하고 삭제하는 main.go 코드를 추가했습니다. 또한 Azure 구독의 모든 리소스 그룹을 나열하는 코드를 추가했습니다. 이러한 모든 함수를 순차적으로 실행하려면 다음을 수행합니다.

  1. main.go에서 main 함수를 다음 코드로 바꿉니다.

    func main() {
    
        // Create a credentials object.
        cred, err := azidentity.NewDefaultAzureCredential(nil)
        if err != nil {
            log.Fatalf("Authentication failure: %+v", err)
        }
    
        // Call your function to create an Azure resource group.
        resourceGroup, err := createResourceGroup(subscriptionId, cred)
        if err != nil {
            log.Fatalf("Creation of resource group failed: %+v", err)
        }
        // Print the name of the new resource group.
        log.Printf("Resource group %s created", *resourceGroup.ResourceGroup.ID)
    
        // Call your function to add a tag to your new resource group.
        updatedRG, err := updateResourceGroup(subscriptionId, cred)
        if err != nil {
            log.Fatalf("Update of resource group failed: %+v", err)
        }
        log.Printf("Resource Group %s updated", *updatedRG.ResourceGroup.ID)
    
        // Call your function to list all the resource groups.
        rgList, err := listResourceGroups(subscriptionId, cred)
        if err != nil {
            log.Fatalf("Listing of resource groups failed: %+v", err)
        }
        log.Printf("Your Azure subscription has a total of %d resource groups", len(rgList))
    
        // Call your function to delete the resource group you created.
        if err := deleteResourceGroup(subscriptionId, cred); err != nil {
            log.Fatalf("Deletion of resource group failed: %+v", err)
        }
        log.Printf("Resource group deleted")
    }
    
  2. 코드를 실행하고 출력을 관찰합니다.

    go run .
    
    2024/07/31 15:29:06 Resource group /subscriptions/<subscription ID>/resourceGroups/myResourceGroup created
    2024/07/31 15:29:07 Resource Group /subscriptions/<subscription ID>/resourceGroups/myResourceGroup updated
    2024/07/31 15:29:07 Your Azure subscription has a total of 8 resource groups
    2024/07/31 15:30:25 Resource group deleted
    

    메모

    리소스 그룹을 삭제하는 데 몇 분 정도 걸릴 수 있습니다.

문제 해결

  • Stack Overflow에 게시된 이전 질문을 확인하거나 태그를 사용하여 새 질문을 하세요.
  • 발생한 오류에 대해 GitHub 이슈를 등록하세요

다음 단계