Spring Boot Azure App Service වලට දාමු! – SC Guide

ආයුබෝවන් කට්ටියට! කොහොමද ඉතින්? අද අපි කතා කරන්න යන්නේ ගොඩක් දෙනෙක්ට තියෙන ලොකු ප්රශ්නයකට විසඳුමක් ගැන. ඒ තමයි අපේ Spring Boot Applications, Cloud එකට, විශේෂයෙන්ම Azure App Service එකට කොහොමද පහසුවෙන් Deploy කරන්නේ කියලා. අපි හැමෝම දන්නවනේ, Spring Boot කියන්නේ Java developersලා අතරේ මේ දවස්වල හොඳටම ජනප්රිය Framework එකක් කියලා. ඒ වගේම Cloud කියන්නේ දැන් ලෝකේ trend එක. ඉතින් මේ දෙක එකතු කරලා වැඩ කරනකොට අපිට ලැබෙන වාසි නම් කියලා නිම කරන්න බැහැ. Project එකක MVP (Minimum Viable Product) එකක් ඉක්මනටම Production environment එකකට දාන්න ඕන වුණාම වගේ අවස්ථා වලට මේ Spring Boot + Azure App Service combo එක මාරම ගැලපීමක්.
සාමාන්යයෙන් application එකක් deploy කරනවා කියන්නේ ගොඩක් අයට හිසරදයක්. ඒකේ Infrastructure manage කරන්න ඕනේ, servers බලාගන්න ඕනේ, ඒවට Security patches දාන්න ඕනේ, ආයෙ scale කරන්න ඕනේ වගේ දේවල් ගොඩක් තියෙනවා. ඒත් Azure App Service වගේ PaaS (Platform as a Service) එකක් පාවිච්චි කරනකොට, අපිට පුළුවන් මේ හැම දේම Microsoft එකට බාර දීලා, අපි අපේ code එක විතරක් develop කරන එකට අවධානය යොමු කරන්න. ඒක මාරම පහසුවක්, නේද?
මේ ලිපියෙන් මම ඔයාලට පියවරෙන් පියවර කියලා දෙනවා, ඔයාලගේ Spring Boot application එක Azure App Service එකට deploy කරන්නේ කොහොමද කියලා. අපි Azure Maven Plugin එක පාවිච්චි කරලා කොහොමද මේක ලේසියෙන්ම කරන්නේ කියලා බලමු. එහෙනම්, අපි පටන් ගමු!
ඇයි Spring Boot සහ Azure? (Why Spring Boot and Azure?)
මුලින්ම බලමු ඇයි මේ දෙක මෙච්චර හොඳ combination එකක් වෙන්නේ කියලා.
Spring Boot වල වාසි:
- ඉක්මන් සංවර්ධනය (Rapid Development): Spring Boot වල තියෙන starter dependencies, auto-configuration නිසා අපිට බොහොම ඉක්මනට web applications, REST APIs හදන්න පුළුවන්. Boilerplate code අඩුයි.
- Standalone Applications: Built-in web servers (Tomcat, Jetty, Undertow) එක්ක එන නිසා, අපිට JAR file එකක් විදියට application එක run කරන්න පුළුවන්. War files, external servers වගේ ඒවා ගැන හිතන්න ඕන නෑ.
- Microservices Friendly: Microservices Architecture එකට ගොඩක් ගැලපෙනවා. සරලව, කුඩා සේවා විදියට application එක කඩලා හදන්න පුළුවන්.
Azure වල වාසි:
- විශාලත්වය සහ විශ්වසනීයත්වය (Scalability and Reliability): Azure කියන්නේ Microsoft එකේ Cloud Platform එක. ඉතින් අපේ application එකට කොච්චර traffic ආවත් ඒක handle කරන්න පුළුවන් විදියට scale කරන්න පුළුවන්. ඒ වගේම ඉහළ විශ්වසනීයත්වයක් තියෙනවා.
- Global Reach: ලෝකේ පුරාම තියෙන Data Centers නිසා, අපිට අපේ usersලට ලංම තියෙන region එකකින් application එක host කරන්න පුළුවන්. ඒකෙන් performance එක වැඩි වෙනවා.
- විවිධ සේවා (Variety of Services): Databases, AI/ML, IoT, DevOps වගේ තවත් සේවාවන් ගොඩක් Azure එකේ තියෙනවා. අපේ application එකට ඕන වෙන ඕනම දෙයක් Azure එකෙන්ම හොයාගන්න පුළුවන්.
Azure App Service:
විශේෂයෙන්ම Azure App Service කියන්නේ PaaS (Platform as a Service) එකක්. මේකෙන් අපිට ලැබෙන ලොකුම වාසිය තමයි, server infrastructure එක ගැන හිතන්න ඕන නැති වීම. OS එක manage කරන එක, patches දාන එක, load balancing වගේ දේවල් ඔක්කොම Azure එකෙන් බලාගන්නවා. අපිට කරන්න තියෙන්නේ අපේ application code එක deploy කරන එක විතරයි. ඒක මාරම පහසුවක්!
ලංකාවේ අපිට මේක කොච්චර වටිනවද? Budget එක සීමිත Startup එකකට වුණත්, Enterprise level project එකකට වුණත්, Cloud එකට යන එක ලොකු වාසියක්. Azure App Service එකේ තියෙන Free tier එක පාවිච්චි කරලා අපිට පොඩි projects Deploy කරලා බලන්නත් පුළුවන්. ඒකෙන් අපේ කාලයයි මුදලුයි දෙකම ඉතිරි වෙනවා.
සූදානම් වෙමු! අවශ්ය දේවල් ටික (Let's get ready! The necessary things)
මේ deployment එක කරන්න කලින් අපිට ටිකක් දේවල් සෙට් කරගන්න වෙනවා. කලබල වෙන්න එපා, මේවා බොහොම ලේසි දේවල්.
- Java Development Kit (JDK): ඔයාලගේ PC එකේ JDK 11 හෝ ඊට ඉහළ version එකක් install කරලා තියෙන්න ඕනේ. (උදා: OpenJDK, Oracle JDK). මම නම් recommend කරන්නේ Java 17 හෝ 21 වගේ LTS version එකක්.
- Maven or Gradle: ඔයාලගේ Spring Boot project එක build කරන්න මේ දෙකෙන් එකක් ඕනේ. මේ ලිපියේදී අපි Maven පාවිච්චි කරනවා.
- Azure Account: Microsoft Azure account එකක් ඕනේ. අලුතෙන් account එකක් හදනවා නම් Free trial එකක් ලැබෙනවා, ඒකෙන් ගොඩක් දේවල් නොමිලේම try කරලා බලන්න පුළුවන්.
- IDE (Integrated Development Environment): IntelliJ IDEA, VS Code, Eclipse වගේ ඔයාලට පහසු IDE එකක් පාවිච්චි කරන්න පුළුවන්.
Azure CLI: Azure Command Line Interface එක install කරලා ඔයාලගේ Azure account එකට login වෙලා තියෙන්න ඕනේ. මේකෙන් අපිට commands වලින් Azure resources manage කරන්න පුළුවන්. install කරගන්න විදිය මෙතනින් බලන්න පුළුවන්.
az login
මේ command එක ගහලා ඔයාලගේ Azure account එකට login වෙන්න.
මේ ටික සෙට් කරගත්තා නම්, අපි යමු ඊළඟ පියවරට!
අපේ Spring Boot App එක සූදානම් කරමු (Let's prepare our Spring Boot App)
දැන් අපි අපේ Spring Boot application එක Azure App Service එකට deploy කරන්න සූදානම් කරගන්න ඕනේ. ඔයාලට දැනටමත් Spring Boot project එකක් තියෙනවා නම් ඒක පාවිච්චි කරන්න පුළුවන්. නැත්නම් Spring Initializr (start.spring.io) එකෙන් පොඩි demo project එකක් හදාගන්න. මේකට අපි අවශ්ය dependency ටික විතරක් දාගෙන, පොඩි REST Endpoint එකක් හදමු.
// src/main/java/com/example/demo/DemoApplication.java
package com.example.demo;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@SpringBootApplication
@RestController
public class DemoApplication {
public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
}
@GetMapping("/")
public String hello() {
return "ආයුබෝවන් ශ්රී ලංකාව! Spring Boot App එක Azure App Service එකේ සාර්ථකව Deploy කළා!";
}
}
මේක තමා අපේ පොඩි demo application එක. දැන් අපි මේක Azure එකට deploy කරන්න අවශ්ය වෙන Maven plugin එක `pom.xml` file එකට එකතු කරගමු.
pom.xml
Configuration: Azure Web App Maven Plugin
ඔයාලගේ Spring Boot project එකේ `pom.xml` file එක open කරලා, `` tag එක ඇතුලේ පහත plugin එක add කරන්න.
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
<!-- Azure Web App Maven Plugin -->
<plugin>
<groupId>com.microsoft.azure</groupId>
<artifactId>azure-webapp-maven-plugin</artifactId>
<version>2.12.0</version> <!-- නවතම version එක බලන්න -->
<configuration>
<schemaVersion>v2</schemaVersion>
<resourceGroup>my-spring-boot-rg</resourceGroup> <!-- ඔයාලගේ Resource Group නම -->
<appName>my-srilankan-springboot-app</appName> <!-- ඔයාලගේ App Service නම (Unique විය යුතුයි) -->
<pricingTier>B1</pricingTier> <!-- F1 (Free), B1 (Basic), S1 (Standard) වගේ tier එකක් තෝරන්න -->
<region>Southeast Asia</region> <!-- ඔයාලට ලඟම Azure Region එකක් -->
<runtime>
<os>Linux</os>
<javaVersion>JAVA17</javaVersion> <!-- ඔයාලගේ app එකේ Java version එක -->
<webContainer>Java SE</webContainer> <!-- Spring Boot applications වලට Java SE තෝරන්න -->
</runtime>
<deployment>
<resources>
<resource>
<directory>${project.basedir}/target</directory>
<includes>
<include>*.jar</include>
</includes>
</resource>
</resources>
</deployment>
</configuration>
</plugin>
</plugins>
</build>
මේ Plugin එකේ තියෙන Configurations ගැන පොඩ්ඩක් බලමු:
groupId
,artifactId
,version
: මේක Azure Maven Plugin එක identify කරන එක.version
එක update වෙන්න පුළුවන්, ඉතින් deploy කරන වෙලාවේ නවතම version එකක් තියෙනවද කියලා බලලා දාගන්න.resourceGroup
: Azure එකේ resource group එකක් කියන්නේ ඔයාලගේ resources (App Service, database, storage) organize කරන තැනක්. ඔයාලට කැමති නමක් දෙන්න පුළුවන්.appName
: ඔයාලගේ App Service එකේ නම. මේක unique වෙන්න ඕනේ Azure එකේ. ඒ කියන්නේ වෙන කෙනෙක් පාවිච්චි නොකරන නමක් වෙන්න ඕනේ.pricingTier
: මේක තමා ඔයාලගේ App Service එක run වෙන plan එක.F1
කියන්නේ Free tier එක. Test කරන්න හොඳයි. Production වලටB1
(Basic) හෝS1
(Standard) වගේ එකක් තෝරන්න.region
: ඔයාලගේ App Service එක host කරන Azure Region එක. ලංකාවටSoutheast Asia
(Singapore) හෝCentral India
වගේ region එකක් ගොඩක් වෙලාවට හොඳයි, latency අඩුයි.runtime
: මෙතනින් අපිට OS (Linux, Windows), Java Version (JAVA11, JAVA17, JAVA21), Web Container (Java SE for Spring Boot) වගේ දේවල් define කරන්න පුළුවන්.deployment
: මෙතනින් කියන්නේ deploy කරන්න ඕන JAR file එක තියෙන්නේ කොහෙද කියලා. Spring Boot apps වලටtarget
folder එකේ තියෙන JAR file එක define කරනවා.
මේ ටික `pom.xml` එකට දාගෙන save කරන්න. දැන් අපේ application එක deploy කරන්න සම්පූර්ණයෙන්ම සූදානම්!
Azure App Service වලට Deploy කරමු (Let's Deploy to Azure App Service)
දැන් තමයි අපේ ට්රික් එක එන්නේ! අපි Maven plugin එක පාවිච්චි කරලා කොහොමද බොහොම ලේසියෙන් අපේ Spring Boot application එක Azure App Service එකට deploy කරන්නේ කියලා බලමු. ඔයාලගේ project folder එකේ Command Prompt (Windows) හෝ Terminal (macOS/Linux) එක open කරගන්න. ඊට පස්සේ මේ command එක run කරන්න:
mvn clean package azure-webapp:deploy
මේ command එකෙන් වෙන්නේ මොනවද?
mvn clean package
: මේකෙන් ඔයාලගේ project එක compile වෙලා, test වෙලා, build වෙලා, JAR file එකක් `target` folder එක ඇතුලේ හැදෙනවා.azure-webapp:deploy
: මේකෙන් කලින් `pom.xml` එකේ configure කරපු Azure Web App Maven Plugin එක activate වෙලා, අපේ JAR file එක Azure App Service එකට deploy වෙනවා.
මේ command එක run කරපු ගමන් Azure CLI එක හරහා ඔයාලගේ Azure account එකට login වෙන්න කියලා ඉල්ලයි (ඔයාලා කලින් `az login` කරලා නොතිබුණා නම්). ඊට පස්සේ, plugin එකෙන් ඔයාලට ප්රශ්න ටිකක් අහයි, deploy කරන්න ඕන Azure subscription එක වගේ දේවල් ගැන. ඔයාලට ඔයාලගේ Azure account එකේ තියෙන subscription list එකෙන් එකක් තෝරන්න පුළුවන්. (බොහෝ විට එක subscription එකයි තියෙන්නේ)
ඔයාලා `pom.xml` එකේ `resourceGroup`, `appName`, `region`, `pricingTier` වගේ දේවල් configure කරලා තිබ්බත්, මේ command එකෙන් ඒ values confirm කරන්න නැත්නම් අලුත් values දෙන්න අහන්න පුළුවන්. ඒකෙන් වෙන්නේ, deploy කරන වෙලාවේදී අපිට අවශ්ය නම් settings වෙනස් කරන්න පුළුවන් වීම.
සියල්ල සාර්ථක නම්, ඔයාලට Terminal එකේ මේ වගේ output එකක් පෙනෙයි:
...
[INFO] Deploying C:\Users\youruser\your-project\target\demo-0.0.1-SNAPSHOT.jar to https://my-srilankan-springboot-app.azurewebsites.net
[INFO] Successfully deployed web app.
[INFO] Successfully deployed Spring Boot application.
[INFO] You can browse your web app at https://my-srilankan-springboot-app.azurewebsites.net
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
...
ඔයාලට පේනවා නේද? BUILD SUCCESS
කියලා එනවා නම්, ඒ කියන්නේ වැඩේ සාර්ථකයි! දැන් ඔයාලට පුළුවන් https://my-srilankan-springboot-app.azurewebsites.net
වගේ URL එක (ඔයාලගේ App Service නමට අදාලව) browser එකේ open කරලා ඔයාලගේ application එක live බලන්න.
අපේ demo application එකේ hello()
method එකේ තිබ්බ message එක ඔයාලට browser එකේදී පෙනෙයි: "ආයුබෝවන් ශ්රී ලංකාව! Spring Boot App එක Azure App Service එකේ සාර්ථකව Deploy කළා!"
ඒක මාරම පහසුයි නේද? දැන් ඔයාලා Cloud එකට සාර්ථකව Spring Boot application එකක් deploy කරලා ඉවරයි!
Deploy කරාට පස්සේ... මොකද කරන්නේ? (After Deploying... What to do?)
Application එක deploy කළාට පස්සේ වැඩේ ඉවරයි කියලා හිතන්න එපා. තව ටිකක් දේවල් තියෙනවා අවධානය දෙන්න ඕන.
Monitoring සහ Logging:
ඔයාලගේ application එකේ performance එක, errors, user requests වගේ දේවල් monitor කරන්න පුළුවන්. Azure App Service එකේ Built-in monitoring tools තියෙනවා. ඒ වගේම Application Insights වගේ service එකක් එක්ක integrate කරලා application එකේ logs, metrics, traces බලන්න පුළුවන්. මේකෙන් production එකේදී අවුලක් ආවොත් ඉක්මනටම හොයාගෙන හදන්න උදව් වෙනවා.
Scaling:
ඔයාලගේ application එකට එන traffic එක වැඩි වෙනකොට, ඔයාලට පුළුවන් App Service එක scale කරන්න. App Service එකේ Scale up (CPU, Memory වැඩි කරන එක) සහ Scale out (instances ගණන වැඩි කරන එක) කියන ක්රම දෙකම තියෙනවා. Azure Portal එකට ගිහින් බොහොම ලේසියෙන් මේක කරන්න පුළුවන්. අවශ්ය නම් auto-scaling rules දාලා, traffic එක අනුව ස්වයංක්රීයව scale වෙන්නත් සලස්වන්න පුළුවන්.
Environment Variables:
Database connection strings, API keys වගේ sensitive information code එක ඇතුලේ hardcode කරන එක හොඳ පුරුද්දක් නෙවෙයි. Azure App Service එකේ "Configuration" කියන section එකට ගිහින් Environment Variables විදියට මේවා set කරන්න පුළුවන්. ඒකෙන් security එක වැඩි වෙනවා වගේම, different environments (development, staging, production) වලට වෙනස් settings පාවිච්චි කරන්නත් පුළුවන්.
Troubleshooting Common Issues:
මොකක් හරි අවුලක් ආවොත් බය වෙන්න එපා! පොදු ප්රශ්න ටිකක් තියෙනවා.
- Application startup failure: App Service එක deploy වුණත් application එක load වෙන්නේ නැත්නම්, App Service logs බලන්න. සමහරවිට dependency එකක් අවුල් වෙලා වෙන්න පුළුවන්, නැත්නම් port එකක් වැරදිලා වෙන්න පුළුවන්. (Spring Boot by default 8080 port එකෙන් run වෙනවා. Azure App Service එක මේක auto-detect කරනවා. හැබැයි වෙන port එකක් පාවිච්චි කරනවා නම් `SERVER_PORT` environment variable එක set කරන්න වෙනවා.)
- Permission issues: Files වලට read/write permission නැති අවස්ථා.
- Incorrect Java version: Deploy කරන App Service එකේ Java version එක ඔයාලගේ application එකට ගැලපෙන්නේ නැත්නම්. `pom.xml` එකේ `runtime` section එක හරියට configure කරලා තියෙනවද බලන්න.
Azure Portal එකේ Diagnostic and Solve Problems කියන option එකෙන් ගොඩක් issues වලට solutions හොයාගන්න පුළුවන්. ඒ වගේම App Service logs සහ Deployment Center logs බලන එක ගොඩක් වැදගත්.
නිගමනය (Conclusion)
හරි, දැන් ඔයාලා දන්නවා Spring Boot application එකක් Azure App Service එකට කොහොමද deploy කරන්නේ කියලා. අපි දැක්කා මේක කොච්චර ලේසිද කියලා, විශේෂයෙන්ම Azure Maven Plugin එක පාවිච්චි කරනකොට. මේකෙන් අපිට infrastructure manage කරන හිසරදෙන් නිදහස් වෙලා, අපේ code එක develop කරන එකට අවධානය දෙන්න පුළුවන්. ඒක ඇත්තටම developer කෙනෙක්ට ලොකු සහනයක්.
මේ ලිපිය ඔයාලට ප්රයෝජනවත් වෙන්න ඇති කියලා මම හිතනවා. දැන් ඔයාලා කරන්න ඕනේ, මේක බලලා ඔයාලගේම Spring Boot project එකක් අරගෙන try කරලා බලන එක. අතට අරගෙන කරලා බලනකොට තමා හොඳටම තේරෙන්නේ. මොකද, theory විතරක් මදි නේ?
ඔයාලගේ අදහස්, මේ ගැන තියෙන ප්රශ්න පහලින් comment කරන්න. මම පුළුවන් ඉක්මනට උත්තර දෙන්නම්. ඊළඟ පෝස්ට් එකෙන් තවත් මේ වගේ වැදගත් දෙයක් අරගෙන එන්නම්. එතකන් හැමෝටම ජය වේවා! Happy Coding!