Dela via


Självstudie: Skapa en JBoss-webbapp med Azure App Service på Linux och MySQL

Den här självstudien visar hur du skapar, konfigurerar och distribuerar ett säkert JBoss-program i Azure App Service som ansluter till en MySQL-databas (med Hjälp av Azure Database for MySQL). Azure App Service är en mycket skalbar webbvärdtjänst med självkorrigering som enkelt kan distribuera appar i Windows eller Linux. När du är klar har du en JBoss-app som körs på Azure App Service på Linux.

Skärmbild av JBoss-program som lagrar data i MySQL.

I den här självstudien lär du dig att:

  • Skapa en säker arkitektur som standard för Azure App Service och Azure Database for MySQL – flexibel server.
  • Skydda databasanslutningen med en lösenordsfri anslutningssträng.
  • Verifiera JBoss-datakällor i App Service med hjälp av JBoss CLI.
  • Distribuera en JBoss-exempelapp till App Service från en GitHub-lagringsplats.
  • Åtkomst till App Service-appinställningar i programkoden.
  • Gör uppdateringar och distribuera om programkoden.
  • Strömma diagnostikloggar från App Service.
  • Hantera appen i Azure Portal.
  • Etablera samma arkitektur och distribuera med hjälp av Azure Developer CLI.
  • Optimera ditt utvecklingsarbetsflöde med GitHub Codespaces och GitHub Copilot.

Förutsättningar

  • Ett Azure-konto med en aktiv prenumeration. Om du inte har ett Azure-konto kan du skapa ett kostnadsfritt.
  • Ett GitHub-konto. du kan också få en gratis.
  • Kunskaper om Java med JBoss-utveckling.
  • (Valfritt) Prova GitHub Copilot, ett GitHub Copilot-konto. Det finns en kostnadsfri utvärderingsversion på 30 dagar.
  • Ett Azure-konto med en aktiv prenumeration. Om du inte har ett Azure-konto kan du skapa ett kostnadsfritt.
  • Azure Developer CLI installerat. Du kan följa stegen med Azure Cloud Shell eftersom Azure Developer CLI redan är installerat.
  • Kunskaper om Java med JBoss-utveckling.
  • (Valfritt) Prova GitHub Copilot, ett GitHub Copilot-konto. Det finns en kostnadsfri utvärderingsversion på 30 dagar.

Hoppa till slutet

Du kan snabbt distribuera exempelappen i den här självstudien och se den köras i Azure. Kör bara följande kommandon i Azure Cloud Shell och följ anvisningarna:

mkdir msdocs-jboss-mysql-sample-app
cd msdocs-jboss-mysql-sample-app
azd init --template msdocs-jboss-mysql-sample-app
azd up

1. Kör exemplet

Först konfigurerar du en exempeldatadriven app som utgångspunkt. Exempellagringsplatsen innehåller för enkelhetens skull en konfiguration av utvecklingscontainer. Utvecklingscontainern har allt du behöver för att utveckla ett program, inklusive databasen, cachen och alla miljövariabler som krävs av exempelprogrammet. Utvecklingscontainern kan köras i ett GitHub-kodområde, vilket innebär att du kan köra exemplet på valfri dator med en webbläsare.

Steg 1: I ett nytt webbläsarfönster:

  1. Logga in på ditt GitHub-konto.
  2. Navigera till https://github.com/Azure-Samples/msdocs-jboss-mysql-sample-app/fork.
  3. Avmarkera Kopiera endast huvudgrenen. Du vill ha alla grenar.
  4. Välj Skapa förgrening.

En skärmbild som visar hur du skapar en förgrening av GitHub-exempellagringsplatsen.

Steg 2: I GitHub-förgreningen:

  1. Välj main>starter-no-infra för startgrenen. Den här grenen innehåller bara exempelprojektet och inga Azure-relaterade filer eller konfigurationer. Välj Kod>Skapa kodområde på starter-no-infra. Det tar några minuter att konfigurera kodområdet.

En skärmbild som visar hur du skapar ett kodområde i GitHub.

Steg 3: I kodområdesterminalen:

  1. Kör mvn clean wildfly:run.
  2. När du ser meddelandet Your application running on port 8080 is available.väntar du några sekunder till för att WildFly-servern ska slutföra inläsningen av programmet. Välj sedan Öppna i Webbläsare. Du bör se exempelprogrammet på en ny webbläsarflik. Om du vill stoppa WildFly-servern skriver du Ctrl+C.

En skärmbild som visar hur du kör exempelprogrammet i GitHub-kodområdet.

Dricks

Du kan fråga GitHub Copilot om den här lagringsplatsen. Till exempel:

  • @workspace Vad gör det här projektet?
  • @workspace Vad gör mappen .devcontainer?

Har du problem? Kontrollera felsökningsavsnittet.

2. Skapa App Service och MySQL

