Introducción al desarrollo de soluciones para la nube con Java en Azure
Este artículo le guiará en la configuración de un entorno de desarrollo para el desarrollo de Azure en Java. Después, creará algunos recursos de Azure y los conectará para realizar varias tareas básicas, como cargar un archivo o implementar una aplicación web. Cuando haya terminado, estará listo para comenzar a usar los servicios de Azure en sus propias aplicaciones de Java.
Prerrequisitos
- Una cuenta de Azure. Si no tiene una, obtenga la versión de evaluación gratuita.
- Azure Cloud Shell o CLI de Azure 2.0.
- Java 8, que se incluye en Azure Cloud Shell.
- Maven 3, que se incluye en Azure Cloud Shell.
Configuración de la autenticación
La aplicación Java necesita leer y crear permisos en su suscripción de Azure para ejecutar el código de ejemplo de este tutorial. Cree una entidad de servicio y configure la aplicación para que se ejecute con sus credenciales. Las entidades de servicio proporcionan una manera de crear una cuenta no interactiva asociada con su identidad a la que conceder únicamente los privilegios que la aplicación necesita para la ejecución.
Cree una entidad de servicio mediante la CLI de Azure 2.0 y capture la salida:
az ad sp create-for-rbac --name AzureJavaTest --role Contributor
Lo que da una respuesta con el siguiente formato:
{
"appId": "a487e0c1-82af-47d9-9a0b-af184eb87646d",
"displayName": "AzureJavaTest",
"name": "http://AzureJavaTest",
"password": "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa",
"tenant": "tttttttt-tttt-tttt-tttt-tttttttttttt"
}
A continuación, configure las variables de entorno:
AZURE_SUBSCRIPTION_ID: use elAZURE_SUBSCRIPTION_IDidentificador de en laaz account showCLI de Azure 2.0.AZURE_CLIENT_ID: use elAZURE_CLIENT_IDde la salida tomada de una salida de entidad de servicio.AZURE_CLIENT_SECRET: use el valorAZURE_CLIENT_SECRETde la salida de la entidad de servicio.AZURE_TENANT_ID: use el valorAZURE_TENANT_IDde la salida de la entidad de servicio.
Para ver más opciones de autenticación, consulte Biblioteca cliente de Azure Identity para Java.
Tooling
Creación de un nuevo proyecto de Maven
Nota
En este artículo se usa la herramienta de compilación Maven para compilar y ejecutar el código de ejemplo. Otras herramientas de compilación, como Gradle, también funcionan con Azure SDK para Java.
Cree un proyecto de Maven desde la línea de comandos en un nuevo directorio del sistema.
mkdir java-azure-test
cd java-azure-test
mvn archetype:generate -DgroupId=com.fabrikam -DartifactId=AzureApp \
-DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false
Este paso crea un proyecto básico de Maven en el directorio testAzureApp. Agregue las siguientes entradas al archivo pom.xml del proyecto para importar las bibliotecas que se utilizan en el código de ejemplo en este tutorial.
<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>
Agregue una build entrada en el elemento de nivel superior para usar projectbuild para ejecutar los ejemplos.
<build>
<plugins>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>exec-maven-plugin</artifactId>
<version>3.0.0</version>
<configuration>
<mainClass>com.fabrikam.AzureApp</mainClass>
</configuration>
</plugin>
</plugins>
</build>
Instalación del kit de herramientas de Azure para IntelliJ
El kit de herramientas de Azure es necesario si tiene previsto implementar aplicaciones web o API mediante programación. Para obtener un inicio rápido con Azure Web Apps, consulte Creación de una aplicación web Hello World para Azure App Service mediante IntelliJ. También tiene un libro de referencia de SDK completo insertado para cualquier desarrollo de Azure con el SDK de Java. En los pasos siguientes se resume el proceso de instalación.
- Seleccione el menú File (Archivo) y, a continuación, seleccione Settings (Configuración).
- Seleccione Browse repositories (Examinar repositorios), busque Azure e instale Azure Toolkit for Intellij.
- Reinicie Intellij.
- Apertura de un libro de referencia desde Herramientas - Azure - Libro de referencia del SDK de > Azure

