Öğretici: Linux ve MySQL üzerinde Azure Uygulaması Hizmeti ile JBoss web uygulaması oluşturma

Bu öğreticide, Azure App Service'te MySQL için Azure Veritabanı'nın kullanıldığı bir MySQL veritabanına bağlanan güvenli bir JBoss uygulamasının nasıl derlenip yapılandırılacağı ve dağıtılacağı gösterilmektedir. Azure App Service, Windows veya Linux üzerinde uygulamaları kolayca dağıtabilen, yüksek oranda ölçeklenebilir ve kendi kendini yamalayan bir web barındırma servisidir. Bu öğreticiyi tamamladığınızda , Linux üzerinde Azure App Service üzerinde çalışan bir JBoss uygulamanız vardır.

Dikkat

App Service'te JBoss Enterprise Application Platform (JBoss EAP), artık "Kendi Lisansını Getir" (KLG) faturalamayı destekliyor. Bu yaklaşım, mevcut Red Hat aboneliklerine sahip müşterilerin bu lisansları Doğrudan Azure App Service'te JBoss EAP dağıtımlarına uygulamasına olanak tanır. Daha fazla bilgi edinin.

MySQL'de veri depolayarak JBoss uygulamasının ekran görüntüsü.

Bu öğreticide aşağıdakilerin nasıl yapılacağını öğreneceksiniz:

  • Azure Uygulaması Hizmeti ve MySQL için Azure Veritabanı Esnek Sunucu için varsayılan olarak güvenli bir mimari oluşturun.
  • Parolasız bağlantı dizesi kullanarak veritabanı bağlantısının güvenliğini sağlayın.
  • JBoss CLI kullanarak App Service'te JBoss veri kaynaklarını doğrulayın.
  • GitHub deposundan App Service'e bir JBoss örnek uygulaması dağıtın.
  • Uygulama kodunda App Service uygulama ayarlarına erişin.
  • Güncelleştirmeler yapın ve uygulama kodunu yeniden dağıtın.
  • Tanılama günlüklerini App Service'ten akışla aktarabilirsiniz.
  • Uygulamayı Azure portalında yönetin.
  • Azure Geliştirici CLI'sını kullanarak aynı mimariyi sağlayın ve dağıtın.
  • GitHub Codespaces ve GitHub Copilot ile geliştirme iş akışınızı iyileştirin.

Önkoşullar

Sonuna Geç

Bu öğreticide örnek uygulamayı hızla dağıtabilir ve Azure'da çalıştığını görebilirsiniz. Azure Cloud Shell'de aşağıdaki komutları çalıştırın ve istemleri izleyin.

mkdir msdocs-jboss-mysql-sample-app
cd msdocs-jboss-mysql-sample-app
azd init --template msdocs-jboss-mysql-sample-app
azd up

1. Örneği çalıştırın

İlk olarak, başlangıç noktası olarak örnek bir veri temelli uygulama ayarlayın. Kolaylık sağlamak için örnek depo bir geliştirme kapsayıcısı yapılandırması içerir. Geliştirme kapsayıcısı veritabanı, önbellek ve örnek uygulamanın ihtiyaç duyduğu tüm ortam değişkenleri dahil olmak üzere bir uygulama geliştirmek için ihtiyacınız olan her şeye sahiptir. Geliştirme kapsayıcısı GitHub kod alanında çalıştırılabilir; başka bir deyişle örneği web tarayıcısıyla herhangi bir bilgisayarda çalıştırabilirsiniz.

1. Adım: Yeni bir tarayıcı penceresinde:

  1. GitHub hesabınıza giriş yapın.
  2. Şuraya gidin: https://github.com/Azure-Samples/msdocs-jboss-mysql-sample-app/fork
  3. Yalnızca ana dalı kopyala seçimini kaldırın. Tüm dalları istiyorsun.
  4. Çatal oluştur'u seçin.

2. Adım: GitHub forkunda:

  1. Başlangıç dalı için main>starter-no-infra öğesini seçin. Bu dal yalnızca örnek projeyi içerir ve Azure ile ilgili dosya veya yapılandırma içermez.
  2. Kod>Kod Alanları. Ardından starter-no-infra üzerinde kod alanı oluştur'u seçin. Kod alanının ayarlanması birkaç dakika sürer.

Adım 3: Kod alanı terminalinde:

  1. mvn clean wildfly:run'i çalıştırın.
  2. bildirimini Your application running on port 8080 is available.gördüğünüzde, WildFly sunucusunun uygulamayı yüklemeyi bitirmesi için birkaç saniye daha bekleyin. Ardından Tarayıcıda Aç'ı seçin. Örnek uygulamayı yeni bir tarayıcı sekmesinde görmeniz gerekir. WildFly sunucusunu durdurmak için yazın Ctrl+C.

İpucu

GitHub Copilot'a bu depo hakkında soru sorabilirsiniz. Örneğin:

  • @workspace Bu proje ne yapar?
  • @workspace .devcontainer klasörü ne yapar?

Sorun mu yaşıyorsunuz? Sorun Giderme bölümüne bakın.

2. App Service ve MySQL oluşturma

İlk olarak Azure kaynaklarını oluşturun. Bu öğreticide kullanılan adımlar, App Service ve MySQL için Azure Veritabanı içeren varsayılan olarak güvenli bir kaynak kümesi oluşturur. Oluşturma işlemi için şunları belirtirsiniz:

  • Web uygulamasının Adı . Uygulamanızın DNS adının bir parçası olarak kullanılır.
  • Uygulamanın dünyada fiziksel olarak çalıştırılacağı Bölge. Bölge, uygulamanızın DNS adının bir parçasıdır.
  • Uygulamanın Çalışma Zamanı yığını . Burası, uygulamanız için kullanılacak Java sürümünü seçtiğiniz yerdir.
  • Uygulama için Barındırma planı . Bu, uygulamanız için özellik kümesini ve ölçeklendirme kapasitesini içeren fiyatlandırma katmanıdır.
  • Uygulamanın Kaynak Grubu . Kaynak grubu, uygulama için gereken tüm Azure kaynaklarını bir mantıksal kapsayıcıda gruplandırmanıza olanak tanır.

Azure portalında oturum açın ve Azure Uygulaması Hizmeti kaynaklarınızı oluşturmak için bu adımları izleyin.

1. Adım: Azure portalında:

  1. Üstteki arama çubuğuna app service yazın.
  2. Hizmetler başlığı altında App Service'i seçin.
  3. Web Uygulaması Oluştur'u> seçin. Doğrudan oluşturma sihirbazına da gidebilirsiniz.

2. Adım:Web Uygulaması Oluştur sayfasında formu aşağıdaki gibi doldurun.

  1. Ad: msdocs-jboss-mysql. İşlem sizin için msdocs-jboss-mysql_group adlı bir kaynak grubu oluşturur.
  2. Çalışma zamanı yığını: Java 17.
  3. Java web sunucusu yığını: Red Hat JBoss EAP 8.
  4. İşletim sistemi: Linux.
  5. Bölge: Size yakın herhangi bir Azure bölgesi.
  6. Linux Planı: Yeni oluşturun ve msdocs-jboss-mysql adını kullanın.
  7. Fiyatlandırma planı: Premium V3 P0V3. Hazır olduğunuzda ölçeği farklı bir fiyatlandırma katmanına artırabilirsiniz.

Adım 3:

  1. Veritabanı sekmesini seçin.
  2. Veritabanı Oluştur'u seçin.
  3. Altyapı'daMySQL - Esnek Sunucu'ya tıklayın.
  4. Dağıtım'ı seçin.

4. Adım:

  1. Dağıtım sekmesini seçin.
  2. Sürekli dağıtımı etkinleştirin.
  3. Kuruluş'ta GitHub diğer adınızı seçin.
  4. Depo'damsdocs-jboss-mysql-sample-app öğesini seçin.
  5. Branch'testarter-no-infra'yı seçin.
  6. Temel kimlik doğrulamasının devre dışı olduğundan emin olun.
  7. Gözden geçir ve oluştur'u seçin.
  8. Doğrulama tamamlandıktan sonra Oluştur'u seçin.

5. Adım: Dağıtımın tamamlanması birkaç dakika sürer. Dağıtım tamamlandıktan sonra Kaynağa git seçeneğini seçin. Sizi doğrudan App Service uygulamasına götürür, ancak aşağıdaki kaynaklar oluşturulur:

  • Kaynak grubu: Oluşturulan tüm kaynaklar için kapsayıcı.
  • App Service planı: App Service için işlem kaynaklarını tanımlar. Temel katmanda bir Linux planı oluşturulur.
  • App Service: Uygulamanızı temsil eder ve App Service planında çalışır.
  • Sanal ağ: App Service uygulamasıyla tümleştirilmiş ve arka uç ağ trafiğini yalıtıyor.
  • MySQL için Azure Veritabanı Esnek Sunucusu: Yalnızca sanal ağdan erişilebilir. Sunucuda sizin için bir veritabanı ve kullanıcı oluşturulur.
  • Özel DNS bölgeleri: Sanal ağdaki veritabanı sunucusunun DNS çözümlemesini etkinleştirin.
  • Özel uç noktalar: Sanal ağdaki veritabanı sunucusu için erişim uç noktaları.

Sorun mu yaşıyorsunuz? Sorun Giderme bölümüne bakın.

3. Parolasız bağlantı oluşturma

Bu adımda, daha sonra JBoss sunucunuzda bir veri kaynağı oluşturmak için kullanabileceğiniz yönetilen kimlik tabanlı bir hizmet bağlantısı oluşturursunuz. MySQL veritabanına bağlanmak için yönetilen kimlik kullanarak kodunuz, gizli bilgilerin yanlışlıkla sızdırılmasına karşı güvende olur.

1. Adım: Yönetilen kimlik oluşturma.

  1. Üstteki arama çubuğuna yönetilen kimlik yazın.
  2. Hizmetler başlığı altında Yönetilen Kimlikler'i seçin.
  3. Oluştur'u seçin.
  4. Kaynak grubundamsdocs-jboss-mysql_group öğesini seçin.
  5. Bölge'de, web uygulamanız için kullandığınız bölgeyi seçin.
  6. Ad alanına msdocs-jboss-mysql-server-identity yazın.
  7. Gözden geçir ve oluştur'u seçin.
  8. Oluştur'u seçin.

2. Adım: MySQL sunucusunda Microsoft Entra kimlik doğrulamasını etkinleştirin.

  1. Üst arama çubuğuna msdocs-jboss-mysql-server yazın.
  2. msdocs-jboss-mysql-server adlı MySQL için Azure Veritabanı Esnek Sunucu kaynağını seçin.
  3. Sol menüden Güvenlik>Kimlik Doğrulaması'nı seçin.
  4. Erişim ata bölümünde Yalnızca Microsoft Entra kimlik doğrulamasını seçin.
  5. Kimlik Seç bölümünde Seç'i seçin.
  6. msdocs-jboss-mysql-server-identity öğesini ve ardından Ekle'yi seçin. Kimliğin MySQL sunucusuna atanmış olması biraz zaman alır.
  7. Microsoft Entra Yönetici Adı'ndaSeç'i seçin.
  8. Azure hesabınızı bulun ve seçin, ardından Seç'i seçin.
  9. Kaydet'i seçin ve işlemin tamamlanmasını bekleyin.

3. Adım: Yönetilen kimlik tabanlı hizmet bağlayıcısı ekleme.

  1. Üst arama çubuğuna msdocs-jboss-mysql yazın.
  2. msdocs-jboss-mysql adlı App Service kaynağını seçin.
  3. App Service sayfasındaki sol menüde Ayarlar > Hizmet Bağlayıcısı'nı seçin.
  4. Oluştur'u seçin.
  5. Temel Bilgiler sekmesinde:
  6. Hizmet türünüMySQL için DB esnek sunucusu olarak ayarlayın.
  7. MySQL esnek sunucusunumsdocs-jboss-mysql-server olarak ayarlayın.
  8. MySQL veritabanınımsdocs-jboss-mysql-database olarak ayarlayın.
  9. İstemci türünüJava olarak ayarlayın.
  10. Kimlik Doğrulaması sekmesini seçin.
  11. Sistem tarafından atanan yönetilen kimlik'i seçin.
  12. Gözden Geçir + Oluştur sekmesini seçin.
  13. Doğrulama tamamlandığında Cloud Shell'de oluştur'u seçin ve Cloud Shell'de işlemin tamamlanmasını bekleyin.
  14. Çıkış JSON'unu gördüğünüzde Cloud Shell'i kapatabilirsiniz. Ayrıca, Bağlantı oluştur iletişim kutusunu kapatın.
  15. Yeni hizmet bağlayıcısını göstermek için Yenile'yi seçin.

4. Adım: Bağlantı dizesine kimlik doğrulama eklentileri ekleyin.

  1. Soldaki menüden Ortam değişkenleri'ni seçin.
  2. AZURE_MYSQL_CONNECTIONSTRING'ı seçin. Değer alanı bir user içermeli, ancak password içermemelidir. Kullanıcı yönetilen bir kimliktir.
  3. App Service uygulamanızdaki JBoss sunucusunda kimlik doğrulama eklentileri yönetilen kimliğin kimliğini doğrular, ancak yine de yönetilen kimliği bağlantı dizesine eklemeniz gerekir. Değerin sonuna kadar kaydırın ve &defaultAuthenticationPlugin=com.azure.identity.extensions.jdbc.mysql.AzureMysqlAuthenticationPlugin&authenticationPlugins=com.azure.identity.extensions.jdbc.mysql.AzureMysqlAuthenticationPlugin ögesini ekleyin.
  4. Uygula'yı seçin.
  5. Uygula'yı ve ardından Onayla'yı seçin.

Sorun mu yaşıyorsunuz? Sorun Giderme bölümüne bakın.

4. JNDI veri kaynağını onaylayın

Oracle, SQL Server, PostgreSQL veya MySQL için geçerli bir JDBC bağlantı dizesi içeren bir uygulama ayarı eklerseniz, App Service bunun için JBoss sunucusuna bir Java Adlandırma ve Dizin Arabirimi (JNDI) veri kaynağı ekler. Bu adımda, JNDI veri kaynağını doğrulamak için uygulama kapsayıcısına SSH bağlantısını kullanırsınız. Bu süreçte SSH kabuğuna erişmeyi ve JBoss CLI'yi çalıştırmayı öğreneceksiniz.

1. Adım: App Service sayfasına geri dönün:

  1. Sol menüde Geliştirme Araçları>SSH'yi seçin.
  2. Git'i seçin.

2. Adım: SSH terminalinde:

  1. $JBOSS_HOME/bin/jboss-cli.sh --connect'i çalıştırın.
  2. JBoss CLI bağlantısında komutunu çalıştırın ls subsystem=datasources/data-source. Adlı AZURE_MYSQL_CONNECTIONSTRING_DSotomatik olarak oluşturulan veri kaynağını görmeniz gerekir.
  3. ile /subsystem=datasources/data-source=AZURE_MYSQL_CONNECTIONSTRING_DS:read-attribute(name=jndi-name)veri kaynağının JNDI adını alın. Artık daha sonra uygulama kodunuzda kullanabileceğiniz bir JNDI adınız java:jboss/env/jdbc/AZURE_MYSQL_CONNECTIONSTRING_DSvardır.

Dikkat

Yalnızca /home dizinindeki dosyalarda yapılan değişiklikler, uygulamanın yeniden başlatılmasının ardından kalıcı olabilir. Örneğin, JBoss CLI'da sunucu yapılandırmasını düzenler /opt/eap/standalone/configuration/standalone.xml veya değiştirirseniz, değişiklikler uygulamanın yeniden başlatılmasının ötesinde kalıcı olmaz. Değişikliklerinizi kalıcı hale getirmek için, Azure App Service'te Tomcat, JBoss veya Java SE uygulaması için veri kaynaklarını yapılandırma bölümünde gösterildiği gibi bir başlangıç betiği kullanın.

Sorun mu yaşıyorsunuz? Sorun Giderme bölümüne bakın.

5. Örnek kodu dağıtma

Bu adımda GitHub Actions'ı kullanarak GitHub dağıtımını yapılandıracaksınız. App Service'e dağıtmanın birçok yolundan yalnızca biridir, aynı zamanda dağıtım sürecinizde sürekli tümleştirmeye sahip olmanın harika bir yoludur. Varsayılan olarak, GitHub deponuzun her git push derleme ve dağıtım işlemini başlatır.

JBoss kuralında olduğu gibi, JBoss'un kök bağlamını dağıtmak istiyorsanız, yerleşik yapıtınızı ROOT.war olarak adlandırın.

1. Adım: Örnek çatalınızın GitHub kod alanında git pull origin starter-no-infra çalıştırmak için geri dönün. Bu komut, yeni işlenen iş akışı dosyasını kod alanınıza çeker. .github/workflows/starter-no-infra_msdocs-jboss-mysql.yml adresinde gereksinimlerinize göre değiştirebilirsiniz.

2. Adım (Seçenek 1: GitHub Copilot ile):

  1. Yeni bir sohbet oturumu başlatmak için Sohbet görünümünü seçin, ardından + öğesini seçin.
  2. "@workspace Uygulama veritabanına nasıl bağlanır? " Copilot, veri kaynağı ve nasıl yapılandırıldığı hakkında java:jboss/MySQLDS size bazı açıklamalar verebilir.
  3. "Azure'daki JBoss'taki veri kaynağı java:jboss/env/jdbc/AZURE_MYSQL_CONNECTIONSTRING_DS JNDI adını kullanır" deyin. Copilot size aşağıdaki Seçenek 2'dekine benzer bir kod önerisi verebilir : GitHub Copilot adımı olmadan ve hatta sınıfta değişiklik yapmanızı bile söyleyebilir. GitHub Copilot her seferinde aynı yanıtı vermez. Yanıtta ince ayar yapmak için daha fazla soru sormanız gerekebilir. İpuçları için bkz. Kod alanımda GitHub Copilot ile ne yapabilirim?

2. Adım (Seçenek 2: GitHub Copilot olmadan):

  1. Gezginde src/main/resources/META-INF/persistence.xml açın. Uygulama başlatıldığında, bu dosyadaki veritabanı ayarlarını yükler.
  2. değerini <jta-data-source>java:jboss/MySQLDSjava:jboss/env/jdbc/AZURE_MYSQL_CONNECTIONSTRING_DSolarak değiştirin. Bu, daha önce SSH kabuğunda JBoss CLI ile bulduğunuz veri kaynağıdır.

Adım 3:

  1. Kaynak Denetimi uzantısını seçin.
  2. Metin kutusuna Configure Azure JNDI name gibi bir taahhüt mesajı yazın.
  3. İşle'yi seçin, ardından Evet ile onaylayın.
  4. Değişiklikleri eşitle 1'i seçin, ardından Tamam ile onaylayın.

4. Adım: Azure portalında App Service yönetimi sayfasına geri dönün:

  1. Sol menüden Dağıtım>Dağıtım Merkezi'ni seçin.
  2. Günlükler'i seçin. Taahhüt ettiğiniz değişikliklerden yeni bir dağıtım çalıştırması zaten başlatıldı.
  3. Dağıtım yürütmesinin günlük öğesinde, en yeni zaman damgasına sahip olan Derleme/Dağıtma Günlükleri girdisini seçin.

5. Adım: GitHub deponuza yönlendirilirsiniz ve GitHub eyleminin çalıştığını görürsünüz. İş akışı dosyası derleme ve dağıtma olarak iki ayrı aşama tanımlar. GitHub çalıştırmasının Tamamlandı durumunu göstermesini bekleyin. Yaklaşık 5 dakika sürer.

Sorun mu yaşıyorsunuz? Sorun Giderme bölümüne bakın.

6. Uygulamaya göz atın

1. Adım: App Service sayfasında:

  1. Sol menüden Genel Bakış'ı seçin.
  2. Varsayılan etki alanında uygulamanızın URL'sini seçin.

2. Adım: Listeye birkaç görev ekleyin. Tebrikler! MySQL için Azure Veritabanı'na güvenli bağlantıyla Azure App Service'te bir web uygulaması çalıştırıyorsunuz.

Sorun mu yaşıyorsunuz? Sorun Giderme bölümüne bakın.

7. Tanılama günlüklerini akışla aktarma

Azure Uygulaması Hizmeti, uygulamanızla ilgili sorunları tanılamanıza yardımcı olmak için konsola gönderilen tüm iletileri yakalar. Örnek uygulama, aşağıdaki kod parçacığında gösterildiği gibi bu özelliği göstermek için standart Log4j günlük deyimlerini içerir:

private static final Logger logger = Logger.getLogger(MethodHandles.lookup().lookupClass().getName());

@PersistenceContext
private EntityManager entityManager;

public List<Task> getAllTasks() {
    logger.log(Level.INFO, "Finding all tasks. ");

    return this.entityManager.createNamedQuery("findAllTasks", Task.class).getResultList();
}

App Service sayfasında, soldaki menüden İzleme>Günlük akışı seçin. Uygulamanızın, platform günlükleri ve kapsayıcının içindeki günlükler de dahil olmak üzere, tüm günlüklerini görürsünüz.

.NET, Node.js, Python ve Java uygulamaları için Azure İzleyici OpenTelemetry'yi etkinleştirme konusundaki serideki Java uygulamalarında oturum açma hakkında daha fazla bilgi edinin.

Sorun mu yaşıyorsunuz? Sorun Giderme bölümüne bakın.

8. Kaynakları temizleme

İşiniz bittiğinde, kaynak grubunu silerek Azure aboneliğinizdeki tüm kaynakları silebilirsiniz.

1. Adım: Azure portalının üst kısmındaki arama çubuğunda:

  1. msdocs-jboss-mysql_group kaynak grubu adını girin.
  2. Kaynak grubunu seçin.

2. Adım: Kaynak grubu sayfasında Kaynak grubunu sil'i seçin.

Adım 3:

  1. Kaynak grubu adını yazarak silme işleminizi onaylayın.
  2. Sil'i seçin.
  3. Sil ile yeniden onaylayın.

2. Azure kaynakları oluşturma ve örnek uygulama dağıtma

