Samouczek: wdrażanie aplikacji Spring w usłudze Azure Spring Apps przy użyciu połączenia bez hasła z bazą danych platformy Azure

W tym artykule pokazano, jak używać połączeń bez hasła z bazami danych platformy Azure w aplikacjach Spring Boot wdrożonych w usłudze Azure Spring Apps.

W tym samouczku wykonasz następujące zadania przy użyciu witryny Azure Portal lub interfejsu wiersza polecenia platformy Azure. Obie metody zostały wyjaśnione w poniższych procedurach.

  • Aprowizuj wystąpienie usługi Azure Spring Apps.
  • Tworzenie i wdrażanie aplikacji w usłudze Azure Spring Apps.
  • Uruchamianie aplikacji połączonych z bazami danych platformy Azure przy użyciu tożsamości zarządzanej.

Uwaga

Ten samouczek nie działa w przypadku protokołu R2DBC.

Wymagania wstępne

  • Subskrypcja platformy Azure. Jeśli jeszcze go nie masz, przed rozpoczęciem utwórz bezpłatne konto .
  • Wymagany interfejs wiersza polecenia platformy Azure w wersji 2.45.0 lub nowszej.
  • Rozszerzenie Azure Spring Apps. Rozszerzenie można zainstalować za pomocą polecenia : az extension add --name spring.
  • Zestaw Java Development Kit (JDK), wersja 8, 11 lub 17.
  • Klient usługi Git.
  • cURL lub podobne narzędzie HTTP do testowania funkcjonalności.
  • Klient wiersza polecenia MySQL, jeśli zdecydujesz się uruchomić usługę Azure Database for MySQL. Połączenie z serwerem można nawiązać z usługą Azure Cloud Shell przy użyciu popularnego narzędzia klienckiego — narzędzia wiersza polecenia mysql.exe . Alternatywnie możesz użyć mysql wiersza polecenia w środowisku lokalnym.
  • Sterownik ODBC 18 dla programu SQL Server , jeśli zdecydujesz się uruchomić usługę Azure SQL Database.

Przygotowywanie środowiska roboczego

Najpierw skonfiguruj niektóre zmienne środowiskowe za pomocą następujących poleceń:

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>

Zastąp symbole zastępcze następującymi wartościami, które są używane w tym artykule:

  • <YOUR_DATABASE_SERVER_NAME>: nazwa serwera usługi Azure Database, który powinien być unikatowy na platformie Azure.
  • <YOUR_AZURE_REGION>: region platformy Azure, którego chcesz użyć. Możesz domyślnie zastosować region eastus, ale zalecamy skonfigurowanie regionu bliżej Twojego miejsca zamieszkania. Pełną listę dostępnych regionów można wyświetlić przy użyciu polecenia az account list-locations.
  • <YOUR_AZURE_SPRING_APPS_SERVICE_NAME>: nazwa wystąpienia usługi Azure Spring Apps. Nazwa musi mieć długość od 4 do 32 znaków i może zawierać tylko małe litery, cyfry i łączniki. Pierwszy znak nazwy usługi musi być literą, a ostatni znak musi być literą lub cyfrą.
  • <AZ_DB_ADMIN_USERNAME>: nazwa użytkownika administratora serwera bazy danych platformy Azure.
  • <AZ_DB_ADMIN_PASSWORD>: hasło administratora serwera bazy danych platformy Azure.
  • <YOUR_USER_ASSIGNED_MANAGEMED_IDENTITY_NAME>: nazwa serwera tożsamości zarządzanej przypisanej przez użytkownika, która powinna być unikatowa na platformie Azure.

Aprowizuj wystąpienie usługi Azure Spring Apps

Wykonaj poniższe kroki, aby aprowizować wystąpienie usługi Azure Spring Apps.

  1. Zaktualizuj interfejs wiersza polecenia platformy Azure za pomocą rozszerzenia Azure Spring Apps, używając następującego polecenia:

    az extension update --name spring
    
  2. Zaloguj się do interfejsu wiersza polecenia platformy Azure i wybierz aktywną subskrypcję przy użyciu następujących poleceń:

    az login
    az account list --output table
    az account set --subscription <name-or-ID-of-subscription>
    
  3. Użyj następujących poleceń, aby utworzyć grupę zasobów zawierającą usługę Azure Spring Apps i wystąpienie usługi 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
    

Tworzenie wystąpienia bazy danych platformy Azure

Wykonaj poniższe kroki, aby aprowizować wystąpienie usługi Azure Database.

  1. Utwórz serwer usługi Azure Database for MySQL przy użyciu następującego polecenia:

    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
    

Uwaga

