Usar perfis de versão da API com Ruby no Azure Stack Hub

Perfis de versão do Ruby e da API

O SDK do Ruby para o Azure Stack Hub Resource Manager fornece ferramentas para ajudá-lo a criar e gerenciar sua infraestrutura. Os provedores de recursos no SDK incluem Computação, Redes Virtuais e Armazenamento, com a linguagem Ruby. Os perfis de API no SDK do Ruby permitem o desenvolvimento de nuvem híbrida, ajudando você a alternar entre recursos globais do Azure e recursos no Azure Stack Hub.

Um perfil de API é uma combinação de provedores de recursos e versões de serviço. Você pode usar um perfil de API para combinar diferentes tipos de recursos.

  • Para usar as versões mais recentes de todos os serviços, use o perfil mais recente da gem de rollup do SDK do Azure.
  • Os perfis são nomeados por data em formato como V2020_09_01_Hybrid ou V2019_03_01_Hybrid.
  • Para usar a versão de API mais recente de um serviço, use o perfil mais recente do gem específico. Por exemplo, para usar apenas a versão de API mais recente do serviço de computação, use o perfil mais recente da joia computacional .
  • Para usar uma versão de API específica para um serviço, use as versões de API específicas definidas dentro do gem.

Instalar o SDK do Ruby do Azure

  • Instale o Git.

  • Instale o Ruby.

    • Ao instalar, escolha Adicionar Ruby à variável PATH.

    • Quando solicitado durante a instalação do Ruby, instale o kit de desenvolvimento.

    • Em seguida, instale o empacotador usando o seguinte comando:

      Gem install bundler
      
  • Se não estiver disponível, crie uma assinatura e salve a ID da assinatura a ser usada posteriormente. As instruções para criar uma assinatura estão no artigo Criar assinaturas para ofertas no Azure Stack Hub .

  • Crie uma entidade de serviço e salve sua ID e segredo. As instruções para criar uma entidade de serviço para o Azure Stack Hub estão no artigo Usar uma identidade de aplicativo para acessar recursos .

  • Verifique se a entidade de serviço tem a função contribuidor/proprietário atribuída em sua assinatura. Instruções sobre como atribuir uma função a uma entidade de serviço estão no artigo Usar uma identidade de aplicativo para acessar recursos .

Instalar os pacotes RubyGem

Você pode instalar os pacotes RubyGem do Azure diretamente.

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

Ou use-os em seu Gemfile.

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

O SDK do Ruby Resource Manager do Azure está em versão prévia e provavelmente terá alterações interruptivas na interface nas próximas versões. Um número maior na versão secundária pode indicar alterações interruptivas.

Usar a gem azure_sdk

O azure_sdk gem é um rollup de todas as joias com suporte no SDK do Ruby.

Você pode instalar o azure_sdk gem rollup com o seguinte comando:

gem install 'azure_sdk'

Perfis

Para perfis que contêm datas, para usar um perfil ou versão diferente do SDK, substitua a data em V<date>_Hybrid. Por exemplo, para a versão 2008, o perfil é 2019_03_01e a cadeia de caracteres se torna V2019_03_01_Hybrid. Observe que, às vezes, a equipe do SDK altera o nome dos pacotes, portanto, simplesmente substituir a data de uma cadeia de caracteres por uma data diferente pode não funcionar. Consulte a tabela a seguir para associação de perfis e versões do Azure Stack.

Você também pode usar latest em vez da data.

Versão do Azure Stack Perfil
2311 2020_09_01
2301 2020_09_01
2206 2020_09_01
2108 2020_09_01
2102 2020_09_01
2008 2019_03_01

Para obter mais informações sobre os perfis de API e do Azure Stack Hub, consulte Resumo dos perfis de API.

Consulte Perfis do SDK do Ruby.

Subscription

Se você ainda não tiver uma assinatura, crie uma assinatura e salve a ID da assinatura a ser usada posteriormente. Para obter informações sobre como criar uma assinatura, consulte este documento.

Entidade de Serviço

Uma entidade de serviço e suas informações de ambiente associadas devem ser criadas e salvas em algum lugar. A entidade de serviço com owner função é recomendada, mas dependendo do exemplo, uma contributor função pode ser suficiente. Consulte a tabela abaixo para obter os valores necessários.

Valor Variáveis de ambiente Descrição
ID do locatário AZURE_TENANT_ID Sua ID de locatário do Azure Stack Hub.
ID do Cliente AZURE_CLIENT_ID A ID do aplicativo da entidade de serviço salva quando a entidade de serviço foi criada na seção anterior deste artigo.
ID da assinatura AZURE_SUBSCRIPTION_ID Você usa a ID da assinatura para acessar ofertas no Azure Stack Hub.
Segredo do cliente AZURE_CLIENT_SECRET O segredo do aplicativo da entidade de serviço salvo quando a entidade de serviço foi criada.
Ponto de Extremidade do Resource Manager ARM_ENDPOINT Consulte O ponto de extremidade Resource Manager do Azure Stack Hub.

ID do locatário

Para localizar o diretório ou a ID do locatário do Azure Stack Hub, siga as instruções neste artigo.

Registrar provedores de recursos

