Usare i profili di versione api con Ruby nell'hub di Azure Stack

Profili di versione di Ruby e API

Ruby SDK per l'hub di Azure Stack Resource Manager offre strumenti per creare e gestire l'infrastruttura. I provider di risorse nell'SDK includono calcolo, reti virtuali e archiviazione con il linguaggio Ruby. I profili API in Ruby SDK consentono lo sviluppo cloud ibrido consentendo di passare tra risorse di Azure globali e risorse nell'hub di Azure Stack.

Un profilo API è una combinazione di provider di risorse e versioni del servizio. È possibile usare un profilo API per combinare diversi tipi di risorse.

  • Per usare le versioni più recenti di tutti i servizi, usare il profilo più recente della gemma di rollup di Azure SDK.
  • I profili vengono denominati in base alla data in formato, V2020_09_01_Hybrid ad esempio o V2019_03_01_Hybrid.
  • Per usare la versione api più recente di un servizio, usare il profilo più recente della gemma specifica. Ad esempio, per usare la versione api più recente del servizio di calcolo, usare il profilo più recente della gemma di calcolo .
  • Per usare una versione api specifica per un servizio, usare le versioni API specifiche definite all'interno della gem.

Installare Azure Ruby SDK

Installare i pacchetti RubyGem

È possibile installare direttamente i pacchetti Azure RubyGem.

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

In alternativa, usarli nel gemfile.

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

Azure Resource Manager Ruby SDK è in anteprima e probabilmente avrà modifiche di interfaccia di rilievo nelle versioni future. Un numero maggiore nella versione secondaria può indicare modifiche di rilievo.

Usare il gioiello azure_sdk

Il gioiello azure_sdk è un rollup di tutte le gemme supportate in Ruby SDK.

È possibile installare la gem azure_sdk rollup con il comando seguente:

gem install 'azure_sdk'

Profiles

Per i profili contenenti date, per usare un profilo o una versione SDK diversi, sostituire la data in V<date>_Hybrid. Ad esempio, per la versione 2008, il profilo è 2019_03_01e la stringa diventa V2019_03_01_Hybrid. Si noti che a volte il team SDK modifica il nome dei pacchetti, quindi è sufficiente sostituire la data di una stringa con una data diversa potrebbe non funzionare. Vedere la tabella seguente per l'associazione di profili e versioni di Azure Stack.

È anche possibile usare latest anziché la data.

Versione di Azure Stack Profilo
2311 2020_09_01
2301 2020_09_01
2206 2020_09_01
2108 2020_09_01
2102 2020_09_01
2008 2019_03_01

Per altre informazioni sui profili dell'hub e delle API di Azure Stack, vedere Riepilogo dei profili API.

Vedere Profili di Ruby SDK.

Subscription

Se non si ha già una sottoscrizione, creare una sottoscrizione e salvare l'ID sottoscrizione da usare in un secondo momento. Per informazioni su come creare una sottoscrizione, vedere questo documento.

Entità servizio

È necessario creare e salvare un'entità servizio e le relative informazioni sull'ambiente associate. L'entità servizio con owner ruolo è consigliata, ma a seconda dell'esempio, un contributor ruolo può essere sufficiente. Per i valori necessari, vedere la tabella seguente.

valore Variabili di ambiente Descrizione
tenant_id AZURE_TENANT_ID ID tenant dell'hub di Azure Stack.
ID client AZURE_CLIENT_ID ID app dell'entità servizio salvato quando l'entità servizio è stata creata nella sezione precedente di questo articolo.
ID sottoscrizione AZURE_SUBSCRIPTION_ID Usare l'ID sottoscrizione per accedere alle offerte nell'hub di Azure Stack.
Client Secret AZURE_CLIENT_SECRET Segreto dell'app dell'entità servizio salvato quando è stata creata l'entità servizio.
Endpoint Resource Manager ARM_ENDPOINT Vedere l'endpoint dell'hub di Azure Stack Resource Manager.

ID tenant

Per trovare la directory o l'ID tenant per l'hub di Azure Stack, seguire le istruzioni riportate in questo articolo.

Registrare i provider di risorse

Registrare i provider di risorse necessari seguendo questo documento. Questi provider di risorse saranno necessari a seconda degli esempi da eseguire. Ad esempio, se si vuole eseguire un esempio di macchina virtuale, è necessaria la registrazione del Microsoft.Compute provider di risorse.

Endpoint di Azure Stack resource manager

