Sdílet prostřednictvím


Začínáme s vývojem cloudu pomocí Javy v Azure

Tento článek vás provede nastavením vývojového prostředí pro vývoj v Javě. Pak vytvoříte nějaké prostředky Azure a připojíte se k nim, abyste mohli provádět některé základní úlohy, jako je nahrání souboru nebo nasazení webové aplikace. Až budete hotovi, budete připraveni začít používat služby Azure ve vlastních aplikacích Java.

Požadavky

Nastavení ověřování

Aplikace v Javě potřebuje číst a vytvářet oprávnění ve vašem předplatném Azure ke spuštění ukázkového kódu v tomto kurzu. Vytvořte instanční objekt a nakonfigurujte aplikaci tak, aby běžela s jeho přihlašovacími údaji. Instanční objekty poskytují způsob, jak vytvořit neinteraktivní účet přidružený k vaší identitě, ke které udělíte pouze oprávnění, která vaše aplikace potřebuje ke spuštění.

vytvoření instančního objektu pomocí azure CLI 2.0a zachycení výstupu:

az ad sp create-for-rbac \
    --name AzureJavaTest \
    --role Contributor \
    --scopes /subscriptions/<your-subscription-ID>

Tento příkaz vám poskytne odpověď v následujícím formátu:

{
  "appId": "a487e0c1-82af-47d9-9a0b-af184eb87646d",
  "displayName": "AzureJavaTest",
  "name": "http://AzureJavaTest",
  "password": "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa",
  "tenant": "tttttttt-tttt-tttt-tttt-tttttttttttt"
}

Dále nakonfigurujte proměnné prostředí:

  • AZURE_SUBSCRIPTION_ID: Použijte hodnotu ID z az account show v Azure CLI 2.0.
  • AZURE_CLIENT_ID: Použijte hodnotu appId z výstupu instančního objektu.
  • AZURE_CLIENT_SECRET: Použijte hodnotu hesla z výstupu instančního objektu.
  • AZURE_TENANT_ID: Použijte hodnotu tenanta z výstupu instančního objektu.

Další možnosti ověřování najdete v klientské knihovně Azure Identity pro javu.

Poznámka

Microsoft doporučuje používat nejbezpečnější dostupný tok ověřování. Tok ověřování popsaný v tomto postupu, například pro databáze, mezipaměti, zasílání zpráv nebo služby AI, vyžaduje velmi vysoký stupeň důvěryhodnosti v aplikaci a nese rizika, která nejsou přítomna v jiných tocích. Tento tok používejte pouze v případě, že nejsou možné zabezpečit možnosti, jako jsou spravované identity pro připojení bez hesla nebo bez klíčů. V případě místních operací počítačů upřednostňujete identity uživatelů pro připojení bez hesla nebo bez klíčů.

Nářadí

Vytvoření nového projektu Maven

Poznámka

Tento článek používá nástroj pro sestavení Maven k sestavení a spuštění ukázkového kódu. Další nástroje sestavení, jako je Gradle, také pracují se sadou Azure SDK pro Javu.

Vytvořte projekt Maven z příkazového řádku v novém adresáři ve vašem systému.

mkdir java-azure-test
cd java-azure-test
mvn archetype:generate -DgroupId=com.fabrikam -DartifactId=AzureApp \
-DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false

Tento krok vytvoří základní projekt Maven v adresáři testAzureApp. Do souboru pom.xml projektu přidejte následující položky pro import knihoven použitých v ukázkovém kódu v tomto kurzu.

<dependency>
  <groupId>com.azure</groupId>
  <artifactId>azure-identity</artifactId>
  <version>1.3.2</version>
</dependency>
<dependency>
  <groupId>com.azure.resourcemanager</groupId>
  <artifactId>azure-resourcemanager</artifactId>
  <version>2.6.0</version>
</dependency>
<dependency>
  <groupId>com.azure</groupId>
  <artifactId>azure-storage-blob</artifactId>
  <version>12.8.0</version>
</dependency>
<dependency>
  <groupId>com.microsoft.sqlserver</groupId>
  <artifactId>mssql-jdbc</artifactId>
  <version>6.2.1.jre8</version>
</dependency>
<dependency>
  <groupId>org.slf4j</groupId>
  <artifactId>slf4j-simple</artifactId>
  <version>1.7.33</version>
</dependency>

