API-versieprofielen gebruiken met Ruby in Azure Stack Hub

Ruby- en API-versieprofielen

De Ruby SDK voor de Azure Stack Hub-Resource Manager biedt hulpprogramma's waarmee u uw infrastructuur kunt bouwen en beheren. Resourceproviders in de SDK omvatten Compute, Virtual Networks en Storage, met de Ruby-taal. API-profielen in de Ruby SDK maken hybride cloudontwikkeling mogelijk door te schakelen tussen wereldwijde Azure-resources en -resources in Azure Stack Hub.

Een API-profiel is een combinatie van resourceproviders en serviceversies. U kunt een API-profiel gebruiken om verschillende resourcetypen te combineren.

  • Als u de nieuwste versies van alle services wilt gebruiken, gebruikt u het nieuwste profiel van het rollup-juweeltje van de Azure SDK.
  • Profielen worden benoemd op datum in notatie, zoals V2020_09_01_Hybrid of V2019_03_01_Hybrid.
  • Als u de nieuwste API-versie van een service wilt gebruiken, gebruikt u het meest recente profiel van het specifieke juweeltje. Als u bijvoorbeeld alleen de nieuwste API-versie van de rekenservice wilt gebruiken, gebruikt u het meest recente profiel van het rekengesteente .
  • Als u een specifieke API-versie voor een service wilt gebruiken, gebruikt u de specifieke API-versies die in de gem zijn gedefinieerd.

De Azure Ruby SDK installeren

  • Installeer Git.

  • Installeer Ruby.

    • Kies Ruby toevoegen aan PATH-variabele bij de installatie.

    • Wanneer u hierom wordt gevraagd tijdens de installatie van Ruby, installeert u de development kit.

    • Installeer vervolgens de bundelaar met behulp van de volgende opdracht:

      Gem install bundler
      
  • Als dit niet beschikbaar is, maakt u een abonnement en slaat u de abonnements-id op die u later wilt gebruiken. Instructies voor het maken van een abonnement bevinden zich in het artikel Abonnementen maken voor aanbiedingen in Azure Stack Hub .

  • Maak een service-principal en sla de id en het geheim op. Instructies voor het maken van een service-principal voor Azure Stack Hub bevinden zich in het artikel Een app-identiteit gebruiken voor toegang tot resources .

  • Zorg ervoor dat aan uw service-principal de rol inzender/eigenaar is toegewezen voor uw abonnement. Instructies voor het toewijzen van een rol aan een service-principal bevinden zich in het artikel Een app-identiteit gebruiken voor toegang tot resources .

De RubyGem-pakketten installeren

U kunt de Azure RubyGem-pakketten rechtstreeks installeren.

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

Of gebruik ze in uw Gemfile.

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

De Azure Resource Manager Ruby SDK is in preview en heeft waarschijnlijk belangrijke interfacewijzigingen in toekomstige releases. Een verhoogd aantal in de secundaire versie kan duiden op wijzigingen die fouten veroorzaken.

De azure_sdk gem gebruiken

Het azure_sdk juweeltje is een samengevouwen van alle ondersteunde edelstenen in de Ruby SDK.

U kunt de azure_sdk rollup gem installeren met de volgende opdracht:

gem install 'azure_sdk'

Profielen

Als u profielen met datums wilt gebruiken, vervangt u de datum in V<date>_Hybrideen ander SDK-profiel of een andere versie. Voor de versie 2008 is 2019_03_01het profiel bijvoorbeeld en wordt V2019_03_01_Hybridde tekenreeks. Houd er rekening mee dat het SDK-team soms de naam van de pakketten wijzigt, dus het vervangen van de datum van een tekenreeks met een andere datum werkt mogelijk niet. Zie de volgende tabel voor het koppelen van profielen en Azure Stack-versies.

U kunt ook gebruiken latest in plaats van de datum.

Azure Stack-versie Profiel
2108 2020_09_01
2102 2020_09_01
2008 2019_03_01

Zie de samenvatting van API-profielen voor meer informatie over Azure Stack Hub- en API-profielen.

Zie Ruby SDK-profielen.

Abonnement

Als u nog geen abonnement hebt, maakt u een abonnement en slaat u de abonnements-id op die u later wilt gebruiken. Zie dit document voor meer informatie over het maken van een abonnement.

Service-principal

Een service-principal en de bijbehorende omgevingsgegevens moeten ergens worden gemaakt en opgeslagen. Service-principal met owner rol wordt aanbevolen, maar afhankelijk van het voorbeeld kan een contributor rol voldoende zijn. Raadpleeg de onderstaande tabel voor de vereiste waarden.

Waarde Omgevingsvariabelen Description
Tenant-id AZURE_TENANT_ID Uw Azure Stack Hub-tenant-id.
Client-id AZURE_CLIENT_ID De app-id van de service-principal die is opgeslagen toen de service-principal in de vorige sectie van dit artikel werd gemaakt.
Abonnements-id AZURE_SUBSCRIPTION_ID U gebruikt de abonnements-id voor toegang tot aanbiedingen in Azure Stack Hub.
Clientgeheim AZURE_CLIENT_SECRET Het geheim van de service-principal-app die is opgeslagen toen de service-principal werd gemaakt.
Resource Manager-eindpunt ARM_ENDPOINT Zie het Azure Stack Hub-eindpunt Resource Manager.

Tenant-id

Volg de instructies in dit artikel om de map- of tenant-id voor uw Azure Stack Hub te vinden.

Resourceprovider registreren

