Azure'da Java'yı kullanarak bulutta uygulama geliştirmeye başlama

Bu makalede Java'da Azure geliştirmesi için bir geliştirme ortamı ayarlamaya yardımcı olur. Ardından bazı Azure kaynakları oluşturacağız ve dosya yükleme veya web uygulaması dağıtma gibi bazı temel görevleri gerçekleştirmek için bu kaynaklara bağlanabilirsiniz. Bitirdikten sonra Azure hizmetlerini kendi Java uygulamalarınıza kullanmaya başlayabilirsiniz.

Önkoşullar

Kimlik doğrulamasını ayarlama

Java uygulamanızın bu öğreticideki kod örneğini çalıştırabilmesi için Azure aboneliğinizde okuma ve oluşturma izinlerine sahip olması gerekir. Bir hizmet sorumlusu oluşturun ve kimlik bilgileriyle çalıştıracak şekilde uygulamalarınızı yapılandırabilirsiniz. Hizmet sorumluları, kimliğinizle ilişkili, yalnızca uygulamanın çalışması için gereken ayrıcalıkları vermek için bir yorum olmayan hesap oluşturmanın bir yolunu sağlar.

Azure CLI 2.0kullanarak bir hizmet sorumlusu oluşturun ve çıkışı yakala:

az ad sp create-for-rbac --name AzureJavaTest --role Contributor

Size şu biçimde bir yanıt verir:

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

Ardından ortam değişkenlerini yapılandırabilirsiniz:

  • AZURE_SUBSCRIPTION_ID: Azure AZURE_SUBSCRIPTION_ID CLI az account show 2.0'daki kimlik değerini kullanın.
  • AZURE_CLIENT_ID: Hizmet sorumlusu çıkışından alınan AZURE_CLIENT_ID değerini kullanın.
  • AZURE_CLIENT_SECRET: Hizmet AZURE_CLIENT_SECRET parola değerini kullanın.
  • AZURE_TENANT_ID: Hizmet AZURE_TENANT_ID kiracı değerini kullanın.

Daha fazla kimlik doğrulama seçeneği için bkz. Java için Azure Identity istemci kitaplığı.

Araçlar

Yeni bir Maven projesi oluşturma

Not

Bu makalede örnek kodu derlemek ve çalıştırmak için Maven derleme aracı lanmıştır. Gradle gibi diğer derleme araçları da Java için Azure SDK ile çalışır.

Sisteminiz üzerinde yeni bir dizinde komut satırıyla bir Maven projesi oluşturun.

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

Bu adım testAzureApp dizini altında temel bir Maven projesi oluşturur. Bu öğreticideki örnek kodda kullanılan kitaplıkları içeripom.xml için aşağıdaki girdileri projeninpom.xmldosyasına ekleyin.

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

Örnekleri çalıştırmak build için projectbuild öğesini kullanmak üzere üst düzey öğesinin altına bir giriş ekleyin.

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

Azure Toolkit for Intellij'i yükleme

Web uygulamalarını veya API'leri program aracılığıyla dağıtmayı planlıyorsanız Azure araç seti gereklidir. Azure Web Apps ile hızlı başlangıç için bkz. Azure Toolkit for IntelliJ.. Ayrıca Java SDK'sı ile tüm Azure geliştirmeleri için eklenmiş kapsamlı bir SDK başvuru kitabına da sahip. Aşağıdaki adımlarda yükleme işlemi özetlenmiştir.

  1. Dosya menüsünü ve ardından Dosya'Ayarlar.
  2. Depolara göz at'ıseçin, ardından Azure'da arama ve Azure toolkit for Intellij'i yükleyin.
  3. Intellij'i yeniden başlatın.
  4. Araçlardan başvuru kitabını açma - Azure - Azure SDK Başvuru > Kitabı

IntelliJ'de Azure SDK Başvuru Kitabı

Azure Toolkit for Eclipse'i yükleme

