Självstudie: Ansluta till en MySQL-databas från Java JBoss EAP App Service med lösenordslös anslutning
Azure App Service tillhandahåller en mycket skalbar webbvärdtjänst med självkorrigering i Azure. Den tillhandahåller också en hanterad identitet för din app, vilket är en nyckelfärdig lösning för att skydda åtkomsten till Azure Database for MySQL och andra Azure-tjänster. Hanterade identiteter i App Service gör din app säkrare genom att eliminera hemligheter från din app, till exempel autentiseringsuppgifter i miljövariablerna.
I den här självstudien lär du dig att:
- Skapa en MySQL-databas.
- Distribuera en JBoss EAP-exempelapp till Azure App Service med hjälp av ett WAR-paket.
- Konfigurera ett Spring Boot-webbprogram för att använda Microsoft Entra-autentisering med MySQL Database.
- Anslut till MySQL Database med hanterad identitet med hjälp av Service Connector.
Om du inte har en Azure-prenumeration skapar du ett kostnadsfritt Azure-konto innan du börjar.
Förutsättningar
- Git
- Java JDK
- Maven
- Azure CLI version 2.46.0 eller senare.
- Azure CLI serviceconnector-passwordless extension version 0.2.2 eller senare.
- jq
Klona exempelappen och förbered lagringsplatsen
Kör följande kommandon i terminalen för att klona exempelrepo och konfigurera exempelappmiljön.
git clone https://github.com/Azure-Samples/Passwordless-Connections-for-Java-Apps
cd Passwordless-Connections-for-Java-Apps/JakartaEE/jboss-eap/
Skapa en Azure Database for MySQL
Följ de här stegen för att skapa en Azure Database for MySQL-resurs i din prenumeration. Spring Boot-appen ansluter till den här databasen och lagrar sina data när den körs, vilket bevarar programtillståndet oavsett var du kör programmet.
Logga in på Azure CLI och ange din prenumeration om du har fler än en ansluten till dina inloggningsuppgifter.
az login az account set --subscription <subscription-ID>
Skapa en Azure-resursgrupp.
export RESOURCE_GROUP=<resource-group-name> export LOCATION=eastus az group create --name $RESOURCE_GROUP --location $LOCATION
Skapa en Azure Database for MySQL-server. Servern skapas med ett administratörskonto, men den används inte eftersom vi ska använda Microsoft Entra-administratörskontot för att utföra administrativa uppgifter.
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
Skapa en databas för programmet.
export DATABASE_NAME=checklist az mysql flexible-server db create \ --resource-group $RESOURCE_GROUP \ --server-name $MYSQL_HOST \ --database-name $DATABASE_NAME
Skapa en App Service
Skapa en Azure App Service-resurs i Linux. JBoss EAP kräver Premium SKU.
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"
Ansluta MySQL-databasen med identitetsanslutning
Anslut sedan databasen med hjälp av Service Connector.
Installera det lösenordslösa tillägget för Service Connector för Azure CLI:
az extension add --name serviceconnector-passwordless --upgrade
Skapa en användartilldelad hanterad identitet för Microsoft Entra-autentisering med hjälp av följande kommando. Mer information finns i Konfigurera Microsoft Entra-autentisering för Azure Database for MySQL – flexibel server.
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)
Be din globala administratör eller privilegierade rolladministratör att bevilja följande behörigheter till den nya användartilldelade identiteten:
User.Read.All
,GroupMember.Read.All
ochApplication.Read.ALL
. Mer information finns i avsnittet Behörigheter i Active Directory-autentisering.Anslut din app till en MySQL-databas med en systemtilldelad hanterad identitet med hjälp av Service Connector. För att upprätta den här anslutningen kör du kommandot 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
Det här Service Connector-kommandot utför följande uppgifter i bakgrunden:
Aktivera systemtilldelad hanterad identitet för appen
$APPSERVICE_NAME
som hanteras av Azure App Service.Ange Microsoft Entra-administratören till den aktuella inloggade användaren.
Lägg till en databasanvändare för den systemtilldelade hanterade identiteten i steg 1 och bevilja alla behörigheter för databasen
$DATABASE_NAME
till den här användaren. Du kan hämta användarnamnet från anslutningssträng i utdata från föregående kommando.Lägg till en anslutningssträng i Appinställningar i appen med namnet
AZURE_MYSQL_CONNECTIONSTRING
.Kommentar
Om du ser felmeddelandet
The subscription is not registered to use Microsoft.ServiceLinker
kör du kommandotaz provider register --namespace Microsoft.ServiceLinker
för att registrera resursprovidern för Service Connector och kör sedan anslutningskommandot igen.
Distribuera programmet
Följ de här stegen för att förbereda data i en databas och distribuera programmet.
Skapa databasschema
Öppna en brandvägg för att tillåta anslutning från din aktuella IP-adress.
# 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}
Anslut till databasen och skapa tabeller.
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
Ta bort den tillfälliga brandväggsregeln.
az mysql flexible-server firewall-rule delete \ --resource-group $RESOURCE_GROUP \ --name $MYSQL_HOST \ --rule-name AllowCurrentMachineToConnect
Distribuera programmet
Uppdatera anslutningssträng i Appinställningar.
Hämta anslutningssträng som genereras av Service Connector och lägg till plugin-program för lösenordsfri autentisering. Den här anslutningssträng refereras i startskriptet.
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}"
Exempelappen innehåller en pom.xml fil som kan generera WAR-filen. Kör följande kommando för att skapa appen.
mvn clean package -DskipTests
Distribuera WAR och startskriptet till 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
Testa exempelwebbapp
Kör följande kommando för att testa programmet.
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
Rensa resurser
I de föregående stegen skapade du Azure-resurser i en resursgrupp. Om du inte tror att du behöver dessa resurser i framtiden tar du bort resursgruppen genom att köra följande kommando i Cloud Shell:
az group delete --name myResourceGroup
Det kan några minuter att köra kommandot.
Gå vidare
Läs mer om hur du kör Java-appar i App Service på Linux i utvecklarhandboken.