Azure Stack Hub로 이동 하 여 API 버전 프로필 사용Use API version profiles with Go in Azure Stack Hub

Go 및 버전 프로필Go and version profiles

프로필은 서로 다른 서비스의 다양 한 버전을 사용 하는 다양 한 리소스 종류의 조합입니다.A profile is a combination of different resource types with different versions from different services. 프로필을 사용 하면 서로 다른 리소스 유형을 혼합 하 고 일치 시킬 수 있습니다.Using a profile helps you mix and match between different resource types. 프로필은 다음과 같은 이점을 제공할 수 있습니다.Profiles can provide the following benefits:

  • 특정 API 버전으로 잠가 앱에 대 한 안정성.Stability for your app by locking to specific API versions.
  • Azure Stack 허브 및 지역 Azure 데이터 센터를 사용 하는 앱에 대 한 호환성Compatibility for your app with Azure Stack Hub and regional Azure datacenters.

Go SDK에서 프로필은 프로필 경로 아래에서 사용할 수 있습니다.In the Go SDK, profiles are available under the profiles path. 프로필 버전 번호는 yyyy-mm-dd 형식으로 레이블이 지정 됩니다.Profile version numbers are labeled in the YYYY-MM-DD format. 최신 Azure Stack 허브 API 프로필 버전은 Azure Stack Hub 버전 1904 이상에서 2019-03-01 입니다.The latest Azure Stack Hub API profile version is 2019-03-01 for Azure Stack Hub versions 1904 or later. 프로필에서 지정 된 서비스를 가져오려면 프로필에서 해당 모듈을 가져옵니다.To import a given service from a profile, import its corresponding module from the profile. 예를 들어 2019-03-01 프로필에서 계산 서비스를 가져오려면 다음 코드를 사용 합니다.For example, to import Compute service from 2019-03-01 profile, use the following code:

import "github.com/Azure/azure-sdk-for-go/profiles/2019-03-01/compute/mgmt/compute"

Azure SDK for Go 설치Install the Azure SDK for Go

  1. Git를 설치합니다.Install Git. 지침은 시작-Git 설치를 참조 하세요.For instructions, see Getting Started - Installing Git.

  2. Go 프로그래밍 언어를 설치 합니다.Install the Go programming language. Azure 용 API 프로필에는 버전 1.9 이상이 필요 합니다.API profiles for Azure require Go version 1.9 or newer.

  3. 다음 bash 명령을 실행 하 여 Azure Go SDK 및 해당 종속성을 설치 합니다.Install the Azure Go SDK and its dependencies by running the following bash command:

    go get -u -d github.com/Azure/azure-sdk-for-go/...
    

Go SDKThe Go SDK

Azure Go SDK에 대 한 자세한 내용은 다음 링크에서 확인할 수 있습니다.You can find more information about the Azure Go SDK at the following links:

Go-AutoRest 종속성Go-AutoRest dependencies

Go SDK는 Azure Resource Manager 끝점에 REST 요청을 보내기 위해 Azure Go AutoRest 모듈에 의존 합니다.The Go SDK depends on the Azure Go-AutoRest modules to send REST requests to Azure Resource Manager endpoints. GitHub의 azure Go-AutoRest에서 Azure Go AutoRest 모듈 종속성을 가져와야 합니다.You must import the Azure Go-AutoRest module dependencies from Azure Go-AutoRest on GitHub. 설치 섹션에서 bash 설치 명령을 찾을 수 있습니다.You can find the install bash commands in the Install section.

Azure Stack 허브에서 Go SDK 프로필을 사용 하는 방법How to use Go SDK profiles on Azure Stack Hub

