Поделиться через


Использование профилей версий API с Java в Azure Stack Hub

Это важно

Пакет SDK для Java обновлен с трека 1 до 2. Мы рекомендуем как можно скорее перейти на SDK track 2. Инструкции см. в этом руководстве по миграции.

Пакет SDK Java для Azure Stack Hub Resource Manager предоставляет средства для создания инфраструктуры и управления ими. Поставщики ресурсов в пакете SDK включают вычислительные ресурсы, сети, хранилище, службы приложений и Azure Key Vault. Репозиторий гибридных примеров Java можно найти на сайте GitHub. В этой статье вы узнаете, как настроить среду, получить правильные учетные данные, получить репозиторий и создать группу ресурсов в Azure Stack Hub.

Использование пакета SDK для Java позволяет использовать истинный интерфейс разработчика гибридного облака. Переключение зависимостей версий в POM.xml пакете SDK для Java позволяет разрабатывать гибридные облака, помогая переключаться между глобальными ресурсами Azure на ресурсы в Azure Stack Hub.

Чтобы использовать последнюю версию служб, используйте последний профиль в качестве зависимости.

Вы можете нацелить ваше приложение на ресурс в Azure Stack Hub, используя существующую зависимость com.azure.resourcemanager и обновив версию с x.y.z до x.y.z-hybrid. Гибридные пакеты, обеспечивающие поддержку Azure Stack Hub, используют -hybrid суффикс в конце версии, например 1.0.0-hybrid. Это указывает на статическую коллекцию конечных точек, связанных с версией.

Чтобы получить последний профиль, используйте существующую зависимость com.azure.resourcemanager и измените версию на самую новую. Последние профильные пакеты Java обеспечивают согласованный опыт с Azure. Пакеты используют тот же идентификатор группы, что и Azure com.azure.resourcemanager. Идентификатор артефакта и пространства имен также совпадают с глобальным Azure. Это помогает перенести приложение Azure в Azure Stack Hub. Дополнительные сведения о конечных точках, используемых в Azure Stack Hub в рамках гибридного профиля, вы можете найти в сводке профилей API.

Профиль указан в pom.xml файле в проекте Maven в качестве зависимости. Профиль загружает модули автоматически, если выбрать правильный класс из раскрывающегося списка (как и в .NET).

Настройка среды разработки

Чтобы подготовить среду для запуска пакета SDK, можно использовать интегрированную среду разработки, например Eclipse или Visual Studio Code, но вам потребуется установить Git, пакет SDK Java и Apache Maven. Дополнительные сведения о предварительных требованиях для настройки среды разработки см. в статье "Использование пакета SDK Azure для Java"

  1. Установите Git. Вы можете найти официальные инструкции по установке Git на сайте "Приступая к работе" — установка Git.

  2. Установите Java SDK и укажите JAVA_HOME переменную среды на расположение двоичных файлов для Java SDK. Вы можете найти инструкции по загрузке установочного носителя для OpenJDK. Установите версию 8 или более поздней версии пакета разработчиков Java.

  3. Установите Apache Maven. Инструкции можно найти в проекте Apache Maven. Установите Apache Maven 3.0 или более поздней версии.

Профили версий Java и API

Чтобы использовать последние версии всех служб, используйте последний профиль в качестве зависимости.

  • Чтобы использовать последний профиль, зависимость — com.microsoft.azure.

  • Чтобы использовать последние поддерживаемые службы, доступные в Azure Stack Hub, используйте профиль com.microsoft.azure.profile_2019_03_01_hybrid .

    • Профиль указывается в файле Pom.xml как зависимость, которая автоматически загружает модули, если выбрать правильный класс из раскрывающегося списка (как и в .NET).
  • Зависимости отображаются следующим образом:

    <dependency>
    <groupId>com.microsoft.azure.profile_2019_03_01_hybrid</groupId>
    <artifactId>azure</artifactId>
    <version>1.0.0-beta-1</version>
    </dependency>
    
  • Чтобы использовать определенные версии API для типа ресурса в определенном поставщике ресурсов, используйте определенные версии API, определенные с помощью Intellisense.

