Esercizio - Distribuire l'applicazione Spring Boot in Azure

Completato

Ora che tutti gli elementi sono in esecuzione in locale, è possibile distribuire l'applicazione nel cloud e testarne il comportamento nell'ambiente di produzione.

Creare un'istanza del servizio app di Azure

Creare un'istanza del servizio app di Azure per ospitare l'applicazione. Il codice dell’interfaccia della riga di comando di Azure seguente per creare un piano di servizio app di base che usa Linux e quindi aggiunge un'istanza di Java nel servizio app in tale piano.

Se si preferisce usare Java 11 o Java 17 anziché Java 8, usare "JAVA|<version>-java<version>" invece di "JAVA|8-jre8" come runtime dell'applicazione Web.

az appservice plan create \
    --resource-group $AZ_RESOURCE_GROUP \
    --name $AZ_REDIS_NAME-webapp-plan \
    --is-linux \
    --sku B1

az webapp create \
    --resource-group $AZ_RESOURCE_GROUP \
    --name $AZ_REDIS_NAME-webapp \
    --runtime "JAVA|8-jre8" \
    --plan $AZ_REDIS_NAME-webapp-plan

Nota

Il codice precedente riutilizza la variabile $AZ_REDIS_NAME per assegnare il nome al piano di servizio app e all’istanza del servizio app, ma è possibile usare nomi diversi. Il nome dell'istanza del servizio app fa parte dell'URL, che deve essere univoco in Azure.

È possibile eseguire il passaggio successivo mentre si attende che termini la distribuzione.

Distribuire l'applicazione Spring Boot nel servizio app di Azure

  1. Aggiungere il nuovo plug-in seguente al file pom.xml del progetto nella sezione <plugins>:

    <plugin>
        <groupId>com.microsoft.azure</groupId>
        <artifactId>azure-webapp-maven-plugin</artifactId>
        <version>2.11.0</version>
        <configuration>
            <schemaVersion>V2</schemaVersion>
            <resourceGroup>${env.AZ_RESOURCE_GROUP}</resourceGroup>
            <appName>${env.AZ_REDIS_NAME}-webapp</appName>
            <deployment>
                <resources>
                    <resource>
                        <directory>${project.basedir}/target</directory>
                        <includes>
                            <include>*.jar</include>
                        </includes>
                    </resource>
                </resources>
            </deployment>
        </configuration>
    </plugin>
    

    Nota

    La configurazione precedente usa le variabili di ambiente configurate in precedenza. Per il corretto funzionamento di questa configurazione, assicurarsi che le variabili $AZ_RESOURCE_GROUP e $AZ_REDIS_NAME siano configurate correttamente.

  2. Al termine della distribuzione del Servizio app, eseguire il comando seguente per creare il pacchetto dell'applicazione e distribuirlo in Azure:

    ./mvnw package azure-webapp:deploy
    
  3. Al termine della distribuzione, verrà restituita la riga seguente:

    Successfully deployed the artifact to https://<redisName>-webapp.azurewebsites.net
    

    Prendere nota dell'URL dell'applicazione in esecuzione, come illustrato nell'output precedente, che verrà usato nella sezione successiva.

Testare l'applicazione in Azure

Usare l'URL dell'applicazione per eseguire gli stessi comandi dell’URL client (cURL) usati nel server locale anche nel cloud.

  1. Per aggiungere un elemento di dati, eseguire il comando seguente:

    curl -d '{"description":"another description", "details":"some more details"}' -H "Content-Type: application/json" -X POST https://$AZ_REDIS_NAME-webapp.azurewebsites.net
    
  2. Per recuperare i dati, eseguire:

    curl https://$AZ_REDIS_NAME-webapp.azurewebsites.net
    
  3. Per incrementare la sessione, eseguire il comando seguente più volte:

    curl -b cookie.txt -c cookie.txt https://$AZ_REDIS_NAME-webapp.azurewebsites.net/session
    

Il server locale e il servizio cloud usano la stessa istanza di Redis, di conseguenza sono in cluster. I dati scritti in un'istanza saranno disponibili nell'altra istanza. È possibile aumentare il numero di istanze del servizio cloud aggiungendo altri nodi che useranno tutti la stessa istanza di Redis per archiviare i dati aziendali e di sessione.