Dela via


Självstudie: Distribuera ett Spring-program till Azure Spring Apps med en lösenordslös anslutning till en Azure-databas

Den här artikeln visar hur du använder lösenordslösa anslutningar till Azure-databaser i Spring Boot-program som distribuerats till Azure Spring Apps.

I den här självstudien utför du följande uppgifter med hjälp av Azure-portalen eller Azure CLI. Båda metoderna beskrivs i följande procedurer.

  • Etablera en instans av Azure Spring Apps.
  • Skapa och distribuera appar till Azure Spring Apps.
  • Kör appar som är anslutna till Azure-databaser med hjälp av hanterad identitet.

Kommentar

Den här självstudien fungerar inte för R2DBC.

Förutsättningar

  • En Azure-prenumeration. Om du inte redan har ett skapar du ett kostnadsfritt konto innan du börjar.
  • Azure CLI 2.45.0 eller senare krävs.
  • Azure Spring Apps-tillägget. Du kan installera tillägget med hjälp av kommandot : az extension add --name spring.
  • Java Development Kit (JDK), version 8, 11 eller 17.
  • En Git-klient.
  • cURL eller ett liknande HTTP-verktyg för att testa funktioner.
  • MySQL-kommandoradsklient om du väljer att köra Azure Database for MySQL. Du kan ansluta till servern med Azure Cloud Shell med hjälp av ett populärt klientverktyg, kommandoradsverktyget mysql.exe . Du kan också använda kommandoraden mysql i din lokala miljö.
  • ODBC Driver 18 för SQL Server om du väljer att köra Azure SQL Database.

Förbereda arbetsmiljön

Konfigurera först några miljövariabler med följande kommandon:

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>

Ersätt platshållarna med följande värden, som används i hela artikeln:

  • <YOUR_DATABASE_SERVER_NAME>: Namnet på din Azure Database-server, som ska vara unik i Hela Azure.
  • <YOUR_AZURE_REGION>: Den Azure-region som du vill använda. Du kan använda eastus som standard, men vi rekommenderar att du konfigurerar den region som är närmast dig. Du kan se den fullständiga listan över tillgängliga regioner med hjälp az account list-locationsav .
  • <YOUR_AZURE_SPRING_APPS_SERVICE_NAME>: Namnet på din Azure Spring Apps-instans. Namnet måste vara mellan 4 och 32 tecken långt och får endast innehålla gemener, siffror och bindestreck. Det första tecknet i tjänstnamnet måste vara en bokstav och det sista tecknet måste vara antingen en bokstav eller ett tal.
  • <AZ_DB_ADMIN_USERNAME>: Administratörsanvändarnamnet för din Azure-databasserver.
  • <AZ_DB_ADMIN_PASSWORD>: Administratörslösenordet för din Azure-databasserver.
  • <YOUR_USER_ASSIGNED_MANAGEMED_IDENTITY_NAME>: Namnet på den användartilldelade hanterade identitetsservern, som ska vara unik i Hela Azure.

Etablera en instans av Azure Spring Apps

Använd följande steg för att etablera en instans av Azure Spring Apps.

  1. Uppdatera Azure CLI med Azure Spring Apps-tillägget med hjälp av följande kommando:

    az extension update --name spring
    
  2. Logga in på Azure CLI och välj din aktiva prenumeration med hjälp av följande kommandon:

    az login
    az account list --output table
    az account set --subscription <name-or-ID-of-subscription>
    
  3. Använd följande kommandon för att skapa en resursgrupp som innehåller din Azure Spring Apps-tjänst och en instans av Azure Spring Apps-tjänsten:

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

Skapa en Azure-databasinstans

Använd följande steg för att etablera en Azure Database-instans.

  1. Skapa en Azure Database for MySQL-server med hjälp av följande kommando:

    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
    

Kommentar

Om du inte anger admin-user eller admin-password parametrar genererar systemet en standardadministratörsanvändare eller ett slumpmässigt administratörslösenord som standard.

  1. Skapa en ny databas med hjälp av följande kommando:

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

Skapa en app med en offentlig slutpunkt tilldelad

Använd följande kommando för att skapa appen.

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

Anslut Azure Spring Apps till Azure-databasen

Installera först tillägget Service Anslut eller passwordless för Azure CLI:

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

Använd sedan följande kommando för att skapa en användartilldelad hanterad identitet för Microsoft Entra-autentisering. Mer information finns i Konfigurera Microsoft Entra-autentisering för Azure Database for MySQL – flexibel server.

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

Viktigt!

När du har skapat den användartilldelade identiteten ber du din globala administratör eller privilegierade rolladministratör att bevilja följande behörigheter för den här identiteten: User.Read.All, GroupMember.Read.Alloch Application.Read.ALL. Mer information finns i avsnittet Behörigheter i Active Directory-autentisering.

Använd sedan följande kommando för att skapa en lösenordslös anslutning till databasen.

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

Det här Anslut eller-kommandot för tjänsten utför följande uppgifter i bakgrunden:

  • Aktivera systemtilldelad hanterad identitet för appen $AZ_SPRING_APPS_APP_NAME som hanteras av Azure Spring Apps.

  • Ange Microsoft Entra-administratören till den aktuella inloggade användaren.

  • Lägg till en databasanvändare med namnet $AZ_SPRING_APPS_SERVICE_NAME/apps/$AZ_SPRING_APPS_APP_NAME för den hanterade identitet som skapades i steg 1 och bevilja alla behörigheter för databasen $AZ_DATABASE_NAME till den här användaren.

  • Lägg till två konfigurationer i appen $AZ_SPRING_APPS_APP_NAME: spring.datasource.url och spring.datasource.username.

    Kommentar

    Om du ser felmeddelandet The subscription is not registered to use Microsoft.ServiceLinkerkör du kommandot az provider register --namespace Microsoft.ServiceLinker för att registrera tjänstprovidern Anslut eller resursprovidern och kör sedan anslutningskommandot igen.

Skapa och distribuera appen

Följande steg beskriver hur du laddar ned, konfigurerar, skapar och distribuerar exempelprogrammet.

  1. Använd följande kommando för att klona exempelkodlagringsplatsen:

    git clone https://github.com/Azure-Samples/quickstart-spring-data-jdbc-mysql passwordless-sample
    
  2. Lägg till följande beroende i pom.xml-filen:

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

    Det här beroendet lägger till stöd för Spring Cloud Azure Starter.

    Kommentar

    Mer information om hur du hanterar Spring Cloud Azure-biblioteksversioner med hjälp av en strukturliste (BOM) finns i avsnittet Komma igång i utvecklarguiden för Spring Cloud Azure.

  3. Använd följande kommando för att uppdatera filen 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. Använd följande kommandon för att skapa projektet med maven:

    cd passwordless-sample
    ./mvnw clean package -DskipTests
    
  5. Använd följande kommando för att distribuera filen target/demo-0.0.1-SNAPSHOT.jar för appen:

    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. Fråga appens status efter distributionen med hjälp av följande kommando:

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

    Du bör se utdata som liknar följande exempel.

    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                    -
    

Testa programmet

Du kan testa appen med cURL. Skapa först ett nytt "att göra"-objekt i databasen med hjälp av följande kommando:

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

Det här kommandot returnerar det skapade objektet enligt följande exempel:

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

Hämta sedan data med hjälp av följande cURL-begäran:

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

Det här kommandot returnerar listan med "att göra"-objekt, inklusive det objekt som du har skapat, som du ser i följande exempel:

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

Rensa resurser

Om du vill rensa alla resurser som används under den här självstudien tar du bort resursgruppen med hjälp av följande kommando:

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

Nästa steg