Вы можете объединить все параметры в одном приложении.

Установите Azure Java SDK

Выполните следующие действия, чтобы установить пакет SDK для Java:

  1. Следуйте официальным инструкциям по установке Git. См. статью "Начало работы— установка Git".

  2. Следуйте инструкциям по установке пакета SDK для Java и Maven. Правильная версия — это версия 8 пакета разработчиков Java. Правильная версия Apache Maven — 3.0 или более поздней. Чтобы завершить краткое руководство, переменная среды JAVA_HOME должна быть установлена на путь установки комплекта разработки Java. Дополнительные сведения см. в статье "Создание первой функции с помощью Java и Maven".

  3. Чтобы установить правильные пакеты зависимостей, откройте файлPom.xml в приложении Java. Добавьте зависимость, как показано в следующем коде:

    <dependency>
    <groupId>com.microsoft.azure.profile_2019_03_01_hybrid</groupId>
    <artifactId>azure</artifactId>
    <version>1.0.0-beta-1</version>
    </dependency>
    
  4. Набор пакетов, которые необходимо установить, зависит от используемой версии профиля. Имена пакетов для версий профиля:

    • com.microsoft.azure.profile_2019_03_01_hybrid
    • com.microsoft.azure
      • самый поздний

Профили

Для профилей, содержащих даты, чтобы использовать другой профиль или версию пакета SDK, замените дату в com.microsoft.azure.profile<date>_hybrid. Например, для версии 2008 профиль имеет 2019_03_01значение, а строка становится com.microsoft.azure.profile_2019_03_01_hybrid. Обратите внимание, что иногда команда SDK изменяет имя пакетов, поэтому просто замена даты строки другой датой может не работать. См. следующую таблицу для сопоставления профилей и версий Azure Stack.

Версия Azure Stack Профиль
2311 2020_09_01
2301 2020_09_01
2206 2020_09_01
2108 2020_09_01
2102 2020_09_01
2008 01.03.2019

Дополнительные сведения о профилях Azure Stack Hub и API см. в сводке профилей API.

Подписка

Если у вас еще нет подписки, создайте подписку и сохраните идентификатор подписки, который будет использоваться позже. Сведения о создании подписки см. в этом документе.

Принципал службы

Учётная запись службы и связанные с ней сведения о среде должны быть созданы и сохранены в определённом месте. Рекомендуется использовать субъект-службу с ролью owner, но в зависимости от примера может быть достаточно роли contributor. Смотрите README в образцовом репозитории для определения необходимых значений. Эти значения можно прочитать в любом формате, поддерживаемом языком SDK, например из JSON-файла (которые используются в наших примерах). В зависимости от выполняемого примера могут использоваться не все эти значения. См. пример репозитория для обновленного примера кода или дополнительных сведений.

Идентификатор арендатора

Чтобы найти каталог или идентификатор клиента для Azure Stack Hub, следуйте инструкциям в этой статье.

Регистрация поставщиков ресурсов

Зарегистрируйте необходимых поставщиков ресурсов, следуя этому документу. Эти поставщики ресурсов потребуются в зависимости от примеров, которые требуется запустить. Например, если вы хотите запустить виртуальную машину, требуется регистрация поставщика ресурсов Microsoft.Compute.

Конечная точка диспетчера ресурсов Azure Stack