Bu adımda Azure kaynaklarını oluşturur ve Linux üzerinde App Service için örnek bir uygulama dağıtırsınız. Bu öğreticide kullanılan adımlar, App Service ve MySQL için Azure Veritabanı içeren varsayılan olarak güvenli bir kaynak kümesi oluşturur.

Geliştirme kapsayıcısı zaten Azure Geliştirici CLI'sine (AZD) sahiptir.

  1. Depo kökünden azd init komutunu çalıştırın.

    azd init --template jboss-app-service-mysql-infra
    
  2. İstendiğinde aşağıdaki yanıtları verin:

    Soru Yanıt
    '<your-directory>' içinde bir uygulamayı başlatmaya devam mı edin? Y
    Bu dosyalarla ne yapmak istiyorsunuz? Mevcut dosyalarımı değiştirmeden tut
    Yeni bir ortam adı girin Benzersiz bir ad yazın. AZD şablonu, Azure'da (<app-name>-<hash>.azurewebsites.net) web uygulamanızın DNS adının bir parçası olarak bu adı kullanır. Alfasayısal karakterlere ve kısa çizgilere izin verilir.
  3. komutunu çalıştırıp azd auth login istemi izleyerek Azure'da oturum açın:

    azd auth login
    
  4. Gerekli Azure kaynaklarını oluşturun ve azd up komutuyla uygulama kodunu dağıtın. İstemi izleyerek Azure kaynakları için istenen aboneliği ve konumu seçin.

    azd up
    

    Komutun azd up tamamlanması yaklaşık 15 dakika sürer. Redis önbelleği en çok zaman alır. Komut ayrıca uygulama kodunuzu derleyip dağıtır. Kodunuzu daha sonra App Service ile çalışacak şekilde değiştirirsiniz. Komut çalışırken, Azure'daki dağıtıma bir bağlantı da dahil olmak üzere sağlama ve dağıtım işlemi hakkında iletiler sağlar. Tamamlandığında, komut dağıtılan uygulamanın bağlantısını da görüntüler.

    Bu AZD şablonu, aşağıdaki Azure kaynaklarıyla varsayılan olarak güvenli bir mimari oluşturan dosyaları (azure.yaml ve infra dizini) içerir:

    • Kaynak grubu: Oluşturulan tüm kaynaklar için kapsayıcı.
    • App Service planı: App Service için işlem kaynaklarını tanımlar. B1 katmanında bir Linux planı oluşturulur.
    • App Service: Uygulamanızı temsil eder ve App Service planında çalışır.
    • Sanal ağ: App Service uygulamasıyla tümleştirilmiş ve arka uç ağ trafiğini yalıtıyor.
    • MySQL için Azure Veritabanı Esnek Sunucusu: Yalnızca sanal ağdan erişilebilir. Sunucuda sizin için bir veritabanı oluşturulur.
    • Redis için Azure Cache: Yalnızca sanal ağ içinden erişilebilir.
    • Özel uç noktalar: Sanal ağdaki anahtar kasası ve Redis önbelleği için erişim uç noktaları.
    • Özel DNS bölgeleri: Sanal ağdaki anahtar kasası, veritabanı sunucusu ve Redis önbelleğinin DNS çözümlemesini etkinleştirin.
    • Log Analytics çalışma alanı: Uygulamanızın günlüklerini göndermesi için hedef kapsayıcı görevi görür ve burada günlükleri de sorgulayabilirsiniz.
    • Anahtar kasası: Veritabanı parolanızı AZD ile tekrar dağıttığınızda aynı tutmak için kullanılır.

    Komut, kaynak oluşturmayı ve uygulama kodunu ilk kez dağıtmayı tamamlar, ancak dağıtılan örnek uygulama henüz çalışmaz. Azure'daki veritabanına bağlanması için küçük değişiklikler yapmanız gerekir.

Sorun mu yaşıyorsunuz? Sorun Giderme bölümüne bakın.

3. Bağlantı dizelerini doğrulayın

Kullandığınız AZD şablonu zaten uygulama ayarları olarak sizin için bağlantı değişkenlerini oluşturmuş ve bunları terminale çıkış olarak göndermektedir. Uygulama ayarları, bağlantı gizli dizilerini kod deponuzun dışında tutmanın bir yoludur.

  1. AZD çıkışında uygulama ayarını AZURE_MYSQL_CONNECTIONSTRINGbulun. Yalnızca ayar adları görüntülenir. AZD çıkışında şu şekilde görünürler:

     App Service app has the following app settings:
             - AZURE_KEYVAULT_RESOURCEENDPOINT
             - AZURE_KEYVAULT_SCOPE
             - AZURE_MYSQL_CONNECTIONSTRING
             - AZURE_REDIS_CONNECTIONSTRING
     

    AZURE_MYSQL_CONNECTIONSTRINGAzure'daki MySQL veritabanına bağlantı dizesi içerir. Daha sonra kodunuzda kullanmanız gerekir.

  2. Size kolaylık sağlamak için AZD şablonu size uygulamanın uygulama ayarları sayfasının doğrudan bağlantısını gösterir. Bağlantıyı bulun ve yeni bir tarayıcı sekmesinde açın.

    Geçerli bir Oracle, SQL Server, PostgreSQL veya MySQL bağlantı dizesi içeren bir uygulama ayarı eklerseniz, App Service bunu JBoss sunucusunun context.xml dosyasına Java Adlandırma ve Dizin Arabirimi (JNDI) veri kaynağı olarak ekler.

Sorun mu yaşıyorsunuz? Sorun Giderme bölümüne bakın.

4. JNDI veri kaynağını onaylayın