Först skapar du Azure-resurserna. Stegen som används i den här självstudien skapar en uppsättning säkra som standardresurser som inkluderar App Service och Azure Database for MySQL. För skapandeprocessen anger du:

  • Webbappens namn . Den används som en del av DNS-namnet för din app i form av https://<app-name>-<hash>.<region>.azurewebsites.net.
  • Regionen som ska köra appen fysiskt i världen. Den används också som en del av DNS-namnet för din app.
  • Runtime-stacken för appen. Det är där du väljer vilken version av Java som ska användas för din app.
  • Värdplanen för appen. Det är prisnivån som innehåller uppsättningen funktioner och skalningskapacitet för din app.
  • Resursgruppen för appen. Med en resursgrupp kan du gruppera (i en logisk container) alla Azure-resurser som behövs för programmet.

Logga in på Azure Portal och följ dessa steg för att skapa dina Azure App Service-resurser.

Steg 1: I Azure Portal:

  1. I det övre sökfältet skriver du App Service.
  2. Välj objektet med etiketten App Service under rubriken Tjänster .
  3. Välj Skapa>webbapp. Du kan också navigera till guiden för att skapa direkt.

En skärmbild som visar hur du använder sökrutan i det övre verktygsfältet för att hitta guiden Skapa webbapp.

Steg 2: På sidan Skapa webbapp fyller du i formuläret på följande sätt.

  1. Namn: msdocs-jboss-mysql. En resursgrupp med namnet msdocs-jboss-mysql_group genereras åt dig.
  2. Körningsstack: Java 17.
  3. Java-webbserverstack: Red Hat JBoss EAP 8. Om du redan har konfigurerat din Red Hat-prenumeration med Azure väljer du Red Hat JBoss EAP 8 BYO License.
  4. Region: Alla Azure-regioner nära dig.
  5. Linux-plan: Skapa ny och använd namnet msdocs-jboss-mysql.
  6. Prisplan: Premium V3 P0V3. När du är redo kan du skala upp till en annan prisnivå.
  7. Distribuera med din app: Välj Databas. Azure Database for MySQL – Flexibel server är vald som standard. Det är en fullständigt hanterad MySQL-databas som en tjänst i Azure, kompatibel med de senaste community-utgåvorna.
  8. Välj Granska + skapa.
  9. När valideringen är klar väljer du Skapa.

En skärmbild som visar hur du konfigurerar en ny app och databas i guiden Webbapp.

Steg 3: Distributionen tar några minuter att slutföra. När distributionen är klar väljer du knappen Gå till resurs . Du tas direkt till App Service-appen, men följande resurser skapas:

  • Resursgrupp: Containern för alla skapade resurser.
  • App Service-plan: Definierar beräkningsresurserna för App Service. En Linux-plan på Basic-nivån skapas.
  • App Service: Representerar din app och körs i App Service-planen.
  • Virtuellt nätverk: Integrerat med App Service-appen och isolerar serverdelsnätverkstrafik.
  • Azure Database for MySQL – flexibel server: Endast tillgänglig från det virtuella nätverket. En databas och en användare skapas åt dig på servern.
  • Privat DNS zoner: Aktivera DNS-matchning för databasservern i det virtuella nätverket.
  • Privata slutpunkter: Åtkomstslutpunkter för databasservern i det virtuella nätverket.

En skärmbild som visar hur distributionsprocessen har slutförts.

Har du problem? Kontrollera felsökningsavsnittet.

3. Skapa en lösenordslös anslutning

I det här steget genererar du en hanterad identitetsbaserad tjänstanslutning som du senare kan använda för att skapa en datakälla på din JBoss-server. Genom att använda en hanterad identitet för att ansluta till MySQL-databasen är koden säker från oavsiktligt läckage av hemligheter.

Steg 1: Skapa en hanterad identitet.

  1. I det övre sökfältet skriver du hanterad identitet.
  2. Välj objektet med etiketten Hanterade identiteter under rubriken Tjänster .
  3. Välj Skapa.
  4. I Resursgrupp väljer du msdocs-jboss-mysql_group.
  5. I Region väljer du samma region som du använde för din webbapp.
  6. I Namn skriver du msdocs-jboss-mysql-server-identity.
  7. Välj Granska + skapa.
  8. Välj Skapa.

En skärmbild som visar hur du konfigurerar en ny hanterad identitet.

Steg 2: Aktivera Microsoft Entra-autentisering på MySQL-servern.

  1. I det övre sökfältet skriver du msdocs-jboss-mysql-server.
  2. Välj resursen Azure Database for MySQL – flexibel server med namnet msdocs-jboss-mysql-server.
  3. Välj Säkerhetsautentisering> på den vänstra menyn.
  4. I Tilldela åtkomst till väljer du endast Microsoft Entra-autentisering.
  5. I Användartilldelad hanterad identitet väljer du Välj.
  6. Välj msdocs-jboss-mysql-server-identity och välj sedan Lägg till. Det tar en stund innan identiteten tilldelas till MySQL-servern.
  7. I Administratörsnamn för Microsoft Entra väljer du Välj.
  8. Leta upp ditt Azure-konto och välj det och välj sedan Välj.
  9. Välj Spara och vänta tills åtgärden har slutförts.

En skärmbild som visar hur du konfigurerar Microsoft Entra-autentisering för Azure Database for MySQL – flexibel server.

Steg 3: Lägg till en hanterad identitetsbaserad tjänstanslutning.

  1. I det övre sökfältet skriver du msdocs-jboss-mysql.
  2. Välj App Service-resursen msdocs-jboss-mysql.
  3. På sidan App Service går du till den vänstra menyn och väljer Inställningar > Tjänstanslutning.
  4. Välj Skapa.
  5. På fliken Grundläggande :
  6. Ange Tjänsttyp till DB för flexibel MySQL-server.
  7. Ange MySQL – flexibel server till msdocs-jboss-mysql-server.
  8. Ange MySQL-databasen till msdocs-jboss-mysql-database.
  9. Ange Klienttyp till Java.
  10. Markera fliken autentisering.
  11. Välj Systemtilldelad hanterad identitet.
  12. Välj fliken Granska + skapa .
  13. När verifieringen är klar väljer du Skapa i Cloud Shell och väntar tills åtgärden har slutförts i Cloud Shell.
  14. När du ser JSON-utdata kan du stänga Cloud Shell. Stäng också dialogrutan Skapa anslutning .
  15. Välj Uppdatera för att visa den nya tjänstanslutningen.

En skärmbild som visar en helt konfigurerad tjänstanslutning som är redo att skapas med Cloud Shell.

Steg 4: Lägg till plugin-program för autentisering i anslutningssträng.

  1. På den vänstra menyn väljer du Miljövariabler.
  2. Välj AZURE_MYSQL_CONNECTIONSTRING. Fältet Värde ska innehålla ett user men inget password. Användaren är en hanterad identitet.
  3. JBoss-servern i App Service-appen har plugin-program för autentisering som autentiserar den hanterade identiteten, men du måste fortfarande lägga till den i anslutningssträng. Rulla till slutet av värdet och lägg till &defaultAuthenticationPlugin=com.azure.identity.extensions.jdbc.mysql.AzureMysqlAuthenticationPlugin&authenticationPlugins=com.azure.identity.extensions.jdbc.mysql.AzureMysqlAuthenticationPlugin.
  4. Välj Använd.
  5. Välj Använd och sedan Bekräfta.

En skärmbild som visar hur du ändrar värdet för miljövariabeln MySQL i Azure.

Har du problem? Kontrollera felsökningsavsnittet.

4. Bekräfta JNDI-datakällan

Om du lägger till en appinställning som innehåller en giltig JDBC-anslutningssträng för Oracle, SQL Server, PostgreSQL eller MySQL lägger App Service till en JNDI-datakälla (Java Naming and Directory Interface) för den på JBoss-servern. I det här steget använder du SSH-anslutningen till appcontainern för att verifiera JNDI-datakällan. I processen får du lära dig att komma åt SSH-gränssnittet och köra JBoss CLI.

Steg 1: Tillbaka på App Service-sidan:

  1. I den vänstra menyn väljer du Utvecklingsverktyg > SSH.
  2. Välj .

En skärmbild som visar hur du öppnar SSH-gränssnittet för din app från Azure Portal.

Steg 2: I SSH-terminalen:

  1. Kör $JBOSS_HOME/bin/jboss-cli.sh --connect.
  2. I JBoss CLI-anslutningen kör du ls subsystem=datasources/data-source. Du bör se den automatiskt genererade datakällan med namnet AZURE_MYSQL_CONNECTIONSTRING_DS.
  3. Hämta JNDI-namnet på datakällan med /subsystem=datasources/data-source=AZURE_MYSQL_CONNECTIONSTRING_DS:read-attribute(name=jndi-name). Nu har du ett JNDI-namn java:jboss/env/jdbc/AZURE_MYSQL_CONNECTIONSTRING_DSsom du kan använda i programkoden senare.

En skärmbild som visar JBoss CLI-kommandon som ska köras i SSH-gränssnittet och deras utdata.

Kommentar

Endast ändringar i filer i /home kan bevaras utöver omstarter av appar. Om du till exempel redigerar /opt/eap/standalone/configuration/standalone.xml eller ändrar serverkonfigurationen i JBoss CLI sparas ändringarna inte längre än en appomstart. Om du vill spara ändringarna använder du ett startskript, till exempel i Konfigurera datakällor för en Tomcat-, JBoss- eller Java SE-app i Azure App Service

Har du problem? Kontrollera felsökningsavsnittet.

5. Distribuera exempelkod

I det här steget konfigurerar du GitHub-distribution med GitHub Actions. Det är bara ett av många sätt att distribuera till App Service, men också ett bra sätt att ha kontinuerlig integrering i distributionsprocessen. Som standard startar varje git push till din GitHub-lagringsplats bygg- och distributionsåtgärden.

Precis som JBoss-konventionen, om du vill distribuera till rotkontexten för JBoss, namnge din skapade artefakt ROOT.war.

