Partilhar via


Introdução ao desenvolvimento na nuvem usando Java no Azure

Este artigo orienta você na configuração de 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 executar algumas tarefas básicas, como carregar um arquivo ou implantar um aplicativo Web. Quando terminar, estará pronto para começar a utilizar os serviços do Azure nas suas próprias aplicações Java.

Pré-requisitos

Configurar a autenticação

Seu aplicativo Java precisa ler e criar permissões de 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ão interativa associada à sua identidade, à qual você concede apenas os privilégios de que seu aplicativo precisa para ser executado.

Crie uma entidade de serviço usando a CLI 2.0 do Azuree capture a saída:

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

Este comando dá-lhe 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 id valor de az account show na CLI do Azure 2.0.
  • AZURE_CLIENT_ID: Use o valor appId da saída retirada 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 locatário da saída da entidade de serviço.

Para obter mais opções de autenticação, consulte a biblioteca de cliente do Azure Identity para Java.

Observação

A Microsoft recomenda o uso do 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 grau muito alto de confiança no aplicativo e traz riscos nã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 máquina local, prefira identidades de usuário para conexões sem senha ou sem chave.

Ferramentas

Criar um novo projeto Maven

Observação

Este artigo usa a ferramenta de compilação Maven para criar e executar o código de exemplo. Outras ferramentas de compilação, como o Gradle, também funcionam com o SDK do Azure para Java.

Crie um projeto Maven a partir da linha de comando em um novo diretório no 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-plugin 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 Linux

Crie um novo arquivo chamado App.java no diretório src/main/java/com/fabrikam do projeto e cole no seguinte bloco de código. Atualize as variáveis userName e sshKey com valores reais para a sua máquina. O código cria uma nova máquina virtual (VM) Linux com o nome testLinuxVM no grupo de recursos sampleResourceGroup em execução na região Leste dos EUA Azure.

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 a partir da linha de comando.

mvn compile exec:java

Você verá algumas solicitações e respostas REST no console à medida que o SDK faz as chamadas subjacentes para a 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 a partir de um repositório GitHub

Substitua o método principal no 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 da ramificação master em um repositório GitHub público em um novo de Aplicativo Web do Serviço de Aplicativo de Aplicativo do Azure em execução na camada de preço gratuita.

    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 o plano da 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 no 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 a partir da linha de comando.

mvn clean compile exec:java

Em seguida, limpe os recursos usando a CLI.

az group delete --name sampleSqlResourceGroup

Escrever um blob em uma nova conta de armazenamento

Substitua o método principal atual no App.java pelo código a seguir. Esse código cria uma 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 a partir da linha de comando.

mvn clean compile exec:java

Pode procurar o ficheiro helloazure.txt na sua conta de armazenamento através do portal do Azure ou com Explorador de Armazenamento do Azure.

Limpe a conta de armazenamento usando a CLI.

az group delete --name sampleStorageResourceGroup

Explore 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

Uma de referência está disponível para todos os pacotes.

Obter ajuda e dar feedback

Poste perguntas para a comunidade no Stack Overflow. Reporte bugs e problemas abertos no SDK do Azure para Java no repositório GitHub.