Samouczek: nawiązywanie połączenia z bazą danych MySQL z poziomu usługi App Service EAP Java JBoss przy użyciu połączenia bez hasła
usługa aplikacja systemu Azure Service oferuje wysoce skalowalną, samonastosową usługę hostingu internetowego na platformie Azure. Zapewnia również tożsamość zarządzaną dla aplikacji, która jest rozwiązaniem kluczowym dla zabezpieczania dostępu do usługi Azure Database for MySQL i innych usług platformy Azure. Tożsamości zarządzane w usłudze App Service sprawiają, że aplikacja jest bezpieczniejsza, eliminując wpisy tajne z aplikacji, takie jak poświadczenia w zmiennych środowiskowych.
Z tego samouczka dowiesz się, jak wykonywać następujące czynności:
- Utwórz bazę danych MySQL.
- Wdróż przykładową aplikację JBoss EAP, aby aplikacja systemu Azure Service przy użyciu pakietu WAR.
- Skonfiguruj aplikację internetową Spring Boot do korzystania z uwierzytelniania entra firmy Microsoft z bazą danych MySQL.
- Nawiązywanie połączenia z bazą danych MySQL przy użyciu tożsamości zarządzanej przy użyciu łącznika usługi.
Jeśli nie masz subskrypcji platformy Azure, przed rozpoczęciem utwórz bezpłatne konto platformy Azure.
Wymagania wstępne
- Usługa Git
- Java JDK
- Maven
- Interfejs wiersza polecenia platformy Azure w wersji 2.46.0 lub nowszej.
- Rozszerzenie serviceconnector-passwordless interfejsu wiersza polecenia platformy Azure w wersji 0.2.2 lub nowszej.
- jq
Sklonuj przykładową aplikację i przygotuj repozytorium
Uruchom następujące polecenia w terminalu, aby sklonować przykładowe repozytorium i skonfigurować przykładowe środowisko aplikacji.
git clone https://github.com/Azure-Samples/Passwordless-Connections-for-Java-Apps
cd Passwordless-Connections-for-Java-Apps/JakartaEE/jboss-eap/
Tworzenie usługi Azure Database for MySQL
Wykonaj następujące kroki, aby utworzyć zasób usługi Azure Database for MySQL w ramach subskrypcji. Aplikacja Spring Boot łączy się z tą bazą danych i przechowuje swoje dane podczas działania, utrwalając stan aplikacji bez względu na to, gdzie uruchamiasz aplikację.
Zaloguj się do interfejsu wiersza polecenia platformy Azure i opcjonalnie ustaw subskrypcję, jeśli masz więcej niż jedno połączenie z poświadczeniami logowania.
az login az account set --subscription <subscription-ID>
Utwórz grupę zasobów platformy Azure.
export RESOURCE_GROUP=<resource-group-name> export LOCATION=eastus az group create --name $RESOURCE_GROUP --location $LOCATION
Utwórz serwer usługi Azure Database for MySQL. Serwer jest tworzony przy użyciu konta administratora, ale nie jest używany, ponieważ będziemy używać konta administratora Microsoft Entra do wykonywania zadań administracyjnych.
export MYSQL_ADMIN_USER=azureuser # MySQL admin access rights won't be used because Azure AD authentication is leveraged to administer the database. export MYSQL_ADMIN_PASSWORD=<admin-password> export MYSQL_HOST=<mysql-host-name> # Create a MySQL server. az mysql flexible-server create \ --name $MYSQL_HOST \ --resource-group $RESOURCE_GROUP \ --location $LOCATION \ --admin-user $MYSQL_ADMIN_USER \ --admin-password $MYSQL_ADMIN_PASSWORD \ --public-access 0.0.0.0 \ --tier Burstable \ --sku-name Standard_B1ms \ --storage-size 32
Utwórz bazę danych dla aplikacji.
export DATABASE_NAME=checklist az mysql flexible-server db create \ --resource-group $RESOURCE_GROUP \ --server-name $MYSQL_HOST \ --database-name $DATABASE_NAME
Tworzenie wystąpienia usługi App Service
Utwórz zasób usługi aplikacja systemu Azure w systemie Linux. Protokół JBoss EAP wymaga jednostki SKU Premium.
export APPSERVICE_PLAN=<app-service-plan>
export APPSERVICE_NAME=<app-service-name>
# Create an App Service plan
az appservice plan create \
--resource-group $RESOURCE_GROUP \
--name $APPSERVICE_PLAN \
--location $LOCATION \
--sku P1V3 \
--is-linux
# Create an App Service resource.
az webapp create \
--resource-group $RESOURCE_GROUP \
--name $APPSERVICE_NAME \
--plan $APPSERVICE_PLAN \
--runtime "JBOSSEAP:7-java8"
Łączenie bazy danych MySQL z łącznością tożsamości
Następnie połącz bazę danych przy użyciu łącznika usługi.
Zainstaluj rozszerzenie bez hasła łącznika usługi dla interfejsu wiersza polecenia platformy Azure:
az extension add --name serviceconnector-passwordless --upgrade
Utwórz tożsamość zarządzaną przypisaną przez użytkownika dla uwierzytelniania firmy Microsoft Entra przy użyciu następującego polecenia. Aby uzyskać więcej informacji, zobacz Konfigurowanie uwierzytelniania entra firmy Microsoft dla usługi Azure Database for MySQL — serwer elastyczny.
export USER_IDENTITY_NAME=<your-user-assigned-managed-identity-name> export IDENTITY_RESOURCE_ID=$(az identity create \ --name $USER_IDENTITY_NAME \ --resource-group $RESOURCE_GROUP \ --query id \ --output tsv)
Poproś administratora globalnego lub administratora ról uprzywilejowanych o przyznanie następujących uprawnień do nowej tożsamości przypisanej przez użytkownika:
User.Read.All
,GroupMember.Read.All
iApplication.Read.ALL
. Aby uzyskać więcej informacji, zobacz sekcję Uprawnienia uwierzytelniania usługi Active Directory.Połącz aplikację z bazą danych MySQL przy użyciu przypisanej przez system tożsamości zarządzanej przy użyciu łącznika usługi. Aby nawiązać to połączenie, uruchom polecenie az webapp connection create .
az webapp connection create mysql-flexible \ --resource-group $RESOURCE_GROUP \ --name $APPSERVICE_NAME \ --target-resource-group $RESOURCE_GROUP \ --server $MYSQL_HOST \ --database $DATABASE_NAME \ --system-identity mysql-identity-id=$IDENTITY_RESOURCE_ID \ --client-type java
To polecenie łącznika usługi wykonuje następujące zadania w tle:
Włącz tożsamość zarządzaną przypisaną przez system dla aplikacji
$APPSERVICE_NAME
hostowanej przez usługę aplikacja systemu Azure Service.Ustaw administratora firmy Microsoft Entra na bieżącego zalogowanego użytkownika.
Dodaj użytkownika bazy danych dla tożsamości zarządzanej przypisanej przez system w kroku 1 i przyznaj wszystkim uprawnieniem bazy danych
$DATABASE_NAME
do tego użytkownika. Nazwę użytkownika można pobrać z parametry połączenia w danych wyjściowych z poprzedniego polecenia.Dodaj parametry połączenia do ustawień aplikacji w aplikacji o nazwie
AZURE_MYSQL_CONNECTIONSTRING
.Uwaga
Jeśli zostanie wyświetlony komunikat
The subscription is not registered to use Microsoft.ServiceLinker
o błędzie , uruchom polecenieaz provider register --namespace Microsoft.ServiceLinker
, aby zarejestrować dostawcę zasobów łącznika usługi, a następnie ponownie uruchom polecenie połączenia.
Wdrażanie aplikacji
Wykonaj następujące kroki, aby przygotować dane w bazie danych i wdrożyć aplikację.
Tworzenie schematu bazy danych
Otwórz zaporę, aby zezwolić na połączenie z bieżącego adresu IP.
# Create a temporary firewall rule to allow connections from your current machine to the MySQL server export MY_IP=$(curl http://whatismyip.akamai.com) az mysql flexible-server firewall-rule create \ --resource-group $RESOURCE_GROUP \ --name $MYSQL_HOST \ --rule-name AllowCurrentMachineToConnect \ --start-ip-address ${MY_IP} \ --end-ip-address ${MY_IP}
Połącz się z bazą danych i utwórz tabele.
export DATABASE_FQDN=${MYSQL_HOST}.mysql.database.azure.com export CURRENT_USER=$(az account show --query user.name --output tsv) export RDBMS_ACCESS_TOKEN=$(az account get-access-token \ --resource-type oss-rdbms \ --output tsv \ --query accessToken) mysql -h "${DATABASE_FQDN}" --user "${CURRENT_USER}" --enable-cleartext-plugin --password="$RDBMS_ACCESS_TOKEN" < azure/init-db.sql
Usuń tymczasową regułę zapory.
az mysql flexible-server firewall-rule delete \ --resource-group $RESOURCE_GROUP \ --name $MYSQL_HOST \ --rule-name AllowCurrentMachineToConnect
Wdrażanie aplikacji
Zaktualizuj parametry połączenia w obszarze Ustawienia aplikacji.
Pobierz parametry połączenia wygenerowaną przez łącznik usługi i dodaj wtyczkę uwierzytelniania bez hasła. Do tego parametry połączenia odwołuje się skrypt uruchamiania.
export PASSWORDLESS_URL=$(\ az webapp config appsettings list \ --resource-group $RESOURCE_GROUP \ --name $APPSERVICE_NAME \ | jq -c '.[] \ | select ( .name == "AZURE_MYSQL_CONNECTIONSTRING" ) \ | .value' \ | sed 's/"//g') # Create a new environment variable with the connection string including the passwordless authentication plugin export PASSWORDLESS_URL=${PASSWORDLESS_URL}'&defaultAuthenticationPlugin=com.azure.identity.extensions.jdbc.mysql.AzureMysqlAuthenticationPlugin&authenticationPlugins=com.azure.identity.extensions.jdbc.mysql.AzureMysqlAuthenticationPlugin' az webapp config appsettings set \ --resource-group $RESOURCE_GROUP \ --name $APPSERVICE_NAME \ --settings "AZURE_MYSQL_CONNECTIONSTRING_PASSWORDLESS=${PASSWORDLESS_URL}"
Przykładowa aplikacja zawiera plik pom.xml , który może wygenerować plik WAR. Uruchom następujące polecenie, aby skompilować aplikację.
mvn clean package -DskipTests
Wdróż plik WAR i skrypt uruchamiania w usłudze app Service.
az webapp deploy \ --resource-group $RESOURCE_GROUP \ --name $APPSERVICE_NAME \ --src-path target/ROOT.war \ --type war az webapp deploy \ --resource-group $RESOURCE_GROUP \ --name $APPSERVICE_NAME \ --src-path src/main/webapp/WEB-INF/createMySQLDataSource.sh \ --type startup
Testowanie przykładowej aplikacji internetowej
Uruchom następujące polecenie, aby przetestować aplikację.
export WEBAPP_URL=$(az webapp show \
--resource-group $RESOURCE_GROUP \
--name $APPSERVICE_NAME \
--query defaultHostName \
--output tsv)
# Create a list
curl -X POST -H "Content-Type: application/json" -d '{"name": "list1","date": "2022-03-21T00:00:00","description": "Sample checklist"}' https://${WEBAPP_URL}/checklist
# Create few items on the list 1
curl -X POST -H "Content-Type: application/json" -d '{"description": "item 1"}' https://${WEBAPP_URL}/checklist/1/item
curl -X POST -H "Content-Type: application/json" -d '{"description": "item 2"}' https://${WEBAPP_URL}/checklist/1/item
curl -X POST -H "Content-Type: application/json" -d '{"description": "item 3"}' https://${WEBAPP_URL}/checklist/1/item
# Get all lists
curl https://${WEBAPP_URL}/checklist
# Get list 1
curl https://${WEBAPP_URL}/checklist/1
Czyszczenie zasobów
W poprzednich krokach utworzono zasoby platformy Azure w grupie zasobów. Jeśli te zasoby nie będą raczej potrzebne w przyszłości, usuń grupę zasobów, uruchamiając następujące polecenie w usłudze Cloud Shell:
az group delete --name myResourceGroup
Wykonanie tego polecenia może potrwać około minutę.
Następny krok
Dowiedz się więcej na temat uruchamiania aplikacji w języku Java w usłudze App Service dla systemu Linux w przewodniku dla deweloperów.
Java in App Service Linux dev guide (Przewodnik dla deweloperów dotyczący języka Java w usłudze App Service dla systemu Linux)