حسین جعفری
حسین جعفری
خواندن ۲۷ دقیقه·۱ ماه پیش

قسمت دوم AWS Certified Cloud Practitioner : خدمات مبتنی بر Compute

مقدمه

خب توی قسمت اول، یک معرفی کلی از دوره AWS Certified Cloud Practitioner داشتیم و با مفاهیم ابتدایی و اصلی AWS آشنا شدیم. توی این قسمت درباره اهمیت رایانش ابری صحبت کردیم و توضیح دادیم که AWS چطور می‌تونه به سازمان‌ها کمک کنه تا هزینه‌هاشون رو کاهش بدن و انعطاف‌پذیری بیشتری داشته باشن. همچنین با مفاهیم اصلی مثل Region، Availability Zone، و Edge Location آشنا شدیم و به تفاوت‌ها و کاربردهای هرکدوم اشاره کردیم. در نهایت، نگاهی به خدمات پایه‌ای AWS مثل EC2 و S3 انداختیم و یک دید کلی از امکاناتی که این پلتفرم ارائه می‌ده، ارائه دادیم.

تو این قسمت، به معرفی و بررسی سرویس‌های محاسباتی AWS می‌پردازیم. ابتدا با مفاهیم Compute و EC2 آشنا می‌شیم، انواع نمونه‌های EC2 و load Balancer رو بررسی می‌کنیم و سپس به قابلیت Auto Scaling می‌پردازیم. در ادامه، کانتینرها و سرویس‌های مرتبط مثل ECR، ECS و EKS رو توضیح می‌دیم و تفاوت‌های اون‌ها رو مرور می‌کنیم. بعد به سرویس‌های Serverless مثل Lambda و Fargate می‌رسیم و کاربردها و قیمت‌گذاری هرکدوم رو بررسی می‌کنیم. در نهایت، سرویس‌های پیشرفته‌تر AWS مثل Outposts، Lightsail، Batch و Wavelength رو معرفی می‌کنیم که هرکدوم برای نیازهای خاصی طراحی شدن و به بهینه‌سازی منابع کمک می‌کنن.

اول ببینیم Compute چیه؟

میتونیم بگیم Compute به مفهوم خدمات و تکنولوژی‌هایی اشاره داره که برای پردازش اطلاعات و اجرای محاسبات سنگین طراحی شدن. این مفهوم شامل استفاده از واحدهای پردازش مختلف مثل CPU (واحد پردازش مرکزی) و GPU (واحد پردازش گرافیکی) میشه که وظیفه‌ی اجرای عملیات و پردازش داده‌ها رو بر عهده دارن. هر وقت این مخفف‌ها رو دیدید، بدونید که دارید وارد دنیای Compute می‌شید، جایی که همه‌چیز درباره‌ی سرعت، قدرت پردازش و کارایی هست!

یه مثال ساده از محاسبات: رستوران پیتزا!

فرض کنید توی رستورانی به اسم World Pizza نشستید. گارسونی که سفارش شما رو می‌گیره، اون رو به آشپزخونه می‌بره و بعد پیتزای خوشمزه رو برمی‌گردونه به میز شما، دقیقاً مثل یک سرور کار می‌کنه. وظیفه سرور اینه که درخواست‌ها رو مدیریت کنه و در نهایت پاسخ مناسبی ارائه بده. گارسون مثل یه سرور توی دنیای محاسبات، سفارش‌ها (درخواست‌ها) رو می‌گیره، اون‌ها رو به بخش پردازش (آشپزخونه) می‌بره و بعد نتیجه رو به شما تحویل میده. همین مفهوم ساده، کمک می‌کنه تا درک بهتری از نحوه عملکرد سرورها و نقش اون‌ها در پردازش داشته باشیم.

معرفی EC2

یکی از مهم‌ترین اصطلاحات در دنیای محاسبات ابری AWS، چیزی به اسم EC2 هست، که مخفف "Elastic Cloud Compute" به معنی "محاسبات ابری انعطاف‌پذیر" هست. واژه "Elastic" به این اشاره داره که این سرویس می‌تونه بسته به نیازهای شما، گسترش پیدا کنه یا کوچیک بشه؛ درست مثل خمیر پیتزا که باهاش اندازه‌های مختلفی درست می‌کنید!

فرض کنید اپلیکیشنی دارید که بعضی وقت‌ها ترافیک سنگین‌تری داره. توی این شرایط، EC2 به شما این امکان رو میده که تعداد و ظرفیت سرورهای مجازیتون رو افزایش بدید تا بتونید فشار رو مدیریت کنید. بعد از اینکه بار کاری کاهش پیدا کرد، می‌تونید به‌راحتی تعداد سرورها رو کم کنید تا هم در هزینه‌ها صرفه‌جویی بشه و هم به اهداف پایداری‌تون برسید.

خب ببینیم EC2 چیه؟

در واقع EC2 در اصل سرورهای مجازی‌ای هست که توی فضای ابری اجرا میشه. هر نمونه EC2 که شما راه‌اندازی می‌کنید، روی یک سرور فیزیکی توی یه مرکز داده (datacenter) قرار داره که اون هم داخل یه Availability Zone یا AZ هست، و همه این‌ها در منطقه‌ای که شما انتخاب کردید، مدیریت میشن.

می‌تونیم بگیم EC2 یکی از سرویس‌های اصلی AWS هست که بهتون اجازه میده نمونه‌های مجازی (virtual instances) خودتون رو مدیریت کنید. با این سرویس می‌تونید با چند کلیک ساده، سرورهای مجازی رو از طریق یک قالب آماده که بهش AMI (Amazon Machine Image) می‌گن، ایجاد کنید. این AMI شامل اطلاعات مهمی از جمله سیستم‌عامل مورد استفاده و تنظیمات پایه‌ای دیگه هست.

حتی می‌تونید برنامه‌های خودتون رو مستقیماً روی این نمونه‌های EC2 پیاده‌سازی کنید و با استفاده از چندین AZ، اپلیکیشن‌هایی با دسترس‌پذیری بالا داشته باشید. همچنین اگر بخواید کنترل کاملی روی پایگاه داده‌تون داشته باشید، می‌تونید از EC2 به‌عنوان دیتابیس استفاده کنید..

انواع نمونه‌های EC2

سرورهای EC2 شش خانواده از نمونه‌ها رو ارائه میده که هر کدوم برای نیازهای خاصی طراحی شدن. این خانواده‌ها شامل انواع، نسل‌ها و اندازه‌های مختلفی هستن که در مجموع صدها گزینه مختلف برای انتخاب وجود داره. حالا بیاید نگاهی به این خانواده‌ها بندازیم:

  1. عمومی (General Purpose): این خانواده برای کارهای عمومی و روزمره مناسب هست. این نمونه‌ها یه توازن خوب بین پردازش، حافظه، و ذخیره‌سازی ایجاد می‌کنن. یعنی اگر اپلیکیشنی دارید که نیازهای مشخصی داره، این نمونه‌ها گزینه مناسبی هستن.
  2. بهینه‌شده برای پردازش (Compute Optimized): این نمونه‌ها برای بارهای کاری‌ای طراحی شدن که نیاز به پردازش بالایی دارن. مثلا برای پردازش داده‌ها، اجرای برنامه‌های محاسباتی، و حتی برخی از پردازش‌های ویدیویی که به قدرت CPU بالا نیاز دارن، این نوع نمونه‌ها ایده‌آل هستن.
  3. بهینه‌شده برای حافظه (Memory Optimized): این نمونه‌ها برای اپلیکیشن‌هایی مناسبه که به حافظه بالا و دسترسی سریع به حجم زیادی از داده‌های در حال پردازش نیاز دارن. مثلا برای پایگاه‌های داده‌ای که حجم زیادی از اطلاعات رو مدیریت می‌کنن یا سیستم‌های تجزیه و تحلیل داده‌ها، این نمونه‌ها انتخاب خوبی هستن.
  4. محاسبات شتاب‌داده‌شده (Accelerated Computing): این نمونه‌ها برای بارهای کاری‌ای طراحی شدن که نیاز به پردازش‌های تخصصی دارن، مثل یادگیری ماشین، پردازش‌های موازی بزرگ، یا حتی رندرینگ گرافیک‌های سه‌بعدی.
  5. بهینه‌شده برای ذخیره‌سازی (Storage Optimized): این نمونه‌ها برای کارهایی مناسبه که نیاز به ذخیره‌سازی و دسترسی به داده‌های بزرگ دارن. مثلا برای ذخیره‌سازی فایل‌های بزرگ یا اجرای پایگاه‌های داده سنگین، این خانواده گزینه عالی‌ای به حساب میاد.
  6. بهینه‌شده برای محاسبات با عملکرد بالا (HPC Optimized): این نوع نمونه‌ها برای کارهای پیچیده‌ای مناسبه که نیاز به محاسبات با عملکرد بالا دارن. مثلا برای محاسبات علمی، مدل‌سازی‌های پیچیده یا شبیه‌سازی‌های پیشرفته، این نوع نمونه‌ها انتخاب میشه.

قیمت‌گذاری EC2

حالا بریم سراغ بحث قیمت‌گذاری نمونه‌های EC2. AWS چندین مدل مختلف قیمت‌گذاری ارائه می‌ده که بسته به نیازتون می‌تونید یکی رو انتخاب کنید:

  1. مدل On-demand: این مدل قیمت‌گذاری به‌صورت ثابت و براساس استفاده ثانیه‌ای محاسبه میشه. این حالت وقتی مفیده که نیاز به هزینه‌های پایین دارید اما نمی‌خواید پیش‌پرداختی انجام بدید یا تعهدی برای مدت طولانی بدید. برای بارهای کاری که نمی‌تونید پیش‌بینی‌شون کنید یا قطع کردنشون ممکن نیست، این مدل ایده‌آله.
  2. مدل Spot Instances: این مدل برای استفاده از ظرفیت‌های خالی EC2 در دسترسه. اگه زمان شروع و پایان کار براتون مهم نیست و می‌تونید کار رو متوقف کنید، Spot Instances می‌تونه تا 90 درصد در هزینه‌ها صرفه‌جویی کنه. این روش به شما این امکان رو می‌ده که با هزینه خیلی کم، منابع مورد نیازتون رو در مواقعی که ظرفیت اضافی هست، تهیه کنید.
  3. مدل Dedicated Hosts: این گزینه برای زمانی مناسبه که شما نیاز به سرورهای فیزیکی اختصاصی دارید. این حالت مخصوصاً برای مواقعی مفیده که می‌خواید از لایسنس‌های سرور خودتون مثل لایسنس‌های Microsoft یا Oracle استفاده کنید و باید مطمئن بشید که هیچ منبع مشترکی با بقیه کاربران وجود نداره.
  4. مدل Reserved Instances: این مدل به شما این امکان رو می‌ده که برای مدت یک تا سه سال، یک نوع خاص از نمونه‌ها رو رزرو کنید. این حالت برای بارهای کاری‌ای که استفاده مداوم دارن و می‌تونید به مدت طولانی تعهد بدید، مناسبه. با استفاده از Reserved Instances، می‌تونید تا 72 درصد در هزینه‌ها صرفه‌جویی کنید و حتی ظرفیت رو در یک AZ خاص رزرو کنید.
  5. مدل Savings Plans: این مدل قیمت‌گذاری، به شما اجازه می‌ده که به‌جای تعهد به یک نمونه خاص، تعهدی به استفاده از منابع محاسباتی مثل EC2، Lambda یا Fargate به‌صورت ساعتی داشته باشید. این مدل انعطاف‌پذیری بیشتری داره و اگه قصد کاهش هزینه‌ها در سرویس‌های مختلف رو دارید، این مدل مناسبه. توی این روش هم می‌تونید تا 72 درصد از هزینه‌های on-demand رو کاهش بدید.

قابلیت load balancing در EC2

  1. باید بدونیم EC2 قابلیت Load Balancing رو ارائه می‌ده که به‌طور خودکار ترافیک ورودی شما رو بین چندین نمونه EC2 سالم توزیع می‌کنه. بیاید با یه مثال رستورانی توضیحش بدیم؛ Load Balancer مثل یه میزبان یا مسئول خوشامدگویی در رستوران World Pizza هست که وقتی مشتری‌ها وارد می‌شن، اون‌ها رو به میزهای خالی و آماده هدایت می‌کنه تا به‌طور یکنواخت سرویس‌دهی بشن.
  1. چهار نوع Load Balancer بار در AWS داریم که هر کدوم به‌طور متفاوتی ترافیک رو مدیریت می‌کنن:
  2. نوع Classic Load Balancer
    اینLoad Balancer که جزو اولین‌ها بود، در لایه‌های 4 و 7 شبکه کار می‌کنه. Classic Load Balancer از پروتکل‌هایی مثل TCP، SSL/TLS، HTTP و HTTPS پشتیبانی می‌کنه و بیشتر برای شبکه‌های قدیمی‌تر یا EC2-Classic استفاده می‌شد. با اینکه هنوز هم در دسترسه، ولی بیشتر توصیه می‌شه که از انواع جدیدتر استفاده کنید.
  3. نوع Application Load Balancer (ALB)
    این نوع Load Balancer بهینه شده برای مدیریت اپلیکیشن‌هاست و در لایه 7 کار می‌کنه. ALB از پروتکل‌های HTTP، HTTPS و GRPC پشتیبانی می‌کنه. انعطاف‌پذیری بالا در مدیریت اپلیکیشن‌ها، تعریف قوانین مسیریابی پیشرفته و پشتیبانی از اپلیکیشن‌های مدرن مثل ریزخدمات (Microservices) از ویژگی‌های این نوع بارگذار هست.
  4. نوع Gateway Load Balancer
    این Load Balancer به‌عنوان دروازه‌ای برای مانیتورینگ و ثبت اطلاعات شبکه استفاده میشه. Gateway Load Balancer در لایه 3 و 4 فعالیت داره و از تجهیزات مجازی شخص ثالث برای تجزیه و تحلیل شبکه پشتیبانی می‌کنه. این بارگذار معمولاً برای نیازهای خاص شبکه و سناریوهای پیشرفته امنیتی یا مانیتورینگ استفاده میشه.
  5. نوع Network Load Balancer (NLB)
    این نوع Load Balancer بهینه شده برای عملکرد بالاست و در لایه 4 شبکه فعالیت می‌کنه. NLB می‌تونه با استفاده از پروتکل‌های TCP، UDP و TLS ترافیک رو به‌صورت بسیار سریع و با آدرس‌های IP ثابت هندل کنه. این نوع برای اپلیکیشن‌هایی که نیاز به تأخیر کم و عملکرد بسیار بالا دارن، ایده‌آله.
  6. این چهار نوع Load Balancer، به شما این امکان رو می‌دن که ترافیک ورودی‌تون رو بر اساس نیازهای خاص برنامه‌هاتون مدیریت کنید و از اختلال و خرابی جلوگیری کنید

قابلیت Auto Scaling

قابلیت Auto Scaling در EC2 به‌طور خودکار نمونه‌های EC2 رو بر اساس تغییرات تقاضا و نیاز، اضافه یا جایگزین می‌کنه تا همیشه بهترین کارایی و دسترس‌پذیری رو داشته باشید. این ویژگی به شما کمک می‌کنه که با تغییر شرایط و نیازهای اپلیکیشن، بدون دخالت دستی، به تعداد مناسبی از منابع برسید.

انواع Auto Scaling:

  1. افقی (Horizontal Scaling یا Scaling Out): در این نوع مقیاس‌پذیری، نمونه‌های EC2 رو افزایش یا کاهش می‌دید تا به تعداد بیشتری سرور دسترسی داشته باشید. این نوع Auto Scaling به شما اجازه می‌ده تا تاثیر خرابی‌های سیستمی رو کاهش بدید و از چندین منطقه دسترسی (AZ) برای بهبود دسترس‌پذیری اپلیکیشن‌ها استفاده کنید. وقتی بار کاری بیشتر بشه، تعداد نمونه‌ها افزایش پیدا می‌کنه و وقتی نیاز کمتر باشه، نمونه‌های اضافی حذف می‌شن.
  2. عمودی (Vertical Scaling یا Scaling Up): در این نوع مقیاس‌پذیری، شما قدرت پردازش یا حافظه (RAM) نمونه‌های موجود رو ارتقا می‌دید. یعنی به‌جای اضافه کردن نمونه‌های جدید، از نمونه‌های قوی‌تر استفاده می‌کنید. برای مثال، می‌تونید از یک نمونه T3 small به یک نمونه T3 medium ارتقا بدید.

کاربرد:

با استفاده از Auto Scaling، می‌تونید اپلیکیشن‌هاتون رو به‌صورت خودکار با تغییرات تقاضا تطبیق بدید و از پرداخت هزینه‌های اضافی جلوگیری کنید. این قابلیت به‌ویژه برای اپلیکیشن‌هایی که در زمان‌های خاصی از روز یا هفته بار کاری متغیری دارن، ایده‌آل هست.

این امکان باعث می‌شه که شما همیشه بهینه‌ترین استفاده رو از منابع داشته باشید و کاربران‌تون تجربه‌ی بهتری از سرویس‌ها دریافت کنن.

قابلیت Compute Optimizer

حالا بریم سراغ قابلیت Compute Optimizer. این سرویس به شما کمک می‌کنه تا تنظیمات مناسب برای منابع مختلف مثل اینستنس‌ها، حجم‌ها، کانتینرها، یا تابع‌های Lambda رو بر اساس داده‌های واقعی مصرف انتخاب کنید. نکته باحال اینجاست که Compute Optimizer پیشنهادهایی ارائه می‌ده تا بتونید عملکرد سیستم‌هاتون رو بهتر کنید و منابعی رو که بیش از حد نیاز یا کمتر از اون پیکربندی شدن، شناسایی کنید.

این سرویس به کمک داده‌های تاریخی و هر متریکی که از ابزارهای نظارتی (مثل CloudWatch) جمع‌آوری شده، می‌تونه توصیه‌هایی دقیق‌تر برای گروه‌های Auto Scaling و اینستنس‌ها ارائه بده. به این ترتیب، شما می‌تونید منابع خودتون رو دقیق‌تر تنظیم کنید و جلوی هدر رفتن منابع و هزینه‌ها رو بگیرید.

جالب‌تر اینکه، Compute Optimizer می‌تونه توی مهاجرت به پردازنده‌های Graviton هم کمکتون کنه. این پردازنده‌ها همون‌هایی هستن که AWS طراحی کرده تا هم هزینه‌ها رو پایین بیاره و هم عملکرد بهتری ارائه بده. پس اگه به فکر کاهش هزینه و افزایش کارایی هستید، این سرویس حتماً می‌تونه کمک بزرگی باشه.

به‌طور خلاصه، Compute Optimizer همون ابزاریه که می‌تونید ازش برای بهینه‌سازی منابع استفاده کنید، از بهبود عملکرد گرفته تا صرفه‌جویی در هزینه‌ها و انتخاب بهترین سایز منابع بر اساس داده‌های واقعی مصرف.

خب بریم EC2 رو توی محیط واقعی ببینیم

تو این قسمت اول بررسی میکنیم چطور به EC2 متصل بشیم و بعدش یه سناریو داریم اینجا طبق همون میریم جلو و در آخرم میریم سراغ کنسول و باهاش کار می‌کنیم.

چطور به EC2 دسترسی داشته باشیم؟

قبل از اینکه وارد سناریومون بشیم، بیایید در مورد روش‌های مختلف دسترسی به EC2 صحبت کنیم.

چهار راه اصلی برای این کار وجود داره:

  1. روش کنسول مدیریت AWS:از طریق مرورگر می‌تونید نمونه‌های EC2 خودتون رو مدیریت و پیکربندی کنید.
  2. روش EC2 Instance Connect یا EIC:این روش به شما اجازه می‌ده تا از طریق IAM policies دسترسی SSH رو کنترل کنید و نیازی به مدیریت کلیدهای SSH نداشته باشید.
  3. روش SSH یا Remote Desktop Protocol (RDP):SSH برای نمونه‌های EC2 لینوکس استفاده می‌شه.
    RDP برای نمونه‌های EC2 ویندوز استفاده می‌شه. با استفاده از این روش‌ها می‌تونید از طریق لپ‌تاپ یا PC خودتون به‌صورت امن به نمونه‌ها متصل بشید. برای این اتصال شما نیاز به یک جفت کلید دارید که شامل یک کلید خصوصی و یک کلید عمومی می‌شه تا اتصال امن رو برقرار کنه.
  4. روش Session Manager در Systems Manager:این ابزار به شما امکان مدیریت نمونه‌ها رو از طریق مرورگر یا AWS CLI می‌ده.

حالا بریم سراغ سناریوی ایجاد EC2

سناریوی ما اینه که یه نمونه EC2 جدید به نام Web App ایجاد کنیم. باید این نمونه رو طوری پیکربندی کنیم که از Amazon Linux AMI استفاده کنه و در محدوده‌ی سطح رایگان (Free Tier) باشه. همچنین یه کلید جدید به نام NewKeyPair ایجاد کنیم و بعد اتصال خودمون رو تست کنیم.

مراحل کار

خب، توی کنسول، اولین قدم اینه که یه نمونه EC2 ایجاد کنیم. توی نوار جستجو EC2 رو تایپ میکنیم و انتخابش میکنیم.

خب، حالا از این داشبورد، می‌تونید از چند طریق به instance ها دسترسی داشته باشید. توی این قسمت گزینه Launch Instance رو میزنیم و اسم این Instance رو Web App می‌ذاریم و باید از Amazon Linux AMI که در محدوده سطح رایگان هست، استفاده کنیم.

ایجاد جفت کلید (Key Pair)

ما نیاز داریم یه جفت کلید جدید ایجاد کنیم، پس اینجا روی گزینه ایجاد کلید کلیک می‌کنیم و اسمش رو NewKeyPair می‌ذاریم.

وقتی این جفت کلید ایجاد می‌شه، به‌صورت خودکار روی سیستم شما دانلود می‌شه.

ما برای این دمو به جفت کلید نیازی نداریم چون داریم از Instance Connect استفاده می‌کنیم، ولی بدونید که این تنها باریه که می‌تونید این جفت کلید رو ایجاد کنید.

تنظیمات شبکه (Network Settings)

معمولاً شما می‌خواید دسترسی به Instance تون رو فقط از IPهای مشخصی باز کنید، ولی ما اینجا گزینه Anywhere رو انتخاب می‌کنیم تا بتونیم از طریق Instance Connect متصل بشیم.

ذخیره‌سازی (Storage)

قسمت ذخیره‌سازی هم همونطور که هست بدون تغییر میزاریم. اگه بخوایم یه نمونه بزرگ‌تر یا فضای ذخیره‌سازی بیشتری اضافه کنیم، اینجا جاییه که میتونیم این کار رو انجام بدیم.

بیایید به قسمت تنظیمات پیشرفته (Advanced Details) بریم.

اگه می‌خواستید برای این نوع نمونه از spot instances استفاده کنید، می‌تونید از اینجا انتخاب کنید.

گزینه‌های زیادی توی این قسمت هستن که می‌تونید انتخاب کنید، ولی ما برای این دمو نیازی به انجام این کار نداریم، پس فقط می‌ریم و نمونه‌مون رو اجرا می‌کنیم.

حالا بریم سراغ قسمت نمونه‌ها تا وضعیتش رو ببینیم. در اول توی وضعیت pending هست.ممکنه چند دقیقه طول بکشه تا به وضعیت فعال (running) برسه.

خب، تا الان instance ما اجرا شده و از چک‌های وضعیت (status checks) عبور کرده.

حالا Instance رو انتخاب می کنیم و بهش وصل میشیم.ما همه چیز رو همینطوری می‌ذاریم و از Instance Connect استفاده می‌کنیم تا متصل بشیم.

خب، متصل شدیم و الان توی Instance هستیم. و یه بررسی میکنیم مثلا لیست فایل‌ها رو میبینیم.

کانتینر Container چیه؟

خب، بذارید کانتینرها رو مثل یه سری جعبه‌های پیتزا تصور کنیم! هر جعبه، یه اپلیکیشن یا سرویس جداگانه رو توی خودش داره. حالا، همون‌طور که جعبه‌های پیتزا رو می‌تونید روی هم بچینید و هرکدوم مستقل باقی بمونه، شما هم می‌تونید کانتینرها رو روی یه سرور یا حتی چند سرور مختلف قرار بدید و هر کدوم به‌طور مجزا کار کنه. این کار باعث می‌شه هم سازماندهی و جداسازی بهتری داشته باشید و هم امنیت بالاتر بره.

مزایای کانتینرها:

  1. پرتابل بودن: کانتینرها به شما این امکان رو می‌دن که اون‌ها رو روی سیستم‌عامل‌ها و سخت‌افزارهای مختلف مستقر کنید و با خیال راحت از این پورتابل بودن لذت ببرید.
  2. ثبات در عملیات: فرقی نداره که کانتینر رو کجا مستقر کنید، وقتی کانتینر deploy شد، دقیقا همونطور که انتظار دارید اجرا می‌شه.
  3. کارایی بیشتر: کانتینرها به‌خاطر سبک‌وزن بودن، سریع‌تر مستقر و پچ می‌شن و برای مقیاس‌پذیری خیلی گزینه‌ی بهتری هستن.
  4. تسریع چرخه‌های توسعه و تست: چون توسعه و تست سریع‌تر پیش می‌رن، اپلیکیشن‌ها زودتر به تولید می‌رسن.
  5. مصرف کمتر منابع سیستم: کانتینرها نسبت به ماشین‌های مجازی سنتی یا سخت‌افزارها، منابع کمتری نیاز دارن چون سیستم‌عامل رو توی خودشون ندارن.

کی باید از کانتینرها استفاده کنیم؟

  1. انتقال اپلیکیشن‌های موجود به معماری‌های ابری: اگه می‌خواید اپلیکیشن‌های موجود رو به فضای ابری منتقل کنید، کانتینرها گزینه خوبی هستن.
  2. بازطراحی اپلیکیشن‌ها: اگه برنامه‌تون نیاز داره تا بازطراحی بشه و بتونه از قابلیت‌های بومی ابر بهره‌مند بشه، کانتینرها انتخاب درستی هستن.
  3. معماری میکروسرویس‌ها: اگه اپلیکیشن شما نیاز به جداسازی، استقرار و مقیاس‌پذیری راحت داره، کانتینرها بهترین انتخاب هستن.
  4. یکپارچه‌سازی با CI/CD: توی فرآیندهای CI/CD، کانتینرها می‌تونن خیلی راحت اجرا بشن و چرخه توسعه، تست و استقرار رو سریع‌تر و روان‌تر کنن.
  5. وظایف تکراری: برای jobهای تکراری مثل ETL یا Batch jobs که توی پس‌زمینه اجرا می‌شن، استفاده از کانتینرها خیلی کارآمده.

جمع‌بندی: کانتینرها ابزاری هستن که به شما این امکان رو می‌دن تا اپلیکیشن‌هاتون رو سازماندهی کنید، منابع رو بهینه مصرف کنید و حتی چرخه توسعه رو سریع‌تر کنید. با کانتینرها، هم ثبات بیشتری دارید و هم می‌تونید به‌راحتی از قابلیت‌های ابری بهره‌مند بشید. 🌟

کانتینرها در AWS

خب AWS سه سرویس اصلی برای مدیریت کانتینرها داره که شامل: Elastic Container Registry (ECR)، Elastic Container Service (ECS)، و Elastic Kubernetes Service (EKS) می‌شن. این سرویس‌ها به شما کمک می‌کنن تا به راحتی کانتینرها رو ذخیره، مدیریت و مستقر کنید.

حالا بیایید نگاهی بندازیم به این سرویس‌ها:

1. Elastic Container Registry (ECR)

تصور کنید ECR مثل یک "مخزن دستورپخت‌ها" یا همون "ریسپی" برای کانتینرهاست. این سرویس در واقع به شما اجازه می‌ده تا تصاویر کانتینر (Images) خودتون رو ذخیره، مدیریت و با اعضای تیم به اشتراک بذارید. برای مثال، فرض کنید شما چندین نسخه از اپلیکیشنتون رو دارید؛ ECR به شما کمک می‌کنه تا این نسخه‌ها رو ذخیره کنید و همیشه به آخرین نسخه‌ها دسترسی داشته باشید. با استفاده از ECR، اعضای تیم به راحتی می‌تونن به این تصاویر دسترسی پیدا کنن و توی پروژه‌های مختلف از اون‌ها استفاده کنن.

2. Elastic Container Service (ECS)

مورد بعدی ECS هست ، که یک سرویس مدیریت کانتینر کاملاً مدیریت‌شده است که برای تیم‌هایی که با Docker کار می‌کنن خیلی مناسبه. می‌تونید ECS رو مثل سرآشپزی تصور کنید که از دستورپخت‌های موجود در ECR استفاده می‌کنه و کانتینرها رو مستقر و مدیریت می‌کنه. ECS به شما امکان می‌ده تا با استفاده از EC2 یا Fargate، کانتینرهای خودتون رو به راحتی اجرا کنید. برای کسایی که آشنایی بیشتری با Docker دارن و به دنبال یک سرویس ساده‌تر هستن، ECS انتخاب عالی‌ایه.

3. Elastic Kubernetes Service (EKS)

در واقع EKS، سرویس دیگه‌ای از AWS هست که به شما اجازه می‌ده تا با استفاده از Kubernetes، کانتینرهای خودتون رو مدیریت کنید. EKS مثل یک سرآشپز متخصص در زمینه Kubernetes عمل می‌کنه. اگه تیم شما بیشتر با Kubernetes راحت‌تره، EKS بهترین انتخابه. این سرویس به شما اجازه می‌ده تا از ابزارها و قابلیت‌های Kubernetes مثل Podها، Serviceها و Ingress استفاده کنید. EKS با EC2، Fargate و حتی Outposts کار می‌کنه و انعطاف‌پذیری بیشتری رو در اختیارتون می‌ذاره.

تفاوت‌های ECS و EKS

بزرگترین تفاوت بین ECS و EKS اینه که ECS از Docker پشتیبانی می‌کنه و در واقع به عنوان یک سرویس مدیریت کانتینر کاملاً سازگار با Docker عمل می‌کنه. EKS اما، برای کار با Kubernetes طراحی شده که یک سیستم منبع‌باز برای مدیریت کانتینرهاست. بنابراین، انتخاب شما بین این دو سرویس به نوع معماری، تخصص تیم، و نیازمندی‌های شما بستگی داره.

خلاصه‌ی مقایسه:

  • سرویس ECS = کار با Docker، سادگی بیشتر، سازگاری با Fargate.
  • سرویس EKS = کار با Kubernetes، استفاده از امکانات منبع‌باز، انعطاف‌پذیری بیشتر.

خب، حالا یه سوال براتون دارم. اگه به مدیریت و استقرار کانتینرها با Docker عادت دارید و نمی‌خواید وارد مباحث پیچیده‌ی Kubernetes بشید، کدوم سرویس AWS رو انتخاب می‌کنید؟ ECS درسته! اما اگه قصد دارید از ابزارها و قابلیت‌های منبع‌باز Kubernetes استفاده کنید، EKS بهترین گزینه است.

سرویس‌های Serverless در AWS

مفهوم Serverless چیه؟ Serverless، در واقع نوعی مدل Cloud Native برای توسعه و استقرار اپلیکیشن‌هاست. ایده‌ی اصلی این مدل اینه که شما به‌عنوان توسعه‌دهنده نیازی به مدیریت مستقیم سرورها ندارید. در واقع سرورها همچنان وجود دارن، اما AWS اون‌ها رو مدیریت می‌کنه و شما فقط روی کد و منطق تجاری اپلیکیشن‌هاتون تمرکز می‌کنید.

این مدل به شما این امکان رو می‌ده که دیگه دغدغه‌ی مدیریت، به‌روزرسانی، یا نظارت مستقیم بر روی سرورها رو نداشته باشید. شما فقط فانکشن‌ها و سرویس‌های خودتون رو تعریف می‌کنید و باقی کارها رو AWS به‌طور خودکار برای شما انجام می‌ده. در نتیجه، مسئولیت مدیریت زیرساخت‌ها از روی دوش شما برداشته می‌شه و می‌تونید زمان بیشتری رو برای توسعه و بهبود اپلیکیشن‌هاتون صرف کنید.

سرویس‌های Serverless

حالا بیاین نگاهی به بعضی از سرویس‌های Serverless بندازیم.

1. Lambda

لامبدا Lambda یک سرویس محاسباتی Serverless هست که به شما اجازه می‌ده کدتون رو بدون مدیریت سرورها اجرا کنید. کدی که می‌نویسید به‌عنوان یک فانکشن شناخته می‌شه و می‌تونه با زبان‌های مختلفی مثل Python، Rust، و Ruby نوشته بشه. یکی از ویژگی‌های خوب Lambda اینه که به‌صورت خودکار مقیاس‌پذیری داره.

چه زمانی باید از Lambda استفاده کنید؟

  • پردازش فایل‌های Real-Time: فرض کنید یه فایل داده‌ای رو به یک S3 Bucket آپلود می‌کنید. این آپلود می‌تونه یک فانکشن Lambda رو تریگر کنه تا داده‌ها رو توی یک جدول DynamoDB ذخیره کنه.
  • ارسال نوتیفیکیشن ایمیلی: فرض کنید نیاز دارین وقتی تغییراتی توی فایل‌ها از طریق CodeCommit انجام می‌شه، نوتیفیکیشن دریافت کنید. زمانی که تغییری از طریق CodeCommit انجام بشه، می‌تونید از CloudWatch استفاده کنید تا یک فانکشن Lambda رو تریگر کنه و سپس از SNS استفاده کنید تا ایمیلی که حاوی اطلاعات تغییرات هست به شما ارسال بشه.
  • برای business logic توی بک‌اند: فرض کنید شما یک دستگاه Alexa دارین. می‌تونید از یک Alexa Skill استفاده کنید تا Lambda رو تریگر کنه و اطلاعاتی رو از یک جدول DynamoDB بگیره و سپس از یک تریگر Lambda دیگه استفاده کنه تا اون اطلاعات رو به Alexa ارسال کنه.

2. Fargate

فارگیت Fargate یک موتور محاسباتی با قابلیت پرداخت به‌ازای استفاده (Pay-as-You-Go) و مقیاس‌پذیری خودکار هست. برای استفاده از اون، شما یک image کانتینری می‌سازید یا انتخاب می‌کنید و منابع حافظه و محاسباتی مورد نیازتون رو مشخص می‌کنید. سپس، کانتینرهایی که با استفاده از image و منابع تعریف‌شده اجرا شدن رو مدیریت می‌کنید.

ویژگی‌های Fargate

  • وظایف Fargate منابع زیرساختی مثل هسته‌های CPU، حافظه یا رابط‌های شبکه رو با هیچ وظیفه‌ی دیگه‌ای به اشتراک نمی‌ذارن، که باعث ایجاد ایزولاسیون از نظر طراحی می‌شه.
  • فارگیت Fargate یک نوع استقرار (Launch Type) در ECS هست برای کانتینرها، همونطور که EC2 هم نوعی از این استقراره. Fargate تمام اینستنس‌هایی که برای کانتینرها استفاده می‌کنه رو مدیریت می‌کنه و این موضوع اون رو به یک سرویس Serverless تبدیل می‌کنه. در حالی که EC2 به شما اجازه می‌ده مستقیماً اینستنس‌ها رو مدیریت کنید.

چه زمانی باید از Fargate استفاده کنید؟

  • بارهای کاری مبتنی بر پیام (Message-Driven Workloads): فرض کنید شما یک صف از سرویس SQS دارین که Fargate از اون برای long polling پیام‌ها استفاده می‌کنه. Fargate این پیام‌ها رو پردازش می‌کنه و سپس اون‌ها رو در یک جدول DynamoDB ذخیره می‌کنه. تفاوت کلیدی اینجاست که Lambda برای وظایف کوتاه‌مدت و تکراری استفاده می‌شه. اگه نیاز به پردازشی دارین که بیشتر از ۱۵ دقیقه طول می‌کشه، Fargate انتخاب بهتری برای موندن در دنیای Serverless هست.
  • بارهای کاری مبتنی بر رویداد و برنامه‌ریزی شده: فرض کنید نیاز دارین که کدها رو برای اطلاعات حساس مثل شماره حساب‌ها یا اعتبارات اسکن کنید. اگر یک pull request در CodeCommit ثبت بشه، می‌تونید یک فانکشن Lambda رو تریگر کنید تا یک وظیفه‌ی جدید Fargate رو ایجاد کنه که این اسکن رو انجام بده. اگه این اسکن اطلاعات حساسی پیدا کنه، Fargate می‌تونه از SNS استفاده کنه تا به شما ایمیل بزنه و اطلاع بده.

درک قیمت‌گذاری و ویژگی‌های سرویس‌های Serverless

نحوه‌ی قیمت‌گذاری Lambda

شما فقط مسئول کدی هستین که می‌نویسین و امنیتش، در حالی که AWS مدیریت محیط کدنویسی و نسخه‌های پشتیبانی شده از زبان‌ها رو بر عهده داره. لامبدا Lambda می‌تونه کد شما رو در پاسخ به رویدادها اجرا کنه و یک زمان‌بندی حداکثری ۱۵ دقیقه‌ای داره. مقدار پیش‌فرض این زمان‌بندی ۳ ثانیه‌ست، اما شما می‌تونید این مقدار رو برای فانکشن خودتون تغییر بدین.

در مورد قیمت‌گذاری Lambda، شما براساس تعداد درخواست‌ها و مدت‌زمان (duration) شارژ می‌شین. شما فقط برای زمانی که از محاسبات استفاده می‌شه هزینه پرداخت می‌کنید و شارژ زمانی شروع می‌شه که فانکشن تریگر می‌شه. این شامل تست‌ها هم می‌شه، بنابراین اگه کد در واقع اجرا نشه، هیچ هزینه‌ای نداره. مدت‌زمان اجرای فانکشن به نزدیک‌ترین میلی‌ثانیه گرد می‌شه.

نکته‌ی جالب در مورد قیمت‌گذاری Lambda اینه که حتی بعد از پایان سال رایگان، Lambda همچنان در طرح Always Free قرار داره و شامل یک میلیون درخواست رایگان در ماه می‌شه.

قیمت‌گذاری Fargate

خب، برسیم به Fargate. این سرویس هم مثل Lambda هیچ هزینه‌ی اولیه‌ای نداره. شما فقط به اندازه‌ای که از منابع استفاده می‌کنین، مثل تعداد vCPUها، مقدار حافظه و فضای ذخیره‌سازی، هزینه پرداخت می‌کنین. اما برخلاف Lambda، Fargate هیچ طرح رایگانی نداره، پس این نکته رو باید تو برنامه‌ریزی هزینه‌هاتون در نظر بگیرین.

فارگیت Fargate به شما امکان می‌ده که کانتینرها رو بدون نیاز به مدیریت مستقیم سرورها اجرا کنین و به راحتی اون‌ها رو مقیاس‌پذیر کنین. البته این سادگی مدیریت، هزینه‌ای داره که بر اساس منابع محاسباتی مصرفی محاسبه می‌شه

سناریو ایجاد و بررسی Lambda

سناریو: ارائه‌ی آموزش Lambda به تیم

به شما وظیفه داده شده تا یک راهنمای عملی از سرویس Lambda برای تیمتون ارائه بدین. شما باید یک فانکشن بسازید و به نکات مهم در طول مسیر اشاره کنید. خب بریم قدم به قدم اینو انجام بدیم.

ورود به کنسول AWS

اولین کاری که باید بکنیم اینه که وارد کنسول بشیم. می‌تونید از راه‌های مختلف به Lambda دسترسی پیدا کنید. ممکنه در قسمت ویجت‌ها باشه یا تو منوی بالا دیده بشه.

ایجاد فانکشن جدید

می‌خوایم از اول فانکشن رو بسازیم، پس گزینه Author from scratch رو انتخاب می‌کنیم. اسم فانکشن رو MyTestFunction میزایم . نسخه‌ی زمان اجرای (runtime) ما همون Node.js باقی می‌مونه و معماری رو هم تغییر نمی‌دیم.

بعد، گزینه‌ی change default execution role رو انتخاب می‌کنیم. اینجا اگه بخوایم رول‌های خاصی رو برای استفاده با سرویس‌های مختلف مشخص کنیم، می‌تونیم این کار رو انجام بدیم. اما توی این سناریو نیازی به این کار نداریم

و در آخر هم قسمت Additional Configurations هست که می‌تونیم امضا کردن کد (code signing)، URLهای فانکشن، تگ‌ها و VPC رو فعال کنیم، اما الان بهشون نیازی نداریم، پس این بخش رو هم می‌بندیم و فانکشن خودمون رو ایجاد می‌کنیم.

خب فانکشن ما با موفقیت ساخته شد. اینجا می‌بینیم که بخش Overview فانکشن به ما اجازه می‌ده که یک تریگر اضافه کنیم و یک مقصد (destination) تعیین کنیم.

ویرایش کد

پایین‌تر به بخش code source می‌رسیم و یک فایل به نام index.mjs می‌بینیم. اسم این فایل رو تغییر میدیم تا مطمئن بشیم کدمون درست کار می‌کنه. پس اونM رو حذف می‌کنیم و اسم رو به index.js تغییر می‌دیم.

حالا محتوای فعلی رو با کد نمونه‌ای زیر جایگزین می‌کنیم. این فانکشن قراره به یک URL مشخص متصل بشه. اگه اتصال موفقیت‌آمیز باشه، یک کد وضعیت (status code) 200 دریافت می‌کنیم.

const https = require('https'); let url = &quothttps://www.amazon.com&quot // Change this to your desired URL exports.handler = async (event) => { return new Promise((resolve, reject) => { https.get(url, (res) => { if (res.statusCode === 200) { resolve({ statusCode: 200, body: &quotSuccess! Received 200 status code.&quot }); } else { resolve({ statusCode: res.statusCode, body: `Received status code: ${res.statusCode}` }); } }).on('error', (e) => { reject({ statusCode: 500, body: `Request failed: ${e.message}` }); }); }); };

ایجاد و اجرای تست

برای اینکه بتونیم فانکشن رو تست کنیم، اول باید یک test event ایجاد کنیم. پس به بخش تست می‌ریم، اسم این تست رو MyTest می‌ذاریم و باقی موارد رو بدون تغییر باقی می‌ذاریم چون نیازی به ارسال اطلاعات نداریم. حالا این رو ذخیره می‌کنیم و فانکشن رو مستقر می‌کنیم.

تست موفقیت‌آمیز فانکشن

خب فانکشن ما به‌روزرسانی شد و حالا می‌تونیم اون رو تست کنیم. همونطور که انتظار داشتیم، کد وضعیت 200 رو دریافت کردیم.

بررسی لاگ‌ها و گزارش‌ها

