Öğretici: Parolasız bağlantıyla Java JBoss EAP App Service'ten My SQL Veritabanı'ye bağlanma
Azure Uygulaması Hizmeti, Azure'da yüksek oranda ölçeklenebilir, kendi kendine düzeltme eki uygulamalı bir web barındırma hizmeti sağlar. Ayrıca uygulamanız için yönetilen bir kimlik sağlar. Bu, MySQL için Azure Veritabanı ve diğer Azure hizmetlerine erişimin güvenliğini sağlamaya yönelik anahtar teslimi bir çözümdür. App Service'teki yönetilen kimlikler, uygulamanızdaki ortam değişkenlerindeki kimlik bilgileri gibi gizli dizileri ortadan kaldırarak uygulamanızı daha güvenli hale getirir.
Bu öğreticide aşağıdakilerin nasıl yapılacağını öğreneceksiniz:
- MySQL veritabanı oluşturma.
- WAR paketi kullanarak Azure Uygulaması Hizmetine örnek bir JBoss EAP uygulaması dağıtın.
- Spring Boot web uygulamasını My SQL Veritabanı ile Microsoft Entra kimlik doğrulamasını kullanacak şekilde yapılandırın.
- Hizmet Bağlayıcısı'nı kullanarak Yönetilen Kimlik ile My SQL Veritabanı'a bağlanın.
Azure aboneliğiniz yoksa başlamadan önce birücretsiz Azure hesabı oluşturun.
Önkoşullar
- Git
- Java JDK
- Maven
- Azure CLI sürüm 2.46.0 veya üzeri.
- Azure CLI serviceconnector parolasız uzantı sürümü 0.2.2 veya üzeri.
- jq
Örnek uygulamayı kopyalama ve depoyu hazırlama
Örnek depoyu kopyalamak ve örnek uygulama ortamını ayarlamak için terminalinizde aşağıdaki komutları çalıştırın.
git clone https://github.com/Azure-Samples/Passwordless-Connections-for-Java-Apps
cd Passwordless-Connections-for-Java-Apps/JakartaEE/jboss-eap/
MySQL için Azure Veritabanı oluşturma
Aboneliğinizde bir MySQL için Azure Veritabanı kaynağı oluşturmak için bu adımları izleyin. Spring Boot uygulaması bu veritabanına bağlanır ve çalıştırırken verilerini depolar ve uygulamayı nerede çalıştırdığınızdan bağımsız olarak uygulama durumunu kalıcı hale döndürür.
Azure CLI'da oturum açın ve oturum açma kimlik bilgilerinize bağlı birden fazla aboneliğiniz varsa aboneliğinizi isteğe bağlı olarak ayarlayın.
az login az account set --subscription <subscription-ID>
Azure kaynak grubu oluşturun.
export RESOURCE_GROUP=<resource-group-name> export LOCATION=eastus az group create --name $RESOURCE_GROUP --location $LOCATION
bir MySQL için Azure Veritabanı sunucusu oluşturun. Sunucu bir yönetici hesabıyla oluşturulur, ancak yönetim görevlerini gerçekleştirmek için Microsoft Entra yönetici hesabını kullanacağımız için kullanılmaz.
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
Uygulama için bir veritabanı oluşturun.
export DATABASE_NAME=checklist az mysql flexible-server db create \ --resource-group $RESOURCE_GROUP \ --server-name $MYSQL_HOST \ --database-name $DATABASE_NAME
App Service oluşturma
Linux'ta bir Azure Uygulaması Hizmeti kaynağı oluşturun. JBoss EAP için Premium SKU gerekir.
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"
Kimlik bağlantısı ile MySQL veritabanını bağlama
Ardından, Service Connector'ı kullanarak veritabanını bağlayın.
Azure CLI için Hizmet Bağlayıcısı parolasız uzantısını yükleyin:
az extension add --name serviceconnector-passwordless --upgrade
Aşağıdaki komutu kullanarak Microsoft Entra kimlik doğrulaması için kullanıcı tarafından atanan bir yönetilen kimlik oluşturun. Daha fazla bilgi için bkz. MySQL için Azure Veritabanı - Esnek Sunucu için Microsoft Entra kimlik doğrulamasını ayarlama.
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)
Genel Yöneticinizden veya Ayrıcalıklı Rol Yöneticinizden kullanıcı tarafından atanan yeni kimliğe şu izinleri vermesini isteyin:
User.Read.All
,GroupMember.Read.All
veApplication.Read.ALL
. Daha fazla bilgi için Active Directory kimlik doğrulamasının İzinler bölümüne bakın.Service Connector kullanarak sistem tarafından atanan yönetilen kimlikle uygulamanızı Bir MySQL veritabanına bağlayın. Bu bağlantıyı kurmak için az webapp connection create komutunu çalıştırın.
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
Bu Hizmet Bağlayıcısı komutu arka planda aşağıdaki görevleri yapar:
Azure Uygulaması Hizmeti tarafından barındırılan uygulama
$APPSERVICE_NAME
için sistem tarafından atanan yönetilen kimliği etkinleştirin.Microsoft Entra yöneticisini geçerli oturum açmış kullanıcı olarak ayarlayın.
1. adımda sistem tarafından atanan yönetilen kimlik için bir veritabanı kullanıcısı ekleyin ve veritabanının
$DATABASE_NAME
tüm ayrıcalıklarını bu kullanıcıya verin. Önceki komutun çıktısındaki bağlantı dizesi kullanıcı adını alabilirsiniz.adlı
AZURE_MYSQL_CONNECTIONSTRING
uygulamada Uygulama Ayarları'na bir bağlantı dizesi ekleyin.Not
Hata iletisini
The subscription is not registered to use Microsoft.ServiceLinker
görürseniz, Service Connector kaynak sağlayıcısını kaydetmek için komutunuaz provider register --namespace Microsoft.ServiceLinker
çalıştırın ve ardından bağlantı komutunu yeniden çalıştırın.
Uygulamayı dağıtma
Veritabanındaki verileri hazırlamak ve uygulamayı dağıtmak için bu adımları izleyin.
Veritabanı şeması oluşturma
Geçerli IP adresinizden bağlantıya izin vermek için bir güvenlik duvarı açın.
# 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}
Veritabanına bağlanın ve tablolar oluşturun.
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
Geçici güvenlik duvarı kuralını kaldırın.
az mysql flexible-server firewall-rule delete \ --resource-group $RESOURCE_GROUP \ --name $MYSQL_HOST \ --rule-name AllowCurrentMachineToConnect
Uygulamayı dağıtma
Uygulama Ayarları'nda bağlantı dizesi güncelleştirin.
Service Connector tarafından oluşturulan bağlantı dizesi alın ve parolasız kimlik doğrulaması eklentisi ekleyin. Bu bağlantı dizesi başlangıç betiğinde başvurulur.
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}"
Örnek uygulama WAR dosyasını oluşturabilen bir pom.xml dosyası içerir. Uygulamayı derlemek için aşağıdaki komutu çalıştırın.
mvn clean package -DskipTests
WAR ve başlangıç betiğini uygulama hizmetine dağıtın.
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
Test örneği web uygulaması
Uygulamayı test etmek için aşağıdaki komutu çalıştırın.
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
Kaynakları temizleme
Önceki adımlarda, bir kaynak grubunda Azure kaynakları oluşturdunuz. Bu kaynakların gelecekte gerekli olacağını düşünmüyorsanız, Cloud Shell’de aşağıdaki komutu çalıştırarak kaynak grubunu silin:
az group delete --name myResourceGroup
Bu komutun çalıştırılması bir dakika sürebilir.
Sonraki adım
Geliştirici kılavuzunda java uygulamalarını Linux üzerinde App Service çalıştırma hakkında daha fazla bilgi edinin.