Azure Resource Manager (ARM) è un framework di gestione che consente agli amministratori di distribuire, gestire e monitorare le risorse di Azure. Azure Resource Manager può gestire queste attività come gruppo, anziché singolarmente, in una singola operazione. È possibile ottenere le informazioni sui metadati dall'endpoint di Resource Manager. L'endpoint restituisce un file JSON con le informazioni necessarie per eseguire il codice.

  • ResourceManagerEndpointUrl in Azure Stack Development Kit (ASDK) è: https://management.local.azurestack.external/.
  • ResourceManagerEndpointUrl nei sistemi integrati è: https://management.region.<fqdn>/, dove <fqdn> è il nome di dominio completo.
  • Per recuperare i metadati necessari: <ResourceManagerUrl>/metadata/endpoints?api-version=1.0. Per le versioni api disponibili, vedere Specifiche dell'API rest di Azure. Ad esempio, nella versione del 2020-09-01 profilo è possibile modificare in per il api-version2019-10-01 provider microsoft.resourcesdi risorse .

JSON di esempio:

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

Impostare le variabili di ambiente

Microsoft Windows

Per impostare le variabili di ambiente, usare il formato seguente in un prompt dei comandi di Windows:

set AZURE_TENANT_ID=<YOUR_TENANT_ID>

sistemi macOS, Linux e Unix

Nei sistemi basati su Unix usare il comando seguente:

export AZURE_TENANT_ID=<YOUR_TENANT_ID>

Per altre informazioni sui profili hub e API di Azure Stack, vedere Riepilogo dei profili API.

Utilizzo del profilo API di Azure Ruby SDK

Usare il codice seguente per creare un'istanza di un client del profilo. Questo parametro è obbligatorio solo per l'hub di Azure Stack o per altri cloud privati. Azure globale ha già queste impostazioni per impostazione predefinita.

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)

Il client del profilo può essere usato per accedere ai singoli provider di risorse, ad esempio Calcolo, Archiviazione e Rete:

# 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

Definire le funzioni di impostazione dell'ambiente dell'hub di Azure Stack

Per autenticare l'entità servizio nell'ambiente dell'hub di Azure Stack, definire gli endpoint usando get_active_directory_settings(). Questo metodo usa la variabile di ambiente ARM_Endpoint impostata in precedenza:

# 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

Esempi

Usare gli esempi seguenti in GitHub come riferimenti per la creazione di soluzioni con i profili API ruby e dell'hub di Azure Stack:

Resource Manager e gruppi di esempio

Per eseguire l'esempio, assicurarsi di aver installato Ruby. Se si usa Visual Studio Code, scaricare anche l'estensione Ruby SDK.

Nota

Il repository per l'esempio è Hybrid-Resource-Manager-Ruby-Resources-And-Groups.

  1. Clonare il repository:

    git clone https://github.com/Azure-Samples/Hybrid-Resource-Manager-Ruby-Resources-And-Groups.git
    
  2. Installare le dipendenze usando il bundle:

    cd Hybrid-Resource-Manager-Ruby-Resources-And-Groups
    bundle install
    
  3. Creare un'entità servizio di Azure usando PowerShell e recuperare i valori necessari.

    Per istruzioni sulla creazione di un'entità servizio, vedere Usare Azure PowerShell per creare un'entità servizio con un certificato.

    I valori necessari sono:

    • ID tenant
    • ID client
    • Segreto client
    • ID sottoscrizione
    • L'endpoint di Resource Manager

    Impostare le variabili di ambiente seguenti usando le informazioni recuperate dall'entità servizio creata:

    • 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

    In Windows usare set invece di export.

  4. Verificare che la variabile di posizione sia impostata sulla posizione dell'hub di Azure Stack; ad esempio . LOCAL="local"

  5. Per specificare come destinazione gli endpoint di Active Directory corretti, aggiungere la riga di codice seguente se si usa l'hub di Azure Stack o altri cloud privati:

    active_directory_settings = get_active_directory_settings(ENV['ARM_ENDPOINT'])
    
  6. options Nella variabile aggiungere le impostazioni di Active Directory e l'URL di base per usare l'hub di Azure Stack:

    options = {
    credentials: credentials,
    subscription_id: subscription_id,
    active_directory_settings: active_directory_settings,
    base_url: ENV['ARM_ENDPOINT']
    }
    
  7. Creare un client del profilo destinato al profilo dell'hub di Azure Stack:

    client = Azure::Resources::Profiles::V2019_03_01_Hybrid::Mgmt::Client.new(options)
    
  8. Per autenticare l'entità servizio con l'hub di Azure Stack, è necessario definire gli endpoint usando get_active_directory_settings(). Questo metodo usa la variabile di ambiente ARM_Endpoint impostata in precedenza:

    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. Eseguire l'esempio.

    bundle exec ruby example.rb
    

Passaggi successivi