共用方式為


在 Azure Stack Hub 中搭配 Java 使用 API 版本配置檔

這很重要

Java SDK 已從追蹤 1 更新為追蹤 2。 建議您儘快遷移至版本 2 SDK。 如需指示,請參閱 此移轉指南

適用於 Azure Stack Hub Resource Manager 的 Java SDK 提供工具來協助您建置和管理基礎結構。 SDK 中的資源提供者包括計算、網路、記憶體、應用程式服務和 Azure Key Vault。 您可以在 GitHub 上找到 混合式 Java 範例存放庫 。 本文將協助您設定環境、取得正確的認證、擷取存放庫,以及在 Azure Stack Hub 中建立資源群組。

使用 Java SDK 可啟用真正的混合式雲端開發人員體驗。 切換 Java SDK 中的 POM.xml 版本相依性,可協助您在全域 Azure 資源之間切換至 Azure Stack Hub 中的資源,來啟用混合式雲端開發。

若要使用最新版的服務,請使用 最新的 配置檔作為相依性。

您可以採用現有的 com.azure.resourcemanager 相依性,並將版本從 x.y.z 變更為 x.y.z-hybrid,以將應用程式設為 Azure tack Hub 中的資源。 提供 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 配置檔的摘要

配置檔是在 Maven 專案中的檔案中 pom.xml 指定為相依性。 如果您從下拉式清單中選擇正確的類別,配置檔會自動載入模組(就像使用 .NET 一樣)。

設定開發環境

若要準備執行 SDK 的環境,您可以使用 Eclipse 或 Visual Studio Code 之類的 IDE,但您必須安裝 Git、Java SDK 和 Apache Maven。 您可以在使用 Azure SDK for Java 找到設定開發環境必要條件的詳細數據

  1. 安裝 Git。 您可以在 開始使用 - 安裝 Git 中找到安裝 Git 的官方指示。

  2. 安裝 Java SDK,並將您的 JAVA_HOME 環境變數設定為 Java 開發工具包的二進位檔位置。 您可以找到 OpenJDK 的可下載安裝媒體指示。 安裝第 8 版或更新版本的 Java Developer Kit。

  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 版本,請使用透過 Intellisense 定義的特定 API 版本。

您可以在相同的應用程式中合併所有選項。

安裝 Azure Java SDK

請遵循下列步驟來安裝 Java SDK:

  1. 請遵循官方指示來安裝 Git。 請參閱 用戶入門 - 安裝 Git

  2. 請遵循指示來安裝 Java SDKMaven。 正確的版本是 Java Developer Kit 第 8 版。 正確版本的 Apache Maven 為 3.0 或更新版本。 若要完成快速入門, JAVA_HOME 環境變數必須設定為Java開發工具包的安裝位置。 如需詳細資訊,請參閱 使用 Java 和 Maven 建立您的第一個函式。

  3. 若要安裝正確的相依性套件,請在 Java 應用程式中開啟 Pom.xml 檔案。 新增相依性,如下列程式代碼所示:

    <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年9月1日
2301 2020年9月1日
2206 2020年9月1日
2108 2020年9月1日
2102 2020年9月1日
2008 2019-03-01

如需 Azure Stack Hub 和 API 配置檔的詳細資訊,請參閱 API 設定檔的摘要

訂閱

如果您還沒有訂用帳戶,請建立訂用帳戶,並儲存稍後要使用的訂用帳戶標識碼。 如需如何建立訂用帳戶的資訊,請參閱本

服務主體

服務主體及其相關聯的環境信息應該建立並儲存在某處。 建議使用具有 owner 角色的服務主體,但視範例而定,contributor 角色可能已足夠。 如需必要值,請參閱範例存放 庫中 的自述檔。 您可以使用 SDK 語言所支援的任何格式讀取這些值,例如來自 JSON 檔案(我們的範例使用)。 視所執行的範例而定,並非所有這些值都會被使用。 請參閱範例存放庫以獲取更新的範例程式代碼或進一步資訊。

租戶識別碼

若要尋找 Azure Stack Hub 的目錄或租用戶標識碼,請遵循 本文中的指示。

註冊資源提供者

遵循本 文件,註冊必要的資源提供者。 視您想要執行的範例而定,需要這些資源提供者。 例如,如果您想要執行 VM 範例, Microsoft.Compute 則需要資源提供者註冊。

Azure Stack 資源管理員端點

Azure Resource Manager (ARM) 是一種管理架構,可讓系統管理員部署、管理及監視 Azure 資源。 Azure Resource Manager 可以在單一作業中以群組而非個別方式處理這些工作。 您可以從 Resource Manager 端點取得元數據資訊。 端點會傳回 JSON 檔案,其中包含執行程式碼所需的資訊。

  • Azure Stack 開發工具包中的 ResourceManagerEndpointUrl 是: https://management.local.azurestack.external/
  • 整合式系統中的 ResourceManagerEndpointUrl 是:https://management.region.<fqdn>/,其中 <fqdn> 是完全合格的域名。
  • 若要擷取所需的元數據: <ResourceManagerUrl>/metadata/endpoints?api-version=1.0。 如需可用的 API 版本,請參閱 Azure rest API 規格。 例如,在2020-09-01設定檔版本中,您可以針對資源提供者 api-version將 變更2019-10-01microsoft.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 CA 根憑證

如果您使用 Azure Stack 開發工具套件 (ASDK),您必須信任遠端電腦上的 CA 跟證書。 您不需要信任 Azure Stack Hub 整合系統的 CA 根憑證。

窗戶

  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 建置的最新配置檔。 只要您是 1904 或更新版本,即可將此配置檔用於與 Azure Stack Hub 最相容的服務。

  • com.microsoft.azure.profile_2018_03_01_hybrid:針對 Azure Stack Hub 建置的配置檔。 使用此配置檔讓服務與 Azure Stack Hub 1808 版或更新版本相容。

  • com.microsoft.azure:包含所有服務最新版本的配置檔。 使用所有服務的最新版本。

如需 Azure Stack Hub 和 API 配置檔的詳細資訊,請參閱 API 設定檔的摘要

Azure Java SDK API 設定檔使用量

下列程式代碼會驗證 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 檔案中,新增下列相依性,以使用 Azure Stack Hub 的 2019-03-01-hybrid 配置檔。 此相依性會針對計算、網路、記憶體、Key Vault 和 App Services 資源提供者安裝與此設定檔相關聯的模組:

    <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
    

範例

請參閱 此範例存放庫 ,以取得最新狀態 (track 2) 範例程序代碼。 如需追蹤 1 範例程式代碼,請參閱 此範例存放庫 。 根 README.md 目錄描述一般需求,而每個子目錄都包含一個特定範例,並有自己的 README.md 範例,說明如何執行該範例。

如需適用於 Azure Stack 版本或設定檔2008的範例,請參閱2019-03-01

後續步驟

深入瞭解 API 設定檔: