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

Perfis de versão do Ruby e da API

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

Um perfil de API é uma combinação de fornecedores de recursos e versões de serviço. Pode utilizar um perfil de API para combinar diferentes tipos de recursos.

  • Para utilizar as versões mais recentes de todos os serviços, utilize 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 utilizar a versão de api mais recente de um serviço, utilize o perfil mais recente da jóia específica. Por exemplo, para utilizar apenas a versão de api mais recente do serviço de computação, utilize o perfil Mais Recente da gem de Computação .
  • Para utilizar uma versão de api específica para um serviço, utilize as versões específicas da API definidas dentro do gem.

Instalar o SDK ruby do Azure

  • Instale o Git.

  • Instale o Ruby.

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

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

    • Em seguida, instale o bundler com o seguinte comando:

      Gem install bundler
      
  • Se não estiver disponível, crie uma subscrição e guarde o ID da subscrição para ser utilizado mais tarde. As instruções para criar uma subscrição estão no artigo Criar subscrições a ofertas no Azure Stack Hub .

  • Crie um principal de serviço e guarde o respetivo ID e segredo. As instruções para criar um principal de serviço para o Azure Stack Hub estão no artigo Utilizar uma identidade de aplicação para aceder aos recursos .

  • Certifique-se de que o principal de serviço tem a função de contribuidor/proprietário atribuída na sua subscrição. As instruções sobre como atribuir uma função a um principal de serviço estão no artigo Utilizar uma identidade de aplicação para aceder aos recursos .

Instalar os pacotes RubyGem

Pode instalar diretamente os pacotes do Azure RubyGem.

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

Em alternativa, utilize-os no seu Gemfile.

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

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

Utilizar a jóia azure_sdk

A jóia azure_sdk é um rollup de todas as jóias suportadas no SDK Ruby.

Pode instalar a azure_sdk gem rollup com o seguinte comando:

gem install 'azure_sdk'

Perfis

Para perfis que contenham datas, para utilizar um perfil ou versão do SDK diferente, substitua a data em V<date>_Hybrid. Por exemplo, para a versão de 2008, o perfil é 2019_03_01, e a cadeia torna-se V2019_03_01_Hybrid. Tenha em atenção que, por vezes, a equipa do SDK altera o nome dos pacotes, pelo que substituir simplesmente a data de uma cadeia por uma data diferente pode não funcionar. Veja a tabela seguinte para associação de perfis e versões do Azure Stack.

Também pode utilizar 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 o Azure Stack Hub e perfis de API, veja o Resumo dos perfis de API.

Veja Perfis do SDK Ruby.

Subscrição

Se ainda não tiver uma subscrição, crie uma subscrição e guarde o ID da subscrição para ser utilizado mais tarde. Para obter informações sobre como criar uma subscrição, veja este documento.

Principal de Serviço

Um principal de serviço e as respetivas informações de ambiente associadas devem ser criadas e guardadas algures. O principal de serviço com owner função é recomendado, mas dependendo do exemplo, uma contributor função pode ser suficiente. Veja a tabela abaixo para obter os valores necessários.

Valor Variáveis de ambiente Description
ID do inquilino AZURE_TENANT_ID O ID de inquilino do Azure Stack Hub.
ID de Cliente AZURE_CLIENT_ID O ID da aplicação do principal de serviço foi guardado quando o principal de serviço foi criado na secção anterior deste artigo.
ID da subscrição AZURE_SUBSCRIPTION_ID Utilize o ID da subscrição para aceder a ofertas no Azure Stack Hub.
Segredo do Cliente AZURE_CLIENT_SECRET O segredo da aplicação do principal de serviço foi guardado quando o principal de serviço foi criado.
Ponto Final do Resource Manager ARM_ENDPOINT Veja O ponto final Resource Manager do Azure Stack Hub.

ID do inquilino

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

Registar fornecedores de recursos

Registe os fornecedores de recursos necessários ao seguir este documento. Estes fornecedores de recursos serão necessários consoante os exemplos que pretende executar. Por exemplo, se quiser executar um exemplo de VM, é necessário o registo do Microsoft.Compute fornecedor de recursos.

Ponto final do Azure Stack Resource Manager

O Azure Resource Manager (ARM) é uma arquitetura de gestão que permite aos administradores implementar, gerir e monitorizar recursos do Azure. O Azure Resource Manager pode processar estas tarefas como um grupo, em vez de individualmente, numa única operação. Pode obter as informações de metadados do ponto final Resource Manager. O ponto final devolve um ficheiro JSON com as informações necessárias para executar o código.

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

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, utilize o seguinte formato numa linha de comandos do Windows:

set AZURE_TENANT_ID=<YOUR_TENANT_ID>

sistemas baseados em macOS, Linux e Unix

Em sistemas baseados em Unix, utilize o seguinte comando:

export AZURE_TENANT_ID=<YOUR_TENANT_ID>

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

Utilização do perfil da API do SDK Ruby do Azure

Utilize o seguinte código para instanciar um cliente de perfil. Este parâmetro só é necessário para o Azure Stack Hub ou outras clouds privadas. O Azure Global já tem estas definições por predefiniçã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 utilizado para aceder a fornecedores 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 definição de ambiente do Azure Stack Hub

Para autenticar o principal de serviço no ambiente do Azure Stack Hub, defina os pontos finais com get_active_directory_settings(). Este método utiliza a variável de ambiente ARM_Endpoint que 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

Amostras

Utilize 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 gestor de recursos e grupos

Para executar o exemplo, certifique-se de que instalou o Ruby. Se estiver a utilizar o Visual Studio Code, transfira também a extensão SDK Ruby.

Nota

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

  1. Clone o repositório:

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

    cd Hybrid-Resource-Manager-Ruby-Resources-And-Groups
    bundle install
    
  3. Crie um principal de serviço do Azure com o PowerShell e obtenha os valores necessários.

    Para obter instruções sobre como criar um principal de serviço, veja Utilizar Azure PowerShell para criar um principal de serviço com um certificado.

    Os valores necessários são:

    • ID do inquilino
    • ID de Cliente
    • Segredo do cliente
    • ID da subscrição
    • ponto final Resource Manager

    Defina as seguintes variáveis de ambiente com as informações obtidas do principal de serviço que 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}

    Nota

    No Windows, utilize set em vez de export.

  4. Certifique-se de que a variável de localização está definida para a localização do Azure Stack Hub; por exemplo, LOCAL="local".

  5. Para direcionar os pontos finais do Active Directory corretos, adicione a seguinte linha de código se estiver a utilizar o Azure Stack Hub ou outras clouds privadas:

    active_directory_settings = get_active_directory_settings(ENV['ARM_ENDPOINT'])
    
  6. Na variável , adicione as definições do Active Directory e o 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 que tenha como destino o perfil do Azure Stack Hub:

    client = Azure::Resources::Profiles::V2019_03_01_Hybrid::Mgmt::Client.new(options)
    
  8. Para autenticar o principal de serviço com o Azure Stack Hub, os pontos finais devem ser definidos com get_active_directory_settings(). Este método utiliza a variável de ambiente ARM_Endpoint que 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
    

Passos seguintes