다음을 통해 공유


Go 라이브러리에 대한 Azure SDK 개요

Go용 Azure SDK 관리 라이브러리와 데이터 평면 클라이언트 라이브러리를 모두 포함합니다. 이 문서에서는 라이브러리가 무엇인지, 라이브러리가 Azure 워크플로에 적합한지, Go 관련 패턴에 대해 다음에 어디로 가야 하는지 이해할 수 있도록 개요를 제공합니다.

관리 라이브러리

관리 라이브러리를 사용하여 Azure 리소스를 프로비전, 구성 및 관리합니다. 리소스 내부에 저장된 데이터보다는 리소스 자체를 관리하는 데 집중합니다. 관리 라이브러리는 Azure 리소스 및 서비스 구성을 관리하는 제어 평면 작업을 수행합니다. 일반적인 작업은 다음과 같습니다.

  • 리소스 그룹, 가상 네트워크 또는 가상 머신을 만들거나 업데이트합니다.
  • 보안 설정, ID, 액세스 정책 및 진단 구성
  • 구독에서 Azure 리소스 나열, 태그 지정 및 삭제
  • 배포, 정리, 규정 준수 및 플랫폼 작업 자동화

관리 라이브러리 패키지에는 armcompute, armnetwork, armkeyvault와 같은 이름이 있습니다. 애플리케이션 수명 주기의 설정, 구성 및 거버넌스 단계에서 관리 라이브러리를 사용합니다. 자세한 패키지 설명서는 pkg.go.dev 패키지를 검색 합니다.

클라이언트 라이브러리

Go 애플리케이션이 이미 프로비전된 Azure 서비스 내에서 데이터 또는 런타임 표면을 사용해야 하는 경우 클라이언트 라이브러리를 사용합니다. 클라이언트 라이브러리는 서비스에 저장되거나 서비스를 통해 흐르는 데이터와 함께 작동하는 데이터 평면 작업을 수행합니다. 일반적인 작업은 다음과 같습니다.

  • 블롭을 스토리지 계정에 업로드 및 다운로드하기.
  • Service Bus 또는 Event Hubs를 사용하여 메시지 보내기 및 받기
  • 데이터베이스에서 레코드 읽기, 쓰기 또는 삭제
  • Key Vault 비밀을 검색합니다.
  • 프로비전된 리소스에 대한 쿼리 또는 작업 실행

클라이언트 라이브러리 패키지의 이름은 다음과 같습니다(예: azblob, azstorage, azsecrets, azservicebus, azeventhubs). 관리 라이브러리를 사용하여 기본 Azure 서비스를 이미 프로비전한 후 클라이언트 라이브러리를 사용합니다. 자세한 패키지 설명서는 pkg.go.dev 패키지를 검색 합니다.

관리 및 클라이언트 라이브러리 모두 사용

단일 Go 솔루션은 제어 및 데이터 평면에서 관리 라이브러리와 클라이언트 라이브러리를 모두 사용할 수 있습니다. 예를 들어 설치 중에 관리 라이브러리를 사용하여 스토리지 계정(컨트롤 플레인)을 만든 다음 애플리케이션의 클라이언트 라이브러리를 사용하여 Blob(데이터 평면)을 업로드하고 다운로드할 수 있습니다. 차이점을 이해하면 워크플로의 각 작업에 적합한 라이브러리를 선택할 수 있습니다.

각 평면에 대한 Go 언어의 특정 패턴 및 예제는 다음 문서를 참조하세요.

Go 패키지 설치

대부분의 프로젝트에서 버전 관리 및 종속성 관리를 위한 Go 패키지를 설치합니다.

Go 패키지를 설치하려면 명령을 실행합니다 go get .

예를 들어 패키지를 설치 armcompute 하려면 다음 명령을 실행합니다.

go get github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/compute/armcompute

대부분의 Go 앱에서 인증을 위해 다음 패키지를 설치합니다.

  • github.com/Azure/azure-sdk-for-go/sdk/azcore/to
  • github.com/Azure/azure-sdk-for-go/sdk/azidentity

