Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Questa esercitazione illustra come compilare, configurare e distribuire un'applicazione JBoss sicura in app Azure Servizio che si connette a un database MySQL (usando Database di Azure per MySQL). Il servizio app di Azure è un servizio di hosting web altamente scalabile e auto-aggiornante che consente di distribuire facilmente app su "Windows" o "Linux". Al termine, si avrà un'app JBoss in esecuzione nel servizio app Azure in Linux.
Nota
JBoss EAP nel servizio app supporta ora la fatturazione BYOL (Bring Your Own License), che consente ai clienti con sottoscrizioni Red Hat esistenti di applicare tali licenze direttamente alle distribuzioni JBoss EAP nel servizio app di Azure. Ulteriori informazioni.
In questa esercitazione apprenderai a:
- Creare un'architettura sicura per impostazione predefinita per Azure App Service e Azure Database for MySQL Flexible Server.
- Proteggere la connettività del database usando un stringa di connessione senza password.
- Verificare le origini dei dati di JBoss utilizzando l'interfaccia della riga di comando di JBoss nel servizio app.
- Distribuire un'app di esempio JBoss nel servizio app da un repository GitHub.
- Accedi alle impostazioni dell'app di App Service nel codice dell'applicazione.
- Apportare aggiornamenti e ridistribuire il codice dell'applicazione.
- Eseguire lo streaming dei log di diagnostica dal servizio app.
- Gestire l'app nel portale di Azure.
- Effettuare il provisioning della stessa architettura ed effettuare l'implementazione usando Azure Developer CLI.
- Ottimizzare il flusso di lavoro di sviluppo con GitHub Codespaces e GitHub Copilot.
Prerequisiti
- Un account Azure con una sottoscrizione attiva. Se non si ha un account Azure, è possibile crearne uno gratuitamente.
- Un account GitHub. è anche possibile ottenerne uno gratuitamente.
- Conoscenza di Java con lo sviluppo JBoss.
- (Facoltativo) Per provare GitHub Copilot, un account GitHub Copilot. È disponibile una versione di valutazione gratuita di 30 giorni.
- Un account Azure con una sottoscrizione attiva. Se non si ha un account Azure, è possibile crearne uno gratuitamente.
- Azure Developer CLI installata. È possibile seguire la procedura con Azure Cloud Shell perché è già installata Azure Developer CLI.
- Conoscenza di Java con lo sviluppo JBoss.
- (Facoltativo) Per provare GitHub Copilot, un account GitHub Copilot. È disponibile una versione di valutazione gratuita di 30 giorni.
Passare alla fine
È possibile distribuire rapidamente l'app di esempio in questa esercitazione e visualizzarla in esecuzione in Azure. Eseguire i comandi seguenti in Azure Cloud Shell e seguire il prompt:
mkdir msdocs-jboss-mysql-sample-app
cd msdocs-jboss-mysql-sample-app
azd init --template msdocs-jboss-mysql-sample-app
azd up
1. Eseguire l'esempio
Prima di tutto, configurare un'app guidata dai dati di esempio come punto di partenza. Per praticità, il repository di esempio include una configurazione del contenitore di sviluppo. Il contenitore di sviluppo include tutti gli elementi necessari per sviluppare un'applicazione, tra cui il database, la cache e tutte le variabili di ambiente necessarie per l'applicazione di esempio. Il contenitore di sviluppo può essere eseguito in un codespace GitHub, il che significa che è possibile eseguire l'esempio in qualsiasi computer con un Web browser.
Passaggio 1: in una nuova finestra del browser:
- Accedi al tuo account GitHub.
- Accedere a https://github.com/Azure-Samples/msdocs-jboss-mysql-sample-app/fork.
- Deselezionare Copia solo il ramo principale. Vuoi tutti i rami.
- Selezionare Crea fork.
Passaggio 2: Nel fork di GitHub:
- Selezionare main>starter-no-infra per il ramo starter. Questo ramo contiene solo il progetto di esempio e nessun file o configurazione correlati ad Azure. Seleziona Codice>Crea uno spazio di codice su starter-no-infra. La configurazione del codespace richiede alcuni minuti.
Passaggio 3: Nel terminale codespace:
- Eseguire
mvn clean wildfly:run. - Quando viene visualizzata la notifica
Your application running on port 8080 is available., attendere alcuni secondi più a lungo per il completamento del caricamento dell'applicazione da parte del server WildFly. Selezionare quindi Apri nel browser. L'applicazione di esempio dovrebbe essere visualizzata in una nuova scheda del browser. Per arrestare il server WildFly, digitareCtrl+C.
Suggerimento
È possibile chiedere a GitHub Copilotinformazioni su questo repository. Ad esempio:
- @workspace Cosa fa questo progetto?
- @workspace Cosa fa la cartella .devcontainer?
Problemi? Controllare la sezione Risoluzione dei problemi.
2. Creare il servizio app e MySQL
Prima di tutto, crea le risorse di Azure. I passaggi usati in questa esercitazione creano un set di risorse sicure per impostazione predefinita che includono servizio app e Database di Azure per MySQL. Per il processo di creazione, si specifica:
- Nome dell'app Web. Viene usato come parte del nome DNS per l'app.
- Area in cui eseguire l'app fisicamente nel mondo. Viene usato anche come parte del nome DNS per l'app.
- Stack di runtime per l'app. È qui che si seleziona la versione Java da usare per l'app.
- Piano di hosting per l'app. Si tratta del piano tariffario che include il set di funzionalità e la capacità di ridimensionamento per l'app.
- Gruppo di risorse per l'app. Un gruppo di risorse consente di raggruppare (in un contenitore logico) tutte le risorse di Azure necessarie per l'applicazione.
Per creare risorse del Servizio app di Azure, accedere al portale di Azure e seguire questa procedura.
Passaggio 1: nel portale di Azure:
- Nella barra di ricerca superiore digitare app service.
- Selezionare l'elemento etichettato servizio app sotto l'intestazione Servizi.
- Selezionare Crea>App Web. È anche possibile passare direttamente alla creazione guidata.
Passaggio 2: nella pagina Crea app Web compilare il modulo come indicato di seguito.
- Nome: msdocs-jboss-mysql. Verrà generato automaticamente un gruppo di risorse denominato msdocs-jboss-mysql_group .
- Stack di runtime: Java 17.
- Stack di server Web Java: Red Hat JBoss EAP 8.
- Sistema operativo: Linux.
- Regione: qualsiasi regione di Azure nelle vicinanze.
- Piano Linux: creare un nuovo e usare il nome msdocs-jboss-mysql.
- Piano tariffario: Premium V3 P0V3. Quando si è pronti, è possibile passare a un piano tariffario diverso.
Passaggio 3:
- Selezionare la scheda Database .
- Selezionare Crea un database.
- In Motore selezionare MySQL - Server flessibile.
Passaggio 4:
- Selezionare la scheda Distribuzione .
- Abilitare la distribuzione continua.
- In Organizzazione selezionare l'alias GitHub.
- In Repository selezionare msdocs-jboss-mysql-sample-app.
- In Ramo selezionare starter-no-infra.
- Assicurarsi che l'autenticazione di base sia disabilitata.
- Selezionare Rivedi e crea.
- Al termine della convalida selezionare Crea.
Passaggio 5: Il completamento della distribuzione richiede alcuni minuti. Al termine della distribuzione, selezionare il pulsante Vai alla risorsa. Si viene direttamente indirizzati all'app del servizio app, ma vengono create le risorse seguenti:
- Gruppo di risorse: contenitore per tutte le risorse create.
- Piano di servizio app: definisce le risorse di calcolo per il servizio app. Viene creato un piano Linux nel livello Basic.
- Servizio app: rappresenta l'app ed è in esecuzione nel piano di servizio app.
- Rete virtuale: integrata con l'app di Servizio App e isola il traffico di rete back-end.
- Azure Database per MySQL Server Flessibile: È accessibile solo dalla rete virtuale. Vengono automaticamente creati un database e un utente nel server.
- Zone DNS private: abilitare la risoluzione DNS del server di database nella rete virtuale.
- Endpoint privati: accedere agli endpoint per il server di database e la cache Redis nella rete virtuale.
Problemi? Controllare la sezione Risoluzione dei problemi.
3. Creare una connessione senza password
In questo passaggio viene generata una connessione al servizio basata su identità gestita, che in seguito è possibile usare per creare un'origine dati nel server JBoss. Usando un'identità gestita per connettersi al database MySQL, il codice è sicuro da perdite accidentali di segreti.
Passaggio 1: Creare un'identità gestita.
- Nella barra di ricerca superiore digitare identità gestita.
- Selezionare l'elemento con etichetta Identità gestite sotto l'intestazione Servizi.
- Selezionare Crea.
- In Gruppo di risorse selezionare msdocs-jboss-mysql_group.
- In Area selezionare la stessa area usata per l'app Web.
- In Nome digitare msdocs-jboss-mysql-server-identity.
- Selezionare Rivedi e crea.
- Selezionare Crea.
Passaggio 2: Abilitare l'autenticazione di Microsoft Entra nel server MySQL.
- Nella barra di ricerca superiore digitare msdocs-jboss-mysql-server.
- Selezionare la risorsa server flessibile Database di Azure per MySQL denominata msdocs-jboss-mysql-server.
- Nel menu a sinistra selezionare Autenticazione di sicurezza>.
- In Assegna accesso a selezionare Solo autenticazione di Microsoft Entra.
- In Identità gestita assegnata dall'utente selezionare Seleziona.
- Selezionare msdocs-jboss-mysql-server-identity e quindi selezionare Aggiungi. L'assegnazione dell'identità al server MySQL richiede qualche istante.
- In Nome amministratore di Microsoft Entra scegliere Seleziona.
- Trovare l'account Azure e selezionarlo, quindi selezionare Seleziona.
- Selezionare Salva e attendere il completamento dell'operazione.
Passaggio 3: Aggiungere un connettore di servizi gestito basato su identità.
- Nella barra di ricerca superiore digitare msdocs-jboss-mysql.
- Selezionare la risorsa App Service denominata msdocs-jboss-mysql.
- Nel menu a sinistra della pagina Servizio app selezionare Impostazioni > Connettore di servizi.
- Selezionare Crea.
- Nella scheda Informazioni di base:
- Impostare Tipo di Servizio su DB per server flessibile MySQL.
- Impostare Server flessibile MySQL su msdocs-jboss-mysql-server.
- Impostare il database MySQL su msdocs-jboss-mysql-database.
- Impostare Tipo di client su Java.
- Seleziona la scheda Autenticazione.
- Selezionare Identità gestita assegnata dal sistema.
- Selezionare la scheda Verifica e crea.
- Al termine della convalida, selezionare Crea in Cloud Shell e attendere il completamento dell'operazione in Cloud Shell.
- Quando viene visualizzato il codice JSON di output, è possibile chiudere Cloud Shell. Chiudere anche la finestra di dialogo Crea connessione .
- Selezionare Aggiorna per visualizzare il nuovo connettore di servizi.
Passaggio 4: Aggiungere i plug-in di autenticazione alla stringa di connessione.
- Nel menu a sinistra selezionare Variabili di ambiente.
- Selezionare AZURE_MYSQL_CONNECTIONSTRING. Il campo Valore deve contenere un
userma nessunpassword. L'utente è un'identità gestita. - Il server JBoss nell'app del servizio app include i plug-in di autenticazione che autenticano l'identità gestita, anche se è comunque necessario aggiungerla alla stringa di connessione. Scorrere fino alla fine del valore e aggiungere
&defaultAuthenticationPlugin=com.azure.identity.extensions.jdbc.mysql.AzureMysqlAuthenticationPlugin&authenticationPlugins=com.azure.identity.extensions.jdbc.mysql.AzureMysqlAuthenticationPlugin. - Selezionare Applica.
- Selezionare Applica, quindi Conferma.
Problemi? Controllare la sezione Risoluzione dei problemi.
4. Confermare l'origine dati JNDI
Se si aggiunge un'impostazione dell'app contenente una stringa di connessione JDBC valida per Oracle, SQL Server, PostgreSQL o MySQL, App Service aggiunge un'origine dati JNDI (Java Naming and Directory Interface) nel server JBoss. In questo passaggio, si userà la connessione SSH al contenitore dell'app per verificare l'origine dati JNDI. Nel processo si apprenderà come accedere alla shell SSH ed eseguire l'interfaccia della riga di comando di JBoss.
Passaggio 1: tornare alla pagina Servizio app:
- Nel menu a sinistra selezionare Strumenti > di sviluppo SSH.
- Selezionare Vai.
Passaggio 2: nel terminale SSH:
- Eseguire
$JBOSS_HOME/bin/jboss-cli.sh --connect. - Nella connessione CLI di JBoss eseguire
ls subsystem=datasources/data-source. Verrà visualizzata l'origine dati generata automaticamente denominataAZURE_MYSQL_CONNECTIONSTRING_DS. - Ottenere il nome JNDI dell'origine dati con
/subsystem=datasources/data-source=AZURE_MYSQL_CONNECTIONSTRING_DS:read-attribute(name=jndi-name). È ora disponibile un nomejava:jboss/env/jdbc/AZURE_MYSQL_CONNECTIONSTRING_DSJNDI, che è possibile usare nel codice dell'applicazione in un secondo momento.
Nota
Solo le modifiche apportate ai file in /home possono essere mantenute dopo i riavvii dell'app. Ad esempio, se si modifica /opt/eap/standalone/configuration/standalone.xml o si cambia la configurazione del server nella riga di comando di JBoss, le modifiche non verranno mantenute oltre un riavvio dell'applicazione. Per rendere persistenti le modifiche, usare uno script di avvio, ad esempio illustrato in Configurare le origini dati per un'app Tomcat, JBoss o Java SE nel servizio app Azure
Problemi? Controllare la sezione Risoluzione dei problemi.
5. Distribuire il codice di esempio
In questo passaggio viene configurata la distribuzione di GitHub usando GitHub Actions. È solo uno dei molti modi per eseguire la distribuzione in App Service, ma anche un ottimo modo per implementare l'integrazione continua nel processo di distribuzione. Per impostazione predefinita, ogni git push nel repository GitHub avvia l'azione di compilazione e distribuzione.
Analogamente alla convenzione Jboss, se si vuole eseguire la distribuzione nel contesto radice di JBoss, assegnare un nome all'artefatto compilato ROOT.war.
Passaggio 1: Tornare allo spazio di codice GitHub del fork di esempio, eseguire git pull origin starter-no-infra.
Viene eseguito il pull del file del flusso di lavoro di cui stato eseguito il commit nel codespace. È possibile modificarlo in base alle esigenze in .github/workflows/starter-no-infra_msdocs-jboss-mysql.yml.
Passaggio 2 (opzione 1: con GitHub Copilot):
- Avviare una nuova sessione di chat facendo clic sulla visualizzazione Chat e quindi su +.
- Chiedi, "@workspace Come si connette l'app al database?" Copilot potrebbe fornire una spiegazione sull'origine dati
java:jboss/MySQLDSe su come è configurata. - Ad esempio, "L'origine dati in JBoss in Azure usa il nome JNDI java:jboss/env/jdbc/AZURE_MYSQL_CONNECTIONSTRING_DS. Copilot potrebbe fornire un suggerimento di codice simile a quello dell'opzione 2: senza i passaggi di GitHub Copilot riportati di seguito e anche indicare di apportare la modifica nella classe. GitHub Copilot non offre la stessa risposta ogni volta, potrebbe essere necessario porre altre domande per ottimizzarla. Per suggerimenti, vedere Cosa è possibile fare con GitHub Copilot nel codespace?.
Passaggio 2 (opzione 2: senza GitHub Copilot):
- Aprire src/main/resources/META-INF/persistence.xml in Esplora risorse. All'avvio dell'applicazione, carica le impostazioni del database in questo file.
- Modifica il valore di
<jta-data-source>dajava:jboss/MySQLDSajava:jboss/env/jdbc/AZURE_MYSQL_CONNECTIONSTRING_DS, che è l'origine dati trovata precedentemente con la CLI di JBoss nella shell SSH.
Passaggio 3:
- Selezionare l'estensione Controllo del codice sorgente.
- Nella casella di testo digitare un messaggio di commit come
Configure Azure JNDI name. - Selezionare Commit e quindi confermare con Sì.
- Selezionare Sincronizza modifiche 1, quindi confermare con OK.
Passaggio 4: Tornare alla pagina Gestione del Servizio app nel portale di Azure:
Nel menu a sinistra selezionare Distribuzione>Centro distribuzione.
Selezionare Log. Una nuova esecuzione della distribuzione è già stata avviata dalle modifiche di cui è stato eseguito il commit.
Nell'elemento di log per l'esecuzione della distribuzione selezionare la voce Compila/Distribuisci Log con il timestamp più recente.
Passaggio 5: Si viene visualizzati nel repository GitHub e si noterà che l'azione GitHub è in esecuzione. Il file del flusso di lavoro definisce due fasi separate, compilare e distribuire. Attendere che l'esecuzione di GitHub visualizzi lo stato Operazione completata. Ci vogliono circa 5 minuti.
Problemi? Controllare la sezione Risoluzione dei problemi.
6. Passare all'app
Passaggio 1: Nella pagina Servizio app:
- Nel menu a sinistra selezionare Panoramica.
- In Dominio predefinito selezionare l'URL dell'app.
Passaggio 2: Aggiungere alcune attività all'elenco. Congratulazioni, stai eseguendo un'applicazione web su Azure App Service, con connettività sicura al database Azure per MySQL.
Problemi? Controllare la sezione Risoluzione dei problemi.
7. Eseguire lo streaming dei log di diagnostica
Il Servizio app di Azure acquisisce tutto l’output dei messaggi nella console per facilitare la diagnosi dei problemi con l'applicazione. L'applicazione di esempio include istruzioni di registrazione Log4j standard per illustrare questa funzionalità, come illustrato nel frammento di codice seguente:
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();
}
Nella pagina del Servizio app, dal menu a sinistra, selezionare Monitoraggio>Flusso di log. Vedi i log della tua app, inclusi i log della piattaforma e i log dall'interno del contenitore.
Per saperne di più sui log nelle app Java, consulta la serie Abilitare OpenTelemetry di Azure Monitor per applicazioni .NET, Node.js, Python e Java.
Problemi? Controllare la sezione Risoluzione dei problemi.
8. Pulire le risorse
Al termine, è possibile eliminare tutte le risorse dalla sottoscrizione di Azure eliminando il gruppo di risorse.
Passaggio 1: nella barra di ricerca nella parte superiore del portale di Azure:
- Immettere il nome del gruppo di risorse msdocs-jboss-mysql_group.
- Selezionare il gruppo di risorse.
Passaggio 2: nella pagina del gruppo di risorse selezionare Elimina gruppo di risorse.
Passaggio 3:
- Confermare l'eliminazione digitando il nome del gruppo di risorse.
- Selezionare Elimina.
- Confermare nuovamente con Elimina.
2. Creare risorse di Azure e distribuire un'app di esempio
In questo passaggio si creano le risorse di Azure e si distribuisce un'app di esempio nel servizio app in Linux. I passaggi usati in questa esercitazione creano un set di risorse sicure per impostazione predefinita che includono servizio app e Database di Azure per MySQL.
Il dev container ha già l'Azure Developer CLI (AZD).
Dalla radice del repository eseguire
azd init.azd init --template jboss-app-service-mysql-infraQuando richiesto, fornire le risposte seguenti:
Domanda Risposta Continuare a inizializzare un'app in ' <your-directory>'?S Cosa vuoi fare con questi file? Mantenere invariati i file esistenti Immettere un nuovo nome di ambiente Digitare un nome univoco. Il modello AZD usa questo nome come parte del nome DNS dell'app Web in Azure ( <app-name>-<hash>.azurewebsites.net). Sono consentiti caratteri alfanumerici e trattini.Accedere ad Azure eseguendo il comando
azd auth logine seguendo il prompt:azd auth loginCreare le risorse di Azure necessarie e distribuire il codice dell'app con il comando
azd up. Seguire la richiesta di selezionare la sottoscrizione e il percorso desiderati per le risorse di Azure.azd upIl completamento del comando
azd uprichiede circa 15 minuti (la cache Redis richiede il tempo maggiore). Compila e distribuisce anche il codice dell'applicazione, ma il codice verrà modificato in un secondo momento per funzionare con il servizio app. Durante l'esecuzione, il comando fornisce messaggi sul processo di provisioning e distribuzione, incluso un collegamento alla distribuzione in Azure. Al termine, il comando visualizza anche un collegamento all'applicazione di distribuzione.Questo modello AZD contiene file (azure.yaml e la directory infra ) che generano un'architettura sicura per impostazione predefinita con le risorse di Azure seguenti:
- Gruppo di risorse: contenitore per tutte le risorse create.
- Piano di servizio app: definisce le risorse di calcolo per il servizio app. Viene creato un piano Linux nel livello B1.
- Servizio app: rappresenta l'app ed è in esecuzione nel piano di servizio app.
- Rete virtuale: integrata con l'app di Servizio App e isola il traffico di rete back-end.
- Azure Database per MySQL Server Flessibile: È accessibile solo dalla rete virtuale. Nel server viene creato un database.
- Cache di Azure per Redis: accessibile solo dall'interno della rete virtuale.
- Endpoint privati: accedere agli endpoint per l’insieme di credenziali delle chiavi e la cache Redis nella rete virtuale.
- Zone DNS private: abilita la risoluzione DNS del key vault, del server di database e della cache Redis nella rete virtuale.
- Area di lavoro Log Analytics: funge da contenitore di destinazione per l'app che spedisce i log e permette anche di eseguire query sui log.
- Key Vault: usato per mantenere invariata la password del database quando si ridistribuisce con AZD.
Una volta che il comando ha terminato di creare le risorse e di distribuire il codice dell'applicazione per la prima volta, l'app di esempio distribuita non funziona ancora perché è necessario apportare alcune piccole modifiche per effettuare la connessione al database in Azure.
Problemi? Controllare la sezione Risoluzione dei problemi.
3. Verificare le stringhe di connessione
Il modello AZD che stai utilizzando ha già generato le variabili di connettività come impostazioni dell'app e le restituisce al terminale per tua comodità. Le impostazioni dell'app sono un modo per mantenere i segreti di connessione all'esterno del repository di codice.
Nell'output AZD individuare l'impostazione dell'app
AZURE_MYSQL_CONNECTIONSTRING. Vengono visualizzati solo i nomi delle impostazioni. Appaiono così nell'output AZD:App Service app has the following app settings: - AZURE_KEYVAULT_RESOURCEENDPOINT - AZURE_KEYVAULT_SCOPE - AZURE_MYSQL_CONNECTIONSTRING - AZURE_REDIS_CONNECTIONSTRINGAZURE_MYSQL_CONNECTIONSTRINGcontiene la stringa di connessione al database MySQL in Azure. È necessario usarla nel codice in un secondo momento.Per praticità, il modello AZD mostra il collegamento diretto alla pagina delle impostazioni dell'app. Trovare il collegamento e aprirlo in una nuova scheda del browser.
Se si aggiunge un'impostazione dell'app contenente una stringa di connessione Oracle, SQL Server, PostgreSQL o MySQL valida, App Service la aggiunge come origine dati JNDI (Java Naming and Directory Interface) nel file context.xml del server JBoss.
Problemi? Controllare la sezione Risoluzione dei problemi.
4. Confermare l'origine dati JNDI
In questo passaggio si usa la connessione SSH al contenitore dell'app per verificare l'origine dati JNDI nel server JBoss. Nel processo si apprenderà come accedere alla shell SSH per il contenitore JBoss.
Nell'output AZD trovare l'URL per la sessione SSH e aprirlo nel browser. L'output è simile al seguente:
Open SSH session to App Service container at: <URL>
Nel terminale SSH eseguire
$JBOSS_HOME/bin/jboss-cli.sh --connect.Nella connessione CLI di JBoss eseguire
ls subsystem=datasources/data-source. Verrà visualizzata l'origine dati generata automaticamente denominataAZURE_MYSQL_CONNECTIONSTRING_DS.Ottenere il nome JNDI dell'origine dati con
/subsystem=datasources/data-source=AZURE_MYSQL_CONNECTIONSTRING_DS:read-attribute(name=jndi-name). È ora disponibile un nomejava:jboss/env/jdbc/AZURE_MYSQL_CONNECTIONSTRING_DSJNDI, che è possibile usare nel codice dell'applicazione in un secondo momento.
Nota
Solo le modifiche apportate ai file in /home possono essere mantenute dopo i riavvii dell'app. Ad esempio, se si modifica /opt/eap/standalone/configuration/standalone.xml o si cambia la configurazione del server nella riga di comando di JBoss, le modifiche non verranno mantenute oltre un riavvio dell'applicazione. Per rendere persistenti le modifiche, usare uno script di avvio, ad esempio illustrato in Configurare le origini dati per un'app Tomcat, JBoss o Java SE nel servizio app Azure
Problemi? Controllare la sezione Risoluzione dei problemi.
5. Modificare il codice di esempio e ridistribuire
Nel codespace GitHub avviare una nuova sessione di chat facendo clic sulla visualizzazione Chat e quindi facendo clic su +.
Chiedi, "@workspace Come si connette l'app al database?" Copilot potrebbe fornire una spiegazione sull'origine dati
java:jboss/MySQLDSe su come è configurata.Chiedere: "@workspace si vuole sostituire l'origine dati definita in persistence.xml con un'origine dati JNDI esistente in JBoss. Copilot potrebbe fornire un suggerimento di codice simile a quello dell'opzione 2: senza i passaggi di GitHub Copilot riportati di seguito e anche indicare di apportare la modifica nel file persistence.xml .
Aprire src/main/resources/META-INF/persistence.xml in Explorer e apportare la modifica JNDI suggerita.
GitHub Copilot non offre la stessa risposta ogni volta, potrebbe essere necessario porre altre domande per ottimizzarla. Per suggerimenti, vedere Cosa è possibile fare con GitHub Copilot nel codespace?.
Nel terminale codespace eseguire
azd deploy.azd deploy
Suggerimento
È anche possibile usare sempre e solo azd up, che esegue tutte le operazioni di azd package, azd provision e azd deploy.
Per scoprire come viene creato il pacchetto del file War, è possibile eseguire azd package --debug da sé.
Problemi? Controllare la sezione Risoluzione dei problemi.
6. Passare all'app
Nell'output AZD, trova l'URL dell'app e accedi ad esso tramite il browser. L'URL è simile al seguente nell'output AZD:
Deploying services (azd deploy) (✓) Done: Deploying service web - Endpoint: <URL>
Aggiungere alcune attività all'elenco.
Congratulazioni, stai eseguendo un'applicazione web su Azure App Service, con connettività sicura al database Azure per MySQL.
Problemi? Controllare la sezione Risoluzione dei problemi.
7. Eseguire lo streaming dei log di diagnostica
Il servizio app di Azure può acquisire i log della console per diagnosticare i problemi relativi all'applicazione. Per praticità, il modello AZD ha già abilitato la registrazione nel file system locale e i log vengono distribuiti a un'area di lavoro Log Analytics.
L'applicazione di esempio include istruzioni di registrazione Log4j standard per illustrare questa funzionalità, come illustrato nel frammento di codice seguente:
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();
}
Nell'output AZD individuare il collegamento per trasmettere in streaming i log del servizio app e passarvi nel browser. Il collegamento è simile al seguente nell'output AZD:
Stream App Service logs at: <URL>
Per saperne di più sui log nelle app Java, consulta la serie Abilitare OpenTelemetry di Azure Monitor per applicazioni .NET, Node.js, Python e Java.
Problemi? Controllare la sezione Risoluzione dei problemi.
8. Pulire le risorse
Per eliminare tutte le risorse di Azure nell'ambiente di distribuzione corrente, eseguire azd down e seguire le istruzioni.
azd down
Risoluzione dei problemi
- Vedo l'errore "non autorizzato a usare la funzionalità Porta Il Tuo Proprio Licenza" nella procedura guidata di creazione.
- La visualizzazione della distribuzione del portale per il server flessibile di Database di Azure per MySQL mostra uno stato di conflitto.
- La finestra di dialogo Crea connessione mostra un pulsante Crea in Cloud Shell, ma non è abilitato.
- L'app non è stata avviata e viene visualizzato "Accesso negato per l'utente... (con password: NO)' nei log.
- L'app di esempio distribuita non mostra l'app dell'elenco delle attività.
- Nei log di diagnostica viene visualizzato un errore "Tabella 'Attività' già esistente".
Viene visualizzato l'errore "non autorizzato a usare la funzionalità Bring Your Own License" nella procedura guidata di creazione.
Se viene visualizzato l'errore: The subscription '701ea799-fb46-4407-bb67-9cbcf289f1c7' is not entitled to use the Bring Your Own License feature when creating the application, significa che è stata selezionata la licenza BYO Red Hat JBoss EAP 7/8 nello stack di server Web Java, ma non è stata configurata l'account Azure in Red Hat Cloud Access o non si dispone di una licenza JBoss EAP attiva in Red Hat Cloud Access.
La visualizzazione della distribuzione del portale per il server flessibile di Database di Azure per MySQL mostra uno stato di conflitto.
A seconda della sottoscrizione e dell'area selezionata, è possibile che lo stato della distribuzione per il server flessibile di Database di Azure per MySQL sia Conflict, con il messaggio seguente in Dettagli operazione:
InternalServerError: An unexpected error occurred while processing the request.
Questo errore è probabilmente causato da un limite per la sottoscrizione per l'area selezionata. Provare a scegliere un'area diversa per la distribuzione.
La finestra di dialogo Crea connessione mostra un pulsante Crea in Cloud Shell, ma non è abilitato.
È anche possibile che venga visualizzato un messaggio di errore nella finestra di dialogo: 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.
L'automazione del connettore di servizi richiede l'accesso di rete al server MySQL. Esaminare le impostazioni di rete della risorsa del server MySQL e assicurarsi che l'opzione Consenti l'accesso pubblico a questa risorsa tramite Internet tramite un indirizzo IP pubblico sia selezionata almeno. Service Connector può prendersi cura del resto.
Se non vedi questa casella di controllo, potresti aver creato la distribuzione usando invece la procedura guidata App Web + Database, e la distribuzione blocca tutti gli accessi alla rete pubblica al server MySQL. Non è possibile modificare la configurazione. Poiché il contenitore Linux dell'app può accedere a MySQL tramite l'integrazione della rete virtuale, è possibile installare l'interfaccia della riga di comando di Azure nella sessione SSH dell'app ed eseguire i comandi di Cloud Shell forniti in questa posizione.
L'app di esempio distribuita non mostra l'app per l'elenco delle attività.
Se viene visualizzata la pagina iniziale di JBoss anziché l'app elenco attività, il servizio app probabilmente sta ancora caricando il container aggiornato dopo l'ultima distribuzione del codice. Attendere alcuni minuti e aggiornare la pagina.
L'app non è stata avviata e viene visualizzato "Accesso negato per l'utente... (con password: NO)' nei log.
Questo errore è molto probabile perché non è stato aggiunto il plug-in di autenticazione senza password alla stringa di connessione (vedere il codice di esempio Java per integrare Database di Azure per MySQL con il connettore di servizi). Modificare il stringa di connessione MySQL seguendo le istruzioni riportate in 3. Creare una connessione senza password.
Nei log di diagnostica viene visualizzato un errore "Tabella 'Attività' già esistente".
È possibile ignorare questo errore di ibernazione perché indica che il codice dell'applicazione è connesso al database MySQL. L'applicazione è configurata per creare le tabelle necessarie all'avvio (vedere src/main/resources/META-INF/persistence.xml). Quando l'applicazione viene avviata per la prima volta, dovrebbe creare correttamente le tabelle, ma nei riavvii successivi viene visualizzato questo errore perché le tabelle esistono già.
Domande frequenti
- Quanto costa questa configurazione?
- Come connettersi al server MySQL dietro la rete virtuale con altri strumenti?
- Come ottenere un token di accesso valido per la connessione MySQL usando l'autenticazione di Microsoft Entra?
- Come funziona lo sviluppo di app locali con GitHub Actions?
- Non si dispone delle autorizzazioni per creare un'identità assegnata dall'utente
- Cosa è possibile fare con GitHub Copilot nel codespace?
Quanto costa questa configurazione?
I prezzi per le risorse create sono i seguenti:
- Il piano di servizio app viene creato nel livello P0v3 e può essere ridimensionato verso l'alto o verso il basso. Vedere Prezzi del servizio app.
- Il server flessibile MySQL viene creato nel livello D2ds e può essere ridimensionato verso l'alto o verso il basso. Consulta i prezzi di Azure Database per MySQL.
- Cache Redis di Azure viene creata nel livello Basic con le dimensioni minime della cache. È previsto un piccolo costo associato a questo livello. È possibile aumentare le prestazioni fino a livelli di prestazioni superiori per disponibilità, clustering e altre funzionalità più elevate. Vedere Prezzi di cache di Azure per Redis.
- La rete virtuale non comporta alcun addebito a meno che non si configurino funzionalità aggiuntive, ad esempio il peering. Vedere Prezzi della rete virtuale di Azure.
- La zona DNS privata comporta un piccolo addebito. Vedere Prezzi di DNS di Azure.
Come connettersi al server MySQL dietro la rete virtuale con altri strumenti?
In questa esercitazione, l'app di App Service ha già connettività di rete con il server MySQL e può eseguire l'autenticazione con Microsoft Entra usando l'identità gestita di sistema. È possibile connettersi a MySQL direttamente dall'interno del contenitore dell'app eseguendo i comandi seguenti nella sessione SSH (ottenere i <server>valori , <user>e <database> dall'impostazione dell'app 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'`
Alcune considerazioni:
- Gli strumenti installati nella sessione SSH non vengono mantenuti tra i riavvii dell'app.
- Se sono stati eseguiti i passaggi del portale e configurato MySQL usando l'utente di Microsoft Entra come amministratore, è possibile connettersi a MySQL usando l'utente Di Microsoft Entra.
- Per connettersi da uno strumento desktop come MySQL Workbench, il computer deve trovarsi all'interno della rete virtuale, ad esempio una macchina virtuale di Azure distribuita nella stessa rete virtuale. È anche necessario configurare l'autenticazione separatamente, con un'identità gestita o con un utente di Microsoft Entra.
- Per connettersi da un computer in una rete locale con una connessione VPN da sito a sito con la rete virtuale di Azure, non è possibile configurare l'autenticazione con un'identità gestita, ma è possibile configurare l'autenticazione usando un utente di Microsoft Entra.
- È anche possibile integrare Azure Cloud Shell e connettersi usando l'interfaccia della riga di comando di Azure o l'interfaccia della riga di comando di MySQL. Per eseguire l'autenticazione, è possibile configurare un utente di Microsoft Entra.
Come posso ottenere un token d'accesso valido per la connessione MySQL usando l'autenticazione di Microsoft Entra?
Per un utente di Microsoft Entra, un'identità gestita assegnata dal sistema o un'identità gestita assegnata dall'utente autorizzata ad accedere al database MySQL, l'interfaccia della riga di comando di Azure consente di generare un token di accesso. In caso di identità gestita, l'identità deve essere configurata nell'app del Servizio app o nella macchina virtuale in cui si esegue 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
Se lo desideri, puoi anche usare il comando az mysql flexible-server connect dell'interfaccia della riga di comando di Azure per connetterti a MySQL. Quando richiesto, usare il token di accesso come password.
az mysql flexible-server connect -n <server-name-only> -u <user> -d <database> --interactive
Per altre informazioni, vedi:
- Come usare le identità gestite nel servizio app e in Funzioni di Azure
- Eseguire l'autenticazione in Azure tramite l'interfaccia della riga di comando di Azure
- Connettersi al server flessibile Database di Azure per MySQL tramite Microsoft Entra ID
Come funziona lo sviluppo di app locali con GitHub Actions?
Quando si usa il file del flusso di lavoro generato automaticamente dall'App Service come esempio, ogni git push avvia una nuova compilazione e distribuzione. Da un clone locale del repository GitHub si effettua il push degli aggiornamenti desiderati in GitHub. Ad esempio:
git add .
git commit -m "<some-message>"
git push origin starter-no-infra
Non ho i permessi necessari per creare un'identità assegnata dall'utente
Vedere Configurare la distribuzione di GitHub Actions dal Centro distribuzione.
Cosa è possibile fare con GitHub Copilot nel codespace?
Potresti aver notato che la visualizzazione chat di GitHub Copilot era già presente per te quando hai creato il codespace. Per praticità, includiamo l'estensione di chat di GitHub Copilot nella definizione del contenitore (vedere .devcontainer/devcontainer.json). Tuttavia, è necessario un account GitHub Copilot (disponibile una versione di valutazione gratuita di 30 giorni).
Alcuni suggerimenti per l'utente quando si parla con GitHub Copilot:
- In una singola sessione di chat, le domande e le risposte si basano l'una sull'altra e puoi regolare le tue domande per ottimizzare la risposta che ottieni.
- Per impostazione predefinita, GitHub Copilot non ha accesso ad alcun file nel repository. Per porre domande su un file, aprire prima il file nell'editor.
- Per consentire a GitHub Copilot di accedere a tutti i file nel repository quando si preparano le risposte, iniziare la domanda con
@workspace. Per ulteriori informazioni, vedere Use the @workspace agent. - Nella sessione di chat, GitHub Copilot può suggerire modifiche e (con
@workspace) anche dove apportarle, ma non è consentito apportarle per te. È necessario aggiungere le modifiche suggerite e testarle.
Ecco alcune altre cose che puoi dire per ottimizzare la risposta che ottieni:
- Modificare questo codice per utilizzare l'origine dati jdbc/AZURE_MYSQL_CONNECTIONSTRING_DS.
- Alcune importazioni nel codice utilizzano javax, ma è in uso l'app Jakarta.
- Si vuole che questo codice venga eseguito solo se è impostata la variabile di ambiente AZURE_MYSQL_CONNECTIONSTRING.
- Si vuole che questo codice venga eseguito solo nel servizio app di Azure e non in locale.
Passaggi successivi
Altre informazioni sull'esecuzione di app Java nel Servizio app sono disponibili nella Guida per gli sviluppatori.
Informazioni su come proteggere l'app con un dominio e un certificato personalizzati.
Proteggi con dominio personalizzato e certificato