Azure Stack Hub에서 Go 코드 샘플을 실행 하려면 다음 단계를 수행 합니다.To run a sample of Go code on Azure Stack Hub, follow these steps:

  1. Go용 Azure SDK 및 해당 종속성을 설치 합니다.Install the Azure SDK for Go and its dependencies. 지침은 이전 섹션인 Install Go용 Azure SDK를 참조 하세요.For instructions, see the previous section, Install Azure SDK for Go.

  2. 리소스 관리자 끝점에서 메타 데이터 정보를 가져옵니다.Get the metadata info from the Resource Manager endpoint. 끝점은 Go 코드를 실행 하는 데 필요한 정보가 포함 된 JSON 파일을 반환 합니다.The endpoint returns a JSON file with the info required to run your Go code.

    참고

    ASDK Azure Stack Development Kit ResourceManagerUrl 는 다음과 같습니다. https://management.local.azurestack.external/The ResourceManagerUrl in the Azure Stack Development Kit (ASDK) is: https://management.local.azurestack.external/
    통합 시스템의 ResourceManagerUrl 는 다음과 같습니다. https://management.<region>.<fqdn>/The ResourceManagerUrl in integrated systems is: https://management.<region>.<fqdn>/
    필요한 메타 데이터를 검색 하려면: <ResourceManagerUrl>/metadata/endpoints?api-version=1.0To retrieve the metadata required: <ResourceManagerUrl>/metadata/endpoints?api-version=1.0

    샘플 JSON 파일:Sample JSON file:

    { "galleryEndpoint": "https://portal.local.azurestack.external:30015/",  
      "graphEndpoint": "https://graph.windows.net/",  
      "portal Endpoint": "https://portal.local.azurestack.external/",
      "authentication": {
        "loginEndpoint": "https://login.windows.net/",
        "audiences": ["https://management.<yourtenant>.onmicrosoft.com/3cc5febd-e4b7-4a85-a2ed-1d730e2f5928"]
      }
    }
    
  3. 사용할 수 없는 경우 구독을 만들고 나중에 사용할 구독 ID를 저장 합니다.If not available, create a subscription and save the subscription ID to be used later. 구독을 만드는 방법에 대 한 자세한 내용은 Azure Stack Hub의 제안에 구독 만들기를 참조 하세요.For info on creating a subscription, see Create subscriptions to offers in Azure Stack Hub.

  4. 구독 범위 및 소유자 역할이 있는 클라이언트 암호를 사용 하는 서비스 주체를 만듭니다.Create a service principal that uses a client secret, with Subscription scope and Owner role. 서비스 사용자 ID 및 암호를 저장 합니다.Save the service principal ID and secret. Azure Stack Hub에 대 한 서비스 주체를 만드는 방법에 대 한 자세한 내용은 앱 id를 사용 하 여 리소스에 액세스를 참조 하세요.For information about creating a service principal for Azure Stack Hub, see Use an app identity to access resources. 이제 Azure Stack 허브 환경이 설정 되었습니다.Your Azure Stack Hub environment is now set up.

  5. 코드의 Go SDK 프로필에서 서비스 모듈을 가져옵니다.Import a service module from the Go SDK profile in your code. Azure Stack 허브 프로필의 현재 버전은 2019-03-01 입니다.The current version of Azure Stack Hub profile is 2019-03-01. 예를 들어 2019-03-01 프로필 유형에 서 네트워크 모듈을 가져오려면 다음 코드를 사용 합니다.For example, to import a network module from the 2019-03-01 profile type, use the following code:

    package main
     import "github.com/Azure/azure-sdk-for-go/profiles/2019-03-01/network/mgmt/network"
    
  6. 함수에서 클라이언트 함수 호출을 사용 하 여 클라이언트를 만들고 인증 합니다.In your function, create and authenticate a client with a New client function call. 가상 네트워크 클라이언트를 만들려면 다음 코드를 사용 합니다.To create a virtual network client, use the following code:

    package main
    
    import "github.com/Azure/azure-sdk-for-go/profiles/2019-03-01/network/mgmt/network"
    
    func main() {
       vnetClient := network.NewVirtualNetworksClientWithBaseURI("<baseURI>", "(subscriptionID>")
       vnetClient.Authorizer = autorest.NewBearerAuthorizer(token)
    

    <baseURI>2 단계에서 사용 되는 ResourceManagerUrl 값으로 설정 합니다.Set <baseURI> to the ResourceManagerUrl value used in step 2. <subscriptionID>3 단계에서 저장 한 SubscriptionID 값으로 설정 합니다.Set <subscriptionID> to the SubscriptionID value saved from step 3.

    토큰을 만들려면 다음 섹션을 참조 하세요.To create the token, see the next section.

  7. 이전 단계에서 만든 클라이언트를 사용 하 여 API 메서드를 호출 합니다.Invoke API methods by using the client that you created in the previous step. 예를 들어 이전 단계의 클라이언트를 사용 하 여 가상 네트워크를 만들려면 다음 예제를 참조 하세요.For example, to create a virtual network by using the client from the previous step, see the following example:

    package main
    
    import "github.com/Azure/azure-sdk-for-go/profiles/2019-03-01/network/mgmt/network"
    func main() {
    vnetClient := network.NewVirtualNetworksClientWithBaseURI("<baseURI>", "(subscriptionID>")
    vnetClient .Authorizer = autorest.NewBearerAuthorizer(token)
    
    vnetClient .CreateOrUpdate( )
    

Go SDK profile을 사용 하 여 Azure Stack 허브에서 가상 네트워크를 만드는 방법에 대 한 전체 예제는 예제를 참조 하세요.For a complete example of creating a virtual network on Azure Stack Hub by using the Go SDK profile, see the example.

인증Authentication

Go SDK를 사용 하 여 Azure Active Directory에서 권한 부여자 속성을 가져오려면 AutoRest 모듈을 설치 합니다.To get the Authorizer property from Azure Active Directory using the Go SDK, install the Go-AutoRest modules. 이러한 모듈은 "Go SDK" 설치와 함께 이미 설치 되어 있어야 합니다.These modules should have been already installed with the "Go SDK" installation. 그렇지 않은 경우 GitHub에서 인증 패키지를 설치 합니다.If they aren't, install the authentication package from GitHub.

권한 부여자는 리소스 클라이언트에 대 한 권한 부여자로 설정 되어야 합니다.The Authorizer must be set as the authorizer for the resource client. 클라이언트 자격 증명을 사용 하 여 Azure Stack 허브에서 권한 부여자 토큰을 가져오는 방법에는 여러 가지가 있습니다.There are different ways to get authorizer tokens on Azure Stack Hub by using client credentials:

  1. 구독에 대 한 소유자 역할이 있는 서비스 주체를 사용할 수 있는 경우이 단계를 건너뜁니다.If a service principal with owner role on the subscription is available, skip this step. 그렇지 않으면 응용 프로그램 id를 사용 하 여 리소스에 액세스 하는 방법에 대 한 자세한 내용은 클라이언트 암호를 사용 하는 서비스 주체를 만드는 방법 및 구독에 범위가 지정 된 "소유자" 역할을 할당 하는 방법에 대 한 도움말을 참조 하세요.Otherwise, see Use an app identity to access resources for instructions on creating a service principal that uses a client secret, and for help on how to assign it an "owner" role scoped to your subscription. 서비스 사용자 응용 프로그램 ID 및 암호를 캡처해야 합니다.Be sure to capture the service principal application ID and secret.

  2. 코드의 AutoRest 에서 adal 패키지를 가져옵니다.Import the adal package from Go-AutoRest in your code.

    package main
    import "github.com/Azure/go-autorest/autorest/adal"
    
  3. Adal 모듈에서 newoauthconfig 메서드를 사용 하 여 oauthconfig 를 만듭니다.Create an oauthConfig by using NewOAuthConfig method from adal module.

    package main
    
    import "github.com/Azure/go-autorest/autorest/ada1"
    
    func CreateToken() (adal.OAuthTokenProvider, error) {
       var token adal.OAuthTokenProvider
       oauthConfig, err := adal.NewOAuthConfig(activeDirectoryEndpoint, tenantID)
    }
    

    <activeDirectoryEndpoint> loginEndpoint ResourceManagerUrl 이 문서의 이전 섹션에서 검색 된 메타 데이터의 속성 값으로 설정 합니다.Set <activeDirectoryEndpoint> to the value of the loginEndpoint property from the ResourceManagerUrl metadata retrieved on the previous section of this document. 값을 <tenantID> Azure Stack 허브 테 넌 트 ID로 설정 합니다.Set the <tenantID> value to your Azure Stack Hub tenant ID.

  4. 마지막으로 NewServicePrincipalToken adal 모듈의 메서드를 사용 하 여 서비스 주체 토큰을 만듭니다.Finally, create a service principal token by using the NewServicePrincipalToken method from the adal module:

    package main
    
    import "github.com/Azure/go-autorest/autorest/adal"
    
    func CreateToken() (adal.OAuthTokenProvider, error) {
        var token adal.OAuthTokenProvider
        oauthConfig, err := adal.NewOAuthConfig(activeDirectoryEndpoint, tenantID)
        token, err = adal.NewServicePrincipalToken(
            *oauthConfig,
            clientID,
            clientSecret,
            activeDirectoryResourceID)
        return token, err
    

    <activeDirectoryResourceID>이 문서의 이전 섹션에서 검색 한 ResourceManagerUrl 메타 데이터의 "대상" 목록 값 중 하나로 설정 합니다.Set <activeDirectoryResourceID> to one of the values in the "audience" list from the ResourceManagerUrl metadata retrieved in the previous section of this article. <clientID>이 문서의 이전 섹션에서 서비스 주체를 만들었을 때 저장 된 서비스 사용자 응용 프로그램 ID로 설정 합니다.Set <clientID> to the service principal application ID saved when the service principal was created in the previous section of this article. <clientSecret>이 문서의 이전 섹션에서 서비스 주체를 만들었을 때 저장 된 서비스 사용자 응용 프로그램 암호로 설정 합니다.Set <clientSecret> to the service principal application secret saved when the service principal was created in the previous section of this article.

Example

이 예제에서는 Azure Stack 허브에 가상 네트워크를 만드는 Go 코드 샘플을 보여 줍니다.This example shows a sample of Go code that creates a virtual network on Azure Stack Hub. Go SDK의 전체 예제는 Azure GO sdk 샘플 리포지토리를 참조 하세요.For complete examples of the Go SDK, see the Azure Go SDK samples repository. Azure Stack 허브 샘플은 리포지토리의 서비스 폴더 내 하이브리드 경로 아래에서 사용할 수 있습니다.Azure Stack Hub samples are available under the hybrid path inside service folders of the repository.

참고

이 예제의 코드를 실행 하려면 사용 된 구독에 네트워크 리소스 공급자가 등록 된 것으로 표시 되어 있는지 확인 합니다.To run the code in this example, verify that the subscription used has the Network resource provider listed as Registered. 확인 하려면 Azure Stack 허브 포털에서 구독을 찾고 리소스 공급자를 선택 합니다.To verify, look for the subscription in the Azure Stack Hub portal, and select Resource providers.

  1. 코드에서 필요한 패키지를 가져옵니다.Import the required packages in your code. Azure Stack Hub에서 사용 가능한 최신 프로필을 사용 하 여 네트워크 모듈을 가져옵니다.Use the latest available profile on Azure Stack Hub to import the network module:

    package main
    
    import (
        "context"
        "fmt"
        "github.com/Azure/azure-sdk-for-go/profiles/2019-03-01/network/mgmt/network"
        "github.com/Azure/go-autorest/autorest"
        "github.com/Azure/go-autorest/autorest/adal"
        "github.com/Azure/go-autorest/autorest/to"
    )
    
  2. 환경 변수를 정의 합니다.Define your environment variables. 가상 네트워크를 만들려면 리소스 그룹이 있어야 합니다.To create a virtual network, you must have a resource group.

    var (
        activeDirectoryEndpoint = "yourLoginEndpointFromResourceManagerUrlMetadata"
        tenantID = "yourAzureStackTenantID"
        clientID = "yourServicePrincipalApplicationID"
        clientSecret = "yourServicePrincipalSecret"
        activeDirectoryResourceID = "yourAudienceFromResourceManagerUrlMetadata"
        subscriptionID = "yourSubscriptionID"
        baseURI = "yourResourceManagerURL"
        resourceGroupName = "existingResourceGroupName"
    )
    
  3. 환경 변수를 정의 했으므로 adal 패키지를 사용 하 여 인증 토큰을 만드는 메서드를 추가 합니다.Now that you've defined your environment variables, add a method to create an authentication token by using the adal package. 인증에 대 한 자세한 내용은 이전 섹션을 참조 하세요.For more info on authentication, see the previous section.

    //CreateToken creates a service principal token
    func CreateToken() (adal.OAuthTokenProvider, error) {
       var token adal.OAuthTokenProvider
       oauthConfig, err := adal.NewOAuthConfig(activeDirectoryEndpoint, tenantID)
       token, err = adal.NewServicePrincipalToken(
           *oauthConfig,
           clientID,
           clientSecret,
           activeDirectoryResourceID)
       return token, err
    }
    
  4. main 메서드를 추가합니다.Add the main method. main메서드는 먼저 이전 단계에서 정의 된 메서드를 사용 하 여 토큰을 가져옵니다.The main method first gets a token by using the method that is defined in the previous step. 그런 다음 프로필의 네트워크 모듈을 사용 하 여 클라이언트를 만듭니다.Then, it creates a client by using a network module from the profile. 마지막으로 가상 네트워크를 만듭니다.Finally, it creates a virtual network.

    package main
    
    import (
       "context"
       "fmt"
       "github.com/Azure/azure-sdk-for-go/profiles/2019-03-01/network/mgmt/network"
       "github.com/Azure/go-autorest/autorest"
       "github.com/Azure/go-autorest/autorest/adal"
       "github.com/Azure/go-autorest/autorest/to"
    )
    
    var (
       activeDirectoryEndpoint = "yourLoginEndpointFromResourceManagerUrlMetadata"
       tenantID = "yourAzureStackTenantID"
       clientID = "yourServicePrincipalApplicationID"
       clientSecret = "yourServicePrincipalSecret"
       activeDirectoryResourceID = "yourAudienceFromResourceManagerUrlMetadata"
      subscriptionID = "yourSubscriptionID"
      baseURI = "yourResourceManagerURL"
      resourceGroupName = "existingResourceGroupName"
    )
    
    //CreateToken creates a service principal token
    func CreateToken() (adal.OAuthTokenProvider, error) {
       var token adal.OAuthTokenProvider
       oauthConfig, err := adal.NewOAuthConfig(activeDirectoryEndpoint, tenantID)
       token, err = adal.NewServicePrincipalToken(
           *oauthConfig,
           clientID,
           clientSecret,
           activeDirectoryResourceID)
       return token, err
    }
    
    func main() {
       token, _ := CreateToken()
       vnetClient := network.NewVirtualNetworksClientWithBaseURI(baseURI, subscriptionID)
       vnetClient.Authorizer = autorest.NewBearerAuthorizer(token)
       future, _ := vnetClient.CreateOrUpdate(
           context.Background(),
           resourceGroupName,
           "sampleVnetName",
           network.VirtualNetwork{
               Location: to.StringPtr("local"),
               VirtualNetworkPropertiesFormat: &network.VirtualNetworkPropertiesFormat{
                   AddressSpace: &network.AddressSpace{
                       AddressPrefixes: &[]string{"10.0.0.0/8"},
                   },
                   Subnets: &[]network.Subnet{
                       {
                           Name: to.StringPtr("subnetName"),
                           SubnetPropertiesFormat: &network.SubnetPropertiesFormat{
                               AddressPrefix: to.StringPtr("10.0.0.0/16"),
                           },
                       },
                   },
               },
           })
       err := future.WaitForCompletionRef(context.Background(), vnetClient.Client)
       if err != nil {
           fmt.Printf(err.Error())
           return
       }
    }
    

Go SDK를 사용 하는 Azure Stack 허브에 사용할 수 있는 일부 코드 샘플은 다음과 같습니다.Some of the code samples available for Azure Stack Hub using the Go SDK are:

다음 단계Next steps