Bu adımda, JBoss sunucusundaki JNDI veri kaynağını doğrulamak için uygulama kapsayıcısına SSH bağlantısını kullanırsınız. Bu süreçte, JBoss kapsayıcısı için SSH kabuğuna erişmeyi öğreneceksiniz.

  1. AZD çıkışında SSH oturumunun URL'sini bulun ve tarayıcınızda bu URL'ye gidin. Çıktıda şöyle görünür:

     Open SSH session to App Service container at: <URL>
     
  2. SSH terminalinde komutunu çalıştırın $JBOSS_HOME/bin/jboss-cli.sh --connect.

  3. JBoss CLI bağlantısında komutunu çalıştırın ls subsystem=datasources/data-source. Adlı AZURE_MYSQL_CONNECTIONSTRING_DSotomatik olarak oluşturulan veri kaynağını görmeniz gerekir.

  4. ile /subsystem=datasources/data-source=AZURE_MYSQL_CONNECTIONSTRING_DS:read-attribute(name=jndi-name)veri kaynağının JNDI adını alın. Artık daha sonra uygulama kodunuzda kullanabileceğiniz bir JNDI adınız java:jboss/env/jdbc/AZURE_MYSQL_CONNECTIONSTRING_DSvardır.

    SSH kabuğunda çalıştırılacak komutları ve bunların çıkışını gösteren ekran görüntüsü.

Dikkat

Yalnızca /home dizinindeki dosyalarda yapılan değişiklikler, uygulamanın yeniden başlatılmasının ardından kalıcı olabilir. Örneğin, JBoss CLI'da sunucu yapılandırmasını düzenler /opt/eap/standalone/configuration/standalone.xml veya değiştirirseniz, değişiklikler uygulamanın yeniden başlatılmasının ötesinde kalıcı olmaz. Değişikliklerinizi kalıcı hale getirmek için, Azure App Service'te Tomcat, JBoss veya Java SE uygulaması için veri kaynaklarını yapılandırma bölümünde gösterildiği gibi bir başlangıç betiği kullanın.

Sorun mu yaşıyorsunuz? Sorun Giderme bölümüne bakın.

5. Örnek kodu değiştirme ve yeniden dağıtma

  1. Yeni bir sohbet oturumu başlatmak için GitHub kod alanında Sohbet görünümünü seçin ve ardından + düğmesine tıklayın.

  2. "@workspace Uygulama veritabanına nasıl bağlanır? " Copilot, veri kaynağı ve nasıl yapılandırıldığı hakkında java:jboss/MySQLDS size bazı açıklamalar verebilir.

  3. "@workspace persistence.xml tanımlanan veri kaynağını JBoss'ta mevcut bir JNDI veri kaynağıyla değiştirmek istiyorum" sorusunu sorun. Copilot size aşağıdaki Seçenek 2'dekine benzer bir kod önerisi verebilir : GitHub Copilot adımları olmadan ve hatta persistence.xml dosyasında değişiklik yapmanızı bile söyleyebilir.

  4. Gezginde src/main/resources/META-INF/persistence.xml açın ve önerilen JNDI değişikliğini yapın.

    GitHub Copilot her seferinde aynı yanıtı vermez. Yanıtta ince ayar yapmak için başka sorular sormanız gerekebilir. İpuçları için bkz. Kod alanımda GitHub Copilot ile ne yapabilirim?

  5. Codespace terminalinde komutunu çalıştırın azd deploy.

    azd deploy
    

İpucu

azd up her zaman kullanabilir ve bu, azd package, azd provision ve azd deploy işlemlerinin tümünü yapar.

.war dosyasının nasıl paketlenmiş olduğunu öğrenmek için kendi başına çalıştırabilirsinizazd package --debug.

Sorun mu yaşıyorsunuz? Sorun Giderme bölümüne bakın.

6. Uygulamaya göz atın

  1. AZD çıkışında uygulamanızın URL'sini bulun ve tarayıcıda bu URL'ye gidin. URL, AZD çıkışında şöyle görünür:

     Deploying services (azd deploy)
    
       (✓) Done: Deploying service web
       - Endpoint: <URL>
     
  2. Listeye birkaç görev ekleyin.

    Azure'da Çalışan MySQL ile JBoss web uygulamasının görevleri gösteren ekran görüntüsü.

    Tebrikler! MySQL için Azure Veritabanı'na güvenli bağlantıyla Azure App Service'te bir web uygulaması çalıştırıyorsunuz.

Sorun mu yaşıyorsunuz? Sorun Giderme bölümüne bakın.

7. Tanılama günlüklerini akışla aktarma

Azure Uygulaması Hizmeti, uygulamanızla ilgili sorunları tanılamanıza yardımcı olmak için konsol günlüklerini yakalayabilir. Kolaylık olması için AZD şablonu yerel dosya sisteminde günlüğe kaydetmeyi zaten etkinleştirdi ve günlükleri Log Analytics çalışma alanına gönderir.

Örnek uygulama, aşağıdaki kod parçacığında gösterildiği gibi bu özelliği göstermek için standart Log4j günlük deyimlerini içerir:

private static final Logger logger = Logger.getLogger(MethodHandles.lookup().lookupClass().getName());

@PersistenceContext
private EntityManager entityManager;

public List<Task> getAllTasks() {
    logger.log(Level.INFO, "Finding all tasks. ");

    return this.entityManager.createNamedQuery("findAllTasks", Task.class).getResultList();
}

AZD çıkış verilerinde App Service günlüklerini aktaran bağlantıyı bulun ve tarayıcıda bu bağlantıyı açın. Bağlantı, AZD çıkışında şöyle görünür:

Stream App Service logs at: <URL>

.NET, Node.js, Python ve Java uygulamaları için Azure İzleyici OpenTelemetry'yi etkinleştirme konusundaki serideki Java uygulamalarında oturum açma hakkında daha fazla bilgi edinin.