Steg 1: På sidan App Service går du till den vänstra menyn och väljer Distributionsdistributionscenter>.

En skärmbild som visar hur du öppnar distributionscentret i App Service.

Steg 2: På sidan Distributionscenter:

  1. I Källa väljer du GitHub. Som standard är GitHub Actions valt som byggprovider.
  2. Logga in på ditt GitHub-konto och följ anvisningarna för att auktorisera Azure.
  3. I Organisation väljer du ditt konto.
  4. I Lagringsplats väljer du msdocs-jboss-mysql-sample-app.
  5. I Gren väljer du starter-no-infra. Det här är samma gren som du arbetade i med exempelappen, utan några Azure-relaterade filer eller konfigurationer.
  6. Som Autentiseringstyp väljer du Användartilldelad identitet.
  7. I den översta menyn väljer du Spara. App Service checkar in en arbetsflödesfil i den valda GitHub-lagringsplatsen i .github/workflows katalogen. Som standard skapar distributionscentret en användartilldelad identitet för arbetsflödet som ska autentiseras med Hjälp av Microsoft Entra (OIDC-autentisering). Alternativa autentiseringsalternativ finns i Distribuera till App Service med GitHub Actions.

En skärmbild som visar hur du konfigurerar CI/CD med GitHub Actions.

Steg 3: Kör i GitHub-kodområdet i exempelgrenen git pull origin starter-no-infra. Detta hämtar den nyligen incheckade arbetsflödesfilen till ditt kodområde. Du kan ändra den efter dina behov på .github/workflows/starter-no-infra_msdocs-jboss-mysql.yml.

En skärmbild som visar git-hämtning i ett GitHub-kodområde.

Steg 4 (alternativ 1: med GitHub Copilot):

  1. Starta en ny chattsession genom att klicka på vyn Chatt och sedan klicka på +.
  2. Fråga: "@workspace Hur ansluter appen till databasen?" Copilot kan ge dig en förklaring om datakällan och hur den java:jboss/MySQLDS har konfigurerats.
  3. Säg: "Datakällan i JBoss i Azure använder JNDI-namnet java:jboss/env/jdbc/AZURE_MYSQL_CONNECTIONSTRING_DS." Copilot kan ge dig ett kodförslag som liknar det i alternativ 2: utan GitHub Copilot-stegen nedan och till och med be dig att göra ändringen i klassen. GitHub Copilot ger dig inte samma svar varje gång, du kan behöva ställa fler frågor för att finjustera svaret. Tips finns i Vad kan jag göra med GitHub Copilot i mitt kodområde?.

En skärmbild som visar hur du ställer en fråga i en ny GitHub Copilot-chattsession.

Steg 4 (alternativ 2: utan GitHub Copilot):

  1. Öppna src/main/resources/META-INF/persistence.xml i utforskaren. När programmet startar läses databasinställningarna in i den här filen.
  2. Ändra värdet <jta-data-source> för från java:jboss/MySQLDS till java:jboss/env/jdbc/AZURE_MYSQL_CONNECTIONSTRING_DS, vilket är den datakälla som du hittade med JBoss CLI tidigare i SSH-gränssnittet.

En skärmbild som visar ett GitHub-kodområde och filen ContextListener.java öppnas.

Steg 5:

  1. Välj källkontrolltillägget.
  2. I textrutan skriver du ett incheckningsmeddelande som Configure Azure JNDI name.
  3. Välj Checka in och bekräfta sedan med Ja.
  4. Välj Synkronisera ändringar 1 och bekräfta sedan med OK.

En skärmbild som visar de ändringar som checkas in och skickas till GitHub.

Steg 6: Tillbaka på sidan Distributionscenter i Azure Portal:

  1. Välj Loggar. En ny distributionskörning har redan startats från de incheckade ändringarna.
  2. I loggobjektet för distributionskörningen väljer du posten Skapa/distribuera loggar med den senaste tidsstämpeln .

En skärmbild som visar hur du öppnar distributionsloggar i distributionscentret.

Steg 7: Du tas till din GitHub-lagringsplats och ser att GitHub-åtgärden körs. Arbetsflödesfilen definierar två separata steg, skapa och distribuera. Vänta tills GitHub-körningen visar statusen Slutförd. Det tar ungefär 5 minuter.

En skärmbild som visar en GitHub-körning pågår.

Har du problem? Kontrollera felsökningsavsnittet.

6. Bläddra till appen

Steg 1: På App Service-sidan:

  1. Välj Översikt på den vänstra menyn.
  2. I Standarddomän väljer du appens URL.

En skärmbild som visar hur du startar en App Service från Azure Portal.

Steg 2: Lägg till några uppgifter i listan. Grattis, du kör en webbapp i Azure App Service med säker anslutning till Azure Database for MySQL.

En skärmbild av JBoss-webbappen med MySQL som körs i Azure.

Har du problem? Kontrollera felsökningsavsnittet.

7. Strömma diagnostikloggar

