Aan de slag met het ontwikkelen in de cloud met behulp van Java op Azure

Dit artikel begeleidt u bij het instellen van een ontwikkelomgeving voor Azure-ontwikkeling in Java. Vervolgens maakt u enkele Azure-resources en maakt u er verbinding mee om enkele basistaken uit te voeren, zoals het uploaden van een bestand of het implementeren van een webtoepassing. Wanneer u klaar bent, kunt u Azure-services gaan gebruiken in uw eigen Java-toepassingen.

Vereisten

Verificatie instellen

Uw Java-toepassing heeft lees- en maakmachtigingen nodig in uw Azure-abonnement om de voorbeeldcode in deze zelfstudie uit te voeren. Maak een service-principal en configureer uw toepassing om te worden uitgevoerd met de bijbehorende referenties. Service-principals bieden een manier om een niet-interactief account te maken dat is gekoppeld aan uw identiteit waaraan u alleen de bevoegdheden verleent die uw app moet uitvoeren.

Maak een service-principal met behulp van de Azure CLI 2.0 en leg de uitvoer vast:

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

Met deze opdracht krijgt u een antwoord in de volgende indeling:

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

Configureer vervolgens de omgevingsvariabelen:

  • AZURE_SUBSCRIPTION_ID: Gebruik de id-waarde uit az account show de Azure CLI 2.0.
  • AZURE_CLIENT_ID: Gebruik de appId-waarde uit de uitvoer die afkomstig is van een service-principal-uitvoer.
  • AZURE_CLIENT_SECRET: Gebruik de wachtwoordwaarde uit de uitvoer van de service-principal.
  • AZURE_TENANT_ID: Gebruik de tenantwaarde uit de uitvoer van de service-principal.

Zie de Azure Identity-clientbibliotheek voor Java voor meer verificatieopties.

Hulpprogramma's

Een nieuw Maven-project maken

Notitie

In dit artikel wordt het Maven-buildhulpprogramma gebruikt om de voorbeeldcode te bouwen en uit te voeren. Andere buildhulpprogramma's, zoals Gradle, werken ook met de Azure SDK voor Java.

Maak een Maven-project vanaf de opdrachtregel in een nieuwe map op uw systeem.

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

Met deze stap maakt u een eenvoudig Maven-project onder de map testAzureApp . Voeg de volgende vermeldingen toe aan het pom.xml-bestand van het project om de bibliotheken te importeren die in de voorbeeldcode in deze zelfstudie worden gebruikt.

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

Voeg een build vermelding toe onder het element op het hoogste niveau project om de maven-exec-plugin te gebruiken om de voorbeelden uit te voeren. maven-compiler-plugin wordt gebruikt voor het configureren van de broncode en gegenereerde klassen voor Java 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>

Een virtuele Linux-machine maken

Maak een nieuw bestand met de naam App.java in de map src/main/java/com/fabrikam van het project en plak het volgende codeblok. Werk de variabelen userName en sshKey bij met echte waarden voor uw machine. Met de code wordt een nieuwe virtuele Linux-machine (VM) gemaakt met de naam testLinuxVM in de resourcegroep sampleResourceGroup die wordt uitgevoerd in de Azure-regio US - oost.

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();
        }
    }
}

Voer het voorbeeld uit vanaf de opdrachtregel.

mvn compile exec:java

U ziet enkele REST-aanvragen en -antwoorden in de console wanneer de SDK de onderliggende aanroepen naar de Azure REST API uitvoert om de VIRTUELE machine en de bijbehorende resources te configureren. Nadat het programma is voltooid, controleert u de VM in uw abonnement met de Azure CLI 2.0.

az vm list --resource-group sampleVmResourceGroup

Nadat u hebt gecontroleerd of de code heeft gewerkt, gebruikt u de CLI om de VM en de bijbehorende resources te verwijderen.

az group delete --name sampleVmResourceGroup

Een web-app implementeren vanuit een GitHub-opslagplaats

Vervang de hoofdmethode in App.java door de volgende methode. Werk de appName variabele bij naar een unieke waarde voordat u de code uitvoert. Met deze code wordt een webtoepassing van de vertakking master in een openbare GitHub-opslagplaats geïmplementeerd in een nieuwe Azure App Service web-app die wordt uitgevoerd in de gratis prijscategorie.

    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();
        }
    }

Voer de code uit zoals voordat u Maven gebruikt.

mvn clean compile exec:java

Open een browser die naar de toepassing wijst met behulp van de CLI.

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

Verwijder de web-app en plan uit uw abonnement nadat u de implementatie hebt geverifieerd.

az group delete --name sampleWebResourceGroup

Verbinding maken met een Azure SQL-database

Vervang de huidige hoofdmethode in App.java door de volgende code. Stel echte waarden in voor de variabelen. Met deze code maakt u een nieuwe SQL-database met een firewallregel die externe toegang toestaat. Vervolgens maakt de code er verbinding mee met behulp van het SQL Database RESOURCEDC-stuurprogramma.

    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());
        }
    }

Voer het voorbeeld uit vanaf de opdrachtregel.

mvn clean compile exec:java

Schoon vervolgens de resources op met behulp van de CLI.

az group delete --name sampleSqlResourceGroup

Een blob naar een nieuw opslagaccount schrijven

Vervang de huidige hoofdmethode in App.java door de volgende code. Met deze code wordt een Azure-opslagaccount gemaakt. Vervolgens gebruikt de code de Azure Storage-bibliotheken voor Java om een nieuw tekstbestand in de cloud te maken.

    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();
        }
    }

Voer het voorbeeld uit vanaf de opdrachtregel.

mvn clean compile exec:java

U kunt bladeren naar het bestand helloazure.txt in uw opslagaccount via Azure Portal of met Azure Storage Explorer.

Schoon het opslagaccount op met behulp van de CLI.

az group delete --name sampleStorageResourceGroup

Meer voorbeelden's verkennen

Zie onze voorbeeldcode voor virtuele machines, web-apps en SQL-database voor meer informatie over het gebruik van de Azure-beheerbibliotheken voor Java voor het beheren van resources en het automatiseren van taken.

Referentie en opmerkingen bij de release

Een referentie is beschikbaar voor alle pakketten.

Hulp vragen en feedback geven

Stel vragen aan de community op Stack Overflow. Meld fouten en open problemen met de Azure SDK voor Java in de GitHub-opslagplaats.