Návod: Nasazení aplikace Spring do služby Azure Spring Apps s bezheslovým připojením k databázi Azure

V tomto článku se dozvíte, jak používat bez hesla připojení k databázím Azure v aplikacích Spring Boot nasazených v Azure Spring Apps.

V tomto kurzu provedete následující úlohy pomocí portálu Azure nebo Azure CLI. Obě metody jsou vysvětleny v následujících postupech.

  • Zřízení instance Azure Spring Apps
  • Sestavte a nasaďte aplikace do Azure Spring Apps.
  • Spouštění aplikací připojených k Azure databázím pomocí spravované identity

Poznámka

Tento kurz nefunguje pro R2DBC.

Požadavky

  • Předplatné Azure. Pokud ho ještě nemáte, vytvořte si bezplatný účet.
  • Azure CLI verze 2.45.0 nebo vyšší
  • Rozšíření Azure Spring Apps Nainstalujte rozšíření pomocí příkazu: az extension add --name spring.
  • Java Development Kit (JDK), verze 8, 11 nebo 17.
  • Klient Gitu.
  • cURL nebo podobný nástroj HTTP pro testování funkčnosti.
  • Klient příkazového řádku MySQL, pokud se rozhodnete spustit Azure Database for MySQL. K serveru se můžete připojit v Azure Cloud Shell pomocí oblíbeného klientského nástroje, nástroje příkazového řádku mysql.exe. Alternativně můžete použít příkazový řádek mysql v místním prostředí.
  • ovladač ODBC 18 pro SQL Server, pokud se rozhodnete použít Azure SQL Database.

Příprava pracovního prostředí

Nejprve pomocí následujících příkazů nastavte některé proměnné prostředí:

export AZ_RESOURCE_GROUP=passwordless-tutorial-rg
export AZ_DATABASE_SERVER_NAME=<YOUR_DATABASE_SERVER_NAME>
export AZ_DATABASE_NAME=demodb
export AZ_LOCATION=<YOUR_AZURE_REGION>
export AZ_SPRING_APPS_SERVICE_NAME=<YOUR_AZURE_SPRING_APPS_SERVICE_NAME>
export AZ_SPRING_APPS_APP_NAME=hellospring
export AZ_DB_ADMIN_USERNAME=<YOUR_DB_ADMIN_USERNAME>
export AZ_DB_ADMIN_PASSWORD=<YOUR_DB_ADMIN_PASSWORD>
export AZ_USER_IDENTITY_NAME=<YOUR_USER_ASSIGNED_MANAGEMED_IDENTITY_NAME>

Zástupné symboly nahraďte následujícími hodnotami, které se používají v tomto článku:

  • <YOUR_DATABASE_SERVER_NAME>: Název vašeho serveru Azure Database, který by měl být jedinečný v rámci Azure.
  • <YOUR_AZURE_REGION>: Oblast Azure, kterou chcete použít. Ve výchozím nastavení můžete používat eastus, ale nastavte si oblast, která je blíže místu, kde žijete. Úplný seznam dostupných oblastí zobrazíte pomocí az account list-locations.
  • <YOUR_AZURE_SPRING_APPS_SERVICE_NAME>: Název instance Azure Spring Apps. Název musí mít délku 4 až 32 znaků a může obsahovat jenom malá písmena, číslice a pomlčky. První znak názvu služby musí být písmeno a poslední znak musí být písmeno nebo číslo.
  • <AZ_DB_ADMIN_USERNAME>: Uživatelské jméno správce vašeho databázového serveru Azure.
  • <AZ_DB_ADMIN_PASSWORD>: Heslo správce vašeho databázového serveru Azure.
  • <YOUR_USER_ASSIGNED_MANAGEMED_IDENTITY_NAME>: Název serveru spravované identity přiřazeného uživatelem, který by měl být jedinečný v rámci Azure.

Zřízení instance Azure Spring Apps

