Spring Boot uygulamaları Azure App Service
Bu kılavuzda, var olan bir Spring Boot uygulamasını Azure App Service.
Geçiş öncesi
Başarılı bir geçiş sağlamak için, başlamadan önce aşağıdaki bölümlerde açıklanan değerlendirme ve envanter adımlarını tamamlayın.
Bu geçiş öncesi gereksinimlerin herhangi birini karşılamıyorsanız, aşağıdaki yardımcı geçiş kılavuzlarına bakın:
- Yürütülebilir JAR uygulamalarını Azure Kubernetes Service kapsayıcılara geçirme (planlanan kılavuz)
- Yürütülebilir JAR Uygulamalarını Azure Sanal Makineler'e geçirme (planlanan kılavuz)
Desteklenen platforma geçme
App Service Java SE’nin belirli sürümlerini sunar. Uyumluluktan emin olmak için, kalan adımlardan herhangi biriyle 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.
Not
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 App Service tarafından kullanılan geçerli sürümü almak için, Java 8 çalışma zamanını kullanmayı düşünüyorsanız Zulu 8’i veya Java 11 çalışma zamanını kullanmayı düşünüyorsanız Zulu 11’i indirin.
Dış kaynakların envanterini çıkarma
Veri kaynakları, JMS ileti aracıları ve diğer hizmetlerin URL’leri gibi dış kaynakları tanımlayın. Bu Spring Boot, bu tür kaynakların yapılandırmasını genellikle src/main/directoryklasöründe, genellikle application.properties veya application.ymladlı bir dosyada bulabilirsiniz. Buna ek olarak, tüm ilgili yapılandırma ayarları için üretim dağıtımının ortam değişkenlerini gözden geçirin.
Veritabanları
Tüm SQL veritabanları için bağlantı dizesini tanımlayın.
Spring Boot uygulaması için bağlantı dizeleri normalde yapılandırma dosyalarında görüntülenir.
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 birpom.xml veya build.gradle dosyası) bakarak kullanılan aracıyı veya aracıları belirleme.
Örneğin, ActiveMQ Spring Boot bir uygulama genellikle bu bağımlılığı kendipom.xmliçerir:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-activemq</artifactId>
</dependency>
Özel aracıları kullanan Spring Boot uygulamaları normalde doğrudan aracıların JMS sürücü kitaplıklarında 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.0.4.0")
...
}
Kullanımda olan aracıyı veya aracıları belirledikten sonra ilgili ayarları bulun. Uygulama Spring Boot, bunları genellikle uygulama dizininde application.propertiesve application.yml dosyalarında bulabilirsiniz.
Application.properties dosyasından bir ActiveMQ örneği:
spring.activemq.brokerurl=broker:(tcp://localhost:61616,network:static:tcp://remotehost:61616)?persistent=false&useJmx=true
spring.activemq.user=admin
spring.activemq.password=tryandguess
ActiveMQ yapılandırması hakkında daha fazla bilgi için, Spring Boot belgelerine bakın.
Application.yaml dosyasından bir IBM MQ örneği:
ibm:
mq:
queueManager: qm1
channel: dev.ORDERS
connName: localhost(14)
user: admin
password: big$ecr3t
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ımda olan tüm dış önbellekleri tanımlama. 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 içinde) arayarak oturum verilerini Spring Session aracılığıyla önbelleğe alınıp alınıp alın olmadığını belirleme.
Kimlik sağlayıcıları
Uygulamanız tarafından kullanılan tüm kimlik sağlayıcılarını belirleme. Kimlik sağlayıcılarını yapılandırma hakkında bilgi için aşağıdakilere bakın:
- OAuth2 yapılandırması için bkz. Spring Security başvurusu.
- 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şinden sonra uygulamanızın tüm dış bağımlılıklarının karşılandığını 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 dosyasında 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ılmay olmadığını ve nasıl kullanılıp kullanılmay olduğunu 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.
Salt okunur statik içerik
Uygulamanız şu anda statik içerik sunuyorsa bunun için alternatif bir konumunuz olması gerekir. Statik içeriği Azure Blob Depolama’ya taşımayı ve küresel olarak ışık hızında indirme işlemleri için Azure CDN eklemeyi düşünebilirsiniz. Daha fazla bilgi için bkz. Azure Depolama'de statik web sitesi barındırma ve Hızlı Başlangıç: Azure depolama hesabını Azure CDN.
Dinamik olarak yayımlanan statik içerik
Uygulamanız tarafından karşıya yüklenen/üretilen ama oluşturulduktan sonra sabit hale gelen statik içeriğe uygulamanızda izin veriliyorsa, karşıya yüklemeleri ve CDN yenilemesini işlemek için Azure İşlevi’yle birlikte yukarıda açıklandığı gibi Azure Blob Depolama ve Azure CDN kullanabilirsiniz. Azure İşlevleri ile statik içeriği karşıya yükleme ve CDN’ye önceden yükleme başlığı altında kullanımınıza ilişkin örnek bir uygulama sağladık.
Özel Durumlar
Bazı üretim senaryolarında ek değişiklikler gerektirebilir veya ek sınırlamalar uygulanabilir. Bu tür senaryolar seyrek olabilir ancak bunların uygulamanıza uygulamanıza uygun değil veya doğru şekilde çözümlenemediklerinden 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örevler içeren bir uygulamayı dahili olarak dağıtmayı 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çindeki veya dışındaki tüm zamanlanan işlerin envanterini çıkarın.
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 kod içeriyorsa, bunu yeniden düzenleyip söz konusu bağımlılıkları kaldırmanız gerekir. Örneğin dosya sistemi yollarındaki / veya \ kullanımlarını File.Separator veya Paths.get ile değiştirmeniz gerekebilir.
Üretim sunucularında çalıştırılan tüm dış işlemleri/ daemon’ları belirleme
App Service’in dışında çalıştırılan izleme deamon’ları gibi işlemlerin başka bir yere geçirilmesi veya ortadan kaldırılması gerekir.
HTTP dışı isteklerin veya birden çok bağlantı noktasın işlenmesini belirleme
App Service tek bağlantı noktası üzerinde yalnızca bir HTTP uç noktasını destekler. Uygulamanız birden çok bağlantı noktasını dinliyorsa veya HTTP dışında protokolleri kullanarak istekleri kabul ediyorsa, bu Azure App Service.
Geçiş
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 okunabildiğinden emin olun. Spring Boot Uygulaması'Spring Boot, tüm yapılandırma ayarlarının zaten dışlanabilir olması gerekir. Daha fazla bilgi için bkz. Spring Boot.
Burada SERVICEBUS_CONNECTION_STRING dosyasından SERVICEBUS_CONNECTION_STRING ortam değişkenine başvuran bir örnek yer alır:
spring.jms.servicebus.connection-string=${SERVICEBUS_CONNECTION_STRING}
spring.jms.servicebus.topic-client-id=contoso1
spring.jms.servicebus.idle-timeout=10000
App Service planını sağlama
Kullanılabilir hizmet planları listesinde, belirtimleri geçerli üretim donanımını karşılayan veya onu aşan planı seçin.
Not
Hazırlama/canary dağıtımları çalıştırmayı veya dağıtım yuvalarını kullanmayı planlıyorsanız,App Service planı bu ek kapasiteyi içermesi gerekir. 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ırmayı düşündüğünüz her yürütülebilir JAR dosyası için App Service Planınızda bir Web Uygulaması oluşturmalısınız (çalışma zamanı yığını olarak "Java SE" seçerek).
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 App Service.
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 /home/site/wwwroot/app.jar konumuna yüklenmelidir. JAR dosyanızı app.jarolarak yeniden adlandırmak isterseniz, JAR'nizi çalıştırmak için komutuyla bir kabuk betiği yükleyebilirsiniz. Sonra 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ştiril olduğu dizinden çalışmaz. 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: Var olan bir özel DNS adınıAzure App Service.
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.
Not
Yapılandırmayı parametreleştirme bölümündeki değişkenlerle parametreleştirilen tüm Spring Boot uygulama ayarları için, söz konusu ortam değişkenlerinin uygulama yapılandırmasında tanımlanması gerekir. Ortam değişkenleriyle açıkça parametreleştirilmemiş Spring Boot uygulama ayarları Uygulama Yapılandırması aracılığıyla yine geçersiz kılınabilir. Örnek:
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.
Not
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ıza kimlik doğrulaması veya yetkilendirme gerekiyorsa, aşağıdaki kılavuzu kullanarak kimlik sağlayıcısına erişen şekilde yapılandırıldıklarına emin olun:
- Kimlik sağlayıcısı Azure Active Directory değişiklik gerekmez.
- Kimlik sağlayıcısı bir orman şirket içi Active Directory, bir karma kimlik çözümü Azure Active Directory. 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, azure ile federasyonu yapılandırmak için Azure AD Bağlan özel yüklemesi konu başlığına Azure Active Directory. Alternatif olarak, OAuth2/OpenID veya SAML aracılığıyla kimlik sağlayıcınızı kullanmak Bağlan kullanmayı göz önünde bulundurabilirsiniz.
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ı daha bulutta yerel hale getirmenizi sağlayabilecek bazı önerilerimiz var.
Ö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 bilgiler içeren yapılandırmanız varsa, mümkün olduğunca Azure Key Vault’u ve/veya uygulama ayarlarıyla parametre ekleme işlemini 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ın ardından yuva değiştirme işleminin ardından bir yuvaya dağıtımı otomatik hale ebilirsiniz.
İş 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.