Instalación del kit de herramientas de Azure para Eclipse
El kit de herramientas de Azure es necesario si tiene previsto implementar aplicaciones web o API mediante programación. Actualmente, no se usa para ningún otro tipo de desarrollo. En los pasos siguientes se resume el proceso de instalación. Para una guía de inicio rápido, consulte Creación de una aplicación web Hello World para Azure App Service mediante Eclipse.
- Seleccione el menú Help (Ayuda) y, a continuación, seleccione Install new software (Instalar nuevo software).
- En el cuadro Trabajar con , escriba y seleccione Entrar.
- Seleccione la casilla situada junto a Azure toolkit for Java. Desactive la casilla Contact all update sites during install to find required software (Ponerse en contacto con todos los sitios de actualización durante la instalación para buscar el software necesario). Luego, seleccione Siguiente.
Creación de una máquina virtual Linux
Cree un archivo llamado AzureApp.java en el directorio src/main/java/com/fabrikam del proyecto y pegue el siguiente bloque de código. Actualice las variables userName y sshKey con los valores reales de la máquina. El código crea una nueva máquina virtual Linux con el nombre testLinuxVM en el grupo de recursos sampleResourceGroup en la región de Azure Este de EE. UU.
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.EnvironmentCredentialBuilder;
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 AzureApp {
public static void main(String[] args) {
final String userName = "YOUR_VM_USERNAME";
final String sshKey = "YOUR_PUBLIC_SSH_KEY";
try {
TokenCredential credential = new EnvironmentCredentialBuilder()
.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_16_04_LTS)
.withRootUsername(userName)
.withSsh(sshKey)
.withUnmanagedDisks()
.withSize(VirtualMachineSizeTypes.STANDARD_D3_V2)
.create();
} catch (Exception e) {
System.out.println(e.getMessage());
e.printStackTrace();
}
}
}
Ejecute el ejemplo desde la línea de comandos.
mvn compile exec:java
Podrá ver algunas solicitudes y respuestas REST en la consola a medida que el SDK realiza las llamadas subyacentes a la API REST de Azure para configurar la máquina virtual y sus recursos. Cuando finalice el programa, compruebe la máquina virtual en la suscripción con la CLI de Azure 2.0.
az vm list --resource-group sampleVmResourceGroup
Una vez que haya comprobado que el código ha funcionado, utilice la CLI para eliminar la máquina virtual y sus recursos.
az group delete --name sampleVmResourceGroup
Implementación de una aplicación web desde un repositorio de GitHub
Reemplace el método main de AzureApp.java por el siguiente. Actualice la variable appName a un valor único antes de ejecutar el código. Este código implementa una aplicación web desde la rama de un repositorio de GitHub público en una nueva aplicación web de Azure App Service que se ejecuta en el master plan de tarifa gratuito. master
public static void main(String[] args) {
try {
final String appName = "YOUR_APP_NAME";
TokenCredential credential = new EnvironmentCredentialBuilder()
.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();
}
}
Ejecute el código igual que antes mediante Maven.
mvn clean compile exec:java
Abra un explorador que apunte a la aplicación mediante la CLI.
az webapp browse --resource-group sampleWebResourceGroup --name YOUR_APP_NAME
Elimine la aplicación web y el plan de la suscripción una vez que haya comprobado la implementación.
az group delete --name sampleWebResourceGroup
Conexión a una base de datos de Azure SQL
Reemplace el método main actual de AzureApp.java por el código siguiente. Establezca los valores reales de las variables.
Este código crea una nueva base de datos SQL con una regla de firewall que permite el acceso remoto. A continuación, el código se conecta a ella mediante el controlador JBDC de SQL Database.
public static void main(String args[])
{
// Create the db using the management libraries.
try {
TokenCredential credential = new EnvironmentCredentialBuilder()
.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.
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";
Statement createStatement = conn.createStatement();
createStatement.execute(createTable);
Statement insertStatement = conn.createStatement();
insertStatement.execute(insertValues);
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());
}
}
Ejecute el ejemplo desde la línea de comandos.
mvn clean compile exec:java
A continuación, limpie los recursos mediante la CLI.
az group delete --name sampleSqlResourceGroup
Escritura de un blob en una nueva cuenta de almacenamiento
Reemplace el método main actual de AzureApp.java por el código siguiente. Este código crea una cuenta de Azure Storage. A continuación, el código usa las bibliotecas de Azure Storage para Java para crear un nuevo archivo de texto en la nube.
public static void main(String[] args) {
try {
TokenCredential tokenCredential = new EnvironmentCredentialBuilder()
.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();
}
}
Ejecute el ejemplo desde la línea de comandos.
mvn clean compile exec:java
Puede buscar el archivo helloazure.txt en la cuenta de almacenamiento desde Azure Portal o con el Explorador de Microsoft Azure Storage.
Limpie la cuenta de almacenamiento mediante la CLI.
az group delete --name sampleStorageResourceGroup
Ver más ejemplos
Para más información sobre cómo usar las bibliotecas de administración de Azure para Java para administrar recursos y automatizar tareas, consulte nuestro código de ejemplo para máquinas virtuales, aplicaciones web y bases de datos SQL.
Referencia y notas de la versión
Hay una referencia disponible para todos los paquetes.
Obtención de ayuda y ofrecimiento de comentarios
Puede publicar preguntas a la comunidad en Stack Overflow. Puede informar sobre errores y abrir incidencias de Azure SDK para Java en el repositorio de GitHub.