Registre os provedores de recursos necessários seguindo este documento. Esses provedores de recursos serão necessários dependendo dos exemplos que você deseja executar. Por exemplo, se você quiser executar um exemplo de VM, o registro do Microsoft.Compute provedor de recursos será necessário.

Ponto de extremidade do Azure Stack Resource Manager

O ARM (Azure Resource Manager) é uma estrutura de gerenciamento que permite aos administradores implantar, gerenciar e monitorar recursos do Azure. O Resource Manager do Azure pode lidar com essas tarefas como um grupo, em vez de individualmente, em uma única operação. Você pode obter as informações de metadados do ponto de extremidade Resource Manager. O ponto de extremidade retorna um arquivo JSON com as informações necessárias para executar o código.

  • O ResourceManagerEndpointUrl no ASDK (Azure Stack Development Kit) é: https://management.local.azurestack.external/.
  • O ResourceManagerEndpointUrl em sistemas integrados é: https://management.region.<fqdn>/, em que <fqdn> é o nome de domínio totalmente qualificado.
  • Para recuperar os metadados necessários: <ResourceManagerUrl>/metadata/endpoints?api-version=1.0. Para versões de API disponíveis, consulte Especificações da API rest do Azure. Por exemplo, na 2020-09-01 versão do perfil, você pode alterar o para para 2019-10-01 o api-version provedor de recursos microsoft.resources.

JSON de exemplo:

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

Definir variáveis de ambiente

Microsoft Windows

Para definir as variáveis de ambiente, use o seguinte formato em um prompt de comando do Windows:

set AZURE_TENANT_ID=<YOUR_TENANT_ID>

Sistemas baseados em macOS, Linux e Unix

Em sistemas baseados em Unix, use o seguinte comando:

export AZURE_TENANT_ID=<YOUR_TENANT_ID>

Para obter mais informações sobre perfis de API e do Azure Stack Hub, consulte o Resumo dos perfis de API.

Uso do perfil da API do SDK do Azure Ruby

Use o código a seguir para instanciar um cliente de perfil. Esse parâmetro só é necessário para o Azure Stack Hub ou outras nuvens privadas. O Azure global já tem essas configurações por padrão.

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)

O cliente de perfil pode ser usado para acessar provedores de recursos individuais, como Computação, Armazenamento e Rede:

# 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

Definir funções de configuração de ambiente do Azure Stack Hub

Para autenticar a entidade de serviço no ambiente do Azure Stack Hub, defina os pontos de extremidade usando get_active_directory_settings(). Esse método usa a variável de ambiente ARM_Endpoint que você definiu anteriormente:

# 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

Exemplos

Use os seguintes exemplos no GitHub como referências para criar soluções com perfis de API do Ruby e do Azure Stack Hub:

Exemplo de gerenciador de recursos e grupos

Para executar o exemplo, verifique se você instalou o Ruby. Se você estiver usando Visual Studio Code, baixe também a extensão do SDK do Ruby.

Observação

O repositório para o exemplo é Hybrid-Resource-Manager-Ruby-Resources-And-Groups.

  1. Clonar o repositório:

    git clone https://github.com/Azure-Samples/Hybrid-Resource-Manager-Ruby-Resources-And-Groups.git
    
  2. Instale as dependências usando o pacote:

    cd Hybrid-Resource-Manager-Ruby-Resources-And-Groups
    bundle install
    
  3. Crie uma entidade de serviço do Azure usando o PowerShell e recupere os valores necessários.

    Para obter instruções sobre como criar uma entidade de serviço, consulte Usar Azure PowerShell para criar uma entidade de serviço com um certificado.

    Os valores necessários são:

    • ID do locatário
    • ID do Cliente
    • Segredo do cliente
    • ID da assinatura
    • Ponto de extremidade do Resource Manager

    Defina as seguintes variáveis de ambiente usando as informações recuperadas da entidade de serviço que você criou:

    • 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}

    Observação

    No Windows, use set em vez de export.

  4. Verifique se a variável de local está definida como o local do Azure Stack Hub; por exemplo, LOCAL="local".

  5. Para direcionar os pontos de extremidade corretos do Active Directory, adicione a seguinte linha de código se você estiver usando o Azure Stack Hub ou outras nuvens privadas:

    active_directory_settings = get_active_directory_settings(ENV['ARM_ENDPOINT'])
    
  6. Na variável , adicione as configurações do Active Directory e a URL base para trabalhar com o options Azure Stack Hub:

    options = {
    credentials: credentials,
    subscription_id: subscription_id,
    active_directory_settings: active_directory_settings,
    base_url: ENV['ARM_ENDPOINT']
    }
    
  7. Crie um cliente de perfil direcionado ao perfil do Azure Stack Hub:

    client = Azure::Resources::Profiles::V2019_03_01_Hybrid::Mgmt::Client.new(options)
    
  8. Para autenticar a entidade de serviço com o Azure Stack Hub, os pontos de extremidade devem ser definidos usando get_active_directory_settings(). Esse método usa a variável de ambiente ARM_Endpoint que você definiu anteriormente:

    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. Execute o exemplo.

    bundle exec ruby example.rb
    

Próximas etapas