Azure での Java を使用したクラウド開発の開始Get started with cloud development using Java on Azure

このガイドでは、Java での Azure 開発用の開発環境を設定する手順について説明します。This guide walks you through setting up a development environment for Azure development in Java. Azure リソースをいくつか作成し、それらのリソースに接続して基本的なタスク (ファイルのアップロードや Web アプリケーションのデプロイなど) を実行します。You'll then create some Azure resources and connect them to to perform some basic tasks, like uploading a file or deploying a web application. 作業が完了すると、独自の Java アプリケーションで Azure サービスの使用を開始できるようになります。When you're done, you'll be ready to start using Azure services in your own Java applications.

前提条件Prerequisites

認証の設定Set up authentication

このチュートリアルのサンプル コードを実行する Java アプリケーションには、Azure サブスクリプションの読み取りと作成のアクセス許可が必要です。Your Java application needs read and create permissions in your Azure subscription to run the sample code in this tutorial. サービス プリンシパルを作成し、その資格情報で動作するようにアプリケーションを構成してください。Create a service principal and configure your application to run with its credentials. サービス プリンシパルによって、自分の ID に関連付けられた非対話型のアカウントを作成し、アプリの実行に必要な権限だけを付与することができます。Service principals provide a way to create a non-interactive account associated with your identity to which you grant only the privileges your app needs to run.

Azure CLI 2.0 を使ってサービス プリンシパルを作成し、その出力をキャプチャしてください。Create a service principal using the Azure CLI 2.0 and capture the output. password 引数には、MY_SECURE_PASSWORD ではなく、セキュリティで保護されたパスワードを指定します。Provide a secure password in the password argument instead of MY_SECURE_PASSWORD. パスワードは 8 ~ 16 文字にし、次の 4 つの条件のうち少なくとも 3 つの条件に一致する必要があります。Your password must be 8 to 16 characters and match at least 3 out of the 4 following criteria:

  • 小文字が含まれているInclude lowercase characters
  • 大文字が含まれているInclude uppercase characters
  • 数字が含まれているInclude numbers
  • 次の記号のいずれかが含まれている: @ # $ % ^ & * - _ !Include one of the following symbols: @ # $ % ^ & * - _ ! + = [ ] { } | \ : ‘ , .+ = [ ] { } | \ : ‘ , . ?? / ` ~ “ ( ) ;/ ` ~ “ ( ) ;
az ad sp create-for-rbac --name AzureJavaTest --password "MY_SECURE_PASSWORD"

次の形式で応答が返されます。Which gives you a reply in the following format:

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

次に、ご利用のシステム上のテキスト ファイルに次のコードをコピーします。Next, copy the following into a text file on your system:

# sample management library properties file
subscription=ssssssss-ssss-ssss-ssss-ssssssssssss
client=cccccccc-cccc-cccc-cccc-cccccccccccc
key=kkkkkkkkkkkkkkkk
tenant=tttttttt-tttt-tttt-tttt-tttttttttttt
managementURI=https\://management.core.windows.net/
baseURL=https\://management.azure.com/
authURL=https\://login.windows.net/
graphURL=https\://graph.windows.net/

上から 4 つの値は、次の内容に置き換えてください。Replace the top four values with the following:

  • subscription: Azure CLI 2.0 の az account show から得られる id 値を使用します。subscription: use the id value from az account show in the Azure CLI 2.0.
  • client: サービス プリンシパルの出力から得られる appId 値を使用します。client: use the appId value from the output taken from a service principal output.
  • key: サービス プリンシパルの出力から得られる password 値を使用します。key: use the password value from the service principal output.
  • tenant: サービス プリンシパルの出力から得られる tenant 値を使用します。tenant: use the tenant value from the service principal output.

このファイルは、コードで読み取ることができるシステム上の安全な場所に保存してください。Save this file in a secure location on your system where your code can read it. このファイルは今後のコードに使用できるため、この記事のアプリケーションの外部の場所に保存することをお勧めします。You may use this file for future code so it's recommended to store it somewhere external to the application in this article.

ご利用のシェルから、認証ファイルの完全なパスを保持する環境変数 AZURE_AUTH_LOCATION を設定します。Set an environment variable AZURE_AUTH_LOCATION with the full path to the authentication file in your shell.

export AZURE_AUTH_LOCATION=/Users/raisa/azureauth.properties

Windows 環境で作業している場合は、システムのプロパティに変数を追加します。If you're working in a windows environment, add the variable to your system properties. 管理者特権で PowerShell ウィンドウを開き、2 番目の変数をファイルのパスで置き換えた後、次のコマンドを入力します。Open a PowerShell window with administrator privledges and, after replacing the second variable with the path to your file, enter the following command:

setx AZURE_AUTH_LOCATION "C:\<fullpath>\azureauth.properties" /m

