Partager via


Prise en main du développement cloud à l’aide de Java sur Azure

Cet article vous guide tout au long de la configuration d’un environnement de développement pour le développement Azure en Java. Vous allez ensuite créer certaines ressources Azure et les connecter pour effectuer certaines tâches de base, telles que le chargement d’un fichier ou le déploiement d’une application web. Une fois que vous avez terminé, vous serez prêt à commencer à utiliser des services Azure dans vos propres applications Java.

Conditions préalables

Configurer l’authentification

Votre application Java doit lire et créer des autorisations dans votre abonnement Azure pour exécuter l’exemple de code dans ce tutoriel. Créez un principal de service et configurez votre application pour qu’elle s’exécute avec ses informations d’identification. Les principaux de service fournissent un moyen de créer un compte non actif associé à votre identité auquel vous accordez uniquement les privilèges dont votre application a besoin pour s’exécuter.

Créer un principal de service à l’aide de l'Azure CLI 2.0 et capturer la sortie :

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

Cette commande vous donne une réponse au format suivant :

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

Ensuite, configurez les variables d’environnement :

  • AZURE_SUBSCRIPTION_ID: utilisez la valeur id de à partir de az account show dans Azure CLI 2.0.
  • AZURE_CLIENT_ID: utilisez l’appId valeur de la sortie extraite d’une sortie du principal de service.
  • AZURE_CLIENT_SECRET: utilisez la valeur mot de passe à partir de la sortie du principal de service.
  • AZURE_TENANT_ID: utilisez la valeur du locataire à partir de la sortie du principal de service.

Pour plus d’options d’authentification, consultez la bibliothèque de client Azure Identity pour Java.

Note

Microsoft recommande d’utiliser le flux d’authentification le plus sécurisé disponible. Le flux d’authentification décrit dans cette procédure, par exemple pour les bases de données, les caches, la messagerie ou les services IA, nécessite un niveau de confiance très élevé dans l’application et comporte des risques non présents dans d’autres flux. Utilisez ce flux uniquement lorsque des options plus sécurisées, telles que les identités managées pour les connexions sans mot de passe ou sans clé, ne sont pas viables. Pour les opérations d’ordinateur local, préférez les identités utilisateur pour les connexions sans mot de passe ou sans clé.

Outillage

Créer un projet Maven

Note

Cet article utilise l’outil de génération Maven pour générer et exécuter l’exemple de code. D’autres outils de génération, tels que Gradle, fonctionnent également avec le Kit de développement logiciel (SDK) Azure pour Java.

Créez un projet Maven à partir de la ligne de commande dans un nouveau répertoire sur votre système.

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

Cette étape crée un projet Maven de base sous le répertoire testAzureApp. Ajoutez les entrées suivantes dans le fichier pom.xml du projet pour importer les bibliothèques utilisées dans l’exemple de code de ce didacticiel.

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

Ajoutez une entrée build sous l’élément de project de niveau supérieur pour utiliser le maven-exec-plugin pour exécuter les exemples. maven-compiler-plugin est utilisé pour configurer le code source et les classes générées pour 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>

Créer une machine virtuelle Linux

Créez un fichier nommé App.java dans le répertoire src/main/java/com/fabrikam, puis collez le bloc de code suivant. Mettez à jour les variables userName et sshKey avec des valeurs réelles pour votre machine. Le code crée une machine virtuelle Linux avec le nom testLinuxVM dans le groupe de ressources sampleResourceGroup s’exécutant dans la région Azure USA Est.

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

Exécutez l’exemple à partir de la ligne de commande.

mvn compile exec:java

Vous verrez certaines requêtes et réponses REST dans la console, car le KIT de développement logiciel (SDK) effectue les appels sous-jacents à l’API REST Azure pour configurer la machine virtuelle et ses ressources. Une fois le programme terminé, vérifiez la machine virtuelle dans votre abonnement avec Azure CLI 2.0.

az vm list --resource-group sampleVmResourceGroup

Une fois que vous avez vérifié que le code fonctionnait, utilisez l’interface CLI pour supprimer la machine virtuelle et ses ressources.

az group delete --name sampleVmResourceGroup

Déployer une application web à partir d’un dépôt GitHub

Remplacez la méthode principale dans App.java par la méthode suivante. Mettez à jour la variable appName en une valeur unique avant d’exécuter le code. Ce code déploie une application web à partir de la branche master dans un dépôt GitHub public dans un nouveau Application web Azure App Service s’exécutant dans le niveau tarifaire gratuit.

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

Exécutez le code comme avant d’utiliser Maven.

mvn clean compile exec:java

Ouvrez un navigateur pointant vers l’application à l’aide de l’interface CLI.

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

Supprimez l’application web et planifiez votre abonnement après avoir vérifié le déploiement.

az group delete --name sampleWebResourceGroup

Se connecter à une base de données Azure SQL

Remplacez la méthode principale actuelle dans App.java par le code suivant. Définissez des valeurs réelles pour les variables. Ce code crée une base de données SQL avec une règle de pare-feu qui autorise l’accès à distance. Ensuite, le code se connecte à celui-ci à l’aide du pilote JBDC 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());
        }
    }

Exécutez l’exemple à partir de la ligne de commande.

mvn clean compile exec:java

Ensuite, nettoyez les ressources à l’aide de l’interface CLI.

az group delete --name sampleSqlResourceGroup

Écrire un objet blob dans un nouveau compte de stockage

Remplacez la méthode principale actuelle dans App.java par le code suivant. Ce code crée un compte de stockage Azure . Ensuite, le code utilise les bibliothèques stockage Azure pour Java pour créer un fichier texte dans le cloud.

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

Exécutez l’exemple à partir de la ligne de commande.

mvn clean compile exec:java

Vous pouvez rechercher le fichier helloazure.txt dans votre compte de stockage via le portail Azure ou avec Explorateur Stockage Azure.

Nettoyez le compte de stockage à l’aide de l’interface CLI.

az group delete --name sampleStorageResourceGroup

Explorer d’autres exemples

Pour en savoir plus sur l’utilisation des bibliothèques de gestion Azure pour Java pour gérer les ressources et automatiser les tâches, consultez notre exemple de code pour machines virtuelles, applications webet base de données SQL.

Notes de référence et de publication

Une référence est disponible pour tous les packages.

Obtenir de l’aide et envoyer des commentaires

Publiez des questions à la communauté sur Stack Overflow. Signalez des bogues et ouvrez des problèmes sur le Kit de développement logiciel (SDK) Azure pour Java dans le référentiel GitHub .