Sorun mu yaşıyorsunuz? Sorun Giderme bölümüne bakın.

8. Kaynakları temizleme

Geçerli dağıtım ortamındaki tüm Azure kaynaklarını silmek için komutunu çalıştırın azd down ve istemleri izleyin.

azd down

Sorun giderme

Oluşturma sihirbazında 'Kendi Lisansını Getir özelliğini kullanma hakkı yok' hatasını görüyorum.

Şu hatayı The subscription 'aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e' is not entitled to use the Bring Your Own License feature when creating the applicationgörüyorsanız, Java web sunucusu yığınındaRed Hat JBoss EAP 7/8 BYO Lisansı'nı seçtiğiniz ancak Red Hat Cloud Access'te Azure hesabınızı ayarlamadığınız veya Red Hat Cloud Access'te etkin bir JBoss EAP lisansınız olmadığı anlamına gelir.

MySQL için Azure Veritabanı Esnek Sunucu için portal dağıtım görünümünde Çakışma durumu gösterilir.

Aboneliğinize ve seçtiğiniz bölgeye bağlı olarak, MySQL için Azure Veritabanı Esnek Sunucunun Conflictdağıtım durumunu, İşlem ayrıntıları bölümünde aşağıdaki iletiyle görebilirsiniz:

InternalServerError: An unexpected error occurred while processing the request.

Bu hata büyük olasılıkla aboneliğinizde seçtiğiniz bölge için bir sınırdan kaynaklanır. Dağıtımınız için farklı bir bölge seçmeyi deneyin.

Bağlantı oluştur iletişim kutusunda Cloud Shell'de Oluştur düğmesi gösterilir, ancak etkinleştirilmez.

İletişim kutusunda bir hata iletisi de görebilirsiniz: The database server is in Virtual Network and Cloud Shell can't connect to it. Please copy the commands and execute on an environment which can connect to the database server in Virtual Network.

Hizmet bağlayıcısı otomasyonu için MySQL sunucusuna ağ erişimi gerekir. MySQL sunucu kaynağınızın ağ ayarlarına bakın ve genel IP adresi üzerinden İnternet aracılığıyla bu kaynağa genel erişime izin ver seçeneğinin en azından seçildiğinden emin olun. Hizmet Bağlayıcısı bundan sonrasını halledebilir.

Bu onay kutusunu görmüyorsanız, bunun yerine Web App + Veritabanı sihirbazını kullanarak dağıtımı oluşturmuş olabilirsiniz ve dağıtım, MySQL sunucusuna tüm genel ağ erişimini kilitler. Yapılandırmayı değiştirmenin bir yolu yoktur. Uygulamanın Linux kapsayıcısı sanal ağ tümleştirmesi aracılığıyla MySQL'e erişebildiğinden, uygulamanın SSH oturumuna Azure CLI yükleyebilir ve sağlanan Cloud Shell komutlarını orada çalıştırabilirsiniz.

Dağıtılan örnek uygulama, görev listesi uygulamasını göstermez.

Görev listesi uygulaması yerine JBoss giriş sayfasını görüyorsanız App Service büyük olasılıkla en son kod dağıtımınızdan güncelleştirilmiş kapsayıcıyı yüklemeye devam ediyordur. Birkaç dakika bekleyin ve sayfayı yenileyin.

Uygulamam başlatılamadı ve günlüklerde 'Kullanıcı için erişim reddedildi... (parola kullanıyor mu: HAYIR)' ifadesini görüyorum.

Bu hatanın nedeni büyük olasılıkla bağlantı dizesine parolasız kimlik doğrulama eklentisini eklememiş olmanızdır. MySQL için Azure Veritabanı'nı Hizmet Bağlayıcısı ile Tümleştirme için Java örnek koduna bakın. 3'teki yönergeleri izleyerek MySQL bağlantı dizesini değiştirin . Parolasız bağlantı oluşturun.

Tanılama günlüklerinde "Tablo 'Görev' zaten var" hatası görüyorum.

Hibernate hatasını yoksayabilirsiniz çünkü bu hata, uygulama kodunun MySQL veritabanına bağlı olduğunu gösteriyor. Uygulama, başlatıldığında src/main/resources/META-INF/persistence.xmlgibi gerekli tabloları oluşturacak şekilde yapılandırılır. Uygulama ilk kez başlatıldığında tabloları başarıyla oluşturması gerekir, ancak sonraki yeniden başlatmalarda tablolar zaten mevcut olduğundan bu hatayı görürsünüz.

Sık sorulan sorular

Bu kurulumun maliyeti ne kadardır?

Oluşturulan kaynakların fiyatlandırması aşağıdaki gibidir:

MySQL sunucusuna sanal ağın arkasından diğer araçlarla nasıl bağlanırım?

Bu öğreticide App Service uygulamasının MySQL sunucusuna zaten ağ bağlantısı vardır ve sistem tarafından atanan yönetilen kimliğini kullanarak Microsoft Entra ile kimlik doğrulaması yapabilir. SSH oturumunda aşağıdaki komutları çalıştırarak doğrudan uygulama kapsayıcısından MySQL'e bağlanabilirsiniz. Uygulama ayarından <server>, <user>, ve <database> değerlerinizi alın.

apt-get update
apt-get install curl less mysql-client jq -y
mysql -h <server> --user <user> --database <database> --enable-cleartext-plugin --password=`curl "${IDENTITY_ENDPOINT}?resource=https://ossrdbms-aad.database.windows.net&api-version=2019-08-01" -H "X-IDENTITY-HEADER: $IDENTITY_HEADER" -s | jq -r '.access_token'`

