Kurz: Připojení k databázi MySQL ze služby Java JBoss EAP App Service pomocí bez hesla
služba Aplikace Azure service poskytuje vysoce škálovatelnou službu pro samoobslužné opravy webů v Azure. Poskytuje také spravovanou identitu pro vaši aplikaci, což je řešení pro zabezpečení přístupu ke službě Azure Database for MySQL a dalším službám Azure. Spravované identity ve službě App Service usnadňují zabezpečení vaší aplikace odstraněním tajných kódů z vaší aplikace, jako jsou přihlašovací údaje v proměnných prostředí.
V tomto kurzu se naučíte:
- Vytvořte databázi MySQL.
- Nasaďte ukázkovou aplikaci JBoss EAP do služby Aplikace Azure Service pomocí balíčku WAR.
- Nakonfigurujte webovou aplikaci Spring Boot tak, aby používala ověřování Microsoft Entra s databází MySQL.
- Připojte se k databázi MySQL pomocí spravované identity pomocí konektoru služby.
Pokud ještě nemáte předplatné Azure, vytvořte si bezplatný účet Azure před tím, než začnete.
Požadavky
- Git
- Java JDK
- Maven
- Azure CLI verze 2.46.0 nebo vyšší
- Rozšíření Azure CLI serviceconnector bez hesla verze 0.2.2 nebo vyšší.
- jq
Naklonujte ukázkovou aplikaci a připravte úložiště.
Spuštěním následujících příkazů v terminálu naklonujte ukázkové úložiště a nastavte prostředí ukázkové aplikace.
git clone https://github.com/Azure-Samples/Passwordless-Connections-for-Java-Apps
cd Passwordless-Connections-for-Java-Apps/JakartaEE/jboss-eap/
Vytvoření Azure Database for MySQL
Podle těchto kroků vytvořte prostředek Azure Database for MySQL ve vašem předplatném. Aplikace Spring Boot se připojí k této databázi a uloží její data při spuštění a zachová stav aplikace bez ohledu na to, kde aplikaci spouštíte.
Přihlaste se k Azure CLI a volitelně nastavte své předplatné, pokud máte více než jedno připojené k přihlašovacím údajům.
az login az account set --subscription <subscription-ID>
Vytvořte skupinu prostředků Azure.
export RESOURCE_GROUP=<resource-group-name> export LOCATION=eastus az group create --name $RESOURCE_GROUP --location $LOCATION
Vytvořte server Azure Database for MySQL. Server se vytvoří pomocí účtu správce, ale nepoužívá se, protože k provádění úloh správy použijeme účet správce Microsoft Entra.
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
Vytvořte databázi pro aplikaci.
export DATABASE_NAME=checklist az mysql flexible-server db create \ --resource-group $RESOURCE_GROUP \ --server-name $MYSQL_HOST \ --database-name $DATABASE_NAME
Vytvoří App Service.
Vytvořte prostředek služby Aplikace Azure v Linuxu. JBoss EAP vyžaduje skladovou položku 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"
Připojení databáze MySQL k připojení identit
Dále připojte databázi pomocí konektoru služby.
Nainstalujte rozšíření bez hesla konektoru služby pro Azure CLI:
az extension add --name serviceconnector-passwordless --upgrade
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 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)
Požádejte globálního správce nebo správce privilegovaných rolí, aby nové identitě přiřazené uživatelem udělil následující oprávnění:
User.Read.All
,GroupMember.Read.All
aApplication.Read.ALL
. Další informace najdete v části Oprávnění ověřování active directory.Připojte aplikaci k databázi MySQL pomocí spravované identity přiřazené systémem pomocí konektoru služby. Pokud chcete toto připojení vytvořit, spusťte příkaz 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
Tento příkaz konektoru služby provede na pozadí následující úlohy:
Povolte spravovanou identitu přiřazenou systémem pro aplikaci
$APPSERVICE_NAME
hostované službou Aplikace Azure Service.Nastavte správce Microsoft Entra na aktuální přihlášeného uživatele.
Přidejte uživatele databáze pro spravovanou identitu přiřazenou systémem v kroku 1 a udělte tomuto uživateli všechna oprávnění databáze
$DATABASE_NAME
. Uživatelské jméno můžete získat z připojovací řetězec ve výstupu z předchozího příkazu.Přidejte do nastavení aplikace připojovací řetězec v aplikaci s názvem
AZURE_MYSQL_CONNECTIONSTRING
.Poznámka:
Pokud se zobrazí chybová zpráva
The subscription is not registered to use Microsoft.ServiceLinker
, spusťte příkazaz provider register --namespace Microsoft.ServiceLinker
pro registraci poskytovatele prostředků konektoru služby a spusťte příkaz připojení znovu.
Nasazení aplikace
Tímto postupem připravíte data v databázi a nasadíte aplikaci.
Vytvoření schématu databáze
Otevřete bránu firewall a povolte připojení z aktuální IP adresy.
# 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}
Připojte se k databázi a vytvořte tabulky.
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
Odeberte dočasné pravidlo brány firewall.
az mysql flexible-server firewall-rule delete \ --resource-group $RESOURCE_GROUP \ --name $MYSQL_HOST \ --rule-name AllowCurrentMachineToConnect
Nasazení aplikace
Aktualizujte připojovací řetězec v nastavení aplikace.
Získejte připojovací řetězec vygenerovaný konektorem Service Connector a přidejte modul plug-in pro ověřování bez hesla. Tento připojovací řetězec se odkazuje ve spouštěcím skriptu.
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}"
Ukázková aplikace obsahuje pom.xml soubor, který může vygenerovat soubor WAR. Spuštěním následujícího příkazu sestavte aplikaci.
mvn clean package -DskipTests
Nasaďte war a spouštěcí skript do služby 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
Testovací ukázková webová aplikace
Spuštěním následujícího příkazu otestujte aplikaci.
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
Vyčištění prostředků
V předchozích krocích jste vytvořili prostředky Azure ve skupině prostředků. Pokud předpokládáte, že už tyto prostředky nebudete potřebovat, odstraňte skupinu prostředků spuštěním následujícího příkazu ve službě Cloud Shell:
az group delete --name myResourceGroup
Spuštění tohoto příkazu může trvat přibližně minut.
Další krok
Přečtěte si další informace o spouštění aplikací v Javě na App Service v Linuxu v příručce pro vývojáře.