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

Важно!

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

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

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

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

Вы можете нацелить приложение на ресурс в Azure tack 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. Дополнительные сведения о предварительных требованиях для настройки среды разработки см. в статье Использование пакета AZURE SDK для Java.

  1. Установите Git. Официальные инструкции по установке Git см. в статье начало работы — Установка Git.

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

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

Использование профилей версии API с помощью Java

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

  • Чтобы использовать самый новый профиль, укажите зависимость 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 SDK для Java

Чтобы установить пакет SDK для Java, выполните следующие шаги.

  1. Выполните официальные инструкции по установке Git. См. статью Getting Started - Installing Git (Приступая к работе — установка Git)

  2. Выполните инструкции по установке пакета SDK для Java и Maven. Следует использовать Java Developer Kit версии 8. Следует использовать Apache Maven версии 3.0 или более поздней. Для выполнения инструкций из этого краткого руководства сохраните в переменной среды JAVA_HOME расположение установки JDK. Дополнительные сведения см. в статье Создание первой функции с помощью 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 2019_03_01

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

Подписка

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

Субъект-служба

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

Tenant ID

Чтобы найти каталог или идентификатор клиента для 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-version2019-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 доверие корневому сертификату ЦС не требуется.

Windows

  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 пакета 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-hybrid для 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 сведениями о том, как запустить этот пример.

См. пример , применимый к версии 2008 или профилю 2019-03-01 Azure Stack, и ниже.

Дальнейшие действия

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