Přidejte položku build pod prvek project nejvyšší úrovně, který použije maven-exec-plugin ke spuštění ukázek. maven-compiler-plugin slouží ke konfiguraci zdrojového kódu a vygenerovaných tříd pro Javu 8.

<build>
  <plugins>
    <plugin>
      <groupId>org.codehaus.mojo</groupId>
      <artifactId>exec-maven-plugin</artifactId>
      <version>3.0.0</version>
      <configuration>
        <mainClass>com.fabrikam.App</mainClass>
      </configuration>
    </plugin>
    <plugin>
      <groupId>org.apache.maven.plugins</groupId>
      <artifactId>maven-compiler-plugin</artifactId>
      <version>3.8.1</version>
      <configuration>
        <source>1.8</source>
        <target>1.8</target>
      </configuration>
    </plugin>
  </plugins>
</build>

Vytvoření virtuálního počítače s Linuxem

Vytvořte nový soubor s názvem App.java v adresáři src/main/java/com/fabrikam adresář a vložte následující blok kódu. Aktualizujte proměnné userName a sshKey skutečnými hodnotami pro váš počítač. Kód vytvoří nový virtuální počítač s Linuxem s názvem testLinuxVM ve skupině prostředků sampleResourceGroup spuštěnou v oblasti Azure USA – východ.

package com.fabrikam;

import com.azure.core.credential.TokenCredential;
import com.azure.core.http.policy.HttpLogDetailLevel;
import com.azure.core.management.AzureEnvironment;
import com.azure.core.management.Region;
import com.azure.core.management.profile.AzureProfile;
import com.azure.identity.AzureAuthorityHosts;
import com.azure.identity.DefaultAzureCredentialBuilder;
import com.azure.resourcemanager.AzureResourceManager;
import com.azure.resourcemanager.compute.models.KnownLinuxVirtualMachineImage;
import com.azure.resourcemanager.compute.models.VirtualMachine;
import com.azure.resourcemanager.compute.models.VirtualMachineSizeTypes;

public class App {

    public static void main(String[] args) {

        final String userName = "YOUR_VM_USERNAME";
        final String sshKey = "YOUR_PUBLIC_SSH_KEY";

        try {
            TokenCredential credential = new DefaultAzureCredentialBuilder()
                    .authorityHost(AzureAuthorityHosts.AZURE_PUBLIC_CLOUD)
                    .build();

            // If you don't set the tenant ID and subscription ID via environment variables,
            // change to create the Azure profile with tenantId, subscriptionId, and Azure environment.
            AzureProfile profile = new AzureProfile(AzureEnvironment.AZURE);

            AzureResourceManager azureResourceManager = AzureResourceManager.configure()
                    .withLogLevel(HttpLogDetailLevel.BASIC)
                    .authenticate(credential, profile)
                    .withDefaultSubscription();

            // Create an Ubuntu virtual machine in a new resource group.
            VirtualMachine linuxVM = azureResourceManager.virtualMachines().define("testLinuxVM")
                    .withRegion(Region.US_EAST)
                    .withNewResourceGroup("sampleVmResourceGroup")
                    .withNewPrimaryNetwork("10.0.0.0/24")
                    .withPrimaryPrivateIPAddressDynamic()
                    .withoutPrimaryPublicIPAddress()
                    .withPopularLinuxImage(KnownLinuxVirtualMachineImage.UBUNTU_SERVER_18_04_LTS)
                    .withRootUsername(userName)
                    .withSsh(sshKey)
                    .withSize(VirtualMachineSizeTypes.STANDARD_D3_V2)
                    .create();

        } catch (Exception e) {
            System.out.println(e.getMessage());
            e.printStackTrace();
        }
    }
}

Spusťte ukázku z příkazového řádku.

mvn compile exec:java

V konzole se zobrazí některé požadavky a odpovědi REST, protože sada SDK provede základní volání rozhraní Azure REST API ke konfiguraci virtuálního počítače a jeho prostředků. Po dokončení programu ověřte virtuální počítač ve vašem předplatném pomocí Azure CLI 2.0.

az vm list --resource-group sampleVmResourceGroup

Po ověření, že kód fungoval, pomocí rozhraní příkazového řádku odstraňte virtuální počítač a jeho prostředky.

az group delete --name sampleVmResourceGroup

Nasazení webové aplikace z úložiště GitHub