ツールTooling

新しい Maven プロジェクトを作成するCreate a new Maven project

注意

このガイドでは、Maven ビルド ツールを使って、サンプル コードをビルドして実行していますが、Java 用 Azure ライブラリは他のビルド ツール (Gradle など) で使用することもできます。This guide uses Maven build tool to build and run the sample code, but other build tools such as Gradle also work with the Azure libraries for Java.

コマンド ラインを使って、ご利用のシステム上の新しいディレクトリに Maven プロジェクトを作成します。Create a Maven project from the command line in a new directory on your system:

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

これにより、基本的な Maven プロジェクトが testAzureApp フォルダーに作成されます。This creates a basic Maven project under the testAzureApp folder. プロジェクトの pom.xml に次のエントリを追加して、このチュートリアルのサンプル コードで使用するライブラリをインポートします。Add the following entries into the project pom.xml to import the libraries used in the sample code in this tutorial.

<dependency>
    <groupId>com.microsoft.azure</groupId>
    <artifactId>azure</artifactId>
    <version>1.3.0</version>
</dependency>
<dependency>
    <groupId>com.microsoft.azure</groupId>
    <artifactId>azure-storage</artifactId>
    <version>5.0.0</version>
</dependency>
<dependency>
    <groupId>com.microsoft.sqlserver</groupId>
    <artifactId>mssql-jdbc</artifactId>
    <version>6.2.1.jre8</version>
</dependency>

maven-exec-plugin を使ってサンプルを実行するために、最上位の project 要素に build エントリを追加します。Add a build entry under the top-level project element to use the maven-exec-plugin to run the samples:

<build>
    <plugins>
        <plugin>
            <groupId>org.codehaus.mojo</groupId>
            <artifactId>exec-maven-plugin</artifactId>
            <configuration>
                <mainClass>com.fabrikam.AzureApp</mainClass>
            </configuration>
        </plugin>
    </plugins>
</build>

Azure Toolkit for IntelliJ をインストールするInstall the Azure Toolkit for Intellij

Web アプリや API をプログラムでデプロイする予定でも、その他の開発に現在使用していない場合は、Azure Toolkit が必要です。The Azure toolkit is necessary if you're going to be deploying web apps or APIs programmatically but is not currently used for any other kinds of development. インストール プロセスの概要を次に示します。The following is a summary of the installation process. クイック スタートについては、Azure Toolkit for IntelliJ のクイック スタートに関するページをご覧ください。For a quickstart, visit Azure Toolkit for IntelliJ quickstart.

  • [File](ファイル) メニューを選択し、 [Settings...](設定...) を選択します。Select the File menu and then select Settings....

  • [Browse repositories...](リポジトリを参照...) を選択し、"Azure" を検索して、Azure Toolkit for Intellij をインストールします。Select Browse repositories... and then search "Azure" and install the Azure toolkit for Intellij.

  • Intellij を再起動します。Restart Intellij.

Azure Toolkit for Eclipse をインストールするInstall the Azure Toolkit for Eclipse

Web アプリや API をプログラムでデプロイする予定でも、その他の開発に現在使用していない場合は、Azure Toolkit が必要です。The Azure toolkit is necessary if you're going to be deploying web apps or APIs programmatically but is not currently used for any other kinds of development. インストール プロセスの概要を次に示します。The following is a summary of the installation process. クイック スタートについては、Azure Toolkit for Eclipse のクイック スタートに関するページをご覧ください。For a quickstart, visit Azure Toolkit for Eclipse quickstart.

  • [Help](ヘルプ) メニューを選択し、 [Install New software](新しいソフトウェアのインストール) を選択します。Select the Help menu and then select Install New software.

  • [Work with:](処理:) フィールドに「http://dl.microsoft.com/eclipse」と入力し、Enter キーを押します。In the Work with: field enter http://dl.microsoft.com/eclipse and press enter.

  • 次に、 [Azure Toolkit for Java] の横のチェック ボックスをオンにし、 [Contact all update sites during install to find required software](インストール中にすべての更新サイトに接続して必要なソフトウェアを見つける) のチェック ボックスをオフにします。Then, select the checkbox next to Azure toolkit for Java and uncheck the checkbox for Contact all update sites during install to find required software. [Next](次へ) をクリックします。Then select next.

Linux 仮想マシンの作成Create a Linux virtual machine

プロジェクトの src/main/java/com/fabirkam ディレクトリに AzureApp.java という名前の新しいファイルを作成し、次のコード ブロックを貼り付けます。Create a new file named AzureApp.java in the project's src/main/java/com/fabirkam directory and paste in the following block of code. userName 変数と sshKey 変数は、ご利用のマシンの実際の値に置き換えてください。Update the userName and sshKey variables with real values for your machine. このコードによって、米国東部 Azure リージョンで実行されるリソース グループ sampleResourceGroup に、testLinuxVM という名前の新しい Linux VM が作成されます。The code creates a new Linux VM with name testLinuxVM in a resource group sampleResourceGroup running in the US East Azure region.