Pomocí následujících kroků zřiďte instanci Azure Spring Apps.

  1. Pomocí následujícího příkazu aktualizujte Azure CLI pomocí rozšíření Azure Spring Apps:

    az extension update --name spring
    
  2. Přihlaste se k Azure CLI a zvolte své aktivní předplatné pomocí následujících příkazů:

    az login
    az account list --output table
    az account set --subscription <name-or-ID-of-subscription>
    
  3. Pomocí následujících příkazů vytvořte skupinu prostředků, která bude obsahovat vaši službu Azure Spring Apps a instanci služby Azure Spring Apps:

    az group create \
        --name $AZ_RESOURCE_GROUP \
        --location $AZ_LOCATION
    az spring create \
        --resource-group $AZ_RESOURCE_GROUP \
        --name $AZ_SPRING_APPS_SERVICE_NAME
    

Vytvoření instance databáze Azure

Ke zřízení instance služby Azure Database použijte následující postup.

  1. Pomocí následujícího příkazu vytvořte server Azure Database for MySQL:

    az mysql flexible-server create \
        --resource-group $AZ_RESOURCE_GROUP \
        --name $AZ_DATABASE_SERVER_NAME \
        --location $AZ_LOCATION \
        --admin-user $AZ_DB_ADMIN_USERNAME \
        --admin-password $AZ_DB_ADMIN_PASSWORD \
        --yes
    

Poznámka

Pokud nezadáte parametry admin-password nebo admin-user, systém vygeneruje výchozího administrátora nebo náhodné heslo administrátora.

  1. Pomocí následujícího příkazu vytvořte novou databázi:

    az mysql flexible-server db create \
        --resource-group $AZ_RESOURCE_GROUP \
        --database-name $AZ_DATABASE_NAME \
        --server-name $AZ_DATABASE_SERVER_NAME
    

Vytvoření aplikace s přiřazeným veřejným koncovým bodem

K vytvoření aplikace použijte následující příkaz.

az spring app create \
    --resource-group $AZ_RESOURCE_GROUP \
    --service $AZ_SPRING_APPS_SERVICE_NAME \
    --name $AZ_SPRING_APPS_APP_NAME \
    --runtime-version=Java_17
    --assign-endpoint true

Připojení Azure Spring Apps k databázi Azure

Nejprve nainstalujte rozšíření Service Connector bez hesla pro Azure CLI:

az extension add --name serviceconnector-passwordless --upgrade

Potom pomocí následujícího příkazu vytvořte spravovanou identitu přiřazenou uživatelem pro ověřování Microsoft Entra. Další informace viz Nastavení ověřování Microsoft Entra pro Azure Database for MySQL - Flexible Server.

export AZ_IDENTITY_RESOURCE_ID=$(az identity create \
    --name $AZ_USER_IDENTITY_NAME \
    --resource-group $AZ_RESOURCE_GROUP \
    --query id \
    --output tsv)

Důležitý

Po vytvoření identity přiřazené uživatelem požádejte globálního správce nebo správce privilegovaných rolí udělit následující oprávnění pro tuto identitu: User.Read.All, GroupMember.Read.Alla Application.Read.ALL. Další informace najdete v části Oprávnění ověřováníslužby služba Active Directory .

Dále pomocí následujícího příkazu vytvořte připojení bez hesla k databázi.

az spring connection create mysql-flexible \
    --resource-group $AZ_RESOURCE_GROUP \
    --service $AZ_SPRING_APPS_SERVICE_NAME \
    --app $AZ_SPRING_APPS_APP_NAME \
    --target-resource-group $AZ_RESOURCE_GROUP \
    --server $AZ_DATABASE_SERVER_NAME \
    --database $AZ_DATABASE_NAME \
    --system-identity mysql-identity-id=$AZ_IDENTITY_RESOURCE_ID

Tento příkaz konektoru služby spouští na pozadí následující úlohy:

  • Povolí spravovanou identitu přiřazenou systémem pro aplikaci $AZ_SPRING_APPS_APP_NAME hostované Azure Spring Apps.

  • Nastaví správce Microsoft Entra na aktuálně přihlášeného uživatele.

  • Přidá uživatele databáze pojmenované $AZ_SPRING_APPS_SERVICE_NAME/apps/$AZ_SPRING_APPS_APP_NAME pro spravovanou identitu vytvořenou v kroku 1 a udělí tomuto uživateli všechna oprávnění databáze $AZ_DATABASE_NAME .

  • Přidá do aplikace $AZ_SPRING_APPS_APP_NAMEdvě konfigurace : spring.datasource.url a spring.datasource.username.

    Poznámka

    Pokud se zobrazí chybová zpráva The subscription is not registered to use Microsoft.ServiceLinker, spusťte příkaz az provider register --namespace Microsoft.ServiceLinker pro registraci poskytovatele prostředků konektoru služby a pak příkaz připojení spusťte znovu.

