Go용 Azure SDK를 사용하여 리소스 그룹 관리
이 문서에서는 Go용 Azure SDK 관리 라이브러리를 사용하여 리소스 그룹을 만들고 관리하는 방법을 알아봅니다.
1. Azure 리소스 설정
이 문서의 단계를 완료하려면 다음 Azure 리소스 및 식별자가 필요합니다.
Azure 구독: Azure 구독이 아직 없는 경우 시작하기 전에 체험 계정을 만듭니다.
Azure 구독 ID를 가져옵니다.
Microsoft Entra 테넌트 ID를 가져옵니다.
서비스 주체를 만듭니다. 서비스 주체의 애플리케이션(클라이언트) ID 및 비밀을 확인합니다. 또한 지침에 따라 구독의 기여자 역할을 애플리케이션에 할당해야 합니다. 기여자 역할은 구독의 모든 리소스를 관리할 수 있는 권한을 부여하는 권한 있는 관리자 역할입니다.
다음 섹션으로 이동하기 전에 서비스 주체에 대한 구독 ID(Guid), 테넌트 ID(Guid), 클라이언트/애플리케이션 ID(Guid) 및 비밀을 적어 두었는지 확인합니다.
2. 인증 환경 변수 설정
Azure 인증 정보를 사용하여 코드가 Azure에 인증할 수 있도록 적절한 환경 변수를 설정합니다.
다음 환경 변수를 설정합니다. 자리 표시자를 이전 섹션의 적절한 값으로 바꿉 있습니다.
export AZURE_SUBSCRIPTION_ID="<azure_subscription_id>"
export AZURE_TENANT_ID="<active_directory_tenant_id>"
export AZURE_CLIENT_ID="<service_principal_appid>"
export AZURE_CLIENT_SECRET="<service_principal_password>"
3. 리소스 그룹 만들기
샘플 Go 코드를 테스트 및 실행하고 현재 디렉터리로 만들 디렉터리를 만듭니다.
go mod init를 실행하여 현재 디렉터리에 모듈을 만듭니다.
go mod init <module_path>
주요 정보:
<module_path>
매개 변수는 일반적으로 GitHub 리포지토리의 위치입니다(예:github.com/<your_github_account_name>/<directory>
.).- 명령줄 앱을 테스트로 만들고 앱을
<module_path>
게시하지 않는 경우 실제 위치를 참조할 필요가 없습니다.
Go get을 실행하여 Go 모듈에 필요한 Azure SDK를 다운로드, 빌드 및 설치합니다.
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
Important
Azure 리소스 관리 라이브러리의 현재 버전에 대한 패키지는 에 있습니다
sdk/**/arm**
. 이전 버전의 관리 라이브러리에 대한 패키지는/services
에 있습니다. 이전 버전을 사용하는 경우 Go 마이그레이션 가이드용 Azure SDK를 참조하세요.명명
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 = os.Getenv("AZURE_SUBSCRIPTION_ID") location = "eastus" resourceGroupName = "myResourceGroup" // !! 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
검색됩니다. location
및resourceGroupName
문자열은 값을 테스트하도록 설정됩니다. 필요한 경우 해당 값을 위치 및 구독에 적합한 값으로 변경합니다.
- 값은
go mod tidy를 실행하여 소스 코드를 기반으로 파일의
go.mod
종속성을 정리합니다.go mod tidy
실행
go run
하여 앱을 빌드하고 실행합니다.go run .
4. 결과 확인
Azure Portal로 이동합니다.
로그인하고 Azure 구독을 선택합니다.
왼쪽 메뉴에서 리소스 그룹을 선택합니다.
새 리소스 그룹은 Azure 구독의 리소스 그룹 중 하나입니다.
5. 리소스 그룹 업데이트
파일로 돌아갑니다
main.go
.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 구독의 리소스 그룹 나열
파일로 돌아갑니다
main.go
.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. 리소스 그룹 삭제
파일로 돌아갑니다
main.go
.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 구독의 모든 리소스 그룹을 나열하는 코드를 추가했습니다. 이러한 모든 함수를 순차적으로 실행하려면 다음을 수행합니다.
에서
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") }
코드를 실행하고 출력을 관찰합니다.
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에 게시된 이전 질문을 확인하거나 태그와
Go
태그를Azure
사용하여 새 질문을 합니다. - 발생한 오류에 대해 GitHub 문제를 제출 합니다.