package com.fabrikam;

import com.microsoft.azure.management.Azure;
import com.microsoft.azure.management.compute.VirtualMachine;
import com.microsoft.azure.management.compute.KnownLinuxVirtualMachineImage;
import com.microsoft.azure.management.compute.VirtualMachineSizeTypes;
import com.microsoft.azure.management.appservice.WebApp;
import com.microsoft.azure.management.storage.StorageAccount;
import com.microsoft.azure.management.storage.SkuName;
import com.microsoft.azure.management.storage.StorageAccountKey;
import com.microsoft.azure.management.sql.SqlDatabase;
import com.microsoft.azure.management.sql.SqlServer;
import com.microsoft.azure.management.resources.fluentcore.arm.Region;
import com.microsoft.azure.management.resources.fluentcore.utils.SdkContext;

import com.microsoft.rest.LogLevel;

import com.microsoft.azure.storage.*;
import com.microsoft.azure.storage.blob.*;

import java.io.File;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;

public class AzureApp {

    public static void main(String[] args) {

        final String userName = "YOUR_VM_USERNAME";
        final String sshKey = "YOUR_PUBLIC_SSH_KEY";

        try {

            // use the properties file with the service principal information to authenticate
            // change the name of the environment variable if you used a different name in the previous step
            final File credFile = new File(System.getenv("AZURE_AUTH_LOCATION"));    
            Azure azure = Azure.configure()
                    .withLogLevel(LogLevel.BASIC)
                    .authenticate(credFile)
                    .withDefaultSubscription();
           
            // create a Ubuntu virtual machine in a new resource group 
            VirtualMachine linuxVM = azure.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();
        }
    }
}

コマンド ラインでサンプルを実行します。Run the sample from the command line:

mvn compile exec:java

コンソールには、REST の要求と応答がいくつか表示されます。これは、SDK が内部的に Azure REST API を呼び出して、仮想マシンとそのリソースを構成しているためです。You'll see some REST requests and responses in the console as the SDK makes the underlying calls to the Azure REST API to configure the virtual machine and its resources. プログラムの実行が完了したら、サブスクリプション内の仮想マシンを Azure CLI 2.0 で確認します。When the program finishes, verify the virtual machine in your subscription with the Azure CLI 2.0:

az vm list --resource-group sampleVmResourceGroup

コードが正しく動作したことを確認したら、CLI で VM とそのリソースを削除します。Once you've verified that the code worked, use the CLI to delete the VM and its resources.

az group delete --name sampleVmResourceGroup

GitHub リポジトリからの Web アプリのデプロイDeploy a web app from a GitHub repo

AzureApp.java の main メソッドを以下のメソッドに差し替えます。appName 変数には、コードを実行する前に一意の値を指定してください。Replace the main method in AzureApp.java with the one below, updating the appName variable to a unique value before running the code. このコードは、無料の価格レベルで稼働する新しい Azure App Service Web App に、パブリック GitHub リポジトリの master ブランチから Web アプリケーションをデプロイするものです。This code deploys a web application from the master branch in a public GitHub repo into a new Azure App Service Web App running in the free pricing tier.

    public static void main(String[] args) {
        try {

            final File credFile = new File(System.getenv("AZURE_AUTH_LOCATION"));
            final String appName = "YOUR_APP_NAME";

            Azure azure = Azure.configure()
                    .withLogLevel(LogLevel.BASIC)
                    .authenticate(credFile)
                    .withDefaultSubscription();

            WebApp app = azure.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 を使用して実行します。Run the code as before using Maven:

mvn clean compile exec:java

ブラウザーを開いてアプリケーションにアクセスします。CLI から次のコマンドを入力してください。Open a browser pointed to the application using the CLI:

az appservice web browse --resource-group sampleWebResourceGroup --name YOUR_APP_NAME

デプロイを検証したら、Web アプリとプランをサブスクリプションから削除します。Remove the web app and plan from your subscription once you've verified the deployment.

az group delete --name sampleWebResourceGroup

Azure SQL データベースに接続するConnect to an Azure SQL database

AzureApp.java にある現行の main メソッドを以下のコードに差し替えます。dbPassword 変数には、実際の値を設定してください。Replace the current main method in AzureApp.java with the code below, setting a real value for the dbPassword variable. このコードは、リモート アクセスを許可するファイアウォール規則で新しい SQL データベースを作成し、SQL Database JDBC ドライバーを使ってそのデータベースに接続するものです。This code creates a new SQL database with a firewall rule allowing remote access, and then connects to it using the SQL Database JBDC driver.


    public static void main(String args[])
    {
        // create the db using the management libraries
        try {
            final File credFile = new File(System.getenv("AZURE_AUTH_LOCATION"));
            Azure azure = Azure.configure()
                    .withLogLevel(LogLevel.BASIC)
                    .authenticate(credFile)
                    .withDefaultSubscription();

            final String adminUser = SdkContext.randomResourceName("db",8);
            final String sqlServerName = SdkContext.randomResourceName("sql",10);
            final String sqlDbName = SdkContext.randomResourceName("dbname",8);
            final String dbPassword = "YOUR_PASSWORD_HERE";


            SqlServer sampleSQLServer = azure.sqlServers().define(sqlServerName)
                            .withRegion(Region.US_EAST)
                            .withNewResourceGroup("sampleSqlResourceGroup")
                            .withAdministratorLogin(adminUser)
                            .withAdministratorPassword(dbPassword)
                            .withNewFirewallRule("0.0.0.0","255.255.255.255")
                            .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 a 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());
        }
    }

コマンド ラインでサンプルを実行します。Run the sample from the command line:

mvn clean compile exec:java

その後、CLI で次のコマンドを入力して、リソースをクリーンアップします。Then clean up the resources using the CLI:

az group delete --name sampleSqlResourceGroup

新しいストレージ アカウントへの BLOB の書き込みWrite a blob into a new storage account

AzureApp.java にある現行の main メソッドを以下のコードに差し替えます。Replace the current main method in AzureApp.java with the code below. このコードは、Azure ストレージ アカウントを作成し、Azure Storage Libraries for Java を使って新しいテキスト ファイルをクラウドに作成するものです。This code creates an Azure storage account and then uses the Azure Storage libraries for Java to create a new text file in the cloud.

public static void main(String[] args) {

    try {

        // use the properties file with the service principal information to authenticate
        // change the name of the environment variable if you used a different name in the previous step
        final File credFile = new File(System.getenv("AZURE_AUTH_LOCATION"));
        Azure azure = Azure.configure()
                .withLogLevel(LogLevel.BASIC)
                .authenticate(credFile)
                .withDefaultSubscription();

        // create a new storage account
        String storageAccountName = SdkContext.randomResourceName("st",8);
        StorageAccount storage = azure.storageAccounts().define(storageAccountName)
                    .withRegion(Region.US_WEST2)
                    .withNewResourceGroup("sampleStorageResourceGroup")
                    .create();

        // create a storage container to hold the file
        List<StorageAccountKey> keys = storage.getKeys();
        final String storageConnection = "DefaultEndpointsProtocol=https;"
                + "AccountName=" + storage.name()
                + ";AccountKey=" + keys.get(0).value()
                + ";EndpointSuffix=core.windows.net";

        CloudStorageAccount account = CloudStorageAccount.parse(storageConnection);
        CloudBlobClient serviceClient = account.createCloudBlobClient();

        // Container name must be lower case.
        CloudBlobContainer container = serviceClient.getContainerReference("helloazure");
        container.createIfNotExists();

        // Make the container public
        BlobContainerPermissions containerPermissions = new BlobContainerPermissions();
        containerPermissions.setPublicAccess(BlobContainerPublicAccessType.CONTAINER);
        container.uploadPermissions(containerPermissions);

        // write a blob to the container
        CloudBlockBlob blob = container.getBlockBlobReference("helloazure.txt");
        blob.uploadText("hello Azure");

    } catch (Exception e) {
        System.out.println(e.getMessage());
        e.printStackTrace();
    }
    }
}

コマンド ラインでサンプルを実行します。Run the sample from the command line:

mvn clean compile exec:java

ストレージ アカウント内の helloazure.txt ファイルは、Azure Portal または Azure ストレージ エクスプローラーから参照することができます。You can browse for the helloazure.txt file in your storage account through the Azure portal or with Azure Storage Explorer.

CLI で次のコマンドを入力して、ストレージ アカウントをクリーンアップします。Clean up the storage account using the CLI:

az group delete --name sampleStorageResourceGroup

その他のサンプルを探すExplore more samples

Azure Management Libraries for Java を使ってリソースを管理したりタスクを自動化したりする方法をさらに詳しく知るには、仮想マシンWeb アプリSQL データベースに関するサンプル コードを参照してください。To learn more about how to use the Azure management libraries for Java to manage resources and automate tasks, see our sample code for virtual machines, web apps and SQL database.

リファレンスとリリース ノートReference and release notes

すべてのパッケージには、リファレンスが提供されています。A reference is available for all packages.

質問とフィードバックGet help and give feedback

ご質問は、Stack Overflow のコミュニティに投稿してください。Post questions to the community on Stack Overflow. Java 用 Azure ライブラリに関する未解決の問題やバグは、プロジェクト GitHub にご報告ください。Report bugs and open issues against the Azure libraries for Java on the project GitHub.