Använda API-versionsprofiler med Ruby i Azure Stack Hub

Ruby- och API-versionsprofiler

Ruby SDK för Azure Stack Hub-Resource Manager innehåller verktyg som hjälper dig att skapa och hantera din infrastruktur. Resursprovidrar i SDK:et inkluderar Compute, Virtual Networks och Storage med Ruby-språket. API-profiler i Ruby SDK möjliggör hybridmolnutveckling genom att hjälpa dig att växla mellan globala Azure-resurser och resurser på Azure Stack Hub.

En API-profil är en kombination av resursprovidrar och tjänstversioner. Du kan använda en API-profil för att kombinera olika resurstyper.

  • Om du vill använda de senaste versionerna av alla tjänster använder du den senaste profilen för Sammanslagningspärlan för Azure SDK.
  • Profiler namnges efter datum i format som V2020_09_01_Hybrid eller V2019_03_01_Hybrid.
  • Om du vill använda den senaste API-versionen av en tjänst använder du den senaste profilen för den specifika gemen. Om du till exempel vill använda den senaste API-versionen av beräkningstjänsten ensam använder du den senaste profilen för beräkningspärlan .
  • Om du vill använda en specifik API-version för en tjänst använder du de specifika API-versioner som definierats i gemen.

Installera Azure Ruby SDK

  • Installera Git.

  • Installera Ruby.

    • När du installerar väljer du Lägg till Ruby i PATH-variabeln.

    • När du uppmanas att göra det under Ruby-installationen installerar du utvecklingspaketet.

    • Installera sedan bundler med följande kommando:

      Gem install bundler
      
  • Om det inte är tillgängligt skapar du en prenumeration och sparar prenumerations-ID:t som ska användas senare. Instruktioner för att skapa en prenumeration finns i artikeln Skapa prenumerationer för erbjudanden i Azure Stack Hub .

  • Skapa ett huvudnamn för tjänsten och spara dess ID och hemlighet. Instruktioner för att skapa ett tjänsthuvudnamn för Azure Stack Hub finns i artikeln Använda en appidentitet för att komma åt resurser .

  • Kontrollera att tjänstens huvudnamn har rollen deltagare/ägare tilldelad i din prenumeration. Instruktioner för hur du tilldelar en roll till ett huvudnamn för tjänsten finns i artikeln Använda en appidentitet för att komma åt resurser .

Installera RubyGem-paketen

Du kan installera Azure RubyGem-paketen direkt.

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

Eller använd dem i din Gemfile.

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

Azure Resource Manager Ruby SDK är i förhandsversion och kommer sannolikt att ha icke-bakåtkompatibla gränssnittsändringar i kommande versioner. Ett ökat tal i delversionen kan tyda på icke-bakåtkompatibla ändringar.

Använd azure_sdk gem

Azure_sdk gem är en sammanslagning av alla gems som stöds i Ruby SDK.

Du kan installera azure_sdk sammanslagningspärla med följande kommando:

gem install 'azure_sdk'

Profiler

För profiler som innehåller datum ersätter du datumet i V<date>_Hybridom du vill använda en annan SDK-profil eller -version. För 2008-versionen är 2019_03_01till exempel profilen och strängen blir V2019_03_01_Hybrid. Observera att SDK-teamet ibland ändrar namnet på paketen, så att helt enkelt ersätta datumet för en sträng med ett annat datum kanske inte fungerar. Se följande tabell för association av profiler och Azure Stack-versioner.

Du kan också använda latest i stället för datumet.

Azure Stack-version Profil
2311 2020_09_01
2301 2020_09_01
2206 2020_09_01
2108 2020_09_01
2102 2020_09_01
2008 2019_03_01

Mer information om Azure Stack Hub- och API-profiler finns i Sammanfattning av API-profiler.

Se Ruby SDK-profiler.

Prenumeration

Om du inte redan har en prenumeration skapar du en prenumeration och sparar prenumerations-ID:t som ska användas senare. Information om hur du skapar en prenumeration finns i det här dokumentet.

Tjänstens huvudnamn

Ett huvudnamn för tjänsten och dess associerade miljöinformation bör skapas och sparas någonstans. Tjänstens huvudnamn med owner roll rekommenderas, men beroende på exemplet kan det räcka med en contributor roll. Se tabellen nedan för de värden som krävs.

Värde Miljövariabler Description
Klientorganisations-ID AZURE_TENANT_ID Ditt Klient-ID för Azure Stack Hub.
Klient-ID AZURE_CLIENT_ID App-ID:t för tjänstens huvudnamn sparades när tjänstens huvudnamn skapades i föregående avsnitt i den här artikeln.
Prenumerations-ID:t AZURE_SUBSCRIPTION_ID Du använder prenumerations-ID:t för att komma åt erbjudanden i Azure Stack Hub.
Client Secret (Klienthemlighet) AZURE_CLIENT_SECRET Apphemligheten för tjänstens huvudnamn sparades när tjänstens huvudnamn skapades.
Resource Manager slutpunkt ARM_ENDPOINT Se Azure Stack Hub-Resource Manager slutpunkt.

Klientorganisations-ID

Följ anvisningarna i den här artikeln för att hitta katalogen eller klientorganisations-ID:t för din Azure Stack Hub.

