Esercizio - Distribuire un'istanza di Database di Azure per MySQL

Completato

In questo esercizio si crea l'istanza del server flessibile di Database di Azure per MySQL e la si carica con dati di esempio.

Ottenere l'applicazione e lo script di esempio

Clonare l'applicazione di esempio e lo script della shell dal repository GitHub usando il comando seguente:

git clone https://github.com/MicrosoftDocs/mslearn-jakarta-ee-azure.git

La clonazione del progetto produce la struttura di file seguente:

├── LICENSE
├── README.md
├── mvnw
├── mvnw.cmd
├── pom.xml
├── setup_mysql.sh
└── src
    ├── main
    │   ├── java
    │   │   └── com
    │   │       └── microsoft
    │   │           └── azure
    │   │               └── samples
    │   │                   ├── JAXRSConfiguration.java
    │   │                   ├── controllers
    │   │                   │   ├── CityService.java
    │   │                   │   └── CountryService.java
    │   │                   ├── entities
    │   │                   │   ├── City.java
    │   │                   │   └── Country.java
    │   │                   └── rest
    │   │                       └── WorldServiceEndpoint.java
    │   ├── resources
    │   │   └── META-INF
    │   │       └── persistence.xml
    │   └── webapp
    │       └── WEB-INF
    │           ├── beans.xml
    │           ├── createMySQLDataSource.sh
    │           └── web.xml
    └── test
        └── java
            └── com
                └── microsoft
                    └── azure
                        └── samples
                            └── SampleTest.java

Accedere ad Azure

Se non è stato eseguito l'accesso ad Azure, accedere usando il comando seguente:

az login

Configurare un percorso di installazione predefinito

I comandi eseguiti dallo script usato in questo modulo prevedono un'opzione --location . Specificare un valore predefinito per questa opzione usando il comando seguente, sostituendo <location> con un'area appropriata. È consigliabile usare la stessa area usata per distribuire l'applicazione Jakarta EE più avanti in questo modulo.

az configure --defaults location=<location>

Creare un’istanza del server flessibile di Database di Azure per MySQL.

Passare alla directory mslearn-jakarta-ee-azure e quindi usare il comando seguente per creare l'istanza del server flessibile di Database di Azure per MySQL:

Importante

Usare il comando seguente in un ambiente IPv4. Se l'ambiente ha un indirizzo IPv6, il comando avrà esito negativo perché la configurazione del firewall non supporta ancora gli indirizzi IPv6.

Se si verifica un errore durante l'esecuzione dello script, il processo si arresta al centro dell'esecuzione. È possibile che si verifichi un errore durante la concessione delle autorizzazioni allo script, come indicato dal messaggio Granting the User.Read.All, GroupMember.Read.All, and Application.Read.All permissions to the user managed identitydi output . Per correggere questo errore, accedere di nuovo all'interfaccia della riga di comando di Azure con un utente con Azure AD administrator privilegi e quindi eseguire di nuovo lo script.

./setup_mysql.sh flexible

L'output tipico include i risultati seguenti, oltre ad alcuni valori importanti usati nel resto di questo modulo:

[INFO] -------------------------------------------------------
[INFO] Azure Database for MySQL Setup Completed SUCCESS
[INFO] -------------------------------------------------------

Salvare a parte i valori di chiave visualizzati nell'output perché questi valori vengono usati nei passaggi successivi.

Impostazione delle variabili di ambiente

Usare i comandi seguenti per archiviare i valori della chiave. Assicurarsi di sostituire i <...> segnaposto con i valori restituiti dallo script nella sezione precedente.

export RESOURCE_GROUP_NAME=<resource-group>
export MYSQL_SERVER_INSTANCE=<MySQL-host-name>
export MYSQL_USER=<MySQL-admin-user-name>
export MYSQL_PASSWORD=<MySQL-password>

Annotazioni

Microsoft consiglia di usare il flusso di autenticazione più sicuro disponibile. Il flusso di autenticazione descritto in questa procedura, ad esempio per database, cache, messaggistica o servizi di intelligenza artificiale, richiede un elevato livello di attendibilità nell'applicazione e comporta rischi non presenti in altri flussi. Usare questo flusso solo quando le opzioni più sicure, ad esempio le identità gestite per le connessioni senza password o senza chiave, non sono valide. Per le operazioni del computer locale, preferire le identità utente per le connessioni senza password o senza chiave.

Ottenere dati dal database di esempio

In questo modulo si usa un database di esempio denominato world dal sito Web ufficiale di MySQL. Per ottenere i dati, seguire questa procedura:

  1. Scaricare il file di database usando il comando seguente:

    curl -o world-db.zip https://downloads.mysql.com/docs/world-db.zip
    
  2. Decomprimere il file di database usando il comando seguente:

    unzip world-db.zip
    
  3. Elencare il file SQL usando i comandi seguenti:

    cd world-db
    ls -l world.sql
    

    L'output seguente è tipico:

    -rw-r--r--  1 ******  wheel  398635  1  7 12:25 world.sql
    

Accedere al database

Usare il comando seguente per connettersi al database usando solo il nome utente e la password, anziché un token di accesso:

az mysql flexible-server connect \
    --name $MYSQL_SERVER_INSTANCE \
    --user azureuser \
    --interactive

Quando il sistema richiede di immettere la password MySQL recuperata in precedenza.

Dopo la connessione, è possibile usare la query seguente al prompt SQL per visualizzare i nomi utente e i plug-in disponibili:

SELECT user, host, plugin FROM mysql.user;

L'output seguente è tipico:

+----------------------------------+-----------+-----------------------+
| user                             | host      | plugin                |
+----------------------------------+-----------+-----------------------+
| azureuser                        | %         | mysql_native_password |
| $CURRENT_AZ_LOGIN_USER_NAME#EXT#@| %         | aad_auth              |
| azure_superuser                  | 127.0.0.1 | mysql_native_password |
| azure_superuser                  | localhost | mysql_native_password |
| mysql.infoschema                 | localhost | caching_sha2_password |
| mysql.session                    | localhost | caching_sha2_password |
| mysql.sys                        | localhost | caching_sha2_password |
+----------------------------------+-----------+-----------------------+

Creare un database e tabelle per l'applicazione

Usare la procedura seguente per creare un database per l'applicazione dallo script di world.sql e quindi verificarne i dettagli:

  1. Usare il comando seguente per creare il database e le tabelle:

    az mysql flexible-server execute \
        --name $MYSQL_SERVER_INSTANCE \
        --admin-password azureuser \
        --admin-password '$MYSQL_PASSWORD' \
        --file-path "./world-db/world.sql"
    

    Suggerimento

    È anche possibile usare mysql per creare un database e tabelle da un file di script, ma il completamento del comando richiede molto tempo.

  2. Verificare che i database e le tabelle si trovino nel server usando il comando seguente:

    az mysql flexible-server connect \
        --name $MYSQL_SERVER_INSTANCE \
        --admin-user $MYSQL_USER \
        --database-name world \
        --interactive
    
  3. Quando il sistema richiede di immettere la password MySQL recuperata in precedenza.

    L'output seguente è tipico:

    MySQL 8.0.39
    mycli 1.27.2
    Home: http://mycli.net
    Bug tracker: https://github.com/dbcli/mycli/issues
    Thanks to the contributor - Jakub Boukal
    
  4. Al prompt di SQL usare la query seguente per visualizzare i database nel server:

    show databases;
    

    L'output seguente è tipico:

    +--------------------+
    | Database           |
    +--------------------+
    | flexibleserverdb   |
    | information_schema |
    | mysql              |
    | newdatabase        |
    | performance_schema |
    | sys                |
    | world              |
    +--------------------+
    
    7 rows in set
    Time: 0.152s
    
  5. Usare la query seguente per elencare le tabelle nel world database:

    show tables;
    

    L'output seguente è tipico:

    +-----------------+
    | Tables_in_world |
    +-----------------+
    | city            |
    | country         |
    | countrylanguage |
    +-----------------+
    
    3 rows in set
    Time: 0.145s
    

Eseguire query sul database di esempio

Per visualizzare il contenuto del world database, seguire questa procedura:

  1. Elencare tutte le informazioni sul continente usando la query seguente:

    select distinct Continent from country ;
    

    L'output seguente è tipico:

    +---------------+
    | Continent     |
    +---------------+
    | North America |
    | Asia          |
    | Africa        |
    | Europe        |
    | South America |
    | Oceania       |
    | Antarctica    |
    +---------------+
    
  2. Elencare i nomi dei paesi e i codici paese per continente usando la query seguente:

    select code,name from country where Continent='Asia';
    

    L'output seguente è tipico:

    +------+----------------------+
    | code | Name                 |
    +------+----------------------+
    | AFG  | Afghanistan          |
    | ARE  | United Arab Emirates |
    | ARM  | Armenia              |
    | AZE  | Azerbaijan           |
    | BGD  | Bangladesh           |
    | BHR  | Bahrain              |
    | BRN  | Brunei               |
    | BTN  | Bhutan               |
    | CHN  | China                |
    | CYP  | Cyprus               |
    | GEO  | Georgia              |
    | HKG  | Hong Kong SAR        |
    | IDN  | Indonesia            |
    | IND  | India                |
    | IRN  | Iran                 |
    | IRQ  | Iraq                 |
    | ISR  | Israel               |
    | JOR  | Jordan               |
    | JPN  | Japan                |
    .....
    | VNM  | Vietnam              |
    | YEM  | Yemen                |
    +------+----------------------+
    51 rows in set (0.02 sec)
    
  3. Elencare tutte le città con una popolazione maggiore di 1 milione usando la query seguente:

    select * from city where CountryCode='JPN' AND Population > 1000000 ORDER BY Population DESC;
    

    L'output seguente è tipico:

    +------+---------------------+-------------+-----------+------------+
    | ID   | Name                | CountryCode | District  | Population |
    +------+---------------------+-------------+-----------+------------+
    | 1532 | Tokyo               | JPN         | Tokyo-to  |    7980230 |
    | 1533 | Jokohama [Yokohama] | JPN         | Kanagawa  |    3339594 |
    | 1534 | Osaka               | JPN         | Osaka     |    2595674 |
    | 1535 | Nagoya              | JPN         | Aichi     |    2154376 |
    | 1536 | Sapporo             | JPN         | Hokkaido  |    1790886 |
    | 1537 | Kioto               | JPN         | Kyoto     |    1461974 |
    | 1538 | Kobe                | JPN         | Hyogo     |    1425139 |
    | 1539 | Fukuoka             | JPN         | Fukuoka   |    1308379 |
    | 1540 | Kawasaki            | JPN         | Kanagawa  |    1217359 |
    | 1541 | Hiroshima           | JPN         | Hiroshima |    1119117 |
    | 1542 | Kitakyushu          | JPN         | Fukuoka   |    1016264 |
    +------+---------------------+-------------+-----------+------------+
    11 rows in set (0.33 sec)
    

Riepilogo della unità

È stata completata la configurazione e la preparazione per l'istanza del server flessibile di Database di Azure per MySQL. L'unità successiva presenta il processo di distribuzione dell'applicazione Jakarta EE in JBoss EAP nel servizio app di Azure, insieme a varie opzioni di configurazione.