Registreer de vereiste resourceproviders door dit document te volgen. Deze resourceproviders zijn vereist, afhankelijk van de voorbeelden die u wilt uitvoeren. Als u bijvoorbeeld een VM-voorbeeld wilt uitvoeren, is de registratie van de Microsoft.Compute resourceprovider vereist.

Azure Stack Resource Manager-eindpunt

Azure Resource Manager (ARM) is een beheerframework waarmee beheerders Azure-resources kunnen implementeren, beheren en bewaken. Azure Resource Manager kan deze taken verwerken als een groep in plaats van afzonderlijk, in één bewerking. U kunt de metagegevensgegevens ophalen uit het Resource Manager-eindpunt. Het eindpunt retourneert een JSON-bestand met de informatie die nodig is om uw code uit te voeren.

  • ResourceManagerEndpointUrl in de Azure Stack Development Kit (ASDK) is: https://management.local.azurestack.external/.
  • De ResourceManagerEndpointUrl in geïntegreerde systemen is: https://management.region.<fqdn>/, waar <fqdn> is uw volledig gekwalificeerde domeinnaam.
  • De vereiste metagegevens ophalen: <ResourceManagerUrl>/metadata/endpoints?api-version=1.0. Zie Azure REST API-specificaties voor beschikbare API-versies. In profielversie kunt u bijvoorbeeld 2020-09-01 de api-version naam 2019-10-01 wijzigen van de resourceprovider microsoft.resources.

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

Omgevingsvariabelen instellen

Microsoft Windows

Als u de omgevingsvariabelen wilt instellen, gebruikt u de volgende indeling in een Windows opdrachtprompt:

set AZURE_TENANT_ID=<YOUR_TENANT_ID>

macOS-, Linux- en Unix-systemen

Gebruik in Unix-systemen de volgende opdracht:

export AZURE_TENANT_ID=<YOUR_TENANT_ID>

Zie de samenvatting van API-profielen voor meer informatie over Azure Stack Hub- en API-profielen.

Gebruik van Azure Ruby SDK-API-profiel

Gebruik de volgende code om een profielclient te instantiëren. Deze parameter is alleen vereist voor Azure Stack Hub of andere privéclouds. Global Azure heeft deze instellingen al standaard.

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)

De profielclient kan worden gebruikt voor toegang tot afzonderlijke resourceproviders, zoals Compute, Storage en Netwerk:

# 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-omgevingsinstellingsfuncties definiëren

Als u de service-principal wilt verifiëren bij de Azure Stack Hub-omgeving, definieert u de eindpunten met behulp van get_active_directory_settings(). Deze methode maakt gebruik van de ARM_Endpoint omgevingsvariabele die u eerder hebt ingesteld:

# 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

Voorbeelden

Gebruik de volgende voorbeelden op GitHub als verwijzingen voor het maken van oplossingen met Ruby- en Azure Stack Hub-API-profielen:

Voorbeeld van Resource Manager en groepen

Als u het voorbeeld wilt uitvoeren, moet u ervoor zorgen dat u Ruby hebt geïnstalleerd. Als u Visual Studio Code gebruikt, downloadt u ook de Ruby SDK-extensie.

Notitie

De opslagplaats voor het voorbeeld is Hybrid-Resource-Manager-Ruby-Resources-And-Groups.

  1. Kloon de opslagplaats:

    git clone https://github.com/Azure-Samples/Hybrid-Resource-Manager-Ruby-Resources-And-Groups.git
    
  2. Installeer de afhankelijkheden met behulp van bundel:

    cd Hybrid-Resource-Manager-Ruby-Resources-And-Groups
    bundle install
    
  3. Maak een Azure-service-principal met behulp van PowerShell en haal de benodigde waarden op.

    Zie Azure PowerShell gebruiken om een service-principal met een certificaat te maken voor instructies voor het maken van een service-principal.

    De benodigde waarden zijn:

    • Tenant-id
    • Client-id
    • Clientgeheim
    • Abonnements-id
    • Resource Manager-eindpunt

    Stel de volgende omgevingsvariabelen in met behulp van de informatie die u hebt opgehaald uit de service-principal die u hebt gemaakt:

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

    Notitie

    Gebruik set in Windows in plaats van export.

  4. Zorg ervoor dat de locatievariabele is ingesteld op uw Azure Stack Hub-locatie; bijvoorbeeld LOCAL="local".

  5. Als u de juiste Active Directory-eindpunten wilt instellen, voegt u de volgende coderegel toe als u Azure Stack Hub of andere privéclouds gebruikt:

    active_directory_settings = get_active_directory_settings(ENV['ARM_ENDPOINT'])
    
  6. Voeg in de options variabele de Active Directory-instellingen en de basis-URL toe om te werken met Azure Stack Hub:

    options = {
    credentials: credentials,
    subscription_id: subscription_id,
    active_directory_settings: active_directory_settings,
    base_url: ENV['ARM_ENDPOINT']
    }
    
  7. Maak een profielclient die is gericht op het Azure Stack Hub-profiel:

    client = Azure::Resources::Profiles::V2019_03_01_Hybrid::Mgmt::Client.new(options)
    
  8. Als u de service-principal wilt verifiëren met Azure Stack Hub, moeten de eindpunten worden gedefinieerd met behulp van get_active_directory_settings(). Deze methode maakt gebruik van de ARM_Endpoint omgevingsvariabele die u eerder hebt ingesteld:

    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. Voet het voorbeeld uit.

    bundle exec ruby example.rb
    

Volgende stappen