Aracılığıyla paylaş


Azure'da Java kullanarak bulut geliştirmeyi kullanmaya başlama

Bu makalede, Java'da Azure geliştirmesi için bir geliştirme ortamı ayarlama adımları gösterilir. Ardından bazı Azure kaynakları oluşturacak ve dosya yükleme veya web uygulaması dağıtma gibi bazı temel görevleri gerçekleştirmek için bu kaynaklara bağlanacaksınız. İşiniz bittiğinde, Azure hizmetlerini kendi Java uygulamalarınızda kullanmaya başlamaya hazır olursunuz.

Önkoşullar

  • Bir Azure hesabı. Aboneliğiniz yoksa ücretsiz deneme sürümüne sahip olursunuz.
  • Azure Cloud Shell veya Azure CLI 2.0 .
  • Azure Cloud Shell'de bulunan Java 8 .
  • Azure Cloud Shell'de bulunan Maven 3 .

Kimlik doğrulamayı ayarlama

Bu öğreticide örnek kodu çalıştırmak için Java uygulamanızın okuması ve Azure aboneliğinizde izinleri oluşturması gerekir. Bir hizmet sorumlusu oluşturun ve uygulamanızı kimlik bilgileriyle çalışacak şekilde yapılandırın. Hizmet sorumluları, yalnızca uygulamanızın çalışması için gereken ayrıcalıkları sağladığınız kimliğinizle ilişkilendirilmiş, etkileşimsiz bir hesap oluşturmanın bir yolunu sağlar.

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

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

Bu komut size aşağıdaki 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ırın:

  • AZURE_SUBSCRIPTION_ID: Azure CLI 2.0'daki az account showkimliği değerini kullanın.
  • AZURE_CLIENT_ID: Hizmet sorumlusu çıkışından alınan çıktıdan appId değerini kullanın.
  • AZURE_CLIENT_SECRET: Hizmet sorumlusu çıktısından parola değerini kullanın.
  • AZURE_TENANT_ID: Hizmet sorumlusu çıktısından kiracı değerini kullanın.

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

Not

Microsoft, kullanılabilir en güvenli kimlik doğrulama akışının kullanılmasını önerir. Veritabanları, önbellekler, mesajlaşma veya yapay zeka hizmetleri gibi bu yordamda açıklanan kimlik doğrulama akışı, uygulamaya çok yüksek düzeyde güven gerektirir ve diğer akışlarda mevcut olmayan riskler taşır. Bu akışı yalnızca parolasız veya anahtarsız bağlantılar için yönetilen kimlikler gibi daha güvenli seçenekler uygun olmadığında kullanın. Yerel makine işlemleri için parolasız veya anahtarsız bağlantılar için kullanıcı kimliklerini tercih edin.

Takım

Yeni maven projesi oluşturma

Not

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

Sisteminizdeki yeni bir dizinde komut satırından 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çeri aktarmak için projenin pom.xml dosyasına aşağıdaki girdileri 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>
<dependency>
  <groupId>org.slf4j</groupId>
  <artifactId>slf4j-simple</artifactId>
  <version>1.7.33</version>
</dependency>

Örnekleri çalıştırmak için maven-exec-plugin kullanmak için üst düzey project öğesinin altına bir build girdisi ekleyin. maven-compiler-plugin, Java 8 için kaynak kodu ve oluşturulan sınıfları yapılandırmak için kullanılır.

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

Linux sanal makinesi oluşturma

Projenin src/main/java/com/fabrika m dizininde App.java adlı yeni bir dosya oluşturun ve aşağıdaki kod bloğuna yapıştırın. userName ve sshKey değişkenlerini makineniz için gerçek değerlerle güncelleştirin. Kod, ABD Doğu Azure bölgesinde çalışan sampleResourceGroup kaynak grubunda testLinuxVM adlı yeni bir Linux sanal makinesi (VM) 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.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();
        }
    }
}

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

mvn compile exec:java

SDK, VM'yi ve kaynaklarını yapılandırmak için Azure REST API'sine yapılan temel çağrıları yaptığından konsolda bazı REST istekleri ve yanıtları görürsünüz. Program tamamlandıktan sonra Azure CLI 2.0 ile aboneliğinizdeki VM'yi doğrulayın.

az vm list --resource-group sampleVmResourceGroup

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

az group delete --name sampleVmResourceGroup

GitHub deposundan web uygulaması dağıtma

App.java içindeki main yöntemini aşağıdaki yöntemle değiştirin. Kodu çalıştırmadan önce appName değişkenini benzersiz bir değere güncelleştirin. Bu kod, genel GitHub deposundaki master dalından bir web uygulamasını ücretsiz fiyatlandırma katmanında çalışan yeni bir Azure App Service Web App dağıtır.

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

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ğinizden kaldırın.

az group delete --name sampleWebResourceGroup

Azure SQL veritabanına bağlanma

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

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

Örneği komut satırından ç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

App.java'daki geçerli ana yöntemi aşağıdaki kodla değiştirin. Bu kod, birAzure depolama hesabı oluşturur. Ardından kod, bulutta yeni bir metin dosyası oluşturmak için Java için Azure Depolama kitaplıklarını kullanır.

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

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

mvn clean compile exec:java

Depolama hesabınızdaki helloazure.txt dosyasına Azure portalı üzerinden veya Azure Depolama Gezginiile göz atabilirsiniz.

CLI kullanarak depolama hesabını temizleyin.

az group delete --name sampleStorageResourceGroup

Daha fazla örneği keşfedin

Java için Azure yönetim kitaplıklarını kullanarak kaynakları yönetme ve görevleri otomatikleştirme hakkında daha fazla bilgi edinmek için bkz. sanal makineler için örnek kodumuz, web uygulamaları ve SQL veritabanı.

Başvuru ve sürüm notları

Tüm paketler için başvuru kullanılabilir.

Yardım alın ve geri bildirimde bulunmak

Stack Overflow'da topluluğa sorular gönderin. GitHub deposuJava için Azure SDK ile ilgili hataları ve açık sorunları bildirin.