Go 코드로 패키지 가져오기

패키지를 다운로드한 후 import 문을 사용하여 앱에 가져옵니다.

import (
    "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/compute/armcompute"
)

Azure에 인증하기

Azure SDK 라이브러리를 사용하는 Go 앱은 Azure ID 라이브러리 Microsoft Entra ID 사용하여 인증해야 합니다. 토큰 기반 인증은 연결 문자열 또는 키보다 더 안전하고 관리가 가능합니다. 권장 자격 증명은 앱이 실행되는 위치에 따라 달라집니다. Azure 호스팅된 앱에 관리 ID 사용, 로컬 개발을 위한 개발자 자격 증명 또는 서비스 주체 및 대부분의 온-프레미스 시나리오에 대한 서비스 주체를 사용합니다.

기본 인증 옵션은 이 문서의 앞부분에서 설정한 환경 변수를 사용하는 DefaultAzureCredential입니다. Go 코드에서 다음과 같이 개체를 azidentity 만듭니다.

cred, err := azidentity.NewDefaultAzureCredential(nil)
if err != nil {
  // handle error
}

인증에 대한 자세한 내용은 go 인증에 대한 Azure SDK 참조하세요.

리소스 관리 클라이언트 만들기

Azure ID에서 자격 증명을 받은 후 대상 Azure 서비스에 연결할 클라이언트를 만듭니다.

예를 들어 Azure Compute 서비스에 연결하려는 경우를 가정해 보겠습니다. 컴퓨트 패키지는 하나 이상의 클라이언트로 구성됩니다. 클라이언트는 지정된 구독 내에서 해당 기능에 대한 액세스를 제공하는 관련 API 집합을 그룹화합니다. 필요한 API에 액세스하기 위해 하나 이상의 클라이언트를 만듭니다.

다음 코드는 armcompute를 사용합니다. 가상 머신을 관리하는 클라이언트를 만드는 NewVirtualMachinesClient 형식:

client, err := armcompute.NewVirtualMachinesClient("<subscription ID>", cred, nil)
if err != nil {
  // handle error
}

Go를 사용하여 Azure 리소스를 관리하는 방법에 대한 자세한 내용은 컨트롤 플레인 작업에 Go용 Azure SDK 사용 참조하세요.

동일한 패턴을 사용하여 다른 Azure 서비스와 연결합니다. 예를 들어 armnetwork 패키지를 설치하고 가상 네트워크 클라이언트를 만들어 가상 네트워크 리소스를 관리합니다.

client, err := armnetwork.NewVirtualNetworksClient("<subscription ID>", cred, nil)
if err != nil {
  // handle error
}

코드 샘플:

package main

import (
    "github.com/Azure/azure-sdk-for-go/sdk/azidentity"
    "github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/compute/armcompute"
)

func main() {
    cred, err := azidentity.NewDefaultAzureCredential(nil)
    if err != nil {
        // handle error
    }
    client, err := armcompute.NewVirtualMachinesClient("<subscription ID>", cred, nil)
    if err != nil {
        // handle error
    }
}

Azure 서비스에 대해 go용 Azure SDK 사용하는 방법에 대한 자세한 내용은 데이터 평면 작업에 Go용 Azure SDK 사용을 참조하세요.

Go 리포지토리에 대한 Azure SDK 사용

클라이언트를 인스턴스화한 후 이를 사용하여 Azure 리소스에 대한 API 호출을 수행합니다. 리소스 관리 시나리오의 경우 대부분의 사용 사례는 CRUD(만들기, 읽기, 업데이트, 삭제) 작업입니다.

특정 형식에 대한 작업을 찾으려면 Azure SDK for Go GitHub 리포지토리에서 소스를 찾아보세요. SDK 원본은 sdk/ 디렉터리 아래에 구성되며 sdk/resourcemanager/ 아래의 관리 라이브러리와 sdk/storage/sdk/security/keyvault/ 같은 서비스별 폴더의 클라이언트 라이브러리가 있습니다.

