Azure Stack Hub에서 Ruby와 함께 API 버전 프로필 사용

Ruby 및 API 버전 프로필

Azure Stack Hub Resource Manager Ruby SDK는 인프라를 빌드하고 관리하는 데 도움이 되는 도구를 제공합니다. SDK의 리소스 공급자에는 Ruby 언어를 사용하는 컴퓨팅, 가상 네트워크 및 스토리지가 포함됩니다. Ruby SDK의 API 프로필은 Azure Stack Hub의 글로벌 Azure 리소스와 리소스 간에 전환할 수 있도록 지원하여 하이브리드 클라우드 개발을 지원합니다.

API 프로필은 리소스 공급자와 서비스 버전의 조합입니다. API 프로필을 사용하여 다양한 리소스 유형을 결합할 수 있습니다.

  • 모든 서비스의 최신 버전을 사용하려면 Azure SDK 롤업 gem의 최신 프로필을 사용합니다.
  • 프로필의 이름은 또는 V2019_03_01_Hybrid와 같은 형식으로 V2020_09_01_Hybrid 날짜별로 지정됩니다.
  • 서비스의 최신 api-version 을 사용하려면 특정 gem의 최신 프로필을 사용합니다. 예를 들어 최신 API 버전의 컴퓨팅 서비스를 단독으로 사용하려면 Compute gem의 최신 프로필을 사용합니다.
  • 서비스에 특정 api-version 을 사용하려면 gem 내에 정의된 특정 API 버전을 사용합니다.

Azure Ruby SDK 설치

RubyGem 패키지 설치

Azure RubyGem 패키지를 직접 설치할 수 있습니다.

gem install azure_mgmt_compute
gem install azure_mgmt_storage
gem install azure_mgmt_resources
gem install azure_mgmt_network

또는 Gemfile에서 사용합니다.

gem 'azure_mgmt_storage'
gem 'azure_mgmt_compute'
gem 'azure_mgmt_resources'
gem 'azure_mgmt_network'

Azure Resource Manager Ruby SDK는 미리 보기 상태이며 향후 릴리스에서 호환성이 손상되는 인터페이스 변경이 있을 수 있습니다. 부 버전에서 숫자가 증가하면 호환성이 손상되는 변경이 나타날 수 있습니다.

azure_sdk gem 사용

azure_sdk 보석은 Ruby SDK에서 지원되는 모든 보석의 롤업입니다.

다음 명령을 사용하여 azure_sdk 롤업 gem을 설치할 수 있습니다.

gem install 'azure_sdk'

Profiles

날짜가 포함된 프로필의 경우 다른 SDK 프로필 또는 버전을 사용하려면 의 V<date>_Hybrid날짜를 대체합니다. 예를 들어 2008 버전의 경우 프로필은 2019_03_01이고 문자열은 가 됩니다 V2019_03_01_Hybrid. 경우에 따라 SDK 팀은 패키지의 이름을 변경하므로 문자열 날짜를 다른 날짜로 바꾸는 것만으로는 작동하지 않을 수 있습니다. 프로필 및 Azure Stack 버전의 연결은 다음 표를 참조하세요.

날짜 대신 를 사용할 latest 수도 있습니다.

Azure Stack 버전 프로필
2311 2020_09_01
2301 2020_09_01
2206 2020_09_01
2108 2020_09_01
2102 2020_09_01
2008 2019_03_01

Azure Stack Hub 및 API 프로필에 대한 자세한 내용은 API 프로필 요약을 참조하세요.

Ruby SDK 프로필을 참조하세요.

구독

아직 구독이 없는 경우 구독을 만들고 나중에 사용할 구독 ID를 저장합니다. 구독을 만드는 방법에 대한 자세한 내용은 이 문서를 참조하세요.

서비스 주체

서비스 주체 및 관련 환경 정보를 만들고 어딘가에 저장해야 합니다. 역할이 있는 owner 서비스 주체가 권장되지만 샘플에 따라 역할로 contributor 충분할 수 있습니다. 필요한 값은 아래 표를 참조하세요.

환경 변수 Description
테넌트 ID AZURE_TENANT_ID Azure Stack Hub 테넌트 ID입니다.
클라이언트 ID AZURE_CLIENT_ID 이 문서의 이전 섹션에서 서비스 주체를 만들 때 저장된 서비스 주체 앱 ID입니다.
구독 ID AZURE_SUBSCRIPTION_ID 구독 ID를 사용하여 Azure Stack Hub의 제품에 액세스합니다.
클라이언트 암호 AZURE_CLIENT_SECRET 서비스 주체를 만들 때 저장된 서비스 주체 앱 비밀입니다.
Resource Manager 엔드포인트 ARM_ENDPOINT Azure Stack Hub Resource Manager 엔드포인트를 참조하세요.