Nahraďte hlavní metodu v App.java následujícím způsobem. Před spuštěním kódu aktualizujte proměnnou appName na jedinečnou hodnotu. Tento kód nasadí webovou aplikaci z větve master ve veřejném úložišti GitHubu do nového webové aplikace Azure App Service běžící v cenové úrovni Free.

    public static void main(String[] args) {
        try {

            final String appName = "YOUR_APP_NAME";

            TokenCredential credential = new DefaultAzureCredentialBuilder()
                    .authorityHost(AzureAuthorityHosts.AZURE_PUBLIC_CLOUD)
                    .build();

            // If you don't set the tenant ID and subscription ID via environment variables,
            // change to create the Azure profile with tenantId, subscriptionId, and Azure environment.
            AzureProfile profile = new AzureProfile(AzureEnvironment.AZURE);
            
            AzureResourceManager azureResourceManager = AzureResourceManager.configure()
                    .withLogLevel(HttpLogDetailLevel.BASIC)
                    .authenticate(credential, profile)
                    .withDefaultSubscription();

            WebApp app = azureResourceManager.webApps().define(appName)
                    .withRegion(Region.US_WEST2)
                    .withNewResourceGroup("sampleWebResourceGroup")
                    .withNewWindowsPlan(PricingTier.FREE_F1)
                    .defineSourceControl()
                    .withPublicGitRepository(
                            "https://github.com/Azure-Samples/app-service-web-java-get-started")
                    .withBranch("master")
                    .attach()
                    .create();

        } catch (Exception e) {
            System.out.println(e.getMessage());
            e.printStackTrace();
        }
    }

Spusťte kód jako před použitím Mavenu.

mvn clean compile exec:java

Otevřete prohlížeč odkaz na aplikaci pomocí rozhraní příkazového řádku.

az webapp browse --resource-group sampleWebResourceGroup --name YOUR_APP_NAME

Po ověření nasazení odeberte webovou aplikaci a plán z vašeho předplatného.

az group delete --name sampleWebResourceGroup

Připojení k databázi Azure SQL

Nahraďte aktuální hlavní metodu v App.java následujícím kódem. Nastavte skutečné hodnoty proměnných. Tento kód vytvoří novou databázi SQL s pravidlem brány firewall, které umožňuje vzdálený přístup. Pak se k němu kód připojí pomocí ovladače JBDC služby SQL Database.

    public static void main(String args[]) {
        // Create the db using the management libraries.
        try {
            TokenCredential credential = new DefaultAzureCredentialBuilder()
                    .authorityHost(AzureAuthorityHosts.AZURE_PUBLIC_CLOUD)
                    .build();

            // If you don't set the tenant ID and subscription ID via environment variables,
            // change to create the Azure profile with tenantId, subscriptionId, and Azure environment.
            AzureProfile profile = new AzureProfile(AzureEnvironment.AZURE);

            AzureResourceManager azureResourceManager = AzureResourceManager.configure()
                    .withLogLevel(HttpLogDetailLevel.BASIC)
                    .authenticate(credential, profile)
                    .withDefaultSubscription();

            final String adminUser = "YOUR_USERNAME_HERE";
            final String sqlServerName = "YOUR_SERVER_NAME_HERE";
            final String sqlDbName = "YOUR_DB_NAME_HERE";
            final String dbPassword = "YOUR_PASSWORD_HERE";
            final String firewallRuleName = "YOUR_RULE_NAME_HERE";

            SqlServer sampleSQLServer = azureResourceManager.sqlServers().define(sqlServerName)
                    .withRegion(Region.US_EAST)
                    .withNewResourceGroup("sampleSqlResourceGroup")
                    .withAdministratorLogin(adminUser)
                    .withAdministratorPassword(dbPassword)
                    .defineFirewallRule(firewallRuleName)
                        .withIpAddressRange("0.0.0.0","255.255.255.255")
                        .attach()
                    .create();

            SqlDatabase sampleSQLDb = sampleSQLServer.databases().define(sqlDbName).create();

            // Assemble the connection string to the database.
            final String domain = sampleSQLServer.fullyQualifiedDomainName();
            String url = "jdbc:sqlserver://"+ domain + ":1433;" +
                    "database=" + sqlDbName +";" +
                    "user=" + adminUser+ "@" + sqlServerName + ";" +
                    "password=" + dbPassword + ";" +
                    "encrypt=true;trustServerCertificate=false;hostNameInCertificate=*.database.windows.net;loginTimeout=30;";

            // Connect to the database, create a table, and insert an entry into it.
            try (Connection conn = DriverManager.getConnection(url)) {
                String createTable = "CREATE TABLE CLOUD (name varchar(255), code int);";
                String insertValues = "INSERT INTO CLOUD (name, code) VALUES ('Azure', 1);";
                String selectValues = "SELECT * FROM CLOUD";
                try (Statement createStatement = conn.createStatement()) {
                    createStatement.execute(createTable);
                }
                try (Statement insertStatement = conn.createStatement()) {
                    insertStatement.execute(insertValues);
                }
                try (Statement selectStatement = conn.createStatement();
                     ResultSet rst = selectStatement.executeQuery(selectValues)) {
                    while (rst.next()) {
                        System.out.println(rst.getString(1) + " " + rst.getString(2));
                    }
                }
            }
        } catch (Exception e) {
            System.out.println(e.getMessage());
            System.out.println(e.getStackTrace().toString());
        }
    }