Sestavení a nasazení aplikace

Následující kroky popisují, jak stáhnout, nakonfigurovat, sestavit a nasadit ukázkovou aplikaci.

  1. Pomocí následujícího příkazu naklonujte úložiště ukázkového kódu:

    git clone https://github.com/Azure-Samples/quickstart-spring-data-jdbc-mysql passwordless-sample
    
  2. Do souboru pom.xml přidejte následující závislost:

    <dependency>
        <groupId>com.azure.spring</groupId>
        <artifactId>spring-cloud-azure-starter-jdbc-mysql</artifactId>
    </dependency>
    

    Tato závislost přidává podporu startéru Spring Cloud Azure.

    Poznámka

    Další informace o tom, jak spravovat verze knihoven Spring Cloud Azure pomocí BOM, najdete v části Začínáme příručky pro vývojáře Spring Cloud Azure.

  3. Pomocí následujícího příkazu aktualizujte soubor application.properties:

    cat << EOF > passwordless-sample/src/main/resources/application.properties
    
    logging.level.org.springframework.jdbc.core=DEBUG
    spring.datasource.azure.passwordless-enabled=true
    spring.sql.init.mode=always
    
    EOF
    
  4. K sestavení projektu pomocí Mavenu použijte následující příkazy:

    cd passwordless-sample
    ./mvnw clean package -DskipTests
    
  5. Použijte následující příkaz k nasazení souboru target/demo-0.0.1-SNAPSHOT.jar pro aplikaci:

    az spring app deploy \
        --name $AZ_SPRING_APPS_APP_NAME \
        --service $AZ_SPRING_APPS_SERVICE_NAME \
        --resource-group $AZ_RESOURCE_GROUP \
        --artifact-path target/demo-0.0.1-SNAPSHOT.jar
    
  6. Pomocí následujícího příkazu odešlete dotaz na stav aplikace po nasazení:

    az spring app list \
        --service $AZ_SPRING_APPS_SERVICE_NAME \
        --resource-group $AZ_RESOURCE_GROUP \
        --output table
    

    Zobrazí se výstup podobný následujícímu příkladu.

    Name               Location    ResourceGroup    Production Deployment    Public Url                                           Provisioning Status    CPU    Memory    Running Instance    Registered Instance    Persistent Storage
    -----------------  ----------  ---------------  -----------------------  ---------------------------------------------------  ---------------------  -----  --------  ------------------  ---------------------  --------------------
    <app name>         eastus      <resource group> default                                                                       Succeeded              1      2         1/1                 0/1                    -
    

Otestování aplikace

K otestování aplikace použijte cURL. Nejprve vytvořte novou položku "todo" v databázi pomocí následujícího příkazu:

curl --header "Content-Type: application/json" \
    --request POST \
    --data '{"description":"configuration","details":"congratulations, you have set up JDBC correctly!","done": "true"}' \
        https://${AZ_SPRING_APPS_SERVICE_NAME}-hellospring.azuremicroservices.io

Tento příkaz vrátí vytvořenou položku, jak je znázorněno v následujícím příkladu:

{"id":1,"description":"configuration","details":"congratulations, you have set up JDBC correctly!","done":true}

Potom načtěte data pomocí následujícího požadavku cURL:

curl https://${AZ_SPRING_APPS_SERVICE_NAME}-hellospring.azuremicroservices.io

Tento příkaz vrátí seznam položek "todo", včetně položky, kterou jste vytvořili, jak je znázorněno v následujícím příkladu:

[{"id":1,"description":"configuration","details":"congratulations, you have set up JDBC correctly!","done":true}]

Vyčištění prostředků

Pokud chcete vyčistit všechny prostředky použité v tomto kurzu, odstraňte skupinu prostředků pomocí následujícího příkazu:

az group delete \
    --name $AZ_RESOURCE_GROUP \
    --yes

Další kroky