Introdução ao desenvolvimento em nuvem usando Java no Azure
Este artigo explica como configurar um ambiente de desenvolvimento para o desenvolvimento do Azure em Java. Em seguida, você criará alguns recursos do Azure e se conectará a eles para realizar algumas tarefas básicas, como carregar um arquivo ou implantar um aplicativo Web. Quando terminar, você estará pronto para começar a usar os serviços do Azure em seus próprios aplicativos Java.
Pré-requisitos
- Uma conta do Azure. Se você não tiver um, obter uma avaliação gratuita.
- do Azure Cloud Shell ou CLI do Azure 2.0.
- java 8, que está incluído no Azure Cloud Shell.
- maven 3, que está incluído no Azure Cloud Shell.
Configurar a autenticação
Seu aplicativo Java precisa de leitura e criar permissões em sua assinatura do Azure para executar o código de exemplo neste tutorial. Crie uma entidade de serviço e configure seu aplicativo para ser executado com suas credenciais. As entidades de serviço fornecem uma maneira de criar uma conta nãointerativa associada à sua identidade à qual você concede apenas os privilégios que seu aplicativo precisa executar.
criar uma entidade de serviço usando a CLI do Azure 2.0e capturar a saída:
az ad sp create-for-rbac \
--name AzureJavaTest \
--role Contributor \
--scopes /subscriptions/<your-subscription-ID>
Este comando oferece uma resposta no seguinte formato:
{
"appId": "a487e0c1-82af-47d9-9a0b-af184eb87646d",
"displayName": "AzureJavaTest",
"name": "http://AzureJavaTest",
"password": "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa",
"tenant": "tttttttt-tttt-tttt-tttt-tttttttttttt"
}
Em seguida, configure as variáveis de ambiente:
-
AZURE_SUBSCRIPTION_ID
: use o valor da ID deaz account show
na CLI do Azure 2.0. -
AZURE_CLIENT_ID
: use o valor appId da saída obtida de uma saída da entidade de serviço. -
AZURE_CLIENT_SECRET
: use a senha valor da saída da entidade de serviço. -
AZURE_TENANT_ID
: use o valor de locatário da saída da entidade de serviço.
Para obter mais opções de autenticação, consulte a biblioteca de clientes do Azure Identity para Java.
Nota
A Microsoft recomenda usar o fluxo de autenticação mais seguro disponível. O fluxo de autenticação descrito neste procedimento, como para bancos de dados, caches, mensagens ou serviços de IA, requer um alto grau de confiança no aplicativo e traz riscos que não estão presentes em outros fluxos. Use esse fluxo somente quando opções mais seguras, como identidades gerenciadas para conexões sem senha ou sem chave, não forem viáveis. Para operações de computador local, prefira identidades de usuário para conexões sem senha ou sem chave.
Ferramental
Criar um novo projeto maven
Nota
Este artigo usa a ferramenta de build do Maven para criar e executar o código de exemplo. Outras ferramentas de build, como o Gradle, também funcionam com o SDK do Azure para Java.
Crie um projeto Maven da linha de comando em um novo diretório em seu sistema.
mkdir java-azure-test
cd java-azure-test
mvn archetype:generate -DgroupId=com.fabrikam -DartifactId=AzureApp \
-DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false
Esta etapa cria um projeto maven básico no diretório testAzureApp. Adicione as seguintes entradas ao arquivo pom.xml do projeto para importar as bibliotecas usadas no código de exemplo neste 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>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-simple</artifactId>
<version>1.7.33</version>
</dependency>
Adicione uma entrada build
sob o elemento project
de nível superior para usar o maven-exec-plug-in para executar os exemplos.
maven-compiler-plugin é usado para configurar o código-fonte e as classes geradas para 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>
Criar uma máquina virtual do Linux
Crie um novo arquivo chamado App.java no diretório src/main/java/com/fabrikam do projeto e cole o seguinte bloco de código. Atualize as variáveis userName
e sshKey
com valores reais para o computador. O código cria uma nova VM (máquina virtual) do Linux com o nome testLinuxVM
no grupo de recursos sampleResourceGroup
em execução na região Leste do Azure dos EUA.
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();
}
}
}
Execute o exemplo na linha de comando.
mvn compile exec:java
Você verá algumas solicitações REST e respostas no console à medida que o SDK faz as chamadas subjacentes à API REST do Azure para configurar a VM e seus recursos. Após a conclusão do programa, verifique a VM em sua assinatura com a CLI do Azure 2.0.
az vm list --resource-group sampleVmResourceGroup
Depois de verificar se o código funcionou, use a CLI para excluir a VM e seus recursos.
az group delete --name sampleVmResourceGroup
Implantar um aplicativo Web de um repositório do GitHub
Substitua o método principal em App.java pelo seguinte. Atualize a variável appName
para um valor exclusivo antes de executar o código. Esse código implanta um aplicativo Web do branch master
em um repositório público do GitHub em um novo aplicativo Web do Serviço de Aplicativo do Azure em execução no tipo de preço gratuito.
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();
}
}
Execute o código como antes de usar o Maven.
mvn clean compile exec:java
Abra um navegador apontado para o aplicativo usando a CLI.
az webapp browse --resource-group sampleWebResourceGroup --name YOUR_APP_NAME
Remova o aplicativo Web e planeje sua assinatura depois de verificar a implantação.
az group delete --name sampleWebResourceGroup
Conectar-se a um banco de dados SQL do Azure
Substitua o método principal atual em App.java pelo código a seguir. Defina valores reais para as variáveis. Esse código cria um novo banco de dados SQL com uma regra de firewall que permite acesso remoto. Em seguida, o código se conecta a ele usando o driver JBDC do Banco de Dados SQL.
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());
}
}
Execute o exemplo na linha de comando.
mvn clean compile exec:java
Em seguida, limpe os recursos usando a CLI.
az group delete --name sampleSqlResourceGroup
Gravar um blob em uma nova conta de armazenamento
Substitua o método principal atual em App.java pelo código a seguir. Esse código cria um de conta de armazenamento do Azure. Em seguida, o código usa as bibliotecas de Armazenamento do Azure para Java para criar um novo arquivo de texto na nuvem.
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();
}
}
Execute o exemplo na linha de comando.
mvn clean compile exec:java
Você pode procurar o arquivo helloazure.txt em sua conta de armazenamento por meio do portal do Azure ou com do Gerenciador de Armazenamento do Azure.
Limpe a conta de armazenamento usando a CLI.
az group delete --name sampleStorageResourceGroup
Explorar mais exemplos
Para saber mais sobre como usar as bibliotecas de gerenciamento do Azure para Java para gerenciar recursos e automatizar tarefas, consulte nosso código de exemplo para máquinas virtuais, aplicativos Webe banco de dados SQL.
Referência e notas de versão
Um de referência está disponível para todos os pacotes.
Obter ajuda e fazer comentários
Poste perguntas para a comunidade no Stack Overflow. Relatar bugs e problemas abertos no SDK do Azure para Java no do repositório GitHub.