この記事では、Java での Azure 開発用の開発環境を設定する手順について説明します。 その後、いくつかの Azure リソースを作成し、それらに接続して、ファイルのアップロードや Web アプリケーションのデプロイなどの基本的なタスクを実行します。 完了すると、独自の Java アプリケーションで Azure サービスの使用を開始する準備が整います。
前提 条件
- Azure アカウント。 お持ちでない場合は、無料試用版 を入手。
- Azure Cloud Shell を するか、Azure CLI 2.0 をします。
- Java 8。これは Azure Cloud Shell に含まれています。
- Maven 3。これは Azure Cloud Shell に含まれています。
認証を設定する
このチュートリアル サンプル コードを実行するには、Java アプリケーションで を読み取り、アクセス許可を Azure サブスクリプションに作成 必要があります。 サービス プリンシパルを作成し、資格情報を使用して実行するようにアプリケーションを構成します。 サービス プリンシパルは、アプリの実行に必要な特権のみを付与する、ID に関連付けられた非対話型アカウントを作成する方法を提供します。
Azure CLI 2.0を使用してサービス プリンシパルを作成し、出力をキャプチャします。
az ad sp create-for-rbac \
--name AzureJavaTest \
--role Contributor \
--scopes /subscriptions/<your-subscription-ID>
このコマンドを実行すると、次の形式の応答が返されます。
{
"appId": "a487e0c1-82af-47d9-9a0b-af184eb87646d",
"displayName": "AzureJavaTest",
"name": "http://AzureJavaTest",
"password": "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa",
"tenant": "tttttttt-tttt-tttt-tttt-tttttttttttt"
}
次に、環境変数を構成します。
-
AZURE_SUBSCRIPTION_ID
: Azure CLI 2.0 のaz account show
の ID 値を使用します。 -
AZURE_CLIENT_ID
: サービス プリンシパルの出力から取得した出力から appId 値を使用します。 -
AZURE_CLIENT_SECRET
: サービス プリンシパルの出力から パスワード 値を使用します。 -
AZURE_TENANT_ID
: サービス プリンシパルの出力から テナント 値を使用します。
その他の認証オプションについては、Java 用の Azure Identity クライアント ライブラリを参照してください。
手記
Microsoft では、使用可能な最も安全な認証フローを使用することをお勧めします。 この手順で説明する認証フロー (データベース、キャッシュ、メッセージング、AI サービスなど) には、アプリケーションに対する非常に高い信頼が必要であり、他のフローには存在しないリスクが伴います。 このフローは、パスワードレス接続やキーレス接続のマネージド ID など、より安全なオプションが有効でない場合にのみ使用します。 ローカル コンピューターの操作では、パスワードレス接続またはキーレス接続にユーザー ID を使用します。
ツーリング
新しい Maven プロジェクトを作成する
手記
この記事では、Maven ビルド ツールを使用してサンプル コードをビルドして実行します。 Gradle などの他のビルド ツールも、Azure SDK for Java と連携します。
コマンド ラインから、システム上の新しいディレクトリに Maven プロジェクトを作成します。
mkdir java-azure-test
cd java-azure-test
mvn archetype:generate -DgroupId=com.fabrikam -DartifactId=AzureApp \
-DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false
この手順では、testAzureApp ディレクトリの下に基本的な Maven プロジェクトを作成します。 プロジェクトの pom.xml ファイルに次のエントリを追加して、このチュートリアルのサンプル コードで使用されているライブラリをインポートします。
<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>
maven-exec-plugin を使用してサンプルを実行するには、最上位の project
要素の下に build
エントリを追加します。
maven-compiler-plugin は、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>
Linux 仮想マシンを作成する
プロジェクトの src/main/java/com/fabrikam ディレクトリに App.java という名前の新しいファイルを作成し、次のコード ブロックに貼り付けます。
userName
変数と sshKey
変数をコンピューターの実際の値で更新します。 このコードでは、米国東部 Azure リージョンで実行 sampleResourceGroup
リソース グループに testLinuxVM
という名前の新しい Linux 仮想マシン (VM) を作成します。
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();
}
}
}
コマンド ラインからサンプルを実行します。
mvn compile exec:java
SDK が Azure REST API に基づく呼び出しを行って VM とそのリソースを構成するため、いくつかの REST 要求と応答がコンソールに表示されます。 プログラムが完了したら、Azure CLI 2.0 を使用してサブスクリプション内の VM を確認します。
az vm list --resource-group sampleVmResourceGroup
コードが機能したことを確認したら、CLI を使用して VM とそのリソースを削除します。
az group delete --name sampleVmResourceGroup
GitHub リポジトリから Web アプリをデプロイする
App.java の main メソッドを次のメソッドに置き換えます。 コードを実行する前に、appName
変数を一意の値に更新します。 このコードでは、パブリック GitHub リポジトリの master
ブランチから、無料価格レベルで実行されている新しい Azure App Service Web App に Web アプリケーションをデプロイします。
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 を使用する前と同様にコードを実行します。
mvn clean compile exec:java
CLI を使用して、アプリケーションを指すブラウザーを開きます。
az webapp browse --resource-group sampleWebResourceGroup --name YOUR_APP_NAME
デプロイを確認した後、サブスクリプションから Web アプリとプランを削除します。
az group delete --name sampleWebResourceGroup
Azure SQL データベースに接続する
App.java の現在の main メソッドを次のコードに置き換えます。 変数の実際の値を設定します。 このコードでは、リモート アクセスを許可するファイアウォール規則を使用して新しい SQL データベースを作成します。 その後、コードは SQL Database JBDC ドライバーを使用して接続します。
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());
}
}
コマンド ラインからサンプルを実行します。
mvn clean compile exec:java
次に、CLI を使用してリソースをクリーンアップします。
az group delete --name sampleSqlResourceGroup
新しいストレージ アカウントに BLOB を書き込む
App.java の現在の main メソッドを次のコードに置き換えます。 このコードにより、Azure ストレージ アカウントが作成されます。 次に、コードは Java 用 Azure Storage ライブラリを使用して、クラウドに新しいテキスト ファイルを作成します。
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();
}
}
コマンド ラインからサンプルを実行します。
mvn clean compile exec:java
ストレージ アカウント内の helloazure.txt ファイルは、Azure portal または Azure Storage Explorer 使用して参照できます。
CLI を使用してストレージ アカウントをクリーンアップします。
az group delete --name sampleStorageResourceGroup
その他のサンプルを確認する
Java 用 Azure 管理ライブラリを使用してリソースを管理し、タスクを自動化する方法の詳細については、仮想マシンの、Web アプリの、および SQL データベース のサンプル コードを参照してください。
リファレンスとリリース ノート
参照 は、すべてのパッケージで使用できます。
ヘルプを表示してフィードバックを送信する
Stack Overflowに関する質問をコミュニティに投稿します。 GitHub リポジトリの Azure SDK for Java に対するバグと未解決の問題を報告。