Azure App Service samlar in alla meddelanden som skickas till konsolen för att hjälpa dig att diagnostisera problem med ditt program. Exempelprogrammet innehåller log4j-standardloggningsinstruktioner för att demonstrera den här funktionen, enligt följande kodfragment:

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();
}

På sidan App Service går du till den vänstra menyn och väljer Loggström. Du ser loggarna för din app, inklusive plattformsloggar och loggar inifrån containern.

En skärmbild som visar hur du visar loggströmmen i Azure Portal.

Läs mer om loggning i Java-appar i serien aktivera Azure Monitor OpenTelemetry för .NET-, Node.js-, Python- och Java-program.

Har du problem? Kontrollera felsökningsavsnittet.

8. Rensa resurser

När du är klar kan du ta bort alla resurser från din Azure-prenumeration genom att ta bort resursgruppen.

Steg 1: I sökfältet överst i Azure Portal:

  1. Ange resursgruppens namn msdocs-jboss-mysql_group.
  2. Välj resursgruppen.

En skärmbild som visar hur du söker efter och navigerar till en resursgrupp i Azure Portal.

Steg 2: På resursgruppssidan väljer du Ta bort resursgrupp.

En skärmbild som visar platsen för knappen **Ta bort resursgrupp** i Azure Portal.

Steg 3:

  1. Bekräfta borttagningen genom att skriva resursgruppens namn.
  2. Välj Ta bort.
  3. Bekräfta med Ta bort igen.

En skärmbild av bekräftelsedialogrutan för att ta bort en resursgrupp i Azure Portal.

2. Skapa Azure-resurser och distribuera en exempelapp

I det här steget skapar du Azure-resurserna och distribuerar en exempelapp för att App Service på Linux. Stegen som används i den här självstudien skapar en uppsättning säkra som standardresurser som inkluderar App Service och Azure Database for MySQL.

Utvecklingscontainern har redan Azure Developer CLI (AZD).

  1. Från lagringsplatsens rot kör du azd init.

    azd init --template jboss-app-service-mysql-infra
    
  2. När du uppmanas att ge följande svar:

    Fråga Svar
    Vill du fortsätta initiera en app i ?<your-directory> Y
    Vad vill du göra med de här filerna? Behåll mina befintliga filer oförändrade
    Ange ett nytt miljönamn Skriv ett unikt namn. AZD-mallen använder det här namnet som en del av DNS-namnet på din webbapp i Azure (<app-name>-<hash>.azurewebsites.net). Alfanumeriska tecken och bindestreck tillåts.
  3. Logga in på Azure genom att azd auth login köra kommandot och följa kommandotolken:

    azd auth login
    
  4. Skapa nödvändiga Azure-resurser och distribuera appkoden med azd up kommandot . Följ uppmaningen för att välja önskad prenumeration och plats för Azure-resurserna.

    azd up
    

    Kommandot azd up tar cirka 15 minuter att slutföra (Redis-cachen tar mest tid). Den kompilerar och distribuerar även programkoden, men du ändrar koden senare så att den fungerar med App Service. När den körs innehåller kommandot meddelanden om etablerings- och distributionsprocessen, inklusive en länk till distributionen i Azure. När det är klart visar kommandot även en länk till distributionsprogrammet.

    Den här AZD-mallen innehåller filer (azure.yaml och infra-katalogen ) som genererar en säker arkitektur som standard med följande Azure-resurser:

    • Resursgrupp: Containern för alla skapade resurser.
    • App Service-plan: Definierar beräkningsresurserna för App Service. En Linux-plan på B1-nivån skapas.
    • App Service: Representerar din app och körs i App Service-planen.
    • Virtuellt nätverk: Integrerat med App Service-appen och isolerar serverdelsnätverkstrafik.
    • Azure Database for MySQL – flexibel server: Endast tillgänglig från det virtuella nätverket. En databas skapas åt dig på servern.
    • Azure Cache for Redis: Endast tillgänglig inifrån det virtuella nätverket.
    • Privata slutpunkter: Åtkomstslutpunkter för nyckelvalvet och Redis-cachen i det virtuella nätverket.
    • Privat DNS zoner: Aktivera DNS-matchning av nyckelvalvet, databasservern och Redis-cachen i det virtuella nätverket.
    • Log Analytics-arbetsyta: Fungerar som målcontainer för din app för att skicka loggarna, där du även kan köra frågor mot loggarna.
    • Nyckelvalv: Används för att behålla databaslösenordet på samma sätt när du distribuerar om med AZD.

    När kommandot har skapat resurser och distribuerat programkoden första gången fungerar inte den distribuerade exempelappen ännu eftersom du måste göra små ändringar för att den ska kunna ansluta till databasen i Azure.

Har du problem? Kontrollera felsökningsavsnittet.

3. Kontrollera anslutningssträng

