Zelfstudie: Een JBoss-web-app bouwen met Azure-app Service in Linux en MySQL
Deze zelfstudie laat zien hoe u een beveiligde JBoss-toepassing bouwt, configureert en implementeert in Azure-app Service die verbinding maakt met een MySQL-database (met behulp van Azure Database for MySQL). Azure-app Service is een uiterst schaalbare webhostingservice die eenvoudig apps kan implementeren in Windows of Linux. Wanneer u klaar bent, hebt u een JBoss-app die wordt uitgevoerd op Azure-app Service op Linux.
In deze zelfstudie leert u het volgende:
- Maak een standaardarchitectuur voor Azure-app Service en Azure Database for MySQL Flexible Server.
- Beveilig databaseconnectiviteit met behulp van een wachtwoordloze verbindingsreeks.
- Controleer JBoss-gegevensbronnen in App Service met behulp van JBoss CLI.
- Implementeer een JBoss-voorbeeld-app in App Service vanuit een GitHub-opslagplaats.
- Toegang tot App Service-app-instellingen in de toepassingscode.
- Breng updates aan en implementeer de toepassingscode opnieuw.
- Stream diagnostische logboeken vanuit App Service.
- De app beheren in Azure Portal.
- Richt dezelfde architectuur in en implementeer met behulp van Azure Developer CLI.
- Optimaliseer uw ontwikkelwerkstroom met GitHub Codespaces en GitHub Copilot.
Vereisten
- Een Azure-account met een actief abonnement. Als u geen Azure-account hebt, kunt u er gratis een maken.
- Een GitHub-account. je kunt er ook gratis een krijgen.
- Kennis van Java met JBoss-ontwikkeling.
- (Optioneel) Als u GitHub Copilot wilt proberen, moet u een GitHub Copilot-account gebruiken. Er is een gratis proefversie van 30 dagen beschikbaar.
- Een Azure-account met een actief abonnement. Als u geen Azure-account hebt, kunt u er gratis een maken.
- Azure Developer CLI geïnstalleerd. U kunt de stappen volgen met De Azure Cloud Shell , omdat Azure Developer CLI al is geïnstalleerd.
- Kennis van Java met JBoss-ontwikkeling.
- (Optioneel) Als u GitHub Copilot wilt proberen, moet u een GitHub Copilot-account gebruiken. Er is een gratis proefversie van 30 dagen beschikbaar.
Naar het einde gaan
U kunt de voorbeeld-app snel implementeren in deze zelfstudie en zien hoe deze wordt uitgevoerd in Azure. Voer de volgende opdrachten uit in Azure Cloud Shell en volg de prompt:
mkdir msdocs-jboss-mysql-sample-app
cd msdocs-jboss-mysql-sample-app
azd init --template msdocs-jboss-mysql-sample-app
azd up
1. Voer het voorbeeld uit
Eerst stelt u een voorbeeld van een gegevensgestuurde app in als uitgangspunt. Voor uw gemak bevat de voorbeeldopslagplaats een dev-containerconfiguratie . De dev-container heeft alles wat u nodig hebt om een toepassing te ontwikkelen, met inbegrip van de database, cache en alle omgevingsvariabelen die nodig zijn voor de voorbeeldtoepassing. De dev-container kan worden uitgevoerd in een GitHub-coderuimte, wat betekent dat u het voorbeeld kunt uitvoeren op elke computer met een webbrowser.
Stap 1: In een nieuw browservenster:
- Meld u aan bij uw GitHub-account.
- Navigeer naar https://github.com/Azure-Samples/msdocs-jboss-mysql-sample-app/fork.
- Hef de selectie alleen het kopiëren van de hoofdbranch op. U wilt alle vertakkingen.
- Selecteer Een fork maken.
Stap 2: In de GitHub-fork:
- Selecteer de hoofdstarter-no-infra> voor de startersvertakking. Deze vertakking bevat alleen het voorbeeldproject en geen Azure-gerelateerde bestanden of configuratie. Selecteer Code>create codespace on starter-no-infra. Het duurt enkele minuten voordat de codespace is ingesteld.
Stap 3: In de codespace-terminal:
- Voer
mvn clean wildfly:run
uit. - Wanneer u de melding
Your application running on port 8080 is available.
ziet, wacht u enkele seconden langer totdat de WildFly-server klaar is met het laden van de toepassing. Selecteer Vervolgens Openen in Browser. U ziet de voorbeeldtoepassing in een nieuw browsertabblad. Als u de WildFly-server wilt stoppen, typtCtrl
+C
u .
Tip
U kunt GitHub Copilot vragen over deze opslagplaats. Voorbeeld:
- @workspace Wat doet dit project?
- @workspace Wat doet de map .devcontainer?
Ondervindt u problemen? Controleer de sectie Probleemoplossing.
2. App Service en MySQL maken
Eerst maakt u de Azure-resources. Met de stappen die in deze zelfstudie worden gebruikt, maakt u een set beveiligde standaardbronnen met App Service en Azure Database for MySQL. Voor het aanmaakproces geeft u het volgende op:
- De naam voor de web-app. Deze wordt gebruikt als onderdeel van de DNS-naam voor uw app in de vorm van
https://<app-name>-<hash>.<region>.azurewebsites.net
. - De regio om de app fysiek in de wereld uit te voeren. Deze wordt ook gebruikt als onderdeel van de DNS-naam voor uw app.
- De runtimestack voor de app. Hier selecteert u de versie van Java die u voor uw app wilt gebruiken.
- Het hostingabonnement voor de app. Dit is de prijscategorie die de set functies en schaalcapaciteit voor uw app bevat.
- De resourcegroep voor de app. Met een resourcegroep kunt u alle Azure-resources die nodig zijn voor de toepassing groeperen (in een logische container).
Meld u aan bij Azure Portal en volg deze stappen om uw Azure-app Service-resources te maken.
Stap 1: In Azure Portal:
- Typ app-service in de bovenste zoekbalk.
- Selecteer het item met het label App Service onder de kop Services .
- Selecteer Web-app maken>. U kunt ook rechtstreeks naar de wizard voor het maken navigeren.
Stap 2: Vul op de pagina Web-app maken het formulier als volgt in.
- Naam: msdocs-jboss-mysql. Er wordt een resourcegroep met de naam msdocs-jboss-mysql_group voor u gegenereerd.
- Runtimestack: Java 17.
- Java-webserverstack: Red Hat JBoss EAP 8. Als u uw Red Hat-abonnement al hebt geconfigureerd met Azure, selecteert u Red Hat JBoss EAP 8 BYO-licentie.
- Regio: Elke Azure-regio bij u in de buurt.
- Linux-plan: maak nieuwe en gebruik de naam msdocs-jboss-mysql.
- Prijsplan: Premium V3 P0V3. Wanneer u klaar bent, kunt u omhoog schalen naar een andere prijscategorie.
- Implementeren met uw app: Database selecteren. Azure Database for MySQL - Flexible Server is standaard voor u geselecteerd. Het is een volledig beheerde MySQL-database als een service in Azure, compatibel met de nieuwste community-edities.
- Selecteer Controleren + maken.
- Nadat de validatie is voltooid, selecteert u Maken.
Stap 3: Het duurt enkele minuten voordat de implementatie is voltooid. Zodra de implementatie is voltooid, selecteert u de knop Ga naar resource . U wordt rechtstreeks naar de App Service-app gebracht, maar de volgende resources worden gemaakt:
- Resourcegroep: de container voor alle gemaakte resources.
- App Service-plan: definieert de rekenresources voor App Service. Er wordt een Linux-plan in de Basic-laag gemaakt.
- App Service: Vertegenwoordigt uw app en wordt uitgevoerd in het App Service-plan.
- Virtueel netwerk: geïntegreerd met de App Service-app en isoleert back-endnetwerkverkeer.
- Azure Database for MySQL Flexibele server: alleen toegankelijk vanuit het virtuele netwerk. Er worden een database en een gebruiker voor u gemaakt op de server.
- Privé-DNS zones: DNS-omzetting van de databaseserver in het virtuele netwerk inschakelen.
- Privé-eindpunten: Access-eindpunten voor de databaseserver in het virtuele netwerk.
Ondervindt u problemen? Controleer de sectie Probleemoplossing.
3. Een verbinding zonder wachtwoord maken
In deze stap genereert u een serviceverbinding op basis van een beheerde identiteit, die u later kunt gebruiken om een gegevensbron te maken op uw JBoss-server. Door een beheerde identiteit te gebruiken om verbinding te maken met de MySQL-database, is uw code veilig tegen onbedoelde geheimenlekken.
Stap 1: Een beheerde identiteit maken.
- Typ beheerde identiteit in de bovenste zoekbalk.
- Selecteer het item met het label Beheerde identiteiten onder de kop Services .
- Selecteer Maken.
- Selecteer in resourcegroep msdocs-jboss-mysql_group.
- Selecteer in Regio dezelfde regio die u hebt gebruikt voor uw web-app.
- Typ in Naam msdocs-jboss-mysql-server-identity.
- Selecteer Controleren + maken.
- Selecteer Maken.
Stap 2: Microsoft Entra-verificatie inschakelen op de MySQL-server.
- Typ msdocs-jboss-mysql-server in de bovenste zoekbalk.
- Selecteer de Azure Database for MySQL Flexible Server-resource met de naam msdocs-jboss-mysql-server.
- Selecteer beveiligingsverificatie> in het linkermenu.
- Selecteer in Toegang toewijzen alleen Microsoft Entra-verificatie.
- Selecteer Selecteren in door de gebruiker toegewezen beheerde identiteit.
- Selecteer msdocs-jboss-mysql-server-identity en selecteer vervolgens Toevoegen. Het duurt even voordat de identiteit is toegewezen aan de MySQL-server.
- Selecteer Selecteren in Microsoft Entra Admin Name.
- Zoek uw Azure-account en selecteer het en selecteer vervolgens Selecteren.
- Selecteer Opslaan en wacht tot de bewerking is voltooid.
Stap 3: Een serviceconnector op basis van beheerde identiteiten toevoegen.
- Typ msdocs-jboss-mysql in de bovenste zoekbalk.
- Selecteer de App Service-resource msdocs-jboss-mysql.
- Selecteer instellingenserviceconnector >in het linkermenu op de pagina App Service.
- Selecteer Maken.
- Op het tabblad Basis:
- Stel het servicetype in op db for MySQL flexibele server.
- Stel de flexibele MySQL-server in op msdocs-jboss-mysql-server.
- Stel MySQL-database in op msdocs-jboss-mysql-database.
- Stel het clienttype in op Java.
- Selecteer het tabblad Verificatie.
- Selecteer Door het systeem toegewezen beheerde identiteit.
- Selecteer het tabblad Controleren en maken .
- Wanneer de validatie is voltooid, selecteert u Maken in Cloud Shell en wacht u tot de bewerking is voltooid in Cloud Shell.
- Wanneer u de uitvoer-JSON ziet, kunt u de Cloud Shell sluiten. Sluit ook het dialoogvenster Verbinding maken .
- Selecteer Vernieuwen om de nieuwe serviceconnector weer te geven.
Stap 4: Voeg verificatieinvoegtoepassingen toe aan de verbindingsreeks.
- Selecteer omgevingsvariabelen in het linkermenu.
- Selecteer AZURE_MYSQL_CONNECTIONSTRING. Het veld Waarde moet een
user
maar neepassword
bevatten. De gebruiker is een beheerde identiteit. - De JBoss-server in uw App Service-app heeft de verificatie-invoegtoepassingen die de beheerde identiteit verifiëren, maar u moet deze nog steeds toevoegen aan de verbindingsreeks. Schuif naar het einde van de waarde en voeg toe
&defaultAuthenticationPlugin=com.azure.identity.extensions.jdbc.mysql.AzureMysqlAuthenticationPlugin&authenticationPlugins=com.azure.identity.extensions.jdbc.mysql.AzureMysqlAuthenticationPlugin
. - Selecteer Toepassen.
- Selecteer Toepassen en vervolgens Bevestigen.
Ondervindt u problemen? Controleer de sectie Probleemoplossing.
4. JNDI-gegevensbron bevestigen
Als u een app-instelling toevoegt die een geldige JDBC-verbindingsreeks voor Oracle, SQL Server, PostgreSQL of MySQL bevat, voegt App Service hiervoor een JNDI-gegevensbron (Java Naming and Directory Interface) toe op de JBoss-server. In deze stap gebruikt u de SSH-verbinding met de app-container om de JNDI-gegevensbron te verifiëren. In het proces leert u hoe u toegang krijgt tot de SSH-shell en hoe u de JBoss CLI uitvoert.
Stap 1: Terug op de App Service-pagina:
- Selecteer in het linkermenu Ontwikkelhulpprogramma's > SSH.
- Selecteer Zoeken.
Stap 2: In de SSH-terminal:
- Voer
$JBOSS_HOME/bin/jboss-cli.sh --connect
uit. - Voer in de JBoss CLI-verbinding de opdracht uit
ls subsystem=datasources/data-source
. U ziet nu de automatisch gegenereerde gegevensbron met de naamAZURE_MYSQL_CONNECTIONSTRING_DS
. - Haal de JNDI-naam van de gegevensbron op met
/subsystem=datasources/data-source=AZURE_MYSQL_CONNECTIONSTRING_DS:read-attribute(name=jndi-name)
. U hebt nu een JNDI-naamjava:jboss/env/jdbc/AZURE_MYSQL_CONNECTIONSTRING_DS
, die u later in uw toepassingscode kunt gebruiken.
Notitie
Alleen wijzigingen in bestanden in /home
kunnen zich blijven voordoen na het opnieuw opstarten van de app. Als u bijvoorbeeld de serverconfiguratie in de JBoss CLI bewerkt /opt/eap/standalone/configuration/standalone.xml
of wijzigt, blijven de wijzigingen niet behouden na het opnieuw opstarten van de app. Als u uw wijzigingen wilt behouden, gebruikt u een opstartscript, zoals gedemonstreerd in Gegevensbronnen configureren voor een Tomcat-, JBoss- of Java SE-app in Azure-app Service
Ondervindt u problemen? Controleer de sectie Probleemoplossing.
5. Voorbeeldcode implementeren
In deze stap configureert u gitHub-implementatie met behulp van GitHub Actions. Het is slechts een van de vele manieren om te implementeren in App Service, maar ook een uitstekende manier om continue integratie in uw implementatieproces te hebben. Standaard wordt met elke git push
gitHub-opslagplaats de build- en implementatieactie gestart.
Net als de JBoss-conventie, als u wilt implementeren in de hoofdcontext van JBoss, noemt u uw gebouwde artefact ROOT.war.
Stap 1: Ga terug naar de pagina App Service en selecteer implementatiecentrum >in het linkermenu.
Stap 2: Op de pagina Implementatiecentrum:
- Selecteer GitHub in Bron. GitHub Actions is standaard geselecteerd als buildprovider.
- Meld u aan bij uw GitHub-account en volg de prompt om Azure te autoriseren.
- Selecteer uw account in Organisatie.
- Selecteer in Opslagplaats msdocs-jboss-mysql-sample-app.
- Selecteer in Branch starter-no-infra. Dit is dezelfde vertakking waarin u met uw voorbeeld-app hebt gewerkt, zonder azure-gerelateerde bestanden of configuraties.
- Selecteer voor verificatietype de door de gebruiker toegewezen identiteit.
- Selecteer Opslaan in het bovenste menu. App Service voert een werkstroombestand door in de gekozen GitHub-opslagplaats in de
.github/workflows
map. Standaard maakt het implementatiecentrum een door de gebruiker toegewezen identiteit voor de werkstroom voor verificatie met behulp van Microsoft Entra (OIDC-verificatie). Zie Implementeren in App Service met behulp van GitHub Actions voor alternatieve verificatieopties.
Stap 3: Terug in de GitHub-coderuimte van uw voorbeeldfork, voert u uit git pull origin starter-no-infra
.
Hiermee haalt u het zojuist vastgelegde werkstroombestand op in uw codespace. U kunt deze wijzigen op basis van uw behoeften op .github/workflows/starter-no-infra_msdocs-jboss-mysql.yml.
Stap 4 (optie 1: met GitHub Copilot):
- Start een nieuwe chatsessie door op de chatweergave te klikken en vervolgens op +.
- Vraag het volgende: '@workspace Hoe maakt de app verbinding met de database?' Copilot kan u wat uitleg geven over de
java:jboss/MySQLDS
gegevensbron en hoe deze is geconfigureerd. - Stel: 'De gegevensbron in JBoss in Azure maakt gebruik van de JNDI-naam java:jboss/env/jdbc/AZURE_MYSQL_CONNECTIONSTRING_DS.' Copilot kan u mogelijk een codesuggesties geven die vergelijkbaar is met die in optie 2: zonder onderstaande GitHub Copilot-stappen en u zelfs laten weten dat u de wijziging in de klasse moet aanbrengen. GitHub Copilot geeft u niet elke keer hetzelfde antwoord. Mogelijk moet u meer vragen stellen om het antwoord af te stemmen. Zie Wat kan ik doen met GitHub Copilot in mijn codespace voor tips.
Stap 4 (optie 2: zonder GitHub Copilot):
- Open src/main/resources/META-INF/persistence.xml in de verkenner. Wanneer de toepassing wordt gestart, worden de database-instellingen in dit bestand geladen.
- Wijzig de waarde van in
<jta-data-source>
java:jboss/MySQLDS
java:jboss/env/jdbc/AZURE_MYSQL_CONNECTIONSTRING_DS
, de gegevensbron die u eerder in de SSH-shell hebt gevonden met JBoss CLI.
Stap 5:
- Selecteer de extensie Broncodebeheer .
- Typ in het tekstvak een doorvoeringsbericht zoals
Configure Azure JNDI name
. - Selecteer Doorvoeren en bevestig met Ja.
- Selecteer Wijzigingen synchroniseren 1 en bevestig met OK.
Stap 6: Terug op de pagina Implementatiecentrum in Azure Portal:
- Selecteer Logboeken. Er is al een nieuwe implementatieuitvoering gestart op basis van uw doorgevoerde wijzigingen.
- Selecteer in het logboekitem voor de implementatieuitvoering de vermelding Build/Deploy Logs met de meest recente tijdstempel.
Stap 7: U gaat naar uw GitHub-opslagplaats en ziet dat de GitHub-actie wordt uitgevoerd. Het werkstroombestand definieert twee afzonderlijke fasen, bouwen en implementeren. Wacht totdat de GitHub-uitvoering de status Voltooid weergeeft. Het duurt ongeveer 5 minuten.
Ondervindt u problemen? Controleer de sectie Probleemoplossing.
6. Blader naar de app
Stap 1: Op de App Service-pagina:
- Selecteer Overzicht in het linkermenu.
- Selecteer in het standaarddomein de URL van uw app.
Stap 2: Voeg een paar taken toe aan de lijst. Gefeliciteerd, u voert een web-app uit in Azure-app Service, met beveiligde connectiviteit met Azure Database for MySQL.
Ondervindt u problemen? Controleer de sectie Probleemoplossing.
7. Diagnostische logboeken streamen
Azure-app Service legt alle berichtenuitvoer vast in de console om u te helpen bij het vaststellen van problemen met uw toepassing. De voorbeeldtoepassing bevat standaard log4j-logboekregistratieinstructies om deze mogelijkheid te demonstreren, zoals wordt weergegeven in het volgende codefragment:
private static final Logger logger = Logger.getLogger(MethodHandles.lookup().lookupClass().getName());
@PersistenceContext
private EntityManager entityManager;
public List<Task> getAllTasks() {
logger.log(Level.INFO, "Finding all tasks. ");
return this.entityManager.createNamedQuery("findAllTasks", Task.class).getResultList();
}
Selecteer In het menu links op de App Service-pagina de optie Logboekstream. U ziet de logboeken voor uw app, inclusief platformlogboeken en logboeken vanuit de container.
Meer informatie over logboekregistratie in Java-apps in de reeks over Azure Monitor OpenTelemetry inschakelen voor .NET-, Node.js-, Python- en Java-toepassingen.
Ondervindt u problemen? Controleer de sectie Probleemoplossing.
8. Resources opschonen
Wanneer u klaar bent, kunt u alle resources uit uw Azure-abonnement verwijderen door de resourcegroep te verwijderen.
Stap 1: In de zoekbalk boven aan Azure Portal:
- Voer de naam van de resourcegroep msdocs-jboss-mysql_group in.
- Selecteer de resourcegroep.
Stap 2: Selecteer op de pagina Resourcegroep verwijderen.
Stap 3:
- Bevestig uw verwijdering door de naam van de resourcegroep te typen.
- Selecteer Verwijderen.
- Bevestig opnieuw met Verwijderen .
2. Azure-resources maken en een voorbeeld-app implementeren
In deze stap maakt u de Azure-resources en implementeert u een voorbeeld-app in App Service op Linux. Met de stappen die in deze zelfstudie worden gebruikt, maakt u een set beveiligde standaardbronnen met App Service en Azure Database for MySQL.
De dev-container heeft al de Azure Developer CLI (AZD).
Voer vanuit de hoofdmap van de opslagplaats de opdracht uit
azd init
.azd init --template jboss-app-service-mysql-infra
Geef de volgende antwoorden wanneer u hierom wordt gevraagd:
Vraag Antwoord Wilt u doorgaan met het initialiseren van een app in ' <your-directory>
'?Y Wat wilt u doen met deze bestanden? Mijn bestaande bestanden ongewijzigd houden Voer een nieuwe omgevingsnaam in Typ een unieke naam. De AZD-sjabloon gebruikt deze naam als onderdeel van de DNS-naam van uw web-app in Azure ( <app-name>-<hash>.azurewebsites.net
). Alfanumerieke tekens en afbreekstreepjes zijn toegestaan.Meld u aan bij Azure door de
azd auth login
opdracht uit te voeren en de prompt te volgen:azd auth login
Maak de benodigde Azure-resources en implementeer de app-code met de
azd up
opdracht. Volg de prompt om het gewenste abonnement en de gewenste locatie voor de Azure-resources te selecteren.azd up
Het duurt ongeveer 15 minuten voordat de
azd up
opdracht is voltooid (de Redis-cache duurt het de meeste tijd). Uw toepassingscode wordt ook gecompileerd en geïmplementeerd, maar u wijzigt de code later om met App Service te werken. Terwijl deze wordt uitgevoerd, bevat de opdracht berichten over het inrichtings- en implementatieproces, inclusief een koppeling naar de implementatie in Azure. Wanneer deze is voltooid, wordt met de opdracht ook een koppeling naar de implementatietoepassing weergegeven.Deze AZD-sjabloon bevat bestanden (azure.yaml en de inframap ) die een standaardarchitectuur met de volgende Azure-resources genereren:
- Resourcegroep: de container voor alle gemaakte resources.
- App Service-plan: definieert de rekenresources voor App Service. Er wordt een Linux-plan in de B1-laag gemaakt.
- App Service: Vertegenwoordigt uw app en wordt uitgevoerd in het App Service-plan.
- Virtueel netwerk: geïntegreerd met de App Service-app en isoleert back-endnetwerkverkeer.
- Azure Database for MySQL Flexibele server: alleen toegankelijk vanuit het virtuele netwerk. Er wordt een database voor u gemaakt op de server.
- Azure Cache voor Redis: alleen toegankelijk vanuit het virtuele netwerk.
- Privé-eindpunten: Toegang tot eindpunten voor de sleutelkluis en de Redis-cache in het virtuele netwerk.
- Privé-DNS zones: DNS-omzetting van de sleutelkluis, de databaseserver en de Redis-cache in het virtuele netwerk inschakelen.
- Log Analytics-werkruimte: fungeert als de doelcontainer voor uw app voor het verzenden van de logboeken, waar u ook query's kunt uitvoeren op de logboeken.
- Sleutelkluis: wordt gebruikt om uw databasewachtwoord hetzelfde te houden wanneer u opnieuw implementeert met AZD.
Zodra de opdracht klaar is met het maken van resources en het implementeren van de toepassingscode de eerste keer, werkt de geïmplementeerde voorbeeld-app nog niet omdat u kleine wijzigingen moet aanbrengen om deze verbinding te maken met de database in Azure.
Ondervindt u problemen? Controleer de sectie Probleemoplossing.
3. Controleer verbindingsreeks s
De AZD-sjabloon die u gebruikt, heeft de connectiviteitsvariabelen voor u al gegenereerd als app-instellingen en voert deze voor uw gemak uit naar de terminal. App-instellingen zijn een manier om verbindingsgeheimen uit uw codeopslagplaats te houden.
Zoek in de AZD-uitvoer de app-instelling
AZURE_MYSQL_CONNECTIONSTRING
. Alleen de naam van de instelling wordt weergegeven. Ze zien er als volgt uit in de AZD-uitvoer:App Service app has the following app settings: - AZURE_KEYVAULT_RESOURCEENDPOINT - AZURE_KEYVAULT_SCOPE - AZURE_MYSQL_CONNECTIONSTRING - AZURE_REDIS_CONNECTIONSTRING
AZURE_MYSQL_CONNECTIONSTRING
bevat de verbindingsreeks naar de MySQL-database in Azure. U moet deze later in uw code gebruiken.Voor uw gemak toont de AZD-sjabloon u de directe koppeling naar de app-instellingenpagina van de app. Zoek de koppeling en open deze in een nieuw browsertabblad.
Als u een app-instelling toevoegt die een geldige Oracle-, SQL Server-, PostgreSQL- of MySQL-verbindingsreeks bevat, voegt App Service deze toe als een JNDI-gegevensbron (Java Naming and Directory Interface) in het context.xml-bestand van de JBoss-server.
Ondervindt u problemen? Controleer de sectie Probleemoplossing.
4. JNDI-gegevensbron bevestigen
In deze stap gebruikt u de SSH-verbinding met de app-container om de JNDI-gegevensbron op de JBoss-server te verifiëren. In het proces leert u hoe u toegang krijgt tot de SSH-shell voor de JBoss-container.
Zoek in de AZD-uitvoer de URL voor de SSH-sessie en navigeer ernaar in de browser. Dit ziet er als volgt uit in de uitvoer:
Open SSH session to App Service container at: https://<app-name>-<hash>.scm.azurewebsites.net/webssh/host
Voer in de SSH-terminal de opdracht uit
$JBOSS_HOME/bin/jboss-cli.sh --connect
.Voer in de JBoss CLI-verbinding de opdracht uit
ls subsystem=datasources/data-source
. U ziet nu de automatisch gegenereerde gegevensbron met de naamAZURE_MYSQL_CONNECTIONSTRING_DS
.Haal de JNDI-naam van de gegevensbron op met
/subsystem=datasources/data-source=AZURE_MYSQL_CONNECTIONSTRING_DS:read-attribute(name=jndi-name)
. U hebt nu een JNDI-naamjava:jboss/env/jdbc/AZURE_MYSQL_CONNECTIONSTRING_DS
, die u later in uw toepassingscode kunt gebruiken.
Notitie
Alleen wijzigingen in bestanden in /home
kunnen zich blijven voordoen na het opnieuw opstarten van de app. Als u bijvoorbeeld de serverconfiguratie in de JBoss CLI bewerkt /opt/eap/standalone/configuration/standalone.xml
of wijzigt, blijven de wijzigingen niet behouden na het opnieuw opstarten van de app. Als u uw wijzigingen wilt behouden, gebruikt u een opstartscript, zoals gedemonstreerd in Gegevensbronnen configureren voor een Tomcat-, JBoss- of Java SE-app in Azure-app Service
Ondervindt u problemen? Controleer de sectie Probleemoplossing.
5. Voorbeeldcode wijzigen en opnieuw implementeren
Start in de GitHub-coderuimte een nieuwe chatsessie door te klikken op de chatweergave en vervolgens op +.
Vraag het volgende: '@workspace Hoe maakt de app verbinding met de database?' Copilot kan u wat uitleg geven over de
java:jboss/MySQLDS
gegevensbron en hoe deze is geconfigureerd.Vraag het volgende: '@workspace ik de gegevensbron die is gedefinieerd in persistence.xml wilt vervangen door een bestaande JNDI-gegevensbron in JBoss.' Copilot geeft u mogelijk een codesuggesties die vergelijkbaar zijn met de code in optie 2: zonder onderstaande GitHub Copilot-stappen en zelfs dat u de wijziging in het persistence.xml-bestand moet aanbrengen.
Open src/main/resources/META-INF/persistence.xml in de verkenner en breng de voorgestelde JNDI-wijziging aan.
GitHub Copilot geeft u niet elke keer hetzelfde antwoord. Mogelijk moet u andere vragen stellen om het antwoord te verfijnen. Zie Wat kan ik doen met GitHub Copilot in mijn codespace voor tips.
Voer in de codespace-terminal de opdracht uit
azd deploy
.azd deploy
Tip
U kunt ook altijd gebruiken azd up
, wat alle azd package
, azd provision
en azd deploy
.
Als u wilt zien hoe het War-bestand is verpakt, kunt u zelfstandig worden uitgevoerd azd package --debug
.
Ondervindt u problemen? Controleer de sectie Probleemoplossing.
6. Blader naar de app
Zoek in de AZD-uitvoer de URL van uw app en navigeer ernaar in de browser. De URL ziet er als volgt uit in de AZD-uitvoer:
Deploying services (azd deploy) (✓) Done: Deploying service web - Endpoint: https://<app-name>-<hash>.azurewebsites.net/
Voeg een paar taken toe aan de lijst.
Gefeliciteerd, u voert een web-app uit in Azure-app Service, met beveiligde connectiviteit met Azure Database for MySQL.
Ondervindt u problemen? Controleer de sectie Probleemoplossing.
7. Diagnostische logboeken streamen
Azure-app Service kan consolelogboeken vastleggen om u te helpen bij het vaststellen van problemen met uw toepassing. Voor het gemak is logboekregistratie van de AZD-sjabloon al ingeschakeld voor het lokale bestandssysteem en worden de logboeken verzonden naar een Log Analytics-werkruimte.
De voorbeeldtoepassing bevat standaard log4j-logboekregistratieinstructies om deze mogelijkheid te demonstreren, zoals wordt weergegeven in het volgende codefragment:
private static final Logger logger = Logger.getLogger(MethodHandles.lookup().lookupClass().getName());
@PersistenceContext
private EntityManager entityManager;
public List<Task> getAllTasks() {
logger.log(Level.INFO, "Finding all tasks. ");
return this.entityManager.createNamedQuery("findAllTasks", Task.class).getResultList();
}
Zoek in de AZD-uitvoer de koppeling om App Service-logboeken te streamen en navigeer ernaar in de browser. De koppeling ziet er als volgt uit in de AZD-uitvoer:
Stream App Service logs at: https://portal.azure.com/#@/resource/subscriptions/<subscription-guid>/resourceGroups/<group-name>/providers/Microsoft.Web/sites/<app-name>/logStream
Meer informatie over logboekregistratie in Java-apps in de reeks over Azure Monitor OpenTelemetry inschakelen voor .NET-, Node.js-, Python- en Java-toepassingen.
Ondervindt u problemen? Controleer de sectie Probleemoplossing.
8. Resources opschonen
Als u alle Azure-resources in de huidige implementatieomgeving wilt verwijderen, voert u de aanwijzingen uit azd down
en volgt u de aanwijzingen.
azd down
Probleemoplossing
- Ik zie de fout 'geen recht op het gebruik van de functie Bring Your Own License' in de wizard maken.
- In de portalimplementatieweergave voor Azure Database for MySQL Flexible Server wordt de status Conflict weergegeven.
- Het dialoogvenster Verbinding maken toont de knop Maken in Cloud Shell, maar is niet ingeschakeld.
- Mijn app kan niet worden gestart en ik zie 'Toegang geweigerd voor gebruiker... (met behulp van wachtwoord: NEE)' in de logboeken.
- In de geïmplementeerde voorbeeld-app wordt de takenlijst-app niet weergegeven.
- Ik zie de fout 'Taak' bestaat al in de diagnostische logboeken.
Ik zie de fout 'geen recht op het gebruik van de functie Bring Your Own License' in de wizard maken.
Als u de fout ziet: The subscription '701ea799-fb46-4407-bb67-9cbcf289f1c7' is not entitled to use the Bring Your Own License feature when creating the application
, betekent dit dat u Red Hat JBoss EAP 7/8 BYO-licentie in Java-webserverstack hebt geselecteerd, maar uw Azure-account niet hebt ingesteld in Red Hat Cloud Access of geen actieve JBoss EAP-licentie hebt in Red Hat Cloud Access.
In de portalimplementatieweergave voor Azure Database for MySQL Flexible Server wordt de status Conflict weergegeven.
Afhankelijk van uw abonnement en de regio die u selecteert, ziet u mogelijk de implementatiestatus voor Azure Database for MySQL Flexible Server, Conflict
met het volgende bericht in bewerkingsgegevens:
InternalServerError: An unexpected error occured while processing the request.
Deze fout wordt waarschijnlijk veroorzaakt door een limiet voor uw abonnement voor de regio die u selecteert. Kies een andere regio voor uw implementatie.
Het dialoogvenster Verbinding maken toont de knop Maken in Cloud Shell, maar is niet ingeschakeld.
Mogelijk ziet u ook een foutbericht in het dialoogvenster: The database server is in Virtual Network and Cloud Shell can't connect to it. Please copy the commands and execute on an environment which can connect to the database server in Virtual Network.
De automatisering van de serviceconnector heeft netwerktoegang tot de MySQL-server nodig. Kijk in de netwerkinstellingen van uw MySQL-serverresource en zorg ervoor dat openbare toegang tot deze resource via internet is toegestaan met een openbaar IP-adres minimaal is geselecteerd. ServiceConnector kan deze van daaruit halen.
Als u dit selectievakje niet ziet, hebt u mogelijk de implementatie gemaakt met behulp van de wizard Web-app en database. De implementatie vergrendelt alle openbare netwerktoegang tot de MySQL-server. U kunt de configuratie niet wijzigen. Omdat de Linux-container van de app toegang heeft tot MySQL via de integratie van het virtuele netwerk, kunt u Azure CLI installeren in de SSH-sessie van de app en de opgegeven Cloud Shell-opdrachten daar uitvoeren.
In de geïmplementeerde voorbeeld-app wordt de takenlijst-app niet weergegeven.
Als u de JBoss-welkomstpagina ziet in plaats van de takenlijst-app, wordt de bijgewerkte container waarschijnlijk nog steeds geladen vanuit uw meest recente code-implementatie. Wacht enkele minuten en vernieuw de pagina.
Mijn app kan niet worden gestart en ik zie 'Toegang geweigerd voor gebruiker... (met behulp van wachtwoord: NEE)' in de logboeken.
Deze fout is waarschijnlijk omdat u de invoegtoepassing voor verificatie zonder wachtwoord niet hebt toegevoegd aan de verbindingsreeks (zie de Java-voorbeeldcode voor het integreren van Azure Database for MySQL met Service Connector). Wijzig de MySQL-verbindingsreeks door de instructies in 3 te volgen. Maak een verbinding zonder wachtwoord.
Ik zie de fout 'Taak' bestaat al in de diagnostische logboeken.
U kunt deze Sluimerstandfout negeren omdat hiermee wordt aangegeven dat de toepassingscode is verbonden met de MySQL-database. De toepassing is geconfigureerd om de benodigde tabellen te maken wanneer deze wordt gestart (zie src/main/resources/META-INF/persistence.xml). Wanneer de toepassing de eerste keer wordt gestart, worden de tabellen gemaakt, maar bij volgende keer opnieuw opstarten ziet u deze fout omdat de tabellen al bestaan.
Veelgestelde vragen
- Hoeveel kost dit instellen?
- Hoe kan ik verbinding maken met de MySQL-server achter het virtuele netwerk met andere hulpprogramma's?
- Hoe kan ik een geldig toegangstoken voor de MySQL-verbinding ophalen met behulp van Microsoft Entra-verificatie?
- Hoe werkt het ontwikkelen van lokale apps met GitHub Actions?
- Ik heb geen machtigingen om een door de gebruiker toegewezen identiteit te maken
- Wat kan ik doen met GitHub Copilot in mijn codespace?
Hoeveel kost dit instellen?
De prijzen voor de gemaakte resources zijn als volgt:
- Het App Service-plan wordt gemaakt in de P0v3-laag en kan omhoog of omlaag worden geschaald. Zie Prijzen voor App Service.
- De flexibele MySQL-server wordt gemaakt in de D2ds-laag en kan omhoog of omlaag worden geschaald. Zie prijzen voor Azure Database for MySQL.
- De Azure Cache voor Redis wordt gemaakt in de Basic-laag met de minimale cachegrootte. Er zijn kleine kosten verbonden aan deze laag. U kunt deze omhoog schalen naar hogere prestatielagen voor hogere beschikbaarheid, clustering en andere functies. Zie Azure Cache voor Redis prijzen.
- Voor het virtuele netwerk worden geen kosten in rekening gebracht, tenzij u extra functionaliteit configureert, zoals peering. Zie prijzen voor Azure Virtual Network.
- Voor de privé-DNS-zone worden kleine kosten in rekening gebracht. Zie prijzen voor Azure DNS.
Hoe kan ik verbinding maken met de MySQL-server achter het virtuele netwerk met andere hulpprogramma's?
In deze zelfstudie heeft de App Service-app al een netwerkverbinding met de MySQL-server en kan deze worden geverifieerd met Microsoft Entra met behulp van de door het systeem toegewezen beheerde identiteit. U kunt rechtstreeks vanuit de app-container verbinding maken met MySQL door de volgende opdrachten uit te voeren in de SSH-sessie (haal uw <server>
, <user>
en <database>
waarden op uit de AZURE_MYSQL_CONNECTIONSTRING
app-instelling):
apt-get update
apt-get install curl less mysql-client jq -y
mysql -h <server> --user <user> --database <database> --enable-cleartext-plugin --password=`curl "${IDENTITY_ENDPOINT}?resource=https://ossrdbms-aad.database.windows.net&api-version=2019-08-01" -H "X-IDENTITY-HEADER: $IDENTITY_HEADER" -s | jq -r '.access_token'`
Enkele overwegingen:
- De hulpprogramma's die u in de SSH-sessie installeert, blijven niet behouden tijdens het opnieuw opstarten van de app.
- Als u de portalstappen hebt gevolgd en MySQL hebt geconfigureerd met behulp van uw Microsoft Entra-gebruiker als beheerder, kunt u verbinding maken met MySQL met behulp van de Microsoft Entra-gebruiker.
- Als u verbinding wilt maken vanuit een bureaubladprogramma zoals MySQL Workbench, moet uw machine zich in het virtuele netwerk bevinden, zoals een Azure-VM die in hetzelfde virtuele netwerk is geïmplementeerd. U moet verificatie ook afzonderlijk configureren met een beheerde identiteit of met een Microsoft Entra-gebruiker.
- Als u verbinding wilt maken vanaf een computer in een on-premises netwerk met een site-naar-site-VPN-verbinding met het virtuele Azure-netwerk, kunt u verificatie niet configureren met een beheerde identiteit, maar u kunt verificatie configureren met behulp van een Microsoft Entra-gebruiker.
- U kunt Azure Cloud Shell ook integreren en verbinding maken met behulp van Azure CLI of de MySQL CLI. Voor verificatie kunt u een Microsoft Entra-gebruiker configureren.
Hoe kan ik een geldig toegangstoken voor de MySQL-verbinding ophalen met behulp van Microsoft Entra-verificatie?
Voor een Microsoft Entra-gebruiker, een door het systeem toegewezen beheerde identiteit of een door de gebruiker toegewezen beheerde identiteit die is geautoriseerd voor toegang tot de MySQL-database, kan Azure CLI u helpen bij het genereren van een toegangstoken. In het geval van een beheerde identiteit moet de identiteit worden geconfigureerd in de App Service-app of VM waarop u Azure CLI uitvoert.
# Sign in as a Microsoft Entra user
az login
# Sign in as the system-assigned managed identity
az login --identity
# Sign in as a user-assigned managed identity
az login --identity --username <client-id-of-user-assigned-identity>
# Get an access token
az account get-access-token --resource-type oss-rdbms
Als u wilt, kunt u ook de Azure CLI-opdracht az mysql flexible-server connect gebruiken om verbinding te maken met MySQL. Wanneer u hierom wordt gevraagd, gebruikt u het toegangstoken als het wachtwoord.
az mysql flexible-server connect -n <server-name-only> -u <user> -d <database> --interactive
Zie voor meer informatie:
- Beheerde identiteiten gebruiken voor App Service en Azure Functions
- Verifiëren bij Azure met behulp van Azure CLI
- Verbinding maken met Azure Database for MySQL Flexible Server met behulp van Microsoft Entra ID
Hoe werkt het ontwikkelen van lokale apps met GitHub Actions?
Met behulp van het automatisch gegenereerde werkstroombestand van App Service als voorbeeld wordt een git push
nieuwe build- en implementatieuitvoering gestart. Vanuit een lokale kloon van de GitHub-opslagplaats maakt u de gewenste updates en pusht u naar GitHub. Voorbeeld:
git add .
git commit -m "<some-message>"
git push origin starter-no-infra
Ik heb geen machtigingen om een door de gebruiker toegewezen identiteit te maken
Zie Implementatie van GitHub Actions instellen vanuit het Implementatiecentrum.
Wat kan ik doen met GitHub Copilot in mijn codespace?
U ziet mogelijk dat de GitHub Copilot-chatweergave al voor u was toen u de coderuimte maakte. Voor uw gemak nemen we de GitHub Copilot-chatextensie op in de containerdefinitie (zie .devcontainer/devcontainer.json). U hebt echter een GitHub Copilot-account nodig (gratis proefversie van 30 dagen beschikbaar).
Enkele tips voor u wanneer u met GitHub Copilot praat:
- In één chatsessie bouwen de vragen en antwoorden op elkaar voort en kunt u uw vragen aanpassen om het antwoord dat u krijgt af te stemmen.
- GitHub Copilot heeft standaard geen toegang tot een bestand in uw opslagplaats. Als u vragen wilt stellen over een bestand, opent u het bestand eerst in de editor.
- Als u GitHub Copilot toegang wilt geven tot alle bestanden in de opslagplaats bij het voorbereiden van de antwoorden, begint u met
@workspace
uw vraag. Zie Use the @workspace agent voor meer informatie. - In de chatsessie kan GitHub Copilot wijzigingen voorstellen en (met
@workspace
) zelfs waar de wijzigingen moeten worden aangebracht, maar het is niet toegestaan om de wijzigingen voor u aan te brengen. Het is aan u om de voorgestelde wijzigingen toe te voegen en te testen.
Hier volgen enkele andere dingen die u kunt zeggen om het antwoord dat u krijgt af te stemmen:
- Wijzig deze code om de jdbc/AZURE_MYSQL_CONNECTIONSTRING_DS van de gegevensbron te gebruiken.
- Sommige importbewerkingen in uw code gebruiken javax, maar ik heb een Jakarta-app.
- Ik wil dat deze code alleen wordt uitgevoerd als de omgevingsvariabele AZURE_MYSQL_CONNECTIONSTRING is ingesteld.
- Ik wil dat deze code alleen wordt uitgevoerd in Azure-app Service en niet lokaal.
Volgende stappen
- Azure for Java Developers (Azure voor Java-ontwikkelaars)
Meer informatie over het uitvoeren van Java-apps in App Service in de ontwikkelaarshandleiding.
Meer informatie over het beveiligen van uw app met een aangepast domein en certificaat.