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 설치
Git를 설치합니다.
Ruby를 설치합니다.
설치할 때 PATH 변수에 Ruby 추가를 선택합니다.
Ruby 설치 중에 메시지가 표시되면 개발 키트를 설치합니다.
다음으로, 다음 명령을 사용하여 번들러를 설치합니다.
Gem install bundler
사용할 수 없는 경우 구독을 만들고 나중에 사용할 구독 ID를 저장합니다. 구독을 만드는 지침은 Azure Stack Hub의 제품에 대한 구독 만들기 문서에 있습니다.
서비스 주체를 만들고 해당 ID와 비밀을 저장합니다. Azure Stack Hub에 대한 서비스 주체를 만드는 지침은 앱 ID를 사용하여 리소스 액세스 문서에 있습니다 .
서비스 주체에 구독에 할당된 기여자/소유자 역할이 있는지 확인합니다. 서비스 주체에 역할을 할당하는 방법에 대한 지침은 앱 ID를 사용하여 리소스에 액세스 문서에 있습니다 .
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 프로필 요약을 참조하세요.
구독
아직 구독이 없는 경우 구독을 만들고 나중에 사용할 구독 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.resources
에2020-09-01
대해 를api-version
2019-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입니다.
리포지토리를 복제합니다.
git clone https://github.com/Azure-Samples/Hybrid-Resource-Manager-Ruby-Resources-And-Groups.git
번들을 사용하여 종속성을 설치합니다.
cd Hybrid-Resource-Manager-Ruby-Resources-And-Groups bundle install
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
.위치 변수가 Azure Stack Hub 위치로 설정되어 있는지 확인합니다. 예를 들면 입니다
LOCAL="local"
.올바른 Active Directory 엔드포인트를 대상으로 지정하려면 Azure Stack Hub 또는 기타 프라이빗 클라우드를 사용하는 경우 다음 코드 줄을 추가합니다.
active_directory_settings = get_active_directory_settings(ENV['ARM_ENDPOINT'])
변수에서
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'] }
Azure Stack Hub 프로필을 대상으로 하는 프로필 클라이언트를 만듭니다.
client = Azure::Resources::Profiles::V2019_03_01_Hybrid::Mgmt::Client.new(options)
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
예제를 실행합니다.
bundle exec ruby example.rb