Kurz: Nasazení aplikace Spring do Azure Spring Apps s bez heslem připojení 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í webu Azure Portal 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 databázím Azure pomocí spravované identity

Poznámka:

Tento kurz nefunguje pro R2DBC.

Požadavky

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

Příprava pracovního prostředí

Nejprve pomocí následujících příkazů nastavte několik proměnných 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. Standardně můžete použít eastus, ale doporučujeme nakonfigurovat oblast blíže k místu, kde se nacházíte. Úplný seznam dostupných oblastí můžete zobrazit 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 nebo admin-password parametry nezadáteadmin-user, systém ve výchozím nastavení vygeneruje výchozího uživatele správce nebo náhodné heslo správce.

  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 do databáze Azure

Nejprve nainstalujte rozšíření Service Připojení or 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 najdete v tématu Nastavení ověřování Microsoft Entra pro flexibilní server Azure Database for MySQL.

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í Správa istrator nebo privilegovanou roli Správa istrator 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í 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 Připojení or služby provede na pozadí následující úlohy:

  • Povolte spravovanou identitu přiřazenou systémem pro aplikaci $AZ_SPRING_APPS_APP_NAME hostované službou Azure Spring Apps.

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

  • Přidejte 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ělte tomuto uživateli všechna oprávnění databáze $AZ_DATABASE_NAME .

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

    Poznámka:

    Pokud se zobrazí chybová zprávaThe subscription is not registered to use Microsoft.ServiceLinker, spusťte příkaz az provider register --namespace Microsoft.ServiceLinker pro registraci poskytovatele prostředků service Připojení or a spusťte příkaz připojení 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 úvodní sady Spring Cloud Azure.

    Poznámka:

    Další informace o správě verzí knihovny Azure Spring Cloud pomocí kusovníku najdete v části Začínáme s příručkou 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. Pomocí následujícího příkazu nasaďte cílový soubor/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
    

    Měl by se zobrazit 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                    -
    

Testování aplikace

K otestování aplikace můžete použít 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