Registrera resursprovidrar

Registrera nödvändiga resursprovidrar genom att följa det här dokumentet. Dessa resursprovidrar krävs beroende på vilka exempel du vill köra. Om du till exempel vill köra ett virtuellt datorexempel krävs registrering av Microsoft.Compute resursprovidern.

Azure Stack Resource Manager-slutpunkt

Azure Resource Manager (ARM) är ett hanteringsramverk som gör det möjligt för administratörer att distribuera, hantera och övervaka Azure-resurser. Azure Resource Manager kan hantera dessa uppgifter som en grupp, snarare än individuellt, i en enda åtgärd. Du kan hämta metadatainformationen från Resource Manager slutpunkten. Slutpunkten returnerar en JSON-fil med den information som krävs för att köra koden.

  • ResourceManagerEndpointUrl i Azure Stack Development Kit (ASDK) är: https://management.local.azurestack.external/.
  • ResourceManagerEndpointUrl i integrerade system är: https://management.region.<fqdn>/, där <fqdn> är ditt fullständigt kvalificerade domännamn.
  • Så här hämtar du de metadata som krävs: <ResourceManagerUrl>/metadata/endpoints?api-version=1.0. Tillgängliga API-versioner finns i Specifikationer för Rest API i Azure. I profilversion kan du t.ex 2020-09-01 . ändra api-version till 2019-10-01 för resursprovidern microsoft.resources.

Exempel på 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"]
      }
}

Ange miljövariabler

Microsoft Windows

Om du vill ange miljövariablerna använder du följande format i en Windows-kommandotolk:

set AZURE_TENANT_ID=<YOUR_TENANT_ID>

macOS-, Linux- och Unix-baserade system

Använd följande kommando i Unix-baserade system:

export AZURE_TENANT_ID=<YOUR_TENANT_ID>

Mer information om Azure Stack Hub- och API-profiler finns i Sammanfattning av API-profiler.

Azure Ruby SDK API-profilanvändning

Använd följande kod för att instansiera en profilklient. Den här parametern krävs endast för Azure Stack Hub eller andra privata moln. Global Azure har redan de här inställningarna som standard.

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)

Profilklienten kan användas för att komma åt enskilda resursprovidrar, till exempel Compute, Storage och Network:

# 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

Definiera miljöinställningsfunktioner för Azure Stack Hub

Om du vill autentisera tjänstens huvudnamn till Azure Stack Hub-miljön definierar du slutpunkterna med .get_active_directory_settings() Den här metoden använder ARM_Endpoint miljövariabeln som du angav tidigare:

# 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

Exempel

Använd följande exempel på GitHub som referenser för att skapa lösningar med Ruby- och Azure Stack Hub API-profiler:

Exempel på resurshanterare och grupper

Kontrollera att du har installerat Ruby för att köra exemplet. Om du använder Visual Studio Code laddar du även ned Ruby SDK-tillägget.

Anteckning

Lagringsplatsen för exemplet är Hybrid-Resource-Manager-Ruby-Resources-And-Groups.

  1. Klona lagringsplatsen:

    git clone https://github.com/Azure-Samples/Hybrid-Resource-Manager-Ruby-Resources-And-Groups.git
    
  2. Installera beroendena med hjälp av paketet:

    cd Hybrid-Resource-Manager-Ruby-Resources-And-Groups
    bundle install
    
  3. Skapa ett Huvudnamn för Azure-tjänsten med PowerShell och hämta de värden som behövs.

    Anvisningar om hur du skapar ett huvudnamn för tjänsten finns i Använda Azure PowerShell för att skapa ett huvudnamn för tjänsten med ett certifikat.

    Värden som behövs är:

    • Klientorganisations-ID
    • Klient-ID
    • Klienthemlighet
    • Prenumerations-ID:t
    • Resource Manager slutpunkt

    Ange följande miljövariabler med hjälp av informationen som hämtats från tjänstens huvudnamn som du skapade:

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

    Anteckning

    I Windows använder du set i stället för export.

  4. Kontrollera att platsvariabeln är inställd på din Azure Stack Hub-plats. till exempel LOCAL="local".

  5. Om du vill rikta in dig på rätt active directory-slutpunkter lägger du till följande kodrad om du använder Azure Stack Hub eller andra privata moln:

    active_directory_settings = get_active_directory_settings(ENV['ARM_ENDPOINT'])
    
  6. I variabeln options lägger du till Active Directory-inställningarna och bas-URL:en för att arbeta med Azure Stack Hub:

    options = {
    credentials: credentials,
    subscription_id: subscription_id,
    active_directory_settings: active_directory_settings,
    base_url: ENV['ARM_ENDPOINT']
    }
    
  7. Skapa en profilklient som riktar sig till Azure Stack Hub-profilen:

    client = Azure::Resources::Profiles::V2019_03_01_Hybrid::Mgmt::Client.new(options)
    
  8. För att autentisera tjänstens huvudnamn med Azure Stack Hub ska slutpunkterna definieras med hjälp av get_active_directory_settings(). Den här metoden använder ARM_Endpoint miljövariabeln som du angav tidigare:

    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. Kör exemplet.

    bundle exec ruby example.rb
    

Nästa steg