Den AZD-mall som du använder genererade anslutningsvariablerna åt dig redan som appinställningar och matar ut dem till terminalen för din bekvämlighet. Appinställningar är ett sätt att hålla anslutningshemligheter borta från din kodlagringsplats.

  1. Leta reda på appinställningen AZURE_MYSQL_CONNECTIONSTRINGi AZD-utdata. Endast inställningsnamnen visas. De ser ut så här i AZD-utdata:

     App Service app has the following app settings:
             - AZURE_KEYVAULT_RESOURCEENDPOINT
             - AZURE_KEYVAULT_SCOPE
             - AZURE_MYSQL_CONNECTIONSTRING
             - AZURE_REDIS_CONNECTIONSTRING
     

    AZURE_MYSQL_CONNECTIONSTRINGinnehåller anslutningssträng till MySQL-databasen i Azure. Du måste använda den i koden senare.

  2. För att underlätta för dig visar AZD-mallen direktlänken till appens appinställningarssida. Hitta länken och öppna den på en ny webbläsarflik.

    Om du lägger till en appinställning som innehåller en giltig Oracle-, SQL Server-, PostgreSQL- eller MySQL-anslutningssträng lägger App Service till den som en JNDI-datakälla (Java Naming and Directory Interface) i JBoss-serverns context.xml-fil.

Har du problem? Kontrollera felsökningsavsnittet.

4. Bekräfta JNDI-datakällan

I det här steget använder du SSH-anslutningen till appcontainern för att verifiera JNDI-datakällan på JBoss-servern. Under processen får du lära dig att komma åt SSH-gränssnittet för JBoss-containern.

  1. I AZD-utdata letar du reda på URL:en för SSH-sessionen och navigerar till den i webbläsaren. Det ser ut så här i utdata:

     Open SSH session to App Service container at: https://<app-name>-<hash>.scm.azurewebsites.net/webssh/host
     
  2. I SSH-terminalen kör du $JBOSS_HOME/bin/jboss-cli.sh --connect.

  3. I JBoss CLI-anslutningen kör du ls subsystem=datasources/data-source. Du bör se den automatiskt genererade datakällan med namnet AZURE_MYSQL_CONNECTIONSTRING_DS.

  4. Hämta JNDI-namnet på datakällan med /subsystem=datasources/data-source=AZURE_MYSQL_CONNECTIONSTRING_DS:read-attribute(name=jndi-name). Nu har du ett JNDI-namn java:jboss/env/jdbc/AZURE_MYSQL_CONNECTIONSTRING_DSsom du kan använda i programkoden senare.

    En skärmbild som visar kommandona som ska köras i SSH-gränssnittet och deras utdata.

Kommentar

Endast ändringar i filer i /home kan bevaras utöver omstarter av appar. Om du till exempel redigerar /opt/eap/standalone/configuration/standalone.xml eller ändrar serverkonfigurationen i JBoss CLI sparas ändringarna inte längre än en appomstart. Om du vill spara ändringarna använder du ett startskript, till exempel i Konfigurera datakällor för en Tomcat-, JBoss- eller Java SE-app i Azure App Service

Har du problem? Kontrollera felsökningsavsnittet.

5. Ändra exempelkod och distribuera om

  1. Starta en ny chattsession i GitHub-kodområdet genom att klicka på vyn Chatt och sedan klicka på +.

  2. Fråga: "@workspace Hur ansluter appen till databasen?" Copilot kan ge dig en förklaring om datakällan och hur den java:jboss/MySQLDS har konfigurerats.

  3. Fråga: "@workspace jag vill ersätta datakällan som definierats i persistence.xml med en befintlig JNDI-datakälla i JBoss." Copilot kan ge dig ett kodförslag som liknar det i alternativ 2: utan GitHub Copilot-stegen nedan och till och med be dig att göra ändringen i persistence.xml-filen.

  4. Öppna src/main/resources/META-INF/persistence.xml i utforskaren och gör den föreslagna JNDI-ändringen.

    GitHub Copilot ger dig inte samma svar varje gång, du kan behöva ställa andra frågor för att finjustera dess svar. Tips finns i Vad kan jag göra med GitHub Copilot i mitt kodområde?.

  5. Kör i codespace-terminalen azd deploy.

    azd deploy
    

Dricks

Du kan också bara använda azd up always, vilket gör allt av azd package, azd provisionoch azd deploy.

Om du vill ta reda på hur War-filen paketeras kan du köra azd package --debug själv.

Har du problem? Kontrollera felsökningsavsnittet.

6. Bläddra till appen

  1. I AZD-utdata letar du reda på url:en för din app och navigerar till den i webbläsaren. URL:en ser ut så här i AZD-utdata:

     Deploying services (azd deploy)
    
       (✓) Done: Deploying service web
       - Endpoint: https://<app-name>-<hash>.azurewebsites.net/
     
  2. Lägg till några uppgifter i listan.

    En skärmbild av JBoss-webbappen med MySQL som körs i Azure som visar uppgifter.

    Grattis, du kör en webbapp i Azure App Service med säker anslutning till Azure Database for MySQL.

Har du problem? Kontrollera felsökningsavsnittet.

7. Strömma diagnostikloggar

