Sdílet prostřednictvím


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í 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 jej ještě nemáte, vytvořte si bezplatný účet .
  • 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 Gitu.
  • 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í nástroje Azure Cloud Shell, což je oblíbený klientský nástroj mysql.exe pro příkazový řádek. 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žít eastus, ale doporučujeme nakonfigurovat oblast blíže k umístění, kde žijete. Ú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 parametry admin-user nebo admin-password, 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 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 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 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 s názvem $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í $AZ_DATABASE_NAME databáze.

  • Do aplikace $AZ_SPRING_APPS_APP_NAMEpřidejte dvě 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žeb 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 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
    

    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                    -
    

Otestová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