Aracılığıyla paylaş


Öğ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

Ö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.

  1. 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>
    
  2. 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
    
  3. 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
    
  4. 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.Allve 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_CONNECTIONSTRINGuygulamada Uygulama Ayarlar'ne bir bağlantı dizesi ekleyin.

    Dekont

    Hata iletisini The subscription is not registered to use Microsoft.ServiceLinkergörürseniz, Service Bağlan veya kaynak sağlayıcısını kaydetmek için komutunu az 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

  1. 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}
    
  2. 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
    
  3. 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

  1. 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}"
    
  2. Ö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
    
  3. 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.