특정 형식의 원본을 찾으려면 다음 단계를 수행합니다.

  1. GitHub Azure SDK go 리포지토리로 이동합니다.
  2. sdk/resourcemanager/ 관리 라이브러리 또는 sdk/ 클라이언트 라이브러리로 이동합니다.
  3. 서비스 폴더를 연 다음 패키지 폴더를 엽니다. sdk/resourcemanager/compute/armcompute/을 예로 들 수 있습니다.
  4. 필요한 형식이 포함된 원본 파일을 찾습니다. 클라이언트 형식 및 해당 메서드는 일반적으로 클라이언트의 이름을 딴 파일(예: virtualmachines_client.go.)에 있습니다.
  5. 형식의 주석과 메서드 시그니처를 읽어 사용 정보를 확인합니다.

URL을 직접 빌드할 수도 있습니다. 예를 들어 리소스 그룹 작업 원본을 찾으려면 https://github.com/Azure/azure-sdk-for-go/tree/main/sdk/resourcemanager/resources/armresources 이동합니다.

이 예제에서는 Azure 리소스 그룹 작업의 원본을 찾는 방법을 보여 줍니다.

  1. GitHub Azure SDK go 리포지토리로 이동합니다.
  2. sdk/resourcemanager/resources/armresources/로 이동하십시오.
  3. resource_groups_client.go 열어 ResourceGroupsClient 형식과 해당 CreateOrUpdate 메서드를 찾습니다.
  4. 메서드의 주석 및 매개 변수를 읽고 API 호출을 만드는 방법을 이해합니다.

생성된 참조 설명서에 대해 pkg.go.dev에서 패키지를 검색하십시오.

장기간 실행되는 작업

일부 작업은 완료하는 데 시간이 오래 걸립니다. 이러한 작업을 처리하기 위해 관리 라이브러리는 비동기 호출을 통해 LRO(장기 실행 작업)를 지원하는 함수를 제공합니다. 이러한 함수 이름은 Begin으로 시작하며, 예를 들어 BeginCreateBeginDelete가 있습니다.

이러한 함수는 비동기이므로 함수가 작업을 완료하는 동안 코드가 차단되지 않습니다. 대신 이 함수는 폴러 개체를 즉시 반환합니다. 그런 다음 코드는 원래 비동기 함수가 완료되면 반환되는 동기 폴러 함수를 호출합니다.

다음 코드 조각은 이 패턴의 예를 보여 줍니다.

ctx := context.Background()
// Call an asynchronous function to create a client. The return value is a poller object.
poller, err := client.BeginCreate(ctx, "resource_identifier", "additional_parameter")

if err != nil {
    // handle error...
}

// Call the poller object's PollUntilDone function that will block until the poller object
// has been updated to indicate the task has completed.
resp, err = poller.PollUntilDone(ctx, nil)
if err != nil {
    // handle error...
}

// Print the fact that the LRO completed.
fmt.Printf("LRO done")

// Work with the response ("resp") object.

주요 정보:

  • 이 함수에는 PollUntilDone 상태를 가져오는 빈도를 지정하는 폴링 간격이 필요합니다. 옵션 매개 변수에 대해 전달하는 경우 nil 기본값은 30초이지만 필요에 따라 조정할 수 있습니다.
  • 간격은 일반적으로 짧습니다. 권장되는 간격은 특정 Azure 리소스에 대한 설명서를 참조하세요.
  • Go Azure SDK 디자인 지침 페이지의 LRO 섹션에는 LRO에 대한 고급 예제 및 일반 지침이 있습니다.

패턴에 대한 자세한 내용은 Go용 Azure SDK의 일반적인 사용 패턴을 참조하세요.

다음 단계

인증, 클라이언트 생성, 장기 실행 작업 및 서비스 가이드 패턴에 대한 자세한 내용은 플레인별 문서를 참고하십시오.

예제는 Azure SDK GitHub Go 샘플을 참조하세요.