Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Bu kılavuzda, mevcut bir Spring Boot uygulamasını Azure App Service'e geçirmek istediğinizde dikkat etmeniz gerekenler açıklanmaktadır.
Geçiş öncesi
Geçişin başarılı olduğundan emin olmak için, başlamadan önce aşağıdaki bölümlerde açıklanan değerlendirme ve envanter adımlarını tamamlayın.
Desteklenen platforma geçme
App Service, Java SE'nin belirli sürümlerini sunar. Uyumluluğu sağlamak için, kalan adımlardan herhangi birine devam etmeden önce uygulamanızı geçerli ortamının desteklenen sürümlerinden birine geçirin. Sonuçta elde edilen yapılandırmayı tümüyle test edin. Bu tür testlerde Linux dağıtımınızın en son kararlı sürümünü kullanın.
Uyarı
Geçerli sunucunuz desteklenmeyen bir JDK (Oracle JDK veya IBM OpenJ9 gibi) çalıştırıyorsa bu doğrulama özellikle önemlidir.
Geçerli Java sürümünüzü öğrenmek için üretim sunucunuzda oturum açın ve şu komutu çalıştırın:
java -version
Azure Uygulaması Service'te Java 8 ikili dosyaları Eclipse Temurin'den sağlanır. Java 11, 17 ve Java'nın gelecekteki tüm LTS sürümleri için App Service, OpenJDK'nin Microsoft Derlemesini sağlar. Bu ikili dosyalar aşağıdaki sitelerden ücretsiz olarak indirilebilir:
Dış kaynakların envanterini çıkarma
Veri kaynakları, JMS ileti aracıları ve diğer hizmetlerin URL’leri gibi dış kaynakları tanımlayın. Spring Boot uygulamalarında, bu tür kaynakların yapılandırmasını genellikle src/main/directory klasöründe, genellikle application.properties veya application.yml olarak adlandırılan bir dosyada bulabilirsiniz. Ayrıca, ilgili yapılandırma ayarları için üretim dağıtımının ortam değişkenlerini denetleyin.
Veritabanları
Spring Boot uygulaması için, bağlantı dizesi genellikle bir dış veritabanına bağlı olduğunda yapılandırma dosyalarında görünür. Burada application.properties dosyasından bir örnek yer alır:
spring.datasource.url=jdbc:mysql://localhost:3306/mysql_db
spring.datasource.username=dbuser
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
Burada application.yaml dosyasından bir örnek yer alır:
spring:
data:
mongodb:
uri: mongodb://mongouser:deepsecret@mongoserver.contoso.com:27017
Daha olası yapılandırma senaryoları için Spring Data belgelerine bakın:
JMS ileti aracıları
İlgili bağımlılıklar için derleme bildirimine (genellikle bir pom.xml veya build.gradle dosyası) bakarak kullanılan aracıyı veya aracıları tanımlayın.
Örneğin, ActiveMQ kullanan bir Spring Boot uygulaması genellikle pom.xml dosyasında bu bağımlılığı içerir:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-activemq</artifactId>
</dependency>
Ticari aracıları kullanan Spring Boot uygulamaları genellikle doğrudan aracıların JMS sürücü kitaplıklarına bağımlılıklar içerir. Burada build.gradle dosyasından bir örnek yer alır:
dependencies {
...
compile("com.ibm.mq:com.ibm.mq.allclient:9.4.0.5")
...
}
Kullanılan aracıyı veya aracıları belirledikten sonra ilgili ayarları bulun. Spring Boot uygulamalarında, bunları genellikle application.properties dosyasında ve application.yml dosyaları uygulama dizininde bulabilirsiniz.
Uyarı
Microsoft, kullanılabilir en güvenli kimlik doğrulama akışının kullanılmasını önerir. Veritabanları, önbellekler, mesajlaşma veya yapay zeka hizmetleri gibi bu yordamda açıklanan kimlik doğrulama akışı, uygulamaya çok yüksek düzeyde güven gerektirir ve diğer akışlarda mevcut olmayan riskler taşır. Bu akışı yalnızca parolasız veya anahtarsız bağlantılar için yönetilen kimlikler gibi daha güvenli seçenekler uygun olmadığında kullanın. Yerel makine işlemleri için parolasız veya anahtarsız bağlantılar için kullanıcı kimliklerini tercih edin.
Aşağıda application.properties dosyasından bir ActiveMQ örneği verilmiştir :
spring.activemq.brokerurl=broker:(tcp://localhost:61616,network:static:tcp://remotehost:61616)?persistent=false&useJmx=true
spring.activemq.user=admin
spring.activemq.password=<password>
ActiveMQ yapılandırması hakkında daha fazla bilgi için Spring Boot mesajlaşma belgelerine bakın.
Aşağıda application.yaml dosyasından bir IBM MQ örneği verilmişti:
ibm:
mq:
queueManager: qm1
channel: dev.ORDERS
connName: localhost(14)
user: admin
password: <password>
IBM MQ yapılandırması hakkında daha fazla bilgi için IBM MQ Spring bileşenleri belgelerine bakın.
Dış önbellekleri tanımlama
Kullanılan tüm dış önbellekleri tanımlayın. Redis sıklıkla Spring Data Redis aracılığıyla kullanılır. Yapılandırma bilgileri için Spring Data Redis belgelerine bakın.
İlgili yapılandırmayı (Java veya XML'de) arayarak oturum verilerinin Spring Session aracılığıyla önbelleğe alınıp alınmadığını belirleyin.
Kimlik sağlayıcıları
Uygulamanız tarafından kullanılan tüm kimlik sağlayıcılarını tanımlayın. Kimlik sağlayıcılarının nasıl yapılandırılacağı hakkında bilgi için aşağıdakilere bakın:
- OAuth2 yapılandırması için Spring Security başvurusuna bakın.
- Auth0 Spring Security yapılandırması için Auth0 Spring Security belgelerine bakın.
- PingFederate Spring Security yapılandırması için Auth0 PingFederate yönergelerine bakın.
Diğer tüm dış kaynaklar
Bu kılavuzda olası tüm dış bağımlılıkları belgelemek uygulanabilir bir yöntem değildir. App Service geçişi sonrasında uygulamanızın tüm dış bağımlılıklarının karşılanabileceğini doğrulamak ekibinizin sorumluluğundadır.
Gizli dizilerin envanterini çıkarma
Parolalar ve güveli dizeler
Üretim dağıtımlarındaki tüm özellikleri, yapılandırma dosyalarını ve tüm ortam değişkenlerini gizli dizeler ve parolalar için denetleyin. Spring Boot uygulamasında, bu tür dizeler büyük olasılıkla application.properties veya application.yml içinde bulunur.
Sertifikaların envanterini çıkarma
Genel SSL uç noktaları için veya arka uç veritabanları ve diğer sistemlerle iletişim için kullanılan tüm sertifikaları belgeleyin. Aşağıdaki komutu çalıştırarak üretim sunucularındaki tüm sertifikaları görüntüleyebilirsiniz:
keytool -list -v -keystore <path to keystore>
Dosya sisteminin kullanılıp kullanılmayacağını ve nasıl kullanıldığını belirleme
Uygulama sunucusundaki dosya sisteminin her kullanımı yeniden yapılandırma veya nadir durumlarda mimari değişiklikleri gerektirir. Aşağıdaki senaryolardan birini veya tümünü belirleyebilirsiniz.
Yalnızca okunabilir statik içerik
Uygulamanız şu anda statik içerik yüklüyse, bunun için alternatif bir konuma ihtiyacınız vardır. Statik içeriği Azure Blob Depolama'ya taşımayı ve küresel olarak hızlı indirmeler için Azure Front Door eklemeyi düşünmelisiniz. Daha fazla bilgi için bkz. Azure Depolama 'de Statik web sitesi barındırma ve Azure Depolama hesabını Azure Front Doorile tümleştirme.
Özel Durumlar
Bazı üretim senaryolarında ek değişiklikler gerektirebilir veya ek sınırlamalar uygulanabilir. Bu tür senaryolar seyrek olsa da, uygulamanıza uygulanamaz veya doğru çözümlendiklerinden emin olmak önemlidir.
Uygulamanızın zamanlanan işlere dayanıp dayanmadığını saptama
Quartz Scheduler görevleri veya cron işleri gibi zamanlanan işler App Service ile kullanılamaz. App Service, zamanlanmış görevleri içeren bir uygulamayı dahili olarak dağıtmanızı engellemez. Bununla birlikte uygulamanızın ölçeği genişletildiyse, aynı zamanlanan iş zamanlama dönemi başına birden çok kez çalıştırılabilir. Bu durum istenmeyen sonuçlar doğurabilir.
Uygulama işleminin içinde veya dışında zamanlanmış işlerin envanterini oluşturun.
Uygulamanızın işletim sistemine özgü kod içerip içermediğini saptama
Uygulamanız konak işletim sisteminde bağımlılıkları olan herhangi bir kod içeriyorsa, bu bağımlılıkları kaldırmak için yeniden düzenlemeniz gerekir. Örneğin, dosya sistemi yollarının herhangi bir kullanımını veya \ uygulamanızın / Windows üzerinde çalışıyorsa ile File.SeparatorPaths.get değiştirmeniz gerekebilir.
Üretim sunucularında çalışan tüm dış işlemleri/daemon'ları tanımlama
Uygulama Sunucusu dışında çalışan izleme daemon'ları gibi işlemlerin başka bir yere geçirilmesi veya ortadan kaldırılması gerekir.
HTTP olmayan isteklerin veya birden çok bağlantı noktasının işlenmesini tanımlama
App Service, tek bir bağlantı noktasında yalnızca tek bir HTTP uç noktasını destekler. Uygulamanız birden çok bağlantı noktasını dinliyorsa veya HTTP dışındaki protokolleri kullanarak istekleri kabul ederse Azure App Service'i kullanmayın.
Göç
Yapılandırmayı parametreleştirme
Tüm dış kaynak koordinatlarının (veritabanı bağlantı dizeleri gibi) ve diğer özelleştirilebilir ayarların ortam değişkenlerinden okunadığından emin olun. Spring Boot Uygulamasını taşıyorsanız, tüm yapılandırma ayarları zaten dışsallaştırılabilir olmalıdır. Daha fazla bilgi için Spring Boot belgelerindeki Dışlaştırılmış Yapılandırma'ya bakın.
Aşağıda bir SERVICEBUS_CONNECTION_STRING dosyasından ortam değişkenine başvuran bir örnek verilmiştir:
spring.jms.servicebus.connection-string=${SERVICEBUS_CONNECTION_STRING}
spring.jms.servicebus.topic-client-id=contoso1
spring.jms.servicebus.idle-timeout=10000
Uygulama Hizmet Planı sağlama
Kullanılabilir hizmet planları listesinden, belirtimleri geçerli üretim donanımının özelliklerini karşılayan veya aşan planı seçin.
Uyarı
Hazırlama/kanarya dağıtımları çalıştırmayı veya dağıtım yuvaları kullanmayı planlıyorsanız, App Service planı bu ek kapasiteyi içermelidir. Java uygulamaları için Premium veya daha yüksek planlar kullanmanızı öneririz.
App Service planını oluşturun.
Web Uygulamalarını Oluşturma ve Dağıtma
Çalıştırmak istediğiniz her yürütülebilir JAR dosyası için App Service Planınızda bir Web Uygulaması (çalışma zamanı yığını olarak "Java SE"yi seçme) oluşturmanız gerekir.
Maven uygulamaları
Uygulamanız bir Maven POM dosyasından derleniyorsa, Web Uygulamasını oluşturmak ve uygulamanızı dağıtmak için Maven için Webapp eklentisini kullanın. Daha fazla bilgi için bkz. Hızlı Başlangıç: Azure Uygulaması Hizmetinde Java uygulaması oluşturma.
Maven dışı uygulamalar
Maven eklentisini kullanmıyorsanız, Web Uygulamasını aşağıdakiler gibi başka mekanizmalar kullanarak sağlamalısınız:
Web Uygulaması oluşturulduktan sonra, kullanılabilir dağıtım mekanizmalarından birini kullanarak uygulamanızı dağıtın. Mümkünse uygulamanızın /home/site/wwwroot/app.jar adresine yüklenmesi gerekir. JAR'ınızı app.jar olarak yeniden adlandırmak istemiyorsanız, bu durumda JAR'ınızı çalıştırmak için komut içeren bir kabuk betiği yükleyebilirsiniz. Ardından bu betiğin tam yolunu portalın Yapılandırma bölümündeki Başlangıç Dosyası metin kutusuna yapıştırın. Başlangıç betiği, yerleştirildiği dizinden çalıştırılamıyor. Bu nedenle başlatma dizenizde her zaman başvuru dosyalarının mutlak yollarını kullanın (örneğin: java -jar /home/myapp/myapp.jar).
JVM çalışma zamanı seçeneklerini geçirme
Uygulamanıza belirli çalışma zamanı seçenekleri gerekiyorsa, en uygun mekanizmayı kullanarak bunları belirtin.
Özel etki alanını ve SSL’yi yapılandırma
Uygulamanız özel bir etki alanında görünür olacaksa web uygulamanızı bu etki alanına eşlemeniz gerekir. Daha fazla bilgi için bkz. Öğretici: Mevcut özel DNS adını Azure Uygulaması Hizmeti ile eşleme.
Ardından söz konusu etki alanı için SSL sertifikasını App Service Web Uygulamanıza bağlamalısınız. Daha fazla bilgi için bkz. Azure App Service'de SSL bağlamasıyla özel DNS adının güvenliğini sağlama.
Arka uç sertifikalarını dışarı aktarma
Arka uç sistemleriyle, örneğin veritabanlarıyla iletişim kurmaya yönelik tüm sertifikalar App Service’in kullanımına sunulmalıdır. Daha fazla bilgi için bkz. App Service’te SSL sertifikası ekleme.
Dış kaynak koordinatlarını ve diğer ayarları geçirme
Bağlantı dizelerini ve diğer ayarları geçirmek için bu adımları izleyin.
Uyarı
Yapılandırmayı parametreleştirme bölümündeki değişkenlerle parametrelendirilen spring boot uygulama ayarları için, bu ortam değişkenleri uygulama yapılandırmasında tanımlanmalıdır. Ortam değişkenleriyle açıkça parametrelendirilmeyen tüm Spring Boot uygulama ayarları, Uygulama Yapılandırması aracılığıyla bunlar tarafından geçersiz kılınabilir. Örneğin:
spring.jms.servicebus.connection-string=${CUSTOMCONNSTR_SERVICE_BUS}
spring.jms.servicebus.topic-client-id=contoso1
spring.jms.servicebus.idle-timeout=1800000
Zamanlanan işleri geçirme
Azure’da zamanlanan işleri yürütmek için Azure İşlevleri için zamanlayıcı tetikleyicisi kullanmayı düşünün. İş kodunun kendisini işleve geçirmeniz gerekmez. Bu işlev, uygulamanızda bir URL çağırarak işi tetikleyebilir. Buna benzer iş yürütmeleri dinamik olarak çağrılıyor ve/veya merkezi olarak izleniyorsa Spring Batch kullanmayı göz önünde bulundurun.
Alternatif olarak uygulamanız dışında kod yazmadan URL’yi çağırmak için Yineleme tetikleyicisiyle bir Mantıksal uygulama oluşturabilirsiniz. Daha fazla bilgi için bkz. Genel Bakış - Azure Logic Apps Nedir? ve Azure Logic Apps’de Yineleme tetikleyicisiyle yinelenen görevler ve iş akışları oluşturma, zamanlama ve çalıştırma.
Uyarı
Kötü amaçlı kullanımı önlemek için iş çağrı uç noktasının kimlik bilgileri gerektirdiğinden emin olmanız gerekir. Bu durumda tetikleme işlevinin kimlik bilgilerini sağlaması gerekir.
Kimlik sağlayıcısını geçirme ve etkinleştirme
Uygulamanız kimlik doğrulaması veya yetkilendirme gerektiriyorsa, aşağıdaki yönergeleri kullanarak kimlik sağlayıcısına erişecek şekilde yapılandırıldığından emin olun:
- Kimlik sağlayıcısı Microsoft Entra Id ise hiçbir değişiklik yapılması gerekmez.
- Kimlik sağlayıcısı şirket içi Active Directory bir ormansa, Microsoft Entra Id ile bir karma kimlik çözümü uygulamayı göz önünde bulundurun. Daha fazla bilgi için Karma kimlik belgelerine bakın.
- Kimlik sağlayıcısı PingFederate gibi başka bir şirket içi çözümse, Microsoft Entra Id ile federasyonu yapılandırmak için Microsoft Entra Connect'in Özel yükleme konusuna bakın. Alternatif olarak, OAuth2/OpenID Connect veya SAML aracılığıyla kimlik sağlayıcınızı kullanmak için Spring Security kullanmayı göz önünde bulundurun.
Yeniden başlatma ve duman testi
Son olarak tüm yapılandırma değişikliklerini uygulamak için Web Uygulamanızı yeniden başlatmalısınız. Yeniden başlatma tamamlandıktan sonra uygulamanızın doğru çalıştığından emin olun.
Geçiş sonrası
Artık uygulamanızın Azure App Service’e geçirdiğinize göre beklediğiniz gibi çalıştığını doğrulamalısınız. Bunu yaptıktan sonra uygulamanızı buluta daha yerel hale getirebilecek bazı önerilerimiz vardır.
Öneriler
Dosya depolama alanı olarak /home dizinini kullanmayı kabul ettiyseniz, bunu Azure Depolama ile değiştirmeyi göz önünde bulundurun.
/home dizininde bağlantı dizeleri, SSL anahtarları ve diğer gizli dizi bilgilerini içeren yapılandırmanız varsa, mümkün olduğunca Uygulama ayarlarıylaAzure Key Vault ve/veya parametre ekleme kullanmayı göz önünde bulundurun.
Sıfır kapalı kalma süresiyle güvenilir dağıtımlar yapmak için Dağıtım Yuvaları kullanmayı göz önünde bulundurun.
DevOps stratejisini tasarlayın ve uygulayın. Güvenilirliği korurken geliştirme hızınızı da artırmak için Azure Pipelines ile dağıtımları ve testleri otomatikleştirmeyi düşünün. Dağıtım Yuvalarını kullandığınızda, yuva değişiminin ardından bir yuvaya dağıtımı otomatikleştirebilirsiniz.
İş sürekliliği ve olağanüstü durum kurtarma stratejisini tasarlayın ve uygulayın. Görev açısından kritik uygulamalarda çok bölgeli dağıtım mimarisini düşünün.