0Pricing
AWS Solutions Architect · บทเรียน

คลัสเตอร์ ECS คำจำกัดความงาน และบริการ

กำหนดนิยามงาน ECS ด้วยอิมเมจคอนเทนเนอร์และขีดจำกัดทรัพยากร ลงทะเบียนงานเหล่านั้นในคลัสเตอร์ และสร้างบริการเพื่อรักษาจำนวนงานตามที่ต้องการ

คลัสเตอร์ ECS คำจำกัดความงาน และบริการ เป็นบทเรียน AWS Solutions Architect ฟรีบน CoddyKit นี่คือบทเรียนที่ 1 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน AWS Solutions Architect และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส AWS Solutions Architect มีบทเรียนทั้งหมด 4 บทเรียน

เหตุใดจึงใช้คอนเทนเนอร์บน AWS

คอนเทนเนอร์จะรวมแอปพลิเคชันและสิ่งที่แอปพลิเคชันต้องพึ่งพาทั้งหมดไว้ในหน่วยที่แยกออกจากกันและย้ายไปใช้งานได้ ซึ่งทำงานอย่างสม่ำเสมอในสภาพแวดล้อมต่าง ๆ Amazon ECS (Elastic Container Service) คือบริการจัดการการจัดการคอนเทนเนอร์ของ AWS ที่ดำเนินการโดย AWS ทั้งหมด สามารถเรียกใช้คอนเทนเนอร์ Docker ได้โดยที่คุณไม่ต้องจัดการระนาบควบคุม ECS ผสานรวมกับบริการ AWS อย่างลึกซึ้ง (IAM, ALB, CloudWatch, Secrets Manager) และเป็นวิธีที่แนะนำสำหรับการเรียกใช้คอนเทนเนอร์บน AWS โดยไม่ต้องรับความซับซ้อนของ Kubernetes

คลัสเตอร์ ECS: หน่วยสำหรับจัดกลุ่ม

คลัสเตอร์ ECS คือการจัดกลุ่มทรัพยากรคอมพิวท์เชิงตรรกะที่ใช้เรียกใช้คอนเทนเนอร์ คลัสเตอร์หนึ่งรายการอาจประกอบด้วยอินสแตนซ์ EC2 (ประเภทการเปิดใช้งาน EC2) ความจุ Fargate (ประเภทการเปิดใช้งาน Fargate) หรือทั้งสองแบบ คุณสามารถมีบริการหลายรายการและงานแบบเดี่ยวในคลัสเตอร์เดียวได้ คลัสเตอร์มีขอบเขตอยู่ในรีเจียน แต่ครอบคลุมหลาย Availability Zone รูปแบบที่พบได้บ่อยคือมีคลัสเตอร์หนึ่งรายการต่อสภาพแวดล้อม (dev/staging/prod) และมีหลายบริการภายในแต่ละคลัสเตอร์สำหรับไมโครเซอร์วิสที่แตกต่างกัน

aws ecs create-cluster \
  --cluster-name 'MyAppCluster' \
  --capacity-providers FARGATE FARGATE_SPOT \
  --default-capacity-provider-strategy \
    capacityProvider=FARGATE,weight=1,base=1

นิยามงาน: พิมพ์เขียว

นิยามงานคือพิมพ์เขียวสำหรับการเรียกใช้คอนเทนเนอร์ใน ECS ซึ่งคล้ายกับไฟล์ Docker Compose โดยระบุอิมเมจคอนเทนเนอร์ (URI ของ ECR หรือ Docker Hub), การจัดสรรCPU และหน่วยความจำ, การแมปพอร์ต, ตัวแปรสภาพแวดล้อม, การกำหนดค่าการบันทึกข้อมูล, โวลุม และบทบาทงานของ IAM นิยามงานมีการจัดเวอร์ชัน โดยการแก้ไขแต่ละรายการจะเปลี่ยนแปลงไม่ได้ คุณสามารถกำหนดคอนเทนเนอร์หลายรายการต่องานหนึ่งรายการเพื่อใช้รูปแบบไซด์คาร์ (แอปหลัก + ตัวส่งบันทึกข้อมูล + เอเจนต์ตรวจสอบ)

{
  'family': 'myapp-task',
  'networkMode': 'awsvpc',
  'requiresCompatibilities': ['FARGATE'],
  'cpu': '512',
  'memory': '1024',
  'executionRoleArn': 'arn:aws:iam::123456789012:role/ecsTaskExecutionRole',
  'taskRoleArn': 'arn:aws:iam::123456789012:role/myAppTaskRole',
  'containerDefinitions': [{
    'name': 'myapp',
    'image': '123456789012.dkr.ecr.us-east-1.amazonaws.com/myapp:latest',
    'portMappings': [{'containerPort': 8080}]
  }]
}

บทบาทงานกับบทบาทการดำเนินงาน

งาน ECS ใช้บทบาท IAM สองบทบาทที่แยกจากกันและมีวัตถุประสงค์ต่างกัน บทบาทการดำเนินงานของงานใช้โดยเอเจนต์ ECS เพื่อดึงอิมเมจคอนเทนเนอร์จาก ECR ส่งบันทึกไปยัง CloudWatch และดึงข้อมูลลับจาก Secrets Manager หรือ Parameter Store ระหว่างเริ่มงาน บทบาทงานใช้โดยโค้ดแอปพลิเคชันที่ทำงานอยู่ภายในคอนเทนเนอร์เพื่อเรียกใช้บริการ AWS (S3, DynamoDB, SQS) ควรกำหนดสิทธิ์ตามหลักสิทธิ์น้อยที่สุดให้แต่ละบทบาทแยกจากกันเสมอ และไม่ควรมอบสิทธิ์ที่แอปพลิเคชันไม่จำเป็นต้องใช้ให้บทบาทการดำเนินงาน

บริการ ECS สำหรับเวิร์กโหลดที่ทำงานต่อเนื่อง

บริการ ECSจะรักษาจำนวนอินสแตนซ์งานที่ทำงานพร้อมกันตามที่ระบุไว้ (จำนวนที่ต้องการ) หากงานล้มเหลวหรือหยุดทำงาน ตัวจัดกำหนดการบริการจะเปิดงานทดแทนโดยอัตโนมัติ นอกจากนี้ บริการยังผสานรวมกับ Elastic Load Balancing เพื่อกระจายทราฟฟิก และรองรับการปรับใช้แบบทยอยอัปเดตกับแบบสีน้ำเงิน/สีเขียว ใช้บริการสำหรับกระบวนการที่ทำงานต่อเนื่องทุกประเภท (เว็บเซิร์ฟเวอร์ เซิร์ฟเวอร์ API เวิร์กเกอร์เบื้องหลัง) สำหรับงานที่ทำครั้งเดียว ให้เรียกใช้งานแบบเดี่ยวแทน

aws ecs create-service \
  --cluster 'MyAppCluster' \
  --service-name 'MyAppService' \
  --task-definition 'myapp-task:5' \
  --desired-count 3 \
  --launch-type FARGATE \
  --network-configuration '{
    "awsvpcConfiguration": {
      "subnets": ["subnet-aaa111", "subnet-bbb222"],
      "securityGroups": ["sg-xyz"],
      "assignPublicIp": "DISABLED"
    }
  }'

โหมดเครือข่าย: awsvpc เทียบกับ bridge

โหมดเครือข่าย awsvpc ทำให้งาน ECS แต่ละรายการมี Elastic Network Interface (ENI) และที่อยู่ IP ส่วนตัวของตนเองภายใน VPC เช่นเดียวกับอินสแตนซ์ EC2 ซึ่งช่วยให้ควบคุมกลุ่มความปลอดภัยแยกตามงานได้อย่างละเอียด และเป็นข้อกำหนดสำหรับงาน Fargate ส่วนโหมดเครือข่าย bridge ใช้เครือข่ายเสมือนในตัวของ Docker บนโฮสต์ โดยแมปพอร์ตจากโฮสต์ไปยังคอนเทนเนอร์ และใช้ ENI ร่วมกับอินสแตนซ์ EC2 ของโฮสต์ สำหรับการสอบ SAA-C03 นั้น Fargate จะใช้ awsvpc เสมอ ส่วนประเภทการเปิดใช้งาน EC2 สามารถใช้ได้ทั้งสองแบบ

การแนบตัวจัดสรรภาระงานกับบริการ ECS