테넌트 ID

Azure Stack Hub의 디렉터리 또는 테넌트 ID를 찾으려면 이 문서의 지침을 따릅니다.

리소스 공급자 등록

이 문서에 따라 필수 리소스 공급자를 등록 합니다. 이러한 리소스 공급자는 실행하려는 샘플에 따라 필요합니다. 예를 들어 VM 샘플을 Microsoft.Compute 실행하려면 리소스 공급자 등록이 필요합니다.

Azure Stack 리소스 관리자 엔드포인트

ARM(Azure Resource Manager)은 관리자가 Azure 리소스를 배포, 관리 및 모니터링할 수 있는 관리 프레임워크입니다. Azure Resource Manager 이러한 작업을 단일 작업에서 개별적으로 처리하지 않고 그룹으로 처리할 수 있습니다. Resource Manager 엔드포인트에서 메타데이터 정보를 가져올 수 있습니다. 엔드포인트는 코드를 실행하는 데 필요한 정보가 포함된 JSON 파일을 반환합니다.

  • ASDK(Azure Stack Development Kit)의 ResourceManagerEndpointUrl 은 입니다 https://management.local.azurestack.external/.
  • 통합 시스템의 ResourceManagerEndpointUrl 은 입니다 https://management.region.<fqdn>/. 여기서 <fqdn> 는 정규화된 도메인 이름입니다.
  • 필요한 <ResourceManagerUrl>/metadata/endpoints?api-version=1.0메타데이터를 검색하려면 입니다. 사용 가능한 API 버전은 Azure rest API 사양을 참조하세요. 예를 들어 프로필 버전에서는 리소스 공급자 microsoft.resources2020-09-01 대해 를 api-version2019-10-01 로 변경할 수 있습니다.

JSON 샘플:

{
   "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"]
      }
}

환경 변수 설정

Microsoft Windows

환경 변수를 설정하려면 Windows 명령 프롬프트에서 다음 형식을 사용합니다.

set AZURE_TENANT_ID=<YOUR_TENANT_ID>

macOS, Linux 및 Unix 기반 시스템

Unix 기반 시스템에서 다음 명령을 사용합니다.

export AZURE_TENANT_ID=<YOUR_TENANT_ID>

Azure Stack Hub 및 API 프로필에 대한 자세한 내용은 API 프로필 요약을 참조하세요.

Azure Ruby SDK API 프로필 사용

다음 코드를 사용하여 프로필 클라이언트를 인스턴스화합니다. 이 매개 변수는 Azure Stack Hub 또는 기타 프라이빗 클라우드에만 필요합니다. 글로벌 Azure에는 기본적으로 이러한 설정이 이미 있습니다.

active_directory_settings = get_active_directory_settings(ENV['ARM_ENDPOINT'])

provider = MsRestAzure::ApplicationTokenProvider.new(
  ENV['AZURE_TENANT_ID'],
  ENV['AZURE_CLIENT_ID'],
  ENV['AZURE_CLIENT_SECRET'],
  active_directory_settings
)
credentials = MsRest::TokenCredentials.new(provider)
options = {
  credentials: credentials,
  subscription_id: subscription_id,
  active_directory_settings: active_directory_settings,
  base_url: ENV['ARM_ENDPOINT']
}

# Target profile built for Azure Stack Hub
client = Azure::Resources::Profiles::V2019_03_01_Hybrid::Mgmt::Client.new(options)

프로필 클라이언트를 사용하여 컴퓨팅, 스토리지 및 네트워크와 같은 개별 리소스 공급자에 액세스할 수 있습니다.

# To access the operations associated with Compute
profile_client.compute.virtual_machines.get 'RESOURCE_GROUP_NAME', 'VIRTUAL_MACHINE_NAME'

# Option 1: To access the models associated with Compute
purchase_plan_obj = profile_client.compute.model_classes.purchase_plan.new

# Option 2: To access the models associated with Compute
# Notice Namespace: Azure::Profiles::<Profile Name>::<Service Name>::Mgmt::Models::<Model Name>
purchase_plan_obj = Azure::Profiles::V2019_03_01_Hybrid::Compute::Mgmt::Models::PurchasePlan.new

Azure Stack Hub 환경 설정 함수 정의

Azure Stack Hub 환경에 대한 서비스 주체를 인증하려면 를 사용하여 get_active_directory_settings()엔드포인트를 정의합니다. 이 메서드는 이전에 설정한 ARM_Endpoint 환경 변수를 사용합니다.

