Поделиться через


Использование профилей версий API с помощью Ruby в Azure Stack Hub

Использование профилей версии API с помощью Ruby

Пакет SDK Ruby для Resource Manager Azure Stack Hub предоставляет средства для создания и администрирования инфраструктуры. Поставщики ресурсов в пакете SDK включают в себя вычисления, виртуальные сети и хранилища на языке Ruby. Профили API в пакете SDK Ruby позволяют выполнять разработку гибридных облаков приложений, помогая переключаться между глобальными ресурсами Azure и ресурсами в Azure Stack Hub.

Профиль API состоит из поставщиков ресурсов и версий службы. Профиль API можно использовать для объединения разных типов ресурсов.

  • Чтобы получить последние версии всех служб, используйте последний профиль накопительного пакета Azure SDK.
  • Профили именуются по дате в формате или V2020_09_01_HybridV2019_03_01_Hybrid.
  • Чтобы использовать последнюю версию API службы, используйте последний профиль определенного пакета. Например, чтобы использовать только последнюю версию API службы вычислений, используйте профиль Latest пакета Compute.
  • Чтобы использовать определенную версию API для службы, используйте нужные версии API, определенные в пакете.

Установка пакета Azure SDK

  • Установите Git.

  • Установите Ruby.

    • При установке выберите Добавить Ruby в переменную PATH.

    • В ходе установки Ruby установите комплект разработки, когда появится соответствующий запрос.

    • Затем установите средство увязки, выполнив следующую команду.

      Gem install bundler
      
  • Создайте подписку, если ее еще нет, и сохраните ее идентификатор для дальнейшего использования. Инструкции по созданию подписки см. в статье Создание подписок для предложений в Azure Stack Hub.

  • Создайте субъект-службу и сохраните его идентификатор и секрет. Инструкции по созданию субъекта-службы для Azure Stack Hub см. в статье Использование удостоверения приложения для доступа к ресурсам Azure Stack Hub.

  • Убедитесь, что субъекту-службе назначена роль участника или владельца в вашей подписке. Инструкции по назначению роли субъекту-службе см. в этой статье.

Установка пакетов 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'

Пакет SDK Ruby для Azure Resource Manager доступен в режиме предварительной версии, следовательно, в будущих выпусках ожидаются критические важные изменения интерфейса. Большое число в дополнительном номере версии может указывать на критически важные изменения.

Использование пакета azure_sdk

Пакет azure_sdk — это коллекция всех поддерживаемых пакетов в составе SDK для Ruby.

Чтобы установить накопительный пакет azure_sdk, выполните следующую команду:

gem install 'azure_sdk'

Профили

Для профилей, содержащих даты, чтобы использовать другой профиль или версию пакета 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.

См. статью Профили пакета SDK для Ruby.

Подписка

Если у вас еще нет подписки, создайте подписку и сохраните ее идентификатор для последующего использования. Сведения о создании подписки см. в этом документе.

Субъект-служба

Субъект-служба и связанные с ним сведения о среде должны быть созданы и сохранены. Рекомендуется субъект-служба с owner ролью, но в зависимости от примера может быть достаточно роли contributor . Требуемые значения см. в таблице ниже.

Значение Переменные среды Описание
Tenant ID AZURE_TENANT_ID Идентификатор клиента Azure Stack Hub.
Идентификатор клиента AZURE_CLIENT_ID Идентификатор приложения субъекта-службы, сохраненный во время создания субъекта-службы в предыдущем разделе этой статьи.
Идентификатор подписки AZURE_SUBSCRIPTION_ID Идентификатор подписки используется для доступа к предложениям в Azure Stack Hub.
Секрет клиента AZURE_CLIENT_SECRET Секрет приложения субъекта-службы, сохраненный во время создания субъекта-службы.
Конечная точка Resource Manager ARM_ENDPOINT Дополнительные сведения см. в разделе Конечная точка Resource Manager для Azure Stack Hub.

Tenant ID

Чтобы найти каталог или идентификатор клиента для Azure Stack Hub, следуйте инструкциям в этой статье.

Регистрация поставщиков ресурсов

Зарегистрируйте необходимые поставщики ресурсов, следуя этому документу. Эти поставщики ресурсов будут необходимы в зависимости от примеров, которые вы хотите запустить. Например, если вы хотите запустить пример виртуальной машины, Microsoft.Compute требуется регистрация поставщика ресурсов.

Конечная точка Диспетчера ресурсов Azure Stack

Azure Resource Manager (ARM) — это платформа управления, которая позволяет администраторам развертывать, администрировать и отслеживать ресурсы Azure. Azure Resource Manager может обрабатывать эти задачи в рамках одной операции как группы, а не по отдельности. Получить метаданные можно из конечной точки Resource Manager. Конечная точка возвращает JSON-файл со сведениями, необходимыми для запуска вашего кода.

  • ResourceManagerEndpointUrl в пакете средств разработки Azure Stack (ASDK) имеет следующий формат: https://management.local.azurestack.external/.
  • ResourceManagerEndpointUrl в интегрированных системах имеет следующий формат: https://management.region.<fqdn>/, где <fqdn> — это полное доменное имя.
  • Чтобы получить необходимые метаданные, используйте <ResourceManagerUrl>/metadata/endpoints?api-version=1.0. Доступные версии API см. в разделе Спецификации Rest API Azure. Например, в 2020-09-01 версии профиля можно изменить api-version2019-10-01 на для поставщика microsoft.resourcesресурсов .

Пример 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>

Получите дополнительные сведения о профилях API и Azure Stack Hub, ознакомившись с разделом Сводка по профилям API.

Использование профиля API пакета SDK Azure для Ruby

Чтобы создать экземпляр профиля клиента, используйте следующий код. Этот параметр требуется только для 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

Примеры

Вы можете использовать следующие примеры из репозитория GitHub в качестве рекомендаций при создании решений с профилями API Azure Stack Hub и Ruby.

Пример диспетчера ресурсов и групп

Для запуска примера необходимо установить Ruby. При использовании Visual Studio Code также скачайте пакет SDK для Ruby в качестве расширения.

Примечание

Этот пример размещен в репозитории 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. Создайте субъект-службу Azure с помощью PowerShell и получите необходимые значения.

    См. дополнительные сведения о создании субъекта-службы с сертификатом с помощью Azure PowerShell.

    Требуемые значения:

    • Tenant 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 используйте set вместо export.

  4. Убедитесь, что в качестве переменной расположения задано расположение Azure Stack Hub, например LOCAL="local".

  5. Чтобы использовать правильные активные конечные точки при работе с 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
    

Дальнейшие действия