Aan de slag met het ontwikkelen in de cloud met behulp van Java op Azure
Dit artikel begeleidt u bij het instellen van een ontwikkelomgeving voor Azure-ontwikkeling in Java. Vervolgens maakt u enkele Azure-resources en maakt u er verbinding mee om enkele basistaken uit te voeren, zoals het uploaden van een bestand of het implementeren van een webtoepassing. Wanneer u klaar bent, kunt u Azure-services gaan gebruiken in uw eigen Java-toepassingen.
Vereisten
- Een Azure-account. Als u geen account hebt, kunt u een gratis proefversie krijgen.
- Azure Cloud Shell of Azure CLI 2.0.
- Java 8, dat is opgenomen in Azure Cloud Shell.
- Maven 3, dat is opgenomen in Azure Cloud Shell.
Verificatie instellen
Uw Java-toepassing heeft lees- en maakmachtigingen nodig in uw Azure-abonnement om de voorbeeldcode in deze zelfstudie uit te voeren. Maak een service-principal en configureer uw toepassing om te worden uitgevoerd met de bijbehorende referenties. Service-principals bieden een manier om een niet-interactief account te maken dat is gekoppeld aan uw identiteit waaraan u alleen de bevoegdheden verleent die uw app moet uitvoeren.
Maak een service-principal met behulp van de Azure CLI 2.0 en leg de uitvoer vast:
az ad sp create-for-rbac \
--name AzureJavaTest \
--role Contributor \
--scopes /subscriptions/<your-subscription-ID>
Met deze opdracht krijgt u een antwoord in de volgende indeling:
{
"appId": "a487e0c1-82af-47d9-9a0b-af184eb87646d",
"displayName": "AzureJavaTest",
"name": "http://AzureJavaTest",
"password": "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa",
"tenant": "tttttttt-tttt-tttt-tttt-tttttttttttt"
}
Configureer vervolgens de omgevingsvariabelen:
AZURE_SUBSCRIPTION_ID
: Gebruik de id-waarde uitaz account show
de Azure CLI 2.0.AZURE_CLIENT_ID
: Gebruik de appId-waarde uit de uitvoer die afkomstig is van een service-principal-uitvoer.AZURE_CLIENT_SECRET
: Gebruik de wachtwoordwaarde uit de uitvoer van de service-principal.AZURE_TENANT_ID
: Gebruik de tenantwaarde uit de uitvoer van de service-principal.
Zie de Azure Identity-clientbibliotheek voor Java voor meer verificatieopties.
Hulpprogramma's
Een nieuw Maven-project maken
Notitie
In dit artikel wordt het Maven-buildhulpprogramma gebruikt om de voorbeeldcode te bouwen en uit te voeren. Andere buildhulpprogramma's, zoals Gradle, werken ook met de Azure SDK voor Java.
Maak een Maven-project vanaf de opdrachtregel in een nieuwe map op uw systeem.
mkdir java-azure-test
cd java-azure-test
mvn archetype:generate -DgroupId=com.fabrikam -DartifactId=AzureApp \
-DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false
Met deze stap maakt u een eenvoudig Maven-project onder de map testAzureApp . Voeg de volgende vermeldingen toe aan het pom.xml-bestand van het project om de bibliotheken te importeren die in de voorbeeldcode in deze zelfstudie worden gebruikt.
<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>
Voeg een build
vermelding toe onder het element op het hoogste niveau project
om de maven-exec-plugin te gebruiken om de voorbeelden uit te voeren.
maven-compiler-plugin wordt gebruikt voor het configureren van de broncode en gegenereerde klassen voor 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>
Een virtuele Linux-machine maken
Maak een nieuw bestand met de naam App.java in de map src/main/java/com/fabrikam van het project en plak het volgende codeblok. Werk de variabelen userName
en sshKey
bij met echte waarden voor uw machine. Met de code wordt een nieuwe virtuele Linux-machine (VM) gemaakt met de naam testLinuxVM
in de resourcegroep sampleResourceGroup
die wordt uitgevoerd in de Azure-regio US - oost.
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();
}
}
}
Voer het voorbeeld uit vanaf de opdrachtregel.
mvn compile exec:java
U ziet enkele REST-aanvragen en -antwoorden in de console wanneer de SDK de onderliggende aanroepen naar de Azure REST API uitvoert om de VIRTUELE machine en de bijbehorende resources te configureren. Nadat het programma is voltooid, controleert u de VM in uw abonnement met de Azure CLI 2.0.
az vm list --resource-group sampleVmResourceGroup
Nadat u hebt gecontroleerd of de code heeft gewerkt, gebruikt u de CLI om de VM en de bijbehorende resources te verwijderen.
az group delete --name sampleVmResourceGroup
Een web-app implementeren vanuit een GitHub-opslagplaats
Vervang de hoofdmethode in App.java door de volgende methode. Werk de appName
variabele bij naar een unieke waarde voordat u de code uitvoert. Met deze code wordt een webtoepassing van de vertakking master
in een openbare GitHub-opslagplaats geïmplementeerd in een nieuwe Azure App Service web-app die wordt uitgevoerd in de gratis prijscategorie.
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();
}
}
Voer de code uit zoals voordat u Maven gebruikt.
mvn clean compile exec:java
Open een browser die naar de toepassing wijst met behulp van de CLI.
az webapp browse --resource-group sampleWebResourceGroup --name YOUR_APP_NAME
Verwijder de web-app en plan uit uw abonnement nadat u de implementatie hebt geverifieerd.
az group delete --name sampleWebResourceGroup
Verbinding maken met een Azure SQL-database
Vervang de huidige hoofdmethode in App.java door de volgende code. Stel echte waarden in voor de variabelen. Met deze code maakt u een nieuwe SQL-database met een firewallregel die externe toegang toestaat. Vervolgens maakt de code er verbinding mee met behulp van het SQL Database RESOURCEDC-stuurprogramma.
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());
}
}
Voer het voorbeeld uit vanaf de opdrachtregel.
mvn clean compile exec:java
Schoon vervolgens de resources op met behulp van de CLI.
az group delete --name sampleSqlResourceGroup
Een blob naar een nieuw opslagaccount schrijven
Vervang de huidige hoofdmethode in App.java door de volgende code. Met deze code wordt een Azure-opslagaccount gemaakt. Vervolgens gebruikt de code de Azure Storage-bibliotheken voor Java om een nieuw tekstbestand in de cloud te maken.
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();
}
}
Voer het voorbeeld uit vanaf de opdrachtregel.
mvn clean compile exec:java
U kunt bladeren naar het bestand helloazure.txt in uw opslagaccount via Azure Portal of met Azure Storage Explorer.
Schoon het opslagaccount op met behulp van de CLI.
az group delete --name sampleStorageResourceGroup
Meer voorbeelden's verkennen
Zie onze voorbeeldcode voor virtuele machines, web-apps en SQL-database voor meer informatie over het gebruik van de Azure-beheerbibliotheken voor Java voor het beheren van resources en het automatiseren van taken.
Referentie en opmerkingen bij de release
Een referentie is beschikbaar voor alle pakketten.
Hulp vragen en feedback geven
Stel vragen aan de community op Stack Overflow. Meld fouten en open problemen met de Azure SDK voor Java in de GitHub-opslagplaats.