برنامه نویسی

AWS ECS و Fargate برای ساخت و استقرار ظروف

هنگامی که من با توسعه ابر شروع کردم ، بعضی اوقات طول کشید تا استراتژی های مختلف استقرار ، نحوه تفاوت آنها و چه زمانی از لامبدا یا یک ظرف استفاده کنم. .

در این مقاله من به سرویس کانتینر الاستیک AWS (ECS) و AWS Fargate به عنوان یک راه حل قدرتمند برای اجرای ظروف در ابر متمرکز خواهم شد. با این حال ، توسعه دهندگان اغلب آنها را با گزینه های دیگری مانند Amazon EC2 ، AWS Lambda و AWS App Runner مقایسه می کنند. در این مقاله به بررسی این موضوع می پردازیم که چرا ECS و Fargate گزینه های عالی هستند و چگونه آنها با این خدمات دیگر مقایسه می شوند.

درک EC و Fargate

Amazon ECS یک سرویس ارکستراسیون کانتینر کاملاً مدیریت شده است که شما را قادر می سازد تا برنامه های کانتینر شده را مستقر ، مدیریت و مقیاس کند. از دو نوع پرتاب پشتیبانی می کند:

  • نوع پرتاب EC2: از نمونه های Amazon EC2 به عنوان زیرساخت های محاسباتی اساسی برای اجرای ظروف استفاده می کند.
  • نوع پرتاب Fargate: گزینه ای بدون سرور که نیاز به مدیریت نمونه های EC2 را از بین می برد و به AWS اجازه می دهد تا از تأمین و مقیاس گذاری برخوردار باشد.

Fargate به ویژه برای تیم هایی که به دنبال روشی ساده برای اجرای ظروف هستند بدون نگرانی در مورد زیرساخت های اساسی مفید است.

تمایز EC و Fargate از سایر خدمات محاسبه AWS

1. ECS در مقابل EC2

نشان ECS (با Fargate) EC2
مدیریت زیرساخت کاملاً مدیریت شده با مدیریت کاربر
مقیاس بندی اتوماتیک ، بدون سرور گروه های مقیاس گذاری دستی یا خودکار
امنیت نقش مبتنی بر IAM در هر کار به پیکربندی گروه امنیتی EC2 نیاز دارد
راندمان هزینه در هر VCPU و حافظه پرداخت کنید در هر نمونه EC2 پرداخت کنید
  • ECS با EC2 کنترل بیشتری بر زیرساخت های اساسی می دهد اما به مدیریت اضافی نیاز دارد.
  • Fargate استقرار را با انتزاع نگرانی های زیرساخت ها ساده می کند و مدیریت در مقیاس را آسان تر می کند.

2. ECS در مقابل لامبدا

نشان ECS (با Fargate) AWS Lambda
بهترین برای برنامه های کانتینر شده طولانی مدت توابع کوتاه مدت و محور رویداد
زمان اعدام نامحدود محدود به 15 دقیقه در هر اجرا
تأخیر شروع سرد حداقل تأخیرهای احتمالی به دلیل سرماخوردگی
مدل قیمت گذاری پرداخت CPU/حافظه تهیه شده برای هر زمان و درخواست های هر زمان پرداخت کنید
  • Lambda برای برنامه های بدون رویداد بدون سرور بسیار عالی است اما برای بارهای مداوم کانتینر نامناسب است.
  • ECS (با Fargate) برای میکروسروس هایی که نیاز به در دسترس بودن مداوم دارند ایده آل است.

3. ECS vs App Runner

نشان ECS (با Fargate) دونده برنامه AWS
بهترین برای ارکستراسیون کانتینر پیچیده استقرار برنامه وب ساده
سفارشی سازی بسیار قابل تنظیم خدمات انتزاعی
روش استقرار تعاریف کار ، خدمات ، ALBS استقرار مبتنی بر GIT
مقیاس بندی خودکشی ریز دانه خودکشی مدیریت شده
  • AWS App Runner برای توسعه دهندگان که به دنبال یک رویکرد دست و پاگیر برای اجرای برنامه های وب هستند ، طراحی شده است.
  • ECS و Fargate انعطاف پذیری و کنترل بیشتری بر شبکه ، امنیت و عملکرد ارائه می دهند.

چرا ECS و Fargate را انتخاب می کنیم؟

1 مدیریت ساده

با AWS Fargate ، نیازی به ارائه ، مدیریت یا مقیاس EC2 ندارید. این ایده آل برای تیم هایی است که به جای نگهداری زیرساخت ها بر توسعه برنامه متمرکز شده اند.

2 مقیاس پذیری و انعطاف پذیری

EC با Fargate اجازه می دهد تا مقیاس بندی پویا بر اساس تقاضای بار کار ، از استفاده بهینه از منابع بدون مداخله دستی اطمینان حاصل کند.

3 امنیت و انزوا

ECS یکپارچه با AWS IAM برای مجوزهای دانه ای ادغام می شود. وظایف Fargate در محیط های محاسباتی جدا شده اجرا می شود و خطرات امنیتی را کاهش می دهد.

4 راندمان هزینه

Fargate از یک مدل Pay-As-You-Go پیروی می کند که در آن فقط برای VCPU و حافظه مصرف شده توسط ظروف در حال پرداخت هزینه می کنید. این امر نیاز به تأمین ظرفیت اضافی را از بین می برد.

5 ادغام عمیق AWS