Web uygulamalarını veya API'leri program aracılığıyla dağıtmayı planlıyorsanız Azure araç seti gereklidir. Şu anda başka bir geliştirme türü için kullanılmamektedir. Aşağıdaki adımlarda yükleme işlemi özetlenmiştir. Hızlı başlangıç için bkz. Azure Toolkit for Eclipse.

  1. Yardım menüsünü ve ardından Yeni yazılım yükle'yi seçin.
  2. Birlikte çalış kutusuna yazın ve Enter tarak seçin.
  3. Java için Azure araç seti'nin yanındaki onay kutusunu seçin. Gerekli yazılımı bulmak için yükleme sırasında tüm güncelleştirme sitelerine başvur onay kutusunu temizleyin. Sonra İleri’yi seçin.

Linux sanal makinesi oluşturma

Projenin src/main/java/com/fabrikam dizininde AzureApp.java adlı yeni bir dosya oluşturun ve aşağıdaki kod bloğuna yapıştırın. userName ve sshKey değişkenlerinin yerine makinenizin gerçek değerlerini yazın. Kod, Azure bölgesinde çalışan kaynak grubunda adı olan yeni bir Linux sanal testLinuxVMsampleResourceGroup ABD Doğu oluşturur.

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

Örneği komut satırdan çalıştırın.

mvn compile exec:java

SDK VM'yi ve kaynaklarını yapılandırmak için Azure REST API çağrıları yaparken konsolda bazı REST isteklerini ve yanıtlarını bulabilirsiniz. Program tamam olduktan sonra Azure CLI 2.0 ile aboneliğinizin vm'sini doğrulayın.

az vm list --resource-group sampleVmResourceGroup

Kodun çalıştığını doğruladıktan sonra CLI'yi kullanarak VM'yi ve kaynaklarını silin.

az group delete --name sampleVmResourceGroup

GitHub deposundan web uygulaması dağıtma

içinde main yöntemini AzureApp.java aşağıdakiyle değiştirin. Kodu appName çalıştırmadan önce değişkeni benzersiz bir değere güncelleştirin. Bu kod genel GitHub deposundaki master dalından ücretsiz fiyatlandırma katmanında çalışan yeni bir master bir web uygulaması dağıtır.

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

Maven'ı kullanmadan önce kodu olduğu gibi çalıştırın.

mvn clean compile exec:java

CLI kullanarak uygulamaya işaret eden bir tarayıcı açın.

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

Dağıtımı doğruladıktan sonra web uygulamasını ve planı aboneliğinden kaldırın.

az group delete --name sampleWebResourceGroup

Azure SQL veritabanına bağlanma

içinde geçerli main yöntemini AzureApp.java aşağıdaki kodla değiştirin. Değişkenler için gerçek değerler ayarlayın. Bu kod, uzaktan erişime SQL güvenlik duvarı kuralıyla yeni bir veritabanı oluşturur. Ardından kod, JBDC sürücüsünü kullanarak SQL Veritabanı bağlanır.

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

Örneği komut satırdan çalıştırın.

mvn clean compile exec:java

Ardından CLI kullanarak kaynakları temizleyin.

az group delete --name sampleSqlResourceGroup

Yeni depolama hesabına blob yazma

içinde geçerli main yöntemini AzureApp.java aşağıdaki kodla değiştirin. Bu kod bir Azure depolama hesabı oluşturur. Ardından kod, bulutta yeni Depolama oluşturmak için Java için Azure Depolama kitaplıklarını kullanır.

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

Örneği komut satırdan çalıştırın.

mvn clean compile exec:java

Depolama hesabınızla veya helloazure.txt kullanarak Azure portal dosyasına göz Azure Depolama Gezgini.

CLI kullanarak depolama hesabını temizleyin.

az group delete --name sampleStorageResourceGroup

Diğer örnekleri keşfedin

Kaynakları yönetmek ve görevleri otomatikleştirmek için Java için Azure yönetim kitaplıklarını kullanma hakkında daha fazla bilgi edinmek için sanal makineler,webuygulamaları ve veritabanı için örnek SQL bakın.

Başvuru ve sürüm notları

Tüm paketler için bir başvuru mevcuttur.

Yardım alın ve geri bildirimde bulunun

Stack Overflow ile topluluğa soru sorabilirsiniz. GitHub deposunda Java için Azure SDK'sı ile ilgili hataları GitHub.