Jeśli nie podasz parametrów lub admin-password nie podasz admin-user parametrów, system domyślnie wygeneruje domyślnego użytkownika administratora lub losowego hasła administratora.

  1. Utwórz nową bazę danych przy użyciu następującego polecenia:

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

Tworzenie aplikacji z przypisanym publicznym punktem końcowym

Użyj następującego polecenia, aby utworzyć aplikację.

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

Połączenie azure Spring Apps do bazy danych platformy Azure

Najpierw zainstaluj rozszerzenie service Połączenie or passwordless dla interfejsu wiersza polecenia platformy Azure:

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

Następnie użyj następującego polecenia, aby utworzyć tożsamość zarządzaną przypisaną przez użytkownika na potrzeby uwierzytelniania firmy Microsoft Entra. Aby uzyskać więcej informacji, zobacz Konfigurowanie uwierzytelniania entra firmy Microsoft dla usługi Azure Database for MySQL — serwer elastyczny.

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

Ważne

Po utworzeniu tożsamości przypisanej przez użytkownika poproś administratora globalnego Administracja istratora lub rolę uprzywilejowaną Administracja istrator, aby przyznać następujące uprawnienia dla tej tożsamości: User.Read.All, GroupMember.Read.Alli Application.Read.ALL. Aby uzyskać więcej informacji, zobacz sekcję Uprawnienia uwierzytelniania usługi Active Directory.

Następnie użyj następującego polecenia, aby utworzyć połączenie bez hasła z bazą danych.

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

To polecenie usługi Połączenie or wykonuje następujące zadania w tle:

  • Włącz tożsamość zarządzaną przypisaną przez system dla aplikacji hostowanej przez usługę $AZ_SPRING_APPS_APP_NAME Azure Spring Apps.

  • Ustaw administratora firmy Microsoft Entra na bieżącego zalogowanego użytkownika.

  • Dodaj użytkownika bazy danych o nazwie dla $AZ_SPRING_APPS_SERVICE_NAME/apps/$AZ_SPRING_APPS_APP_NAME tożsamości zarządzanej utworzonej w kroku 1 i nadaj temu użytkownikowi wszystkie uprawnienia bazy danych $AZ_DATABASE_NAME .

  • Dodaj dwie konfiguracje do aplikacji $AZ_SPRING_APPS_APP_NAME: spring.datasource.url i spring.datasource.username.

    Uwaga

    Jeśli zostanie wyświetlony komunikat The subscription is not registered to use Microsoft.ServiceLinkero błędzie , uruchom polecenie az provider register --namespace Microsoft.ServiceLinker , aby zarejestrować dostawcę zasobów service Połączenie or, a następnie ponownie uruchom polecenie połączenia.

Kompilowanie i wdrażanie aplikacji

W poniższych krokach opisano sposób pobierania, konfigurowania, kompilowania i wdrażania przykładowej aplikacji.

  1. Użyj następującego polecenia, aby sklonować przykładowe repozytorium kodu:

    git clone https://github.com/Azure-Samples/quickstart-spring-data-jdbc-mysql passwordless-sample
    
  2. Dodaj następującą zależność do pliku pom.xml :

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

    Ta zależność dodaje obsługę szablonu startowego Spring Cloud Azure.

    Uwaga

    Aby uzyskać więcej informacji na temat zarządzania wersjami bibliotek platformy Azure spring Cloud przy użyciu rachunku materiałów (BOM), zobacz sekcję Wprowadzenie w przewodniku deweloperów platformy Azure Spring Cloud.

  3. Użyj następującego polecenia, aby zaktualizować plik 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. Użyj następujących poleceń, aby skompilować projekt przy użyciu narzędzia Maven:

    cd passwordless-sample
    ./mvnw clean package -DskipTests
    
  5. Użyj następującego polecenia, aby wdrożyć plik target/demo-0.0.1-SNAPSHOT.jar dla aplikacji:

    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. Wykonaj zapytanie o stan aplikacji po wdrożeniu przy użyciu następującego polecenia:

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

    Powinny zostać wyświetlone dane wyjściowe podobne do poniższego przykładu.

    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                    -
    

Testowanie aplikacji

Do przetestowania aplikacji możesz użyć narzędzia cURL. Najpierw utwórz nowy element "todo" w bazie danych przy użyciu następującego polecenia:

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

To polecenie zwraca utworzony element, jak pokazano w poniższym przykładzie:

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

Następnie pobierz dane przy użyciu następującego żądania cURL:

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

To polecenie zwraca listę elementów "todo", w tym utworzony element, jak pokazano w poniższym przykładzie:

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

Czyszczenie zasobów

Aby wyczyścić wszystkie zasoby używane w tym samouczku, usuń grupę zasobów przy użyciu następującego polecenia:

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

Następne kroki