پایین‌تر در بخش "function logs" می‌بینیم که فانکشن چه زمانی شروع و چه زمانی پایان یافته. اما نکته‌ی مهمی که باید بهش توجه کنیم، گزارش مربوط به مدت‌زمان (duration) فانکشن هست. اینجا مدت‌زمان فانکشن ما 76.33 میلی‌ثانیه بوده و طبق گرد کردن، قراره برای 77 میلی‌ثانیه شارژ بشیم. این گزارش همچنین اندازه‌ی حافظه و اطلاعات دیگر مربوط به مدت‌زمان رو هم شامل می‌شه.

معرفی سرویس‌های محاسباتی بیشتر AWS

خب تو این قسمت می‌خوایم چهار تا از سرویس‌های محاسباتی AWS یعنی Outposts، Lightsail، Batch و Wavelength رو با هم بررسی کنیم. هر کدوم از این سرویس‌ها، ویژگی‌های منحصربه‌فرد و کاربردهای خاص خودشون رو دارن که در این بخش باهاشون آشنا می‌شیم.

AWS Outposts

سرویس Outposts به شما اجازه می‌ده تا از سرویس‌های ابری AWS در مراکز داده داخلی خودتون استفاده کنین. این سرویس بیشتر برای سازمان‌هایی مناسبه که باید بارهای کاری خودشون رو به دلیل نیاز به تأخیر پایین یا الزامات حاکمیت داده در محل‌های داخلی نگهداری کنن.

حاکمیت داده‌ها به این معناست که اطلاعات و داده‌ها باید در یک مکان مشخص باقی بمونن، مثلاً به دلیل قوانین یا امنیت. Outposts به شرکت‌ها این امکان رو می‌ده تا به صورت هیبریدی، بین محیط‌های ابری و داخلی، کارهاشون رو مدیریت کنن.

خانواده Outposts

سرویس Outposts در دو نوع Rack و Servers ارائه می‌شه. AWS این سخت‌افزارها رو بسته به نیاز شما به مراکز داده‌ی داخلی‌تون ارسال و نصب می‌کنه، تا شما بتونید به سرویس‌ها و APIهای ابری AWS دسترسی داشته باشید.

AWS Lightsail

سرویس Lightsail برخلاف Outposts، یک سرویس ابری کاملاً مدیریت‌شده‌ست که به شما اجازه می‌ده تا پروژه‌های کوچک مثل وب‌سایت‌های WordPress یا محیط‌های تست ساده رو راه‌اندازی کنید. این سرویس یک رابط کاربری ساده و گزینه‌های قابل پیش‌بینی قیمت‌گذاری داره.

ویژگی‌های Lightsail

سرویس Lightsail یک سرویس عالی برای تازه‌کارها یا پروژه‌های کوچک و سریع‌الرشد هست. شما از طریق یک رابط کاربری ساده به منابعی مثل سرورهای مجازی، حافظه SSD، مدیریت DNS و دسترسی RDP/SSH دسترسی دارین. این سرویس همون‌طور که اشاره شد، با قیمت‌گذاری ساده و شفاف ارائه می‌شه که هزینه‌های ماهانه رو به‌راحتی پیش‌بینی‌پذیر می‌کنه.

AWS Batch

سرویس Batch یک سرویس مدیریت دسته‌ای AWS هست که به شما اجازه می‌ده تا بارهای کاری بزرگ رو به بخش‌های کوچیک‌تر تقسیم کنید. این سرویس برای کارهای طولانی‌مدت که نیازمند پردازش‌های تکراری هستن، ایده‌آله. Batch به صورت خودکار منابع محاسباتی مثل اینستنس‌ها رو براساس حجم کاری تأمین می‌کنه.

مثال از Batch

فرض کنید باید یک خبرنامه ماهانه برای ۵۰,۰۰۰ مشترک ارسال کنین. AWS Batch می‌تونه این خبرنامه‌ها رو به دسته‌های هزار تایی تقسیم کنه تا کار ارسال ساده‌تر و بهینه‌تر انجام بشه.

AWS Wavelength

سرویس Wavelength یکی از سرویس‌های جالب AWS هست که امکان اجرای اپلیکیشن‌هایی با تأخیر بسیار پایین رو فراهم می‌کنه. این سرویس به‌طور خاص برای کاربرانی طراحی شده که از شبکه 5G استفاده می‌کنن و نیاز به دسترسی سریع به اپلیکیشن‌ها دارن.

ویژگی‌های Wavelength

سرویس Wavelength از بخش‌های مختلفی مثل zones و subnets تشکیل شده که به توسعه‌دهندگان کمک می‌کنه تا اپلیکیشن‌هایی با تأخیر کم برای شبکه‌های موبایل ایجاد کنن. این سرویس برای اپلیکیشن‌هایی که نیازمند زمان پاسخ سریع در شبکه‌های 5G هستن، گزینه مناسبیه.


تو این مقاله سعی کردم به صورت جامع و ساده، مفاهیم و سرویس‌های مختلف AWS رو معرفی کنم. امیدوارم که با این توضیحات، درک بهتری از خدمات ابری AWS و کاربردهای متنوع اون‌ها پیدا کرده باشین. نکته مهمی که هست AWS همیشه در حال به‌روزرسانی و ارائه خدمات جدید هست، پس همیشه از آخرین اخبار و تغییرات مطلع باشین. اگر سوالی داشتین یا بخشی از این مقاله نیاز به توضیحات بیشتر داشت، بپرسید در حد توانم جواب میدم. موفق باشید و در دنیای ابری بدرخشید! 🌟

لیست تمام قسمت ها

قسمت اول AWS Certified Cloud Practitioner : آشنایی با مفاهیم ابتدایی AWS Cloud

قسمت دوم AWS Certified Cloud Practitioner : خدمات مبتنی بر Compute

قسمت سوم AWS Certified Cloud Practitioner: فناوری و خدمات ذخیره‌سازی مثل S3

قسمت چهارم AWS Certified Cloud Practitioner: خدمات شبکه و Content Delivery

قسمت پنجم AWS Certified Cloud Practitioner : آشنایی با انواع دیتابیس در AWS

و در آخر این آدرس لینکدین و توئیتر من هست خوشحال میشم در ارتباط باشیم.

🪩 Follow Linkedin Hossein Jafari🪩

🕊 Twitter 🕊

awsci cd
شاید از این پست‌ها خوشتان بیاید