Azure App Service kan samla in konsolloggar som hjälper dig att diagnostisera problem med ditt program. För enkelhetens skull har AZD-mallen redan aktiverat loggning till det lokala filsystemet och skickar loggarna till en Log Analytics-arbetsyta.

Exempelprogrammet innehåller log4j-standardloggningsinstruktioner för att demonstrera den här funktionen, enligt följande kodfragment:

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();
}

I AZD-utdata hittar du länken för att strömma App Service-loggar och navigera till den i webbläsaren. Länken ser ut så här i AZD-utdata:

Stream App Service logs at: https://portal.azure.com/#@/resource/subscriptions/<subscription-guid>/resourceGroups/<group-name>/providers/Microsoft.Web/sites/<app-name>/logStream

Läs mer om loggning i Java-appar i serien aktivera Azure Monitor OpenTelemetry för .NET-, Node.js-, Python- och Java-program.

Har du problem? Kontrollera felsökningsavsnittet.

8. Rensa resurser

Om du vill ta bort alla Azure-resurser i den aktuella distributionsmiljön kör azd down du och följer anvisningarna.

azd down

Felsökning

Jag ser felet "inte berättigad att använda funktionen Bring Your Own License" i guiden för att skapa.

Om du ser felet: The subscription '701ea799-fb46-4407-bb67-9cbcf289f1c7' is not entitled to use the Bring Your Own License feature when creating the applicationinnebär det att du har valt Red Hat JBoss EAP 7/8 BYO-licens i Java-webbserverstacken men inte har konfigurerat ditt Azure-konto i Red Hat Cloud Access eller inte har någon aktiv JBoss EAP-licens i Red Hat Cloud Access.

Portaldistributionsvyn för Azure Database for MySQL – flexibel server visar statusen Konflikt.

Beroende på din prenumeration och den region du väljer kan distributionsstatusen för Azure Database for MySQL – flexibel server vara Conflict, med följande meddelande i Åtgärdsinformation:

InternalServerError: An unexpected error occured while processing the request.

Det här felet orsakas troligen av en gräns för din prenumeration för den region du väljer. Prova att välja en annan region för distributionen.

Dialogrutan Skapa anslutning visar knappen Skapa på Cloud Shell, men den är inte aktiverad.

Du kan också se ett felmeddelande i dialogrutan: 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.

Automation av tjänstanslutningstjänsten behöver nätverksåtkomst till MySQL-servern. Titta i nätverksinställningarna för din MySQL-serverresurs och se till att Tillåt offentlig åtkomst till den här resursen via Internet med hjälp av en offentlig IP-adress har valts som minst. Service Connector kan ta det därifrån.

Om du inte ser den här kryssrutan kanske du har skapat distributionen med hjälp av guiden Webbapp + Databas i stället, och distributionen låser all offentlig nätverksåtkomst till MySQL-servern. Det finns inget sätt att ändra konfigurationen. Eftersom appens Linux-container kan komma åt MySQL via integreringen av det virtuella nätverket kan du installera Azure CLI i appens SSH-session och köra de medföljande Cloud Shell-kommandona där.

Den distribuerade exempelappen visar inte uppgiftslistappen.

Om du ser JBoss-välkomstsidan i stället för aktivitetslistappen läser App Service förmodligen fortfarande in den uppdaterade containern från din senaste koddistribution. Vänta några minuter och uppdatera sidan.

Det gick inte att starta min app och jag ser "Åtkomst nekad för användare... (med lösenord: NEJ) i loggarna.

Det här felet beror troligen på att du inte lade till plugin-programmet för lösenordslös autentisering i anslutningssträng (se Java-exempelkoden för Integrera Azure Database for MySQL med Service Connector). Ändra MySQL-anslutningssträng genom att följa anvisningarna i 3. Skapa en lösenordslös anslutning.

Jag ser felet "Tabellen "Uppgift" finns redan i diagnostikloggarna.

Du kan ignorera det här vilolägesfelet eftersom det anger att programkoden är ansluten till MySQL-databasen. Programmet är konfigurerat för att skapa nödvändiga tabeller när det startas (se src/main/resources/META-INF/persistence.xml). När programmet startar första gången bör det skapa tabellerna, men vid efterföljande omstarter visas det här felet eftersom tabellerna redan finns.

Vanliga frågor och svar

Hur mycket kostar den här installationen?

Prissättningen för de skapade resurserna är följande:

  • App Service-planen skapas på P0v3-nivå och kan skalas upp eller ned. Se Priser för App Service.
  • Den flexibla MySQL-servern skapas på D2ds-nivån och kan skalas upp eller ned. Se Priser för Azure Database for MySQL.
  • Azure Cache for Redis skapas på Basic-nivån med den minsta cachestorleken. Det finns en liten kostnad som är associerad med den här nivån. Du kan skala upp den till högre prestandanivåer för högre tillgänglighet, klustring och andra funktioner. Se Priser för Azure Cache for Redis.
  • Det virtuella nätverket debiteras inte om du inte konfigurerar extra funktioner, till exempel peering. Se Priser för Azure Virtual Network.
  • Den privata DNS-zonen medför en liten avgift. Se Priser för Azure DNS.