ลงทะเบียนบริการ ECS ของคุณกับกลุ่มเป้าหมายของ ALBเพื่อกระจายทราฟฟิกไปยังอินสแตนซ์งาน เมื่อเริ่มงานใหม่ ECS จะลงทะเบียนงานนั้นกับกลุ่มเป้าหมายโดยอัตโนมัติ และเมื่อหยุดทำงาน ECS จะยกเลิกการลงทะเบียน ตั้งค่าระยะผ่อนผันสำหรับการตรวจสอบสถานะ (เช่น 60-120 วินาที) เพื่อให้คอนเทนเนอร์มีเวลาเริ่มทำงานก่อนเริ่มการตรวจสอบสถานะ หากไม่มีระยะผ่อนผัน ALB อาจระบุว่าคอนเทนเนอร์ที่เริ่มทำงานช้าไม่พร้อมใช้งานก่อนที่จะพร้อม ส่งผลให้เกิดการวนซ้ำของการเปลี่ยนงานทดแทน

aws ecs create-service \
  --cluster 'MyAppCluster' \
  --service-name 'MyAppService' \
  --load-balancers \
    'targetGroupArn=arn:aws:elasticloadbalancing:...,containerName=myapp,containerPort=8080' \
  --health-check-grace-period-seconds 120 \
  --task-definition 'myapp-task:5' \
  --desired-count 3

การปรับใช้แบบทยอยอัปเดตเทียบกับแบบสีน้ำเงิน/สีเขียว

บริการ ECS รองรับกลยุทธ์การปรับใช้สองแบบ: การอัปเดตแบบทยอยจะแทนที่งานเก่าด้วยงานใหม่ทีละน้อย โดยกำหนดค่าได้ด้วย minimumHealthyPercent (ค่าขั้นต่ำ) และ maximumPercent (ค่าสูงสุด) การตั้งค่า 100/200 หมายความว่างานเก่าจะยังทำงานขณะที่เปิดงานใหม่ (ต้องมีความจุที่พร้อมใช้งาน 100% และรองรับความจุได้สูงสุด 200%) การปรับใช้แบบสีน้ำเงิน/สีเขียว (ผ่าน AWS CodeDeploy) จะสร้างชุดงานใหม่ควบคู่กับชุดงานเก่า จากนั้นทยอยเปลี่ยนทราฟฟิกโดยใช้การกำหนดเส้นทางแบบถ่วงน้ำหนักของ ALB และยุติงานเก่าหลังตรวจสอบความถูกต้องแล้ว แบบสีน้ำเงิน/สีเขียวสามารถย้อนกลับได้โดยไม่หยุดให้บริการ

การบันทึกข้อมูล CloudWatch จาก ECS

กำหนดค่าไดรเวอร์บันทึกข้อมูล awslogs ในนิยามงาน เพื่อส่งเอาต์พุตมาตรฐานและข้อผิดพลาดมาตรฐานของคอนเทนเนอร์ไปยังบันทึก CloudWatchโดยตรง ระบุกลุ่มบันทึก รีเจียน และคำนำหน้าสตรีม บทบาทการดำเนินงานของงานต้องมีสิทธิ์ logs:CreateLogStream และ logs:PutLogEvents สำหรับการรวบรวมบันทึกจากหลายบริการไว้ที่ส่วนกลาง ให้พิจารณาใช้ FireLens (คอนเทนเนอร์ไซด์คาร์ที่มี Fluent Bit หรือ Fluentd) เพื่อกำหนดเส้นทางบันทึกไปยัง S3, OpenSearch หรือระบบบันทึกข้อมูลของบุคคลที่สาม

'logConfiguration': {
    'logDriver': 'awslogs',
    'options': {
        'awslogs-group': '/ecs/myapp',
        'awslogs-region': 'us-east-1',
        'awslogs-stream-prefix': 'myapp'
    }
}

การค้นพบบริการ ECS ด้วย Cloud Map

เมื่อไมโครเซอร์วิสใน ECS ต้องสื่อสารระหว่างกัน การกำหนดที่อยู่ IP แบบตายตัวจะใช้ไม่ได้ เพราะงานเป็นทรัพยากรชั่วคราวและได้รับ IP ใหม่ทุกครั้งที่เปิดใช้งาน ให้ใช้ AWS Cloud Map (การค้นพบบริการของ ECS) เพื่อลงทะเบียน IP และพอร์ตของแต่ละงานในเนมสเปซ DNS บริการอื่นสามารถแก้ไข myservice.namespace.local เพื่อค้นหา IP ของงานที่มีสถานะดีในปัจจุบัน ECS จะลงทะเบียนงานใหม่และยกเลิกการลงทะเบียนงานที่ล้มเหลวโดยอัตโนมัติ ทำให้ระเบียน DNS ถูกต้องโดยไม่ต้องจัดการด้วยตนเอง

ข้อมูลลับในนิยามงาน ECS

อย่าใส่ข้อมูลประจำตัวลงในนิยามงานโดยตรง แต่ให้อ้างอิงข้อมูลลับจาก Secrets Manager หรือ Parameter Store ในนิยามงานแทน ECS จะฉีดข้อมูลเหล่านี้เป็นตัวแปรสภาพแวดล้อมเมื่อเริ่มงาน บทบาทการดำเนินงานของงานต้องมีสิทธิ์ดึงข้อมูลลับ สำหรับ Secrets Manager ให้ใช้ secretsmanager:GetSecretValue และสำหรับ Parameter Store ให้ใช้ ssm:GetParameters ระบบจะดึงข้อมูลลับเพียงครั้งเดียวเมื่อเริ่มต้นคอนเทนเนอร์ ดังนั้นการหมุนเวียนข้อมูลลับจึงต้องแทนที่งานเพื่อให้ได้รับค่าใหม่

'secrets': [
    {
        'name': 'DB_PASSWORD',
        'valueFrom': 'arn:aws:secretsmanager:us-east-1:123456789012:secret:myapp/db-password-AbCdEf'
    },
    {
        'name': 'API_KEY',
        'valueFrom': 'arn:aws:ssm:us-east-1:123456789012:parameter/myapp/api-key'
    }
]

ตรวจสอบความเข้าใจ

ทดสอบความเข้าใจแนวคิด AWS Solutions Architect (SAA-C03) จากบทเรียนนี้

สรุปบทเรียน

ในบทเรียนนี้ คุณได้เรียนรู้ว่า คลัสเตอร์ ECSใช้จัดกลุ่มทรัพยากรคอมพิวท์ที่งานทำงานอยู่ นิยามงานกำหนดอิมเมจคอนเทนเนอร์ CPU/หน่วยความจำ บทบาท และการบันทึกข้อมูลในรูปแบบพิมพ์เขียวที่มีการจัดเวอร์ชัน และบริการ ECSจะรักษาจำนวนงานที่ต้องการ ผสานรวมกับ ALB เพื่อกระจายทราฟฟิก และรองรับการปรับใช้แบบทยอยหรือแบบสีน้ำเงิน/สีเขียว บทถัดไป เราจะเปรียบเทียบประเภทการเปิดใช้งาน EC2 กับประเภทการเปิดใช้งาน Fargate แบบไร้เซิร์ฟเวอร์

คำถามที่พบบ่อย

บทเรียน “คลัสเตอร์ ECS คำจำกัดความงาน และบริการ” ฟรีหรือไม่

ใช่ — ข้อความเต็มของ “คลัสเตอร์ ECS คำจำกัดความงาน และบริการ” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส AWS Solutions Architect ให้อัปเกรดเป็น CoddyKit PRO คอร์ส AWS Solutions Architect มีบทเรียนทั้งหมด 4 บทเรียน

คุณจะเรียนรู้อะไรในบทเรียน “คลัสเตอร์ ECS คำจำกัดความงาน และบริการ”

กำหนดนิยามงาน ECS ด้วยอิมเมจคอนเทนเนอร์และขีดจำกัดทรัพยากร ลงทะเบียนงานเหล่านั้นในคลัสเตอร์ และสร้างบริการเพื่อรักษาจำนวนงานตามที่ต้องการ คุณปฏิบัติ AWS Solutions Architect ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน

คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน AWS Solutions Architect หรือไม่

ไม่จำเป็นต้องมีประสบการณ์มาก่อน AWS Solutions Architect บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 1 จากทั้งหมด 4 บทเรียน

บทเรียน “คลัสเตอร์ ECS คำจำกัดความงาน และบริการ” ใช้เวลานานแค่ไหน

บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย

ฉันเขียนและรันโค้ดในบทเรียน AWS Solutions Architect นี้ได้ไหม

ได้ บทเรียน AWS Solutions Architect ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. คลัสเตอร์ ECS คำจำกัดความงาน และบริการ
  2. ประเภทการเปิดใช้งาน EC2 เทียบกับ Fargate
  3. ECR: การจัดเก็บและดึงอิมเมจคอนเทนเนอร์
  4. การปรับขนาดอัตโนมัติและการทำโหลดบาลานซ์บริการ ECS
← กลับไปที่ AWS Solutions Architect