Azure Resource Manager (ARM) — это платформа управления, которая позволяет администраторам развертывать, управлять и отслеживать ресурсы Azure. Azure Resource Manager может обрабатывать эти задачи как группу, а не отдельно в одной операции. Сведения о метаданных можно получить из узла Resource Manager. Конечная точка возвращает JSON-файл с информацией, необходимой для выполнения кода.

  • ResourceManagerEndpointUrl в пакете средств разработки Azure Stack (ASDK): https://management.local.azurestack.external/
  • ResourceManagerEndpointUrl в интегрированных системах: https://management.region.<fqdn>/, где <fqdn> — это ваше полностью квалифицированное доменное имя.
  • Чтобы получить необходимые метаданные: <ResourceManagerUrl>/metadata/endpoints?api-version=1.0. Доступные версии API см. в спецификациях REST API Azure. Например, в версии профиля 2020-09-01 можно изменить api-version на 2019-10-01 для поставщика ресурсов microsoft.resources.

Пример 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"]
      }
}

Доверяйте корневому сертификату ЦС Azure Stack Hub

Если вы используете пакет средств разработки Azure Stack (ASDK), необходимо доверять корневому сертификату ЦС на удаленном компьютере. Для интегрированных систем Azure Stack Hub не нужно доверять корневому сертификату ЦС.

Виндоус

  1. Экспорт самозаверяющего сертификата Azure Stack Hub на рабочий стол.

  2. В командной строке измените каталог %JAVA_HOME%\binна .

  3. Выполните следующую команду:

    .\keytool.exe -importcert -noprompt -file <location of the exported certificate here> -alias root -keystore %JAVA_HOME%\lib\security\cacerts -trustcacerts -storepass changeit
    

Существующие профили API

  • com.microsoft.azure.profile_2019_03_01_hybrid. Последний профиль, созданный для Azure Stack Hub. Используйте этот профиль, чтобы службы были наиболее совместимыми с Azure Stack Hub, если вы работаете в 1904 или более поздней версии.

  • com.microsoft.azure.profile_2018_03_01_hybrid. Профиль, созданный для Azure Stack Hub. Используйте этот профиль для совместимости служб с Azure Stack Hub версии 1808 или более поздней.

  • com.microsoft.azure: профиль, состоящий из последних версий всех служб. Используйте последние версии всех служб.

Дополнительные сведения о профилях Azure Stack Hub и API см. в сводке профилей API.

Использование профилей API SDK Azure для Java

Следующий код проверяет подлинность учетной записи службы в Azure Stack Hub. Он создает маркер с помощью идентификатора клиента и базы проверки подлинности, относящийся к Azure Stack Hub:

AzureTokenCredentials credentials = new ApplicationTokenCredentials(client, tenant, key, AZURE_STACK)
                    .withDefaultSubscriptionID(subscriptionID);
Azure azureStack = Azure.configure()
                    .withLogLevel(com.microsoft.rest.LogLevel.BASIC)
                    .authenticate(credentials, credentials.defaultSubscriptionID());

Этот код позволяет использовать зависимости профиля API для успешного развертывания приложения в Azure Stack Hub.

Определение функций параметров среды Azure Stack Hub

Чтобы зарегистрировать облако Azure Stack Hub с правильными конечными точками, используйте следующий код:

// Get Azure Stack Hub cloud endpoints
final HashMap<String, String> settings = getActiveDirectorySettings(armEndpoint);

AzureEnvironment AZURE_STACK = new AzureEnvironment(new HashMap<String, String>() {
                {
                    put("managementEndpointUrl", settings.get("audience"));
                    put("resourceManagerEndpointUrl", armEndpoint);
                    put("galleryEndpointUrl", settings.get("galleryEndpoint"));
                    put("activeDirectoryEndpointUrl", settings.get("login_endpoint"));
                    put("activeDirectoryResourceID", settings.get("audience"));
                    put("activeDirectoryGraphResourceID", settings.get("graphEndpoint"));
                    put("storageEndpointSuffix", armEndpoint.substring(armEndpoint.indexOf('.')));
                    put("keyVaultDnsSuffix", ".vault" + armEndpoint.substring(armEndpoint.indexOf('.')));
                }
            });

Вызов getActiveDirectorySettings в предыдущем коде извлекает конечные точки из конечных точек метаданных. Он указывает переменные среды из вызываемого вызова:

public static HashMap<String, String> getActiveDirectorySettings(String armEndpoint) {

    HashMap<String, String> adSettings = new HashMap<String, String>();
    try {

        // create HTTP Client
        HttpClient httpClient = HttpClientBuilder.create().build();

        // Create new getRequest with below mentioned URL
        HttpGet getRequest = new HttpGet(String.format("%s/metadata/endpoints?api-version=1.0",
                             armEndpoint));

        // Add additional header to getRequest which accepts application/xml data
        getRequest.addHeader("accept", "application/xml");

        // Execute request and catch response
        HttpResponse response = httpClient.execute(getRequest);

        // Check for HTTP response code: 200 = success
        if (response.getStatusLine().getStatusCode() != 200) {
            throw new RuntimeException("Failed : HTTP error code : " + response.getStatusLine().getStatusCode());
        }

        String responseStr = EntityUtils.toString(response.getEntity());
        JSONObject responseJson = new JSONObject(responseStr);
        adSettings.put("galleryEndpoint", responseJson.getString("galleryEndpoint"));
        JSONObject authentication = (JSONObject) responseJson.get("authentication");
        String audience = authentication.get("audiences").toString().split("\"")[1];
        adSettings.put("login_endpoint", authentication.getString("loginEndpoint"));
        adSettings.put("audience", audience);
        adSettings.put("graphEndpoint", responseJson.getString("graphEndpoint"));

    } catch (ClientProtocolException cpe) {
        cpe.printStackTrace();
        throw new RuntimeException(cpe);
    } catch (IOException ioe) {
        ioe.printStackTrace();
        throw new RuntimeException(ioe);
    }
    return adSettings;
}

Пример проекта модульного теста

  1. Клонируйте репозиторий с помощью следующей команды:

    git clone https://github.com/Azure-Samples/Hybrid-Java-Samples.git -b resourcegroup-2019-03-01-hybrid
    
  2. Создайте учетную запись службы Azure и назначьте роль для доступа к подписке. Инструкции по созданию субъекта-службы см. в статье "Использование Azure PowerShell для создания субъекта-службы с сертификатом".

  3. Получите следующие обязательные переменные среды:

    • AZURE_TENANT_ID
    • AZURE_CLIENT_ID
    • AZURE_CLIENT_SECRET
    • AZURE_SUBSCRIPTION_ID
    • ARM_ENDPOINT
    • RESOURCE_LOCATION
  4. Задайте следующие переменные среды, используя сведения, полученные от служебного принципала, созданного через командную строку.

    • 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}
    • export RESOURCE_LOCATION={location of Azure Stack Hub}

    В Windows используйте set вместо export.

  5. Используйте функцию getActiveDirectorySettings для получения конечных точек метаданных Azure Resource Manager.

    // Get Azure Stack Hub cloud endpoints
    final HashMap<String, String> settings = getActiveDirectorySettings(armEndpoint);
    
  6. В файлеPom.xml добавьте следующую зависимость, чтобы использовать профиль гибридный 2019-03-01 для Azure Stack Hub. Эта зависимость устанавливает модули, связанные с этим профилем, для поставщиков ресурсов вычислительных ресурсов, сети, хранилища, Key Vault и служб приложений:

    <dependency>
      <groupId>com.microsoft.azure.profile_2019_03_01_hybrid</groupId>
      <artifactId>azure</artifactId>
      <version>1.0.0-beta-1</version>
    </dependency>
    
  7. В командной строке, которая была открыта для задания переменных среды, введите следующую команду:

    mvn clean compile exec:java
    

Образцы

См. этот образец репозитория для актуального образца кода (трек 2). См. этот пример репозитория для образца кода трека 1. Корневой каталог README.md описывает общие требования, а каждый вложенный каталог содержит конкретный пример с собственным README.md способом запуска этого примера.

Ознакомьтесь здесь с примером, применимым к версии Azure Stack 2008 или профилю 2019-03-01, и ниже.

Дальнейшие шаги

Дополнительные сведения о профилях API: