AWS Compute Services Sinhala Guide | EC2, Lambda, Auto Scaling
හලෝ යාලුවනේ, කොහොමද ඉතින්?
අද අපි කතා කරන්න යන්නේ Cloud Computing ලෝකයේදී, විශේෂයෙන්ම AWS (Amazon Web Services) වලදී, ඔයාගේ applications හෝ වැඩසටහන් run කරන්න තියෙන ප්රධානම සේවාවන් ගැනයි. මේවා තමයි AWS Compute Services කියලා හඳුන්වන්නේ. Cloud එකට එන ඕනෑම කෙනෙක්ට මේවා ගැන හොඳ අවබෝධයක් තියෙන්නම ඕනේ. මොකද, මේ services තමයි ඔයාගේ code එක ජීවත් වෙන තැන!
ඇත්තටම, AWS වල compute services කිව්වම හිතට එන්නේ ගොඩක් දේවල්. EC2, Lambda, Elastic Beanstalk, Batch වගේ සේවාවන් කොයි වෙලාවටද පාවිච්චි කරන්නේ කියලා සමහර විට ඔයාට පැහැදිලි නැතුව ඇති. ඒ නිසා අද අපි මේ එක් එක් සේවාවන් මොනවද, ඒවායේ තියෙන විශේෂතා මොනවද, සහ කවදාද ඒවා පාවිච්චි කරන්න ඕනේ කියන එක ගැන විස්තරාත්මකව කතා කරමු.
මේ tutorial එක අවසාන වෙනකොට ඔයාට මේ compute services ගැන පැහැදිලි අවබෝධයක් ලැබිලා, ඔයාගේ next project එකට හරියන service එක තෝරගන්න පුළුවන් වෙයි කියලා මම විශ්වාස කරනවා. එහෙනම්, අපි පටන් ගමු!
1. AWS EC2 (Elastic Compute Cloud) - වලාකුලේ තියෙන ඔයාගේම Virtual Server එක
EC2 කියන්නේ AWS වල තියෙන oldest සහ most fundamental compute service එකක්. සරලවම කිව්වොත්, EC2 කියන්නේ Cloud එකේ තියෙන Virtual Server එකක් වගේ. ඔයාට කැමති OS එකක් (Windows, Linux) දාලා, කැමති software එකක් install කරලා, ඔයාගේ application එක deploy කරන්න පුළුවන්. හරියට ඔයාගේ office එකේ server room එකක් වගේ තමයි, හැබැයි මේක AWS manage කරන්නේ.
EC2 Instance Types - ඔයාගේ වැඩේට හරියන Machine එක තෝරගන්න
AWS වල තියෙන ලොකුම වාසියක් තමයි, ඔයාගේ application එකේ අවශ්යතාවයට හරියන විදියේ server එකක් තෝරගන්න පුළුවන් වීම. මේවා තමයි Instance Types විදිහට හඳුන්වන්නේ:
- General Purpose Instances (e.g., t, m series): මේවා සාමාන්ය Web Servers, small databases වගේ දේවල් වලට හොඳයි. CPU, Memory දෙකම balance වෙලා තියෙනවා.
- Compute Optimized Instances (e.g., c series): CPU intensive applications (e.g., high-performance computing, batch processing, gaming servers) වලට මේවා ගොඩක් හොඳයි. වැඩි CPU power එකක් තියෙනවා.
- Memory Optimized Instances (e.g., r, x series): විශාල databases, real-time big data analytics වගේ Memory එක ගොඩක් අවශ්ය වෙන applications වලට මේවා සුදුසුයි.
- Storage Optimized Instances (e.g., i, d series): High sequential read/write access අවශ්ය වෙන distributed file systems, data warehousing applications වලට මේවා හොඳයි.
- Accelerated Computing Instances (e.g., p, g series): Machine learning, graphics rendering වගේ GPU (Graphics Processing Unit) power එක අවශ්ය වෙන applications වලට මේවා පාවිච්චි කරනවා.
Tip: ඔයාගේ application එකේ CPU, Memory, Storage හෝ Network අවශ්යතා මොනවද කියලා හොඳට analyze කරලා instance type එකක් තෝරගන්න. වැරදි එකක් තේරුවොත් අනවශ්ය විදියට සල්ලි නාස්ති වෙන්න පුළුවන්!
EC2 Pricing Models - සල්ලි ඉතිරි කරගන්න ක්රම
EC2 වල තියෙන තව වාසියක් තමයි, ඔයාට සල්ලි ගෙවන්න පුළුවන් විවිධ ක්රම තියෙන එක. මේවා හොඳට තේරුම් ගත්තොත් ඔයාට ගොඩක් cost save කරගන්න පුළුවන්:
- On-Demand Instances: මේක තමයි default pricing model එක. ඔයා server එකක් run කරන හැම පැයකටම (හෝ තත්පරයකටම) ගෙවනවා. හරියට phone එකක prepaid card එකක් වගේ. වැඩේට කොච්චර වෙලා යයිද දන්නේ නැති, short-term project වලට මේක හොඳයි. Flexibileයි, හැබැයි අනිත් ඒවාට වඩා ටිකක් මිල අධිකයි.
- Reserved Instances (RIs): ඔයාට ස්ථිරවම (1 වසරක් හෝ 3 වසරක්) server එකක් අවශ්ය නම්, මේක පාවිච්චි කරන්න පුළුවන්. On-Demand වලට වඩා 75%ක් දක්වා ගාන අඩු කරගන්න පුළුවන්. හරියට phone එකක contract plan එකක් වගේ. Long-term, stable workloads වලට හොඳයි.
- Spot Instances: මේක තමයි AWS වල unused EC2 capacity එක. AWS වල දැනට භාවිතා නොකරන server capacity එක ඔයාට වෙන්දේසි ක්රමයට (bidding) අඩුම මිලට ගන්න පුළුවන්. On-Demand වලට වඩා 90%ක් දක්වා මිල අඩුවෙන්න පුළුවන්. හැබැයි AWS වලට ඒ capacity එක අවශ්ය වුණොත්, ඔයාගේ server එක shutdown කරන්න පුළුවන් (minute 2ක notification එකක් දීලා). ඒ නිසා, interrupt වුණත් ප්රශ්නයක් නැති workloads (e.g., batch processing, data analysis, rendering) වලට මේක සුදුසුයි.
Practical Tip: Mission-critical applications වලට On-Demand හෝ Reserved Instances පාවිච්චි කරන්න. Cost-sensitive, fault-tolerant workloads වලට Spot Instances පාවිච්චි කරන්න පුළුවන්.
2. Launch Templates සහ Auto Scaling Groups (ASG) - ස්වයංක්රීයව Server Manage කරමු
EC2 ගැන කතා කරනකොට, Launch Templates සහ Auto Scaling Groups ගැන කතා නොකරම බෑ. මේවා දෙකම EC2 instances automate කරන්න, high availability සහ fault tolerance ඇති කරන්න උදව් වෙනවා.
Launch Templates - EC2 instances හදනකොට Blueprint එකක් වගේ
Launch Template එකක් කියන්නේ, අලුත් EC2 instance එකක් හදනකොට අවශ්ය වෙන සියලුම configuration settings (AMI ID, instance type, security groups, key pair, storage, user data, network interfaces වගේ) එක තැනක save කරලා තියන blueprint එකක් වගේ. මේකෙන් වෙන්නේ, හැම වෙලේම අලුතින් instance එකක් හදනකොට මේ settings ටික දෙන්න ඕනේ නැහැ. එක පාරක් template එක හැදුවා නම් ඇති. ඒකෙන් consistency එක වැඩි වෙනවා වගේම වැරදි වෙන්න තියෙන ඉඩකඩත් අඩු වෙනවා.
Auto Scaling Groups (ASG) - Traffic එක අනුව Server ගණන වෙනස් කරමු
Auto Scaling Group එකක් කියන්නේ, ඔයාගේ application එකේ traffic එක වැඩි වෙනකොට automatically අලුත් EC2 instances දාන්නත් (scale out), traffic එක අඩු වෙනකොට තියෙන instances අඩු කරන්නත් (scale in) උදව් වෙන සේවාවක්. මේකෙන් වෙන්නේ:
- High Availability: එක server එකක් fail වුණොත්, ASG එකෙන් තව server එකක් දානවා.
- Fault Tolerance: AWS availability zones හරහා instances deploy කරන්න පුළුවන් නිසා, එක AZ එකක් fail වුණත් ඔයාගේ application එක වැඩ කරනවා.
- Cost Optimization: Traffic එක අඩු වෙනකොට instances අඩු කරන නිසා, අනවශ්ය විදියට සල්ලි නාස්ති වෙන්නේ නැහැ.
ASG එකක් නිර්මාණය කරනකොට, ඒක Launch Template එකක් පාවිච්චි කරලා තමයි instances deploy කරන්නේ.
Practical Example (Conceptual):
හිතන්න ඔයාගේ website එකට උදේට traffic එක අඩුයි, හැබැයි රෑට traffic එක වැඩි වෙනවා කියලා. ASG එකක් පාවිච්චි කළොත්, ඔයාට කියන්න පුළුවන් CPU Utilization එක 70%ක් වගේ වුණොත් තව instance එකක් දාන්න, 30%ට වඩා අඩු වුණොත් instance එකක් අයින් කරන්න කියලා. මේකෙන් ඔයාට නිතරම website එක active එකේ තියාගන්න පුළුවන්, අනවශ්ය වියදම් නැතුව.
3. AWS Lambda - Serverless Computing වල රජු
Lambda කියන්නේ AWS වල තියෙන revolutionaryම compute service එකක්. මේක Serverless architecture එකේ මූලිකම ගලක්.
Serverless Concepts - Servers ගැන හිතන්නේ නැතුව Code එක Run කරමු
Serverless කිව්වම server එකක් නැහැ කියන එක නෙවෙයි. Server එකක් තියෙනවා, හැබැයි ඒක manage කරන්නේ, patch කරන්නේ, update කරන්නේ AWS. ඔයාට ඒ ගැන හිතන්න ඕනේ නැහැ. ඔයාට තියෙන්නේ ඔයාගේ code එක deploy කරන එක විතරයි. මේකෙන් වෙන්නේ:
- No Server Management: Servers ගැන හිතන්න දෙයක් නැහැ.
- Pay-per-Execution: ඔයාගේ code එක run වෙන වෙලාවට විතරයි සල්ලි ගෙවන්නේ. run වෙන්නේ නැත්නම් සතයක්වත් යන්නේ නැහැ.
- Automatic Scaling: Traffic එක වැඩි වුණත්, Lambda automatically scale කරනවා.
Lambda - Event-driven Architecture එකේ හදවත
Lambda function එකක් කියන්නේ, event එකක් ආවම run වෙන code කෑල්ලක් (function එකක්). මේ event එක S3 bucket එකකට file එකක් upload කරන එකක් වෙන්න පුළුවන්, API Gateway එකකට එන API call එකක් වෙන්න පුළුවන්, DynamoDB table එකක record එකක් update කරන එකක් වෙන්න පුළුවන්. මේ වගේ ගොඩක් AWS services එක්ක Lambda integrate වෙනවා.
Use Cases:
- API backends (microservices)
- Data processing (e.g., image resizing when uploaded to S3)
- Real-time file processing
- Chatbots
Practical Example: S3 Bucket එකකට File එකක් Upload කරනකොට Lambda Run කරමු
හිතන්න ඔයාට ඕනේ S3 bucket එකකට image එකක් upload කරනකොට ඒක resize කරන්න, නැත්නම් ඒක ගැන information database එකකට දාන්න. ඒකට අපි Lambda function එකක් පාවිච්චි කරමු. මේක Python වලින් ලියපු සරලම Lambda function එකක්.
import json
def lambda_handler(event, context):
# S3 event එකෙන් අපිට අවශ්ය විස්තර ගන්න පුළුවන්
for record in event['Records']:
bucket_name = record['s3']['bucket']['name']
object_key = record['s3']['object']['key']
file_size = record['s3']['object']['size']
print(f"Bucket: {bucket_name}, Key: {object_key} කියන file එක S3 වලට Upload වුණා!")
print(f"File Size: {file_size} bytes")
# මෙතනින් ඔයාට file එක resize කරන්න, metadata processing කරන්න,
# database එකකට save කරන්න වගේ දේවල් කරන්න පුළුවන්.
# උදාහරණයක් විදියට: image processing code එකක් මෙතනට දාන්න පුළුවන්
return {
'statusCode': 200,
'body': json.dumps('Successfully processed S3 event!')
}
මේ code එක S3 bucket එකකට file එකක් upload කරනකොට automatically run වෙනවා. Lambda වල තියෙන ලොකුම වාසිය තමයි, මේ වගේ events ගොඩක් එකපාර ආවත්, Lambda ඒ හැම එකකටම අලුත් instance එකක් හදලා code එක run කරනවා. ඔයාට ඒ ගැන හිතන්න දෙයක් නැහැ.
4. AWS Elastic Beanstalk - PaaS (Platform as a Service) Simplify කරමු
EC2 වගේම, Lambda වගේම AWS වල තියෙන තවත් ජනප්රිය compute service එකක් තමයි Elastic Beanstalk. මේක PaaS (Platform as a Service) ගණයට අයිති වෙනවා.
PaaS Concepts - Platform එක ගැන හිතන්නේ නැතුව Application Deploy කරමු
PaaS කියන්නේ, ඔයාගේ application එක deploy කරන්න අවශ්ය වෙන infrastructure (servers, operating systems, web servers, databases, load balancers) ඔක්කොම AWS manage කරනවා. ඔයාට තියෙන්නේ ඔයාගේ application code එක upload කරන එක විතරයි. හරියට ඔයාට ගේක ඉඩ තියෙනවා, හැබැයි වතුර, විදුලිය, ගෑස් සේරම provider කෙනෙක් manage කරනවා වගේ. ඔයාට තියෙන්නේ ඔයාගේ බඩු ටික අරන් ගිහින් ඉන්න විතරයි.
Elastic Beanstalk - Application Deployment ලේසි කරනවා
Elastic Beanstalk වලින් වෙන්නේ, ඔයාට Web applications, APIs, services වගේ දේවල් ඉක්මනින් deploy කරන්න පුළුවන් වෙන එක. මේක NodeJS, Java, Python, Ruby, PHP, Go, Docker වගේ ගොඩක් languages සහ frameworks support කරනවා. ඔයාට තියෙන්නේ ඔයාගේ code එක zip කරලා upload කරන එක විතරයි. ඉතුරු ටික (EC2 instances provision කරන එක, Auto Scaling, Load Balancing, Monitoring) ඔක්කොම Elastic Beanstalk බලාගන්නවා.
Benefits:
- Simplified Deployment: Code එක deploy කරන එක ගොඩක් ලේසියි.
- Automatic Scaling and Load Balancing: Traffic එක අනුව automatic scale කරනවා.
- Monitoring and Logging: Application එකේ performance එක නිරීක්ෂණය කරන්න පුළුවන්.
කවදාද Elastic Beanstalk පාවිච්චි කරන්නේ?
ඔයාට ඉක්මනින් web application එකක් deploy කරන්න ඕනේ නම්, Infrastructure management ගැන වැඩිපුර හිතන්න ඕනේ නැත්නම්, Elastic Beanstalk හොඳම තේරීමක්. EC2 වගේ සම්පූර්ණ control එකක් ඕනේ නැති, හැබැයි Lambda වගේ short functions වලට වඩා ලොකු web applications වලට මේක සුදුසුයි.
5. AWS Batch - විශාල Batch Jobs කාර්යක්ෂමව Run කරමු
අවසන් වශයෙන්, AWS Batch කියන්නේ විශාල, කාලයක් යන (long-running) batch computing jobs කාර්යක්ෂමව run කරන්න පුළුවන් සේවාවක්. මේකෙන් වෙන්නේ ඔයාගේ batch jobs AWS Cloud එකේදී efficiently run කරන්න අවශ්ය infrastructure එක manage කරන එකයි.
Batch Processing Concepts - විශාල දත්ත එකවර සැකසීම
Batch processing කියන්නේ, එකවර විශාල දත්ත ප්රමාණයක් හෝ tasks ගණනාවක් එකතුවක් (batch) විදියට run කරන එක. උදාහරණයක් විදියට, මාසික වැටුප් ගණනය කිරීම්, රූප මිලියන ගණනක් resize කිරීම, data analysis reports generate කිරීම වගේ දේවල්.
AWS Batch - Batch Jobs සඳහා Optimized Compute Resource Management
AWS Batch වලින් ඔයාට Batch jobs run කරන්න අවශ්ය වෙන Compute Environments (EC2 instances or Fargate), Job Definitions, Job Queues වගේ දේවල් manage කරනවා. මේකෙන් වෙන්නේ:
- Resource Provisioning: Batch jobs run කරන්න අවශ්ය EC2 instances (Spot instances පවා) automatically provision කරනවා.
- Job Scheduling: Jobs queue එකට දාලා schedule කරන්න පුළුවන්.
- Fault Tolerance: Job එකක් fail වුණොත්, AWS Batch ඒක re-try කරනවා.
Use Cases:
- Scientific simulations
- Financial analysis
- Big data processing
- Image and video processing
Lambda vs. Batch: Lambda short-duration, event-driven functions වලට හොඳයි (තත්පර කිහිපයකින් ඉවර වෙන jobs). Batch කියන්නේ පැය ගණන්, දවස් ගණන් run වෙන්න පුළුවන් විශාල, complex jobs වලට.
නිගමනයට එමු!
ඉතින් යාලුවනේ, අද අපි AWS Compute services ගොඩක් ගැන කතා කළා. EC2 instances වල විවිධ වර්ග, මිල ගණන්, Launch Templates, Auto Scaling Groups, Serverless Lambda, PaaS Elastic Beanstalk සහ Batch processing වගේ වැදගත් දේවල් ගොඩක් අපි cover කළා.
දැන් ඔයාට හොඳ අවබෝධයක් ඇති මොන වගේ scenario එකකට මොන AWS Compute service එකද පාවිච්චි කරන්න ඕනේ කියලා. සරලවම කිව්වොත්:
- සම්පූර්ණ control එකක් සහ customization එකක් ඕනේ නම්, EC2.
- Traffic එක අනුව automatic scale වෙන්න ඕනේ නම්, Auto Scaling Groups එක්ක Launch Templates.
- Servers manage නොකර, short, event-driven functions run කරන්න ඕනේ නම්, Lambda.
- ඉක්මනින් web application එකක් deploy කරන්න ඕනේ නම්, infrastructure ගැන වැඩිපුර හිතන්නේ නැතුව, Elastic Beanstalk.
- විශාල, long-running batch jobs run කරන්න ඕනේ නම්, AWS Batch.
මේ services ඔයාගේ project වලට කොහොමද පාවිච්චි කරන්නේ කියලා හිතලා බලන්න. තවදුරටත් මේවා ගැන practice කරන්න, AWS Free Tier එක පාවිච්චි කරන්න අමතක කරන්න එපා. මොකද, theory දැනගෙන ඉන්නවට වඩා practice කරන එක ගොඩක් වැදගත්.
මේ tutorial එක ඔයාට වටිනවා නම්, පහළින් comment එකක් දාන්න අමතක කරන්න එපා. ඔයාගේ අදහස් සහ ප්රශ්න අපිත් එක්ක share කරන්න. අපි ඊළඟ tutorial එකකින් හමුවෙමු, හැමෝටම ජය!