Erste Schritte mit der Cloudentwicklung mit Java in Azure
Dieser Artikel führt Sie durch das Einrichten einer Entwicklungsumgebung für die Azure-Entwicklung in Java. Anschließend erstellen Sie einige Azure-Ressourcen und stellen eine Verbindung mit ihnen her, um einige grundlegende Aufgaben auszuführen, z. B. das Hochladen einer Datei oder das Bereitstellen einer Webanwendung. Wenn Sie fertig sind, können Sie mit der Verwendung von Azure-Diensten in Ihren eigenen Java-Anwendungen beginnen.
Voraussetzungen
- Ein Azure-Konto. Wenn Sie keinen haben, eine kostenlose Testversionerhalten.
- Azure Cloud Shell oder Azure CLI 2.0.
- Java 8, das in Azure Cloud Shell enthalten ist.
- Maven 3, das in Azure Cloud Shell enthalten ist.
Einrichten der Authentifizierung
Ihre Java-Anwendung benötigt lesen und Berechtigungen in Ihrem Azure-Abonnement erstellen, um den Beispielcode in diesem Lernprogramm auszuführen. Erstellen Sie einen Dienstprinzipal, und konfigurieren Sie Ihre Anwendung so, dass sie mit ihren Anmeldeinformationen ausgeführt wird. Dienstprinzipale bieten eine Möglichkeit, ein nichtinteraktives Konto zu erstellen, das Ihrer Identität zugeordnet ist, dem Sie nur die Berechtigungen erteilen, die Ihre App ausführen muss.
Erstellen eines Dienstprinzipals mithilfe der Azure CLI 2.0-und Erfassen der Ausgabe:
az ad sp create-for-rbac \
--name AzureJavaTest \
--role Contributor \
--scopes /subscriptions/<your-subscription-ID>
Mit diesem Befehl erhalten Sie eine Antwort im folgenden Format:
{
"appId": "a487e0c1-82af-47d9-9a0b-af184eb87646d",
"displayName": "AzureJavaTest",
"name": "http://AzureJavaTest",
"password": "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa",
"tenant": "tttttttt-tttt-tttt-tttt-tttttttttttt"
}
Konfigurieren Sie als Nächstes die Umgebungsvariablen:
-
AZURE_SUBSCRIPTION_ID
: Verwenden Sie die -ID Wert ausaz account show
in der Azure CLI 2.0. -
AZURE_CLIENT_ID
: Verwenden Sie die appId Wert aus der Ausgabe aus einer Dienstprinzipalausgabe. -
AZURE_CLIENT_SECRET
: Verwenden Sie den wert Kennwort aus der Ausgabe des Dienstprinzipals. -
AZURE_TENANT_ID
: Verwenden Sie den Mandantenwert wert aus der Dienstprinzipalausgabe.
Weitere Authentifizierungsoptionen finden Sie in der Azure Identity-Clientbibliothek für Java.
Anmerkung
Microsoft empfiehlt die Verwendung des sichersten Authentifizierungsflusses, der verfügbar ist. Der in diesem Verfahren beschriebene Authentifizierungsfluss, z. B. für Datenbanken, Caches, Nachrichten oder KI-Dienste, erfordert ein sehr hohes Vertrauen in die Anwendung und trägt Risiken, die in anderen Flüssen nicht vorhanden sind. Verwenden Sie diesen Fluss nur, wenn sicherere Optionen wie verwaltete Identitäten für kennwortlose oder schlüssellose Verbindungen nicht geeignet sind. Bei Vorgängen des lokalen Computers bevorzugen Sie Benutzeridentitäten für kennwortlose oder schlüssellose Verbindungen.
Werkzeugbestückung
Erstellen eines neuen Maven-Projekts
Anmerkung
In diesem Artikel wird das Maven-Buildtool zum Erstellen und Ausführen des Beispielcodes verwendet. Andere Buildtools, z. B. Gradle, arbeiten auch mit dem Azure SDK für Java zusammen.
Erstellen Sie ein Maven-Projekt über die Befehlszeile in einem neuen Verzeichnis auf Ihrem System.
mkdir java-azure-test
cd java-azure-test
mvn archetype:generate -DgroupId=com.fabrikam -DartifactId=AzureApp \
-DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false
In diesem Schritt wird ein grundlegendes Maven-Projekt unter dem verzeichnis testAzureApp erstellt. Fügen Sie die folgenden Einträge in die pom.xml-Datei des Projekts ein, um die im Beispielcode in diesem Lernprogramm verwendeten Bibliotheken zu importieren.
<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>
Fügen Sie einen build
Eintrag unter dem element der obersten Ebene project
hinzu, um das maven-exec-plugin- zum Ausführen der Beispiele zu verwenden.
maven-compiler-plugin- wird verwendet, um den Quellcode und generierte Klassen für Java 8 zu konfigurieren.
<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>
Erstellen eines virtuellen Linux-Computers
Erstellen Sie eine neue Datei mit dem Namen App.java im src/main/java/com/fabrikam Verzeichnis, und fügen Sie den folgenden Codeblock ein. Aktualisieren Sie die variablen userName
und sshKey
mit realen Werten für Ihren Computer. Der Code erstellt einen neuen virtuellen Linux-Computer (VM) mit dem Namen testLinuxVM
in der Ressourcengruppe sampleResourceGroup
in der Region US East Azure ausgeführt wird.
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();
}
}
}
Führen Sie das Beispiel über die Befehlszeile aus.
mvn compile exec:java
Es werden einige REST-Anforderungen und -Antworten in der Konsole angezeigt, da das SDK die zugrunde liegenden Aufrufe an die Azure REST-API sendet, um den virtuellen Computer und seine Ressourcen zu konfigurieren. Überprüfen Sie nach Abschluss des Programms den virtuellen Computer in Ihrem Abonnement mit der Azure CLI 2.0.
az vm list --resource-group sampleVmResourceGroup
Nachdem Sie überprüft haben, ob der Code funktioniert hat, verwenden Sie die CLI, um den virtuellen Computer und die zugehörigen Ressourcen zu löschen.
az group delete --name sampleVmResourceGroup
Bereitstellen einer Web-App aus einem GitHub-Repository
Ersetzen Sie die Hauptmethode in App.java durch die folgende. Aktualisieren Sie die appName
Variable auf einen eindeutigen Wert, bevor Sie den Code ausführen. Dieser Code stellt eine Webanwendung aus dem master
Branch in einem öffentlichen GitHub-Repository in einem neuen Azure App Service Web App auf dem kostenlosen Preisniveau bereit.
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();
}
}
Führen Sie den Code wie zuvor maven aus.
mvn clean compile exec:java
Öffnen Sie einen Browser, der mit der CLI auf die Anwendung verweist.
az webapp browse --resource-group sampleWebResourceGroup --name YOUR_APP_NAME
Entfernen Sie die Web-App und den Plan aus Ihrem Abonnement, nachdem Sie die Bereitstellung überprüft haben.
az group delete --name sampleWebResourceGroup
Herstellen einer Verbindung mit einer Azure SQL-Datenbank
Ersetzen Sie die aktuelle Hauptmethode in App.java durch den folgenden Code. Legen Sie reale Werte für die Variablen fest. Dieser Code erstellt eine neue SQL-Datenbank mit einer Firewallregel, die den Remotezugriff zulässt. Anschließend stellt der Code mithilfe des JBDC-Treibers der SQL-Datenbank eine Verbindung mit ihr in Verbindung.
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());
}
}
Führen Sie das Beispiel über die Befehlszeile aus.
mvn clean compile exec:java
Bereinigen Sie dann die Ressourcen mithilfe der CLI.
az group delete --name sampleSqlResourceGroup
Schreiben eines BLOB in ein neues Speicherkonto
Ersetzen Sie die aktuelle Hauptmethode in App.java durch den folgenden Code. Dieser Code erstellt ein Azure Storage-Konto. Anschließend verwendet der Code die Azure Storage-Bibliotheken für Java, um eine neue Textdatei in der Cloud zu erstellen.
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();
}
}
Führen Sie das Beispiel über die Befehlszeile aus.
mvn clean compile exec:java
Sie können die helloazure.txt Datei in Ihrem Speicherkonto über das Azure-Portal oder mit Azure Storage Explorersuchen.
Bereinigen Sie das Speicherkonto mithilfe der CLI.
az group delete --name sampleStorageResourceGroup
Weitere Beispiele erkunden
Weitere Informationen zur Verwendung der Azure-Verwaltungsbibliotheken für Java zum Verwalten von Ressourcen und Zum Automatisieren von Aufgaben finden Sie in unserem Beispielcode für virtuelle Computer, Web-Appsund SQL-Datenbank.
Referenz- und Versionshinweise
Für alle Pakete steht ein Verweis zur Verfügung.
Hilfe erhalten und Feedback geben
Stellen Sie Fragen an die Community auf Stack Overflow. Melden Sie Fehler und öffnen Sie Probleme mit dem Azure SDK für Java im GitHub-Repository.