# Get Authentication endpoints using Arm Metadata Endpoints
def get_active_directory_settings(armEndpoint)
  settings = MsRestAzure::ActiveDirectoryServiceSettings.new
  response = Net::HTTP.get_response(URI("#{armEndpoint}/metadata/endpoints?api-version=1.0"))
  status_code = response.code
  response_content = response.body
  unless status_code == "200"
    error_model = JSON.load(response_content)
    fail MsRestAzure::AzureOperationError.new("Getting Azure Stack Hub Metadata Endpoints", response, error_model)
  end
  result = JSON.load(response_content)
  settings.authentication_endpoint = result['authentication']['loginEndpoint'] unless result['authentication']['loginEndpoint'].nil?
  settings.token_audience = result['authentication']['audiences'][0] unless result['authentication']['audiences'][0].nil?
  settings
end

샘플

Ruby 및 Azure Stack Hub API 프로필을 사용하여 솔루션을 만들기 위한 참조로 GitHub에서 다음 샘플을 사용합니다.

샘플 리소스 관리자 및 그룹

샘플을 실행하려면 Ruby를 설치했는지 확인합니다. Visual Studio Code 사용하는 경우 Ruby SDK 확장도 다운로드합니다.

참고

샘플의 리포지토리는 Hybrid-Resource-Manager-Ruby-Resources-And-Groups입니다.

  1. 리포지토리를 복제합니다.

    git clone https://github.com/Azure-Samples/Hybrid-Resource-Manager-Ruby-Resources-And-Groups.git
    
  2. 번들을 사용하여 종속성을 설치합니다.

    cd Hybrid-Resource-Manager-Ruby-Resources-And-Groups
    bundle install
    
  3. PowerShell을 사용하여 Azure 서비스 주체를 만들고 필요한 값을 검색합니다.

    서비스 주체를 만드는 방법에 대한 지침은 Azure PowerShell 사용하여 인증서로 서비스 주체 만들기를 참조하세요.

    필요한 값은 다음과 같습니다.

    • 테넌트 ID
    • 클라이언트 ID
    • 클라이언트 암호
    • 구독 ID
    • Resource Manager 엔드포인트

    만든 서비스 주체에서 검색된 정보를 사용하여 다음 환경 변수를 설정합니다.

    • export AZURE_TENANT_ID={your tenant ID}
    • export AZURE_CLIENT_ID={your client ID}
    • export AZURE_CLIENT_SECRET={your client secret}
    • export AZURE_SUBSCRIPTION_ID={your subscription ID}
    • export ARM_ENDPOINT={your Azure Stack Hub Resource Manager URL}

    참고

    Windows에서 대신 을 export사용합니다set.

  4. 위치 변수가 Azure Stack Hub 위치로 설정되어 있는지 확인합니다. 예를 들면 입니다 LOCAL="local".

  5. 올바른 Active Directory 엔드포인트를 대상으로 지정하려면 Azure Stack Hub 또는 기타 프라이빗 클라우드를 사용하는 경우 다음 코드 줄을 추가합니다.

    active_directory_settings = get_active_directory_settings(ENV['ARM_ENDPOINT'])
    
  6. 변수에서 options Active Directory 설정 및 기본 URL을 추가하여 Azure Stack Hub에서 작동합니다.

    options = {
    credentials: credentials,
    subscription_id: subscription_id,
    active_directory_settings: active_directory_settings,
    base_url: ENV['ARM_ENDPOINT']
    }
    
  7. Azure Stack Hub 프로필을 대상으로 하는 프로필 클라이언트를 만듭니다.

    client = Azure::Resources::Profiles::V2019_03_01_Hybrid::Mgmt::Client.new(options)
    
  8. Azure Stack Hub를 사용하여 서비스 주체를 인증하려면 get_active_directory_settings()를 사용하여 엔드포인트를 정의해야 합니다. 이 메서드는 이전에 설정한 ARM_Endpoint 환경 변수를 사용합니다.

    def get_active_directory_settings(armEndpoint)
      settings = MsRestAzure::ActiveDirectoryServiceSettings.new
      response = Net::HTTP.get_response(URI("#{armEndpoint}/metadata/endpoints?api-version=1.0"))
      status_code = response.code
      response_content = response.body
      unless status_code == "200"
        error_model = JSON.load(response_content)
        fail MsRestAzure::AzureOperationError.new("Getting Azure Stack Hub Metadata Endpoints", response, error_model)
      end
      result = JSON.load(response_content)
      settings.authentication_endpoint = result['authentication']['loginEndpoint'] unless result['authentication']['loginEndpoint'].nil?
      settings.token_audience = result['authentication']['audiences'][0] unless result['authentication']['audiences'][0].nil?
      settings
    end
    
  9. 예제를 실행합니다.

    bundle exec ruby example.rb
    

다음 단계