Spusťte ukázku z příkazového řádku.

mvn clean compile exec:java

Pak prostředky vyčistíte pomocí rozhraní příkazového řádku.

az group delete --name sampleSqlResourceGroup

Zápis objektu blob do nového účtu úložiště

Nahraďte aktuální hlavní metodu v App.java následujícím kódem. Tento kód vytvoří účet úložiště Azure. Kód pak pomocí knihoven Azure Storage pro Javu vytvoří nový textový soubor v cloudu.

    public static void main(String[] args) {

        try {
            TokenCredential tokenCredential = new DefaultAzureCredentialBuilder()
                    .authorityHost(AzureAuthorityHosts.AZURE_PUBLIC_CLOUD)
                    .build();

            // If you don't set the tenant ID and subscription ID via environment variables,
            // change to create the Azure profile with tenantId, subscriptionId, and Azure environment.
            AzureProfile profile = new AzureProfile(AzureEnvironment.AZURE);

            AzureResourceManager azureResourceManager = AzureResourceManager.configure()
                    .withLogLevel(HttpLogDetailLevel.BASIC)
                    .authenticate(tokenCredential, profile)
                    .withDefaultSubscription();

            // Create a new storage account.
            String storageAccountName = "YOUR_STORAGE_ACCOUNT_NAME_HERE";
            StorageAccount storage = azureResourceManager.storageAccounts().define(storageAccountName)
                    .withRegion(Region.US_WEST2)
                    .withNewResourceGroup("sampleStorageResourceGroup")
                    .create();

            // Create a storage container to hold the file.
            List<StorageAccountKey> keys = storage.getKeys();
            PublicEndpoints endpoints = storage.endPoints();
            String accountName = storage.name();
            String accountKey = keys.get(0).value();
            String endpoint = endpoints.primary().blob();

            StorageSharedKeyCredential credential = new StorageSharedKeyCredential(accountName, accountKey);

            BlobServiceClient storageClient = new BlobServiceClientBuilder()
                    .endpoint(endpoint)
                    .credential(credential)
                    .buildClient();

            // Container name must be lowercase.
            BlobContainerClient blobContainerClient = storageClient.getBlobContainerClient("helloazure");
            blobContainerClient.create();

            // Make the container public.
            blobContainerClient.setAccessPolicy(PublicAccessType.CONTAINER, null);

            // Write a blob to the container.
            String fileName = "helloazure.txt";
            String textNew = "Hello Azure";

            BlobClient blobClient = blobContainerClient.getBlobClient(fileName);
            InputStream is = new ByteArrayInputStream(textNew.getBytes());
            blobClient.upload(is, textNew.length());

        } catch (Exception e) {
            System.out.println(e.getMessage());
            e.printStackTrace();
        }
    }

Spusťte ukázku z příkazového řádku.

mvn clean compile exec:java

Soubor helloazure.txt můžete vyhledat ve svém účtu úložiště prostřednictvím webu Azure Portal nebo pomocí Průzkumníka služby Azure Storage.

Vyčistěte účet úložiště pomocí rozhraní příkazového řádku.

az group delete --name sampleStorageResourceGroup

Prozkoumání dalších ukázek

Další informace o používání knihoven pro správu Azure pro Javu ke správě prostředků a automatizaci úloh najdete v našem ukázkovém kódu pro virtuální počítače, webových aplikacía databáze SQL.

Referenční informace a poznámky k verzi

Pro všechny balíčky je k dispozici referenční .

Získání nápovědy a poskytnutí zpětné vazby

Publikujte dotazy komunitě na Stack Overflow. Hlásit chyby a otevřít problémy se sadou Azure SDK pro Javu v úložišti GitHubu.