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
ouV2019_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_01
e 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, na2020-09-01
versão do perfil, você pode alterar o para para2019-10-01
oapi-version
provedor de recursosmicrosoft.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:
- Gerenciar recursos e grupos de recursos do Azure com o Ruby.
- Gerenciar máquinas virtuais usando Ruby
- Implante uma VM habilitada para SSH com um modelo no Ruby.
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.
Clonar o repositório:
git clone https://github.com/Azure-Samples/Hybrid-Resource-Manager-Ruby-Resources-And-Groups.git
Instale as dependências usando o pacote:
cd Hybrid-Resource-Manager-Ruby-Resources-And-Groups bundle install
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 deexport
.Verifique se a variável de local está definida como o local do Azure Stack Hub; por exemplo,
LOCAL="local"
.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'])
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'] }
Crie um cliente de perfil direcionado ao perfil do Azure Stack Hub:
client = Azure::Resources::Profiles::V2019_03_01_Hybrid::Mgmt::Client.new(options)
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
Execute o exemplo.
bundle exec ruby example.rb