Öğretici: Parolasız bağlantıyla Java JBoss EAP App Service'ten My SQL Veritabanı'ye Bağlan
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.
- Service Bağlan or kullanarak Yönetilen Kimlik ile My SQL Veritabanı Bağlan.
Azure aboneliğiniz yoksa başlamadan önce birücretsiz Azure hesabı oluşturun.
Ön koş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ı 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>
Kaynak grubu adını not ederek bir 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ıyla MySQL veritabanını Bağlan
Ardından, Service Bağlan or kullanarak veritabanını bağlayın.
Azure CLI için Hizmet Bağlan veya parolasız uzantıyı yükleyin:
az extension add --name serviceconnector-passwordless --upgrade
Ardından 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)
Önemli
Kullanıcı tarafından atanan kimliği oluşturduktan sonra, Genel Yönetici istrator veya Privileged Role Yönetici istrator'ınızdan bu kimlik için aşağıdaki izinleri vermesini isteyin: User.Read.All
, GroupMember.Read.All
ve Application.Read.ALL
. Daha fazla bilgi için Active Directory kimlik doğrulamasının İzinler bölümüne bakın.
Ardından, Service Bağlan or 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 Service Bağlan or 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'ne bir bağlantı dizesi ekleyin.Dekont
Hata iletisini
The subscription is not registered to use Microsoft.ServiceLinker
görürseniz, Service Bağlan veya 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 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'nde bağlantı dizesi güncelleştirin.
Service Bağlan or 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ımlar
Geliştirici kılavuzunda java uygulamalarını Linux üzerinde App Service çalıştırma hakkında daha fazla bilgi edinin.
Geri Bildirim
https://aka.ms/ContentUserFeedback.
Çok yakında: 2024 boyunca, içerik için geri bildirim mekanizması olarak GitHub Sorunları’nı kullanımdan kaldıracak ve yeni bir geri bildirim sistemiyle değiştireceğiz. Daha fazla bilgi için bkz.Gönderin ve geri bildirimi görüntüleyin