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:

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

App Service Uygulama Yapılandırması

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