Hur gör jag för att ansluta till MySQL-servern bakom det virtuella nätverket med andra verktyg?

I den här självstudien har App Service-appen redan nätverksanslutning till MySQL-servern och kan autentisera med Microsoft Entra med hjälp av dess systemtilldelade hanterade identitet. Du kan ansluta till MySQL direkt från appcontainern genom att köra följande kommandon i SSH-sessionen (hämta värdena <server>, <user>och <database> från appinställningen AZURE_MYSQL_CONNECTIONSTRING ):

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'`

Några saker att tänka på:

  • De verktyg som du installerar i SSH-sessionen bevaras inte mellan appomstarter.
  • Om du har följt portalstegen och konfigurerat MySQL med din Microsoft Entra-användare som administratör kan du ansluta till MySQL med hjälp av Microsoft Entra-användaren.
  • Om du vill ansluta från ett skrivbordsverktyg som MySQL Workbench måste datorn finnas i det virtuella nätverket, till exempel en virtuell Azure-dator som distribueras till samma virtuella nätverk. Du måste också konfigurera autentisering separat, antingen med en hanterad identitet eller med en Microsoft Entra-användare.
  • Om du vill ansluta från en dator i ett lokalt nätverk som har en VPN-anslutning från plats till plats med det virtuella Azure-nätverket kan du inte konfigurera autentisering med en hanterad identitet, men du kan konfigurera autentisering med hjälp av en Microsoft Entra-användare.
  • Du kan också integrera Azure Cloud Shell och ansluta med Hjälp av Azure CLI eller MySQL CLI. Om du vill autentisera kan du konfigurera en Microsoft Entra-användare.

Hur gör jag för att få en giltig åtkomsttoken för MySQL-anslutningen med Hjälp av Microsoft Entra-autentisering?

För en Microsoft Entra-användare, en systemtilldelad hanterad identitet eller en användartilldelad hanterad identitet som har behörighet att komma åt MySQL-databasen kan Azure CLI hjälpa dig att generera en åtkomsttoken. Om det gäller en hanterad identitet måste identiteten konfigureras på App Service-appen eller den virtuella datorn där du kör Azure CLI.

# 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

Om du vill kan du också använda kommandot az mysql flexible-server connect Azure CLI för att ansluta till MySQL. När du uppmanas till det använder du åtkomsttoken som lösenord.

az mysql flexible-server connect -n <server-name-only> -u <user> -d <database> --interactive

Mer information finns i:

Hur fungerar utveckling av lokala appar med GitHub Actions?

Med hjälp av den automatiskt genererade arbetsflödesfilen från App Service som exempel startar var git push och en ny bygg- och distributionskörning. Från en lokal klon av GitHub-lagringsplatsen gör du önskade uppdateringar och push-överför till GitHub. Till exempel:

git add .
git commit -m "<some-message>"
git push origin starter-no-infra

Jag har inte behörighet att skapa en användartilldelad identitet

Se Konfigurera GitHub Actions-distribution från Distributionscenter.

Vad kan jag göra med GitHub Copilot i mitt kodområde?

Du kanske märker att GitHub Copilot-chattvyn redan fanns där när du skapade kodområdet. För din bekvämlighet inkluderar vi GitHub Copilot-chatttillägget i containerdefinitionen (se .devcontainer/devcontainer.json). Du behöver dock ett GitHub Copilot-konto (30 dagars kostnadsfri utvärderingsversion tillgänglig).

Några tips när du pratar med GitHub Copilot:

  • I en enda chattsession bygger frågorna och svaren på varandra och du kan justera dina frågor för att finjustera det svar du får.
  • Som standard har GitHub Copilot inte åtkomst till någon fil på lagringsplatsen. Om du vill ställa frågor om en fil öppnar du filen i redigeraren först.
  • Om du vill ge GitHub Copilot åtkomst till alla filer på lagringsplatsen när du förbereder dess svar börjar du din fråga med @workspace. Mer information finns i Use the @workspace agent.
  • I chattsessionen kan GitHub Copilot föreslå ändringar och (med @workspace) även var ändringarna ska utföras, men det är inte tillåtet att göra ändringarna åt dig. Det är upp till dig att lägga till de föreslagna ändringarna och testa dem.

Här är några andra saker du kan säga för att finjustera svaret du får:

  • Ändra den här koden så att den använder datakällan jdbc/AZURE_MYSQL_CONNECTIONSTRING_DS.
  • Vissa importer i koden använder javax men jag har en Jakarta-app.
  • Jag vill att den här koden bara ska köras om miljövariabeln AZURE_MYSQL_CONNECTIONSTRING har angetts.
  • Jag vill att den här koden endast ska köras i Azure App Service och inte lokalt.

Nästa steg

Läs mer om att köra Java-appar på App Service i utvecklarguiden.

Lär dig hur du skyddar din app med en anpassad domän och ett certifikat.