Dikkat edilmesi gereken birkaç nokta:

  • SSH oturumuna yüklediğiniz araçlar, uygulama yeniden başlatmalarında kalıcı olmaz.
  • Azure portalı adımlarını izlediyseniz ve Yönetici olarak Microsoft Entra kullanıcınızı kullanarak MySQL'i yapılandırdıysanız, Microsoft Entra kullanıcısını kullanarak MySQL'e bağlanabilirsiniz.
  • MySQL Workbench gibi bir masaüstü aracından bağlanmak için makinenizin aynı sanal ağa dağıtılan azure sanal makinesi gibi bir sanal ağda olması gerekir. Ayrıca, kimlik doğrulamayı yönetilen kimlikle veya Microsoft Entra kullanıcısı ile ayrı olarak yapılandırmanız gerekir.
  • Azure sanal ağıyla siteden siteye VPN bağlantısı olan bir şirket içi ağdaki bir makineden bağlanmak için, yönetilen kimlikle kimlik doğrulamasını yapılandıramazsınız. Microsoft Entra kullanıcısı kullanarak kimlik doğrulamayı yapılandırabilirsiniz.
  • Ayrıca Azure Cloud Shell'i tümleştirebilir ve Azure CLI veya MySQL CLI kullanarak bağlanabilirsiniz. Kimlik doğrulaması yapmak için bir Microsoft Entra kullanıcısı yapılandırabilirsiniz.

Microsoft Entra kimlik doğrulamasını kullanarak MySQL bağlantısı için geçerli bir erişim anahtarını nasıl alabilirim?

Microsoft Entra kullanıcısı, sistem tarafından atanan yönetilen kimlik veya MySQL veritabanına erişme yetkisi olan kullanıcı tarafından atanan yönetilen kimlik için Azure CLI, erişim belirteci oluşturmanıza yardımcı olabilir. Yönetilen kimlik kullanıyorsanız, kimliğin Azure CLI'yı çalıştırdığınız App Service uygulamasında veya VM'de yapılandırılması gerekir.

# Sign in as a Microsoft Entra user
az login
# Sign in as the system-assigned managed identity
az login --identity
# Sign in as a user-assigned managed identity
az login --identity --username <client-id-of-user-assigned-identity>

# Get an access token
az account get-access-token --resource-type oss-rdbms

MySQL'e bağlanmak için az mysql flexible-server connect Azure CLI komutunu da kullanabilirsiniz. İstendiğinde, parola olarak erişim belirtecini kullanın.

az mysql flexible-server connect -n <server-name-only> -u <user> -d <database> --interactive

Daha fazla bilgi için bkz.

Yerel uygulama geliştirme GitHub Actions ile nasıl çalışır?

App Service'ten otomatik olarak oluşturulan iş akışı dosyası örneği kullanıldığında, her git push yeni bir derleme ve dağıtım çalıştırmasını başlatır. GitHub deposunun yerel bir kopyasından istediğiniz güncelleştirmeleri yapar ve GitHub'a gönderebilirsiniz. Örneğin:

git add .
git commit -m "<some-message>"
git push origin starter-no-infra

Kullanıcı tarafından atanan kimlik oluşturma iznim yok

Bkz. Dağıtım Merkezi'nden GitHub Actions dağıtımını ayarlama.

Kod alanımda GitHub Copilot ile ne yapabilirim?

Kod alanını oluştururken GitHub Copilot sohbet görünümünün zaten sizin için orada olduğunu fark edebilirsiniz. Kolaylık sağlamak için kapsayıcı tanımına GitHub Copilot sohbet uzantısını dahil ediyoruz . .devcontainer/devcontainer.json. GitHub Copilot hesabınız olmalıdır (30 günlük ücretsiz deneme sürümü mevcuttur).

GitHub Copilot ile konuşurken size birkaç ipucu:

  • Tek bir sohbet oturumunda, sorular ve yanıtlar birbirleri üzerinde derlenebilir ve sorularınızı ayarlayarak, elde ettiğiniz yanıta ince ayar yapabilirsiniz.
  • Varsayılan olarak, GitHub Copilot'un deponuzdaki hiçbir dosyaya erişimi yoktur. Dosya hakkında soru sormak için önce düzenleyicide dosyayı açın.
  • GitHub Copilot'ın yanıtlarını hazırlarken depodaki tüm dosyalara erişmesine izin vermek için sorunuza ile @workspacebaşlayın. Daha fazla bilgi için bkz. Use the @workspace agent.
  • Sohbet oturumunda, GitHub Copilot değişiklikleri önerebilir ve (ile @workspace) değişikliklerin yapılacağı yeri bile önerebilir, ancak değişiklikleri sizin için yapmasına izin verilmez. Önerilen değişiklikleri eklemek ve test etmek size bağlı.

Elde ettiğiniz yanıta ince ayar yapmak için söyleyebileceğiniz diğer bazı şeyler şunlardır:

  • Bu kodu jdbc/AZURE_MYSQL_CONNECTIONSTRING_DS veri kaynağını kullanacak şekilde değiştirin.
  • Kodunuzdaki bazı içe aktarmalar javax kullanıyor, ancak bende bir Jakarta uygulaması var.
  • Bu kodun yalnızca ortam değişkeni AZURE_MYSQL_CONNECTIONSTRING ayarlanmışsa çalışmasını istiyorum.
  • Bu kodun yerel olarak değil yalnızca Azure Uygulaması Hizmetinde çalışmasını istiyorum.

Geliştirici kılavuzunda App Service'te Java uygulamalarını çalıştırma hakkında daha fazla bilgi edinin.

Özel bir etki alanı ve sertifikayla uygulamanızın güvenliğini sağlamayı öğrenin.