ECS و Fargate یکپارچه با خدمات AWS مانند IAM ، VPC ، CloudWatch و ALB کار می کنند و یک اکوسیستم یکپارچه برای ساختن برنامه های بومی ابر ارائه می دهند.

Amazon ECS و Fargate راه حل های Ascalabl E و مقرون به صرفه برای ارکستراسیون کانتینر را ارائه می دهند. در حالی که EC2 ، Lambda و App Runner هر کدام موارد استفاده خود را دارند ، ECS و Fargate تعادل بین انعطاف پذیری و سهولت استفاده دارند.

در اینجا یک کد نمونه برای یک پروژه CDK آورده شده است.

کد CDK AWS

این اسکریپت CDK AWS یک سرویس ECS Fargate را با استفاده از منابع AWS ، از جمله VPC ، گروه های امنیتی ، خوشه ECS و یک متعادل کننده بار برنامه (ALB) ارائه می دهد. این سرویس یک کانتینر را از یک مخزن مشخص شده تصویر Docker اجرا می کند ، و آن را در دسترس عموم در پورت 8000 قرار می دهد.

ویژگی های کلیدی

  • ایجاد VPC: این اسکریپت VPC را با دو زیر شبکه عمومی و بدون دروازه NAT ایجاد می کند تا هزینه های آن کم باشد.
  • خوشه ECS: یک خوشه ECS در VPC ایجاد می شود.
  • پیکربندی گروه امنیتی: قوانین Ingress امکان ترافیک در بنادر 8000 (برنامه) و 443 (HTTPS) را فراهم می کند.
  • تعریف کار Fargate: تنظیمات کانتینر ، از جمله مجوزهای حافظه ، CPU و IAM را تعریف می کند.
  • تعادل بار برنامه: برای توزیع ترافیک در نمونه های کانتینر در حال اجرا استفاده می شود.
  • پیکربندی بررسی سلامتی: تضمین می کند که این سرویس قبل از مسیریابی ترافیک سالم تلقی می شود.

پیش نیازهای

قبل از استقرار این پشته ، اطمینان حاصل کنید:

  • AWS CDK نصب شده است (npm install -g aws-cdk)
  • اعتبار AWS پیکربندی شده است (aws configure)
  • متغیرهای محیطی در یک تنظیم شده اند .env پرونده:
  STAGE=dev
  PREFIX=server-image-process
  DOCKER_REPO=your-docker-image-repo
  STREAM_PREFIX=server-stream
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

تجزیه کد

تنظیم VPC

const vpc = new ec2.Vpc(this, prefix + "-vpc", {
  maxAzs: 2,
  natGateways: 0,
  subnetConfiguration: [
    {
      cidrMask: 24,
      name: "public",
      subnetType: ec2.SubnetType.PUBLIC,
    },
  ],
});
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

این یک VPC با دو منطقه در دسترس بودن و زیر شبکه های عمومی ایجاد می کند.

خوشه ECS

const cluster = new ecs.Cluster(this, prefix + "-cluster", {
  vpc,
});
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

یک خوشه ECS برای مدیریت برنامه کانتینر شده ایجاد می کند.

گروه امنیتی

const securityGroup = new ec2.SecurityGroup(this, prefix + "-sg", {
  vpc,
  allowAllOutbound: true,
});

securityGroup.addIngressRule(ec2.Peer.anyIpv4(), ec2.Port.tcp(8000), "Allow HTTP traffic");
securityGroup.addIngressRule(ec2.Peer.anyIpv4(), ec2.Port.tcp(443), "Allow HTTPS");
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

امکان ترافیک ورودی در بنادر 8000 و 443 را فراهم می کند.

تعریف کار Fargate

const taskDefinition = new ecs.FargateTaskDefinition(
  this, prefix + "-task-definition",
  {
    memoryLimitMiB: 1024 * 3,
    cpu: 256 * 4,
  }
);
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

وظیفه Fargate را با 3 گیگابایت رم و 1 CPU تعریف می کند.

تعریف کانتینر

const container = taskDefinition.addContainer(prefix + "-container", {
  image: ecs.ContainerImage.fromRegistry(repo),
  logging: ecs.LogDriver.awsLogs({
    streamPrefix: streamPrefix,
    logRetention: logs.RetentionDays.ONE_WEEK,
  }),
});

container.addPortMappings({ containerPort: 8000 });
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

تصویر کانتینر و پیکربندی ورود به سیستم را مشخص می کند.

استقرار با یک متعادل کننده بار

const fargateService = new ecs_patterns.ApplicationLoadBalancedFargateService(
  this, prefix + "-service",
  {
    cluster,
    taskDefinition,
    desiredCount: 1,
    assignPublicIp: true,
    publicLoadBalancer: true,
    securityGroups: [securityGroup],
    healthCheckGracePeriod: cdk.Duration.seconds(60),
  }
);
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

یک متعادل کننده بار برنامه (ALB) برای سرویس ایجاد می کند.

پیکربندی بررسی سلامتی

fargateService.targetGroup.configureHealthCheck({
  path: "/api/health",
  port: "8000",
  healthyThresholdCount: 2,
  unhealthyThresholdCount: 5,
  timeout: cdk.Duration.seconds(5),
  interval: cdk.Duration.seconds(30),
});
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

تضمین می کند که برنامه فقط به موارد سالم هدایت می شود.

اعزام

برای استقرار پشته ، اجرا:

cdk deploy
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

برای حذف پشته ، استفاده کنید:

cdk destroy
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

نویسنده: EMI Roberi

نوشته های مشابه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دکمه بازگشت به بالا