0Pricing
Cloud & IT Cert Prep · บทเรียน

ECR: การจัดเก็บและดึงอิมเมจคอนเทนเนอร์

พุชอิมเมจ Docker ไปยัง Amazon ECR ใช้นโยบายวงจรชีวิตเพื่อลบอิมเมจเก่า และดึงอิมเมจเข้าสู่งาน ECS อย่างปลอดภัย

ECR: การจัดเก็บและดึงอิมเมจคอนเทนเนอร์ เป็นบทเรียน Cloud & IT Cert Prep ฟรีบน CoddyKit นี่คือบทเรียนที่ 3 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Cloud & IT Cert Prep และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Cloud & IT Cert Prep มีบทเรียนทั้งหมด 4 บทเรียน

Amazon ECR คืออะไร

Amazon Elastic Container Registry (ECR) เป็นรีจิสทรีอิมเมจคอนเทนเนอร์ที่จัดการโดย AWS อย่างเต็มรูปแบบและเข้ากันได้กับ Docker บริการนี้จัดเก็บ จัดการ และนำอิมเมจคอนเทนเนอร์ไปใช้งานอย่างปลอดภัยภายใน AWS ECR ช่วยขจัดความจำเป็นในการดูแลโครงสร้างพื้นฐานรีจิสทรีของคุณเอง และผสานการทำงานโดยตรงกับ ECS, EKS, Lambda (อิมเมจคอนเทนเนอร์) และ CodeBuild อิมเมจที่จัดเก็บใน ECR จะถูกทำสำเนาเพื่อให้พร้อมใช้งานสูง และสามารถสแกนหาช่องโหว่ด้านความปลอดภัยโดยอัตโนมัติได้

รีจิสทรี ECR แบบส่วนตัวกับแบบสาธารณะ

ECR รองรับรีจิสทรีสองประเภท: รีจิสทรีส่วนตัวใน Amazon ECR ต้องใช้การยืนยันตัวตนกับ AWS เพื่อดึงอิมเมจ เหมาะสำหรับอิมเมจแอปพลิเคชันที่เป็นกรรมสิทธิ์ การเข้าถึงควบคุมด้วยนโยบาย IAM และนโยบายทรัพยากรของรีจิสทรี รีจิสทรีสาธารณะบน ECR Public Gallery (public.ecr.aws) อนุญาตให้ดึงอิมเมจโดยไม่ต้องยืนยันตัวตนจากที่ใดก็ได้บนอินเทอร์เน็ต เหมาะสำหรับอิมเมจพื้นฐานแบบโอเพนซอร์ส เครื่องมือสาธารณะ และอิมเมจที่ AWS จัดเตรียมให้ (อิมเมจพื้นฐานของ Lambda และอิมเมจ AMI ที่ปรับให้เหมาะกับ ECS) รีจิสทรีสาธารณะมีโควตาการดึงฟรี พร้อมจำกัดอัตราสำหรับคำขอที่ไม่ผ่านการยืนยันตัวตน

# Create a private ECR repository
aws ecr create-repository \
  --repository-name 'myapp/backend' \
  --image-scanning-configuration scanOnPush=true \
  --image-tag-mutability IMMUTABLE

การยืนยันตัวตน Docker กับ ECR

หากต้องการส่งหรือดึงอิมเมจ ECR ส่วนตัว Docker ต้องยืนยันตัวตนโดยใช้ข้อมูลประจำตัว AWS ใช้ aws ecr get-login-password เพื่อรับโทเค็นยืนยันตัวตนชั่วคราว แล้วส่งต่อโทเค็นนั้นให้กับ docker login โทเค็นมีอายุใช้งาน 12 ชั่วโมง ใน pipeline ของ CI/CD ให้ขอโทเค็นใหม่ก่อนการส่งอิมเมจแต่ละครั้ง ตัวแทนงานของ ECS, Lambda และโหนดผู้ปฏิบัติงานของ EKS จะยืนยันตัวตนกับ ECR โดยอัตโนมัติโดยใช้บทบาท IAM ของตน จึงไม่จำเป็นต้องเข้าสู่ระบบด้วยตนเองเมื่อดึงอิมเมจขณะทำงานในสภาพแวดล้อม AWS

# Authenticate Docker CLI to ECR
aws ecr get-login-password --region us-east-1 | \
  docker login \
    --username AWS \
    --password-stdin \
    123456789012.dkr.ecr.us-east-1.amazonaws.com

การส่งอิมเมจไปยัง ECR

ขั้นตอนมาตรฐานในการส่งอิมเมจไปยัง ECR: (1) สร้างอิมเมจ Docker ในเครื่อง; (2) ติดแท็กให้อิมเมจด้วย URI ของรีจิสทรี ECR (รูปแบบ: account.dkr.ecr.region.amazonaws.com/repo-name:tag); (3) ส่งอิมเมจที่ติดแท็กแล้ว ECR จัดเก็บแต่ละเลเยอร์ของอิมเมจแยกกัน และกำจัดเลเยอร์ที่ซ้ำกันระหว่างอิมเมจโดยไม่จัดเก็บซ้ำ ซึ่งช่วยลดค่าใช้จ่ายในการจัดเก็บ การใช้ แท็กแบบเปลี่ยนแปลงไม่ได้ช่วยป้องกันการเขียนทับแท็ก ทำให้เวอร์ชันอิมเมจที่นำไปใช้งานมีความคงที่และตรวจสอบย้อนหลังได้

# Build, tag, and push
docker build -t myapp/backend .
docker tag myapp/backend \
  123456789012.dkr.ecr.us-east-1.amazonaws.com/myapp/backend:v1.2.3
docker push \
  123456789012.dkr.ecr.us-east-1.amazonaws.com/myapp/backend:v1.2.3

ความสามารถในการเปลี่ยนแปลงแท็กอิมเมจ

แท็ก IMMUTABLEป้องกันไม่ให้เขียนทับแท็กด้วยอิมเมจอื่น เมื่อความสามารถในการเปลี่ยนแปลงแท็กเป็น IMMUTABLE การส่งอิมเมจใหม่ไปยังแท็กเดิมจะล้มเหลว คุณต้องใช้แท็กใหม่ แนวทางนี้เป็นแนวปฏิบัติที่ดีสำหรับระบบจริง เพราะทำให้ :v1.2.3 อ้างถึงไดเจสต์ของอิมเมจเดียวกันเสมอ ช่วยให้ย้อนกลับเวอร์ชันได้อย่างน่าเชื่อถือและตรวจสอบย้อนหลังได้ ให้ใช้แท็ก MUTABLEเฉพาะกับสาขาสำหรับการพัฒนา หรือแท็กอำนวยความสะดวก :latest ในสภาพแวดล้อมที่ไม่ใช่ระบบจริงเท่านั้น

การสแกนอิมเมจเพื่อค้นหาช่องโหว่

เปิดใช้ การสแกนเมื่อส่งอิมเมจ เพื่อสแกนอิมเมจโดยอัตโนมัติหาช่องโหว่ CVE ที่ทราบแล้วเมื่อมีการส่งอิมเมจ ECR ใช้การผสานการทำงานกับ Amazon Inspector (การสแกนแบบ enhanced) หรือ Basic Scanning ในตัวที่ใช้ตัวสแกน Clair แบบโอเพนซอร์ส การสแกนแบบ enhanced ให้การสแกนอย่างต่อเนื่อง (ไม่ใช่เฉพาะเมื่อส่งอิมเมจ) และครอบคลุมแพ็กเกจ OS รวมถึงแพ็กเกจเฉพาะภาษา (Node.js, Python, Java) ตรวจสอบผลการสแกนในคอนโซล ECR หรือผ่านการแจ้งเตือน EventBridge ไปยังทีมรักษาความปลอดภัย

# Enable enhanced scanning for a registry
aws ecr put-registry-scanning-configuration \
  --scan-type ENHANCED \
  --rules '[{"repositoryFilters": [{"filter": "*", "filterType": "WILDCARD"}], "scanFrequency": "CONTINUOUS_SCAN"}]'

นโยบายวงจรชีวิตเพื่อจัดการค่าใช้จ่ายของอิมเมจ

ECR คิดค่าจัดเก็บตาม GB ต่อเดือน หากไม่มีการจัดการ อิมเมจเก่าจะสะสมไปเรื่อย ๆ และทำให้ค่าใช้จ่ายเพิ่มขึ้น นโยบายวงจรชีวิตจะหมดอายุและลบอิมเมจโดยอัตโนมัติตามกฎ เช่น เก็บรีลีสที่ติดแท็กไว้เพียง 10 รายการล่าสุด หรือลบอิมเมจที่ไม่มีแท็กและเก่ากว่า 7 วัน นโยบายวงจรชีวิตจะทำงานทุกวัน ฟีเจอร์นี้มีความสำคัญอย่างยิ่งใน pipeline ของ CI/CD ที่ส่งอิมเมจใหม่ทุกครั้งที่มีการคอมมิต เพราะอาจสะสมอิมเมจหลายร้อยรายการต่อสัปดาห์

aws ecr put-lifecycle-policy \
  --repository-name 'myapp/backend' \
  --lifecycle-policy-text '{
    "rules": [
      {
        "rulePriority": 1,
        "description": "Keep last 10 tagged images",
        "selection": {"tagStatus": "tagged", "tagPrefixList": ["v"], "countType": "imageCountMoreThan", "countNumber": 10},
        "action": {"type": "expire"}
      },
      {
        "rulePriority": 2,
        "description": "Delete untagged images after 7 days",
        "selection": {"tagStatus": "untagged", "countType": "sinceImagePushed", "countUnit": "days", "countNumber": 7},
        "action": {"type": "expire"}
      }
    ]
  }'

การเข้าถึงอิมเมจข้ามบัญชี

หากต้องการดึงอิมเมจจากรีจิสทรี ECR ในบัญชี A ไปยัง ECS/EKS/Lambda ในบัญชี B ให้กำหนด นโยบายรีจิสทรี (นโยบายที่อิงทรัพยากร) บนรีจิสทรี ECR ในบัญชี A โดยมอบสิทธิ์ให้ตัวตน IAM จากบัญชี B เรียกใช้ ecr:GetDownloadUrlForLayer, ecr:BatchGetImage และ ecr:BatchCheckLayerAvailability วิธีนี้ช่วยขจัดความจำเป็นในการคัดลอกอิมเมจระหว่างบัญชี และทำให้จัดการอิมเมจจากศูนย์กลางพร้อมนำไปใช้งานแบบกระจายได้

การทำสำเนา ECR สำหรับการนำไปใช้งานหลายรีเจียน

การทำสำเนา ECRจะคัดลอกอิมเมจจากรีจิสทรีหลักของคุณไปยังรีจิสทรีใน AWS Region อื่นโดยอัตโนมัติ (และเลือกคัดลอกไปยังบัญชีอื่นได้) เมื่อทาสก์ ECS ใน Region อื่นดึงอิมเมจ ทาสก์จะดึงจากรีจิสทรีประจำ Region นั้น ซึ่งช่วยลดค่าใช้จ่ายในการถ่ายโอนข้อมูลและเวลาแฝงในการดึงอิมเมจ กำหนดกฎการทำสำเนาที่ระดับรีจิสทรี โดยระบุรีจิสทรีใดที่จะทำสำเนา รวมถึง Region ปลายทางและบัญชีปลายทาง การทำสำเนาเป็นแบบอะซิงโครนัสและเกือบจะเกิดขึ้นแบบเรียลไทม์

aws ecr put-replication-configuration \
  --replication-configuration '{
    "rules": [{
      "destinations": [
        {"region": "eu-west-1", "registryId": "123456789012"},
        {"region": "ap-southeast-1", "registryId": "123456789012"}
      ],
      "repositoryFilters": [{"filter": "prod/*", "filterType": "PREFIX_MATCH"}]
    }]
  }'

การเข้ารหัส ECR

ECR เข้ารหัสอิมเมจขณะจัดเก็บโดยใช้ การเข้ารหัสฝั่งเซิร์ฟเวอร์ โดยค่าเริ่มต้นจะใช้คีย์ที่ AWS จัดการ (AWS_MANAGED_KEY) หากต้องการควบคุมและตรวจสอบได้มากขึ้น ให้กำหนดค่า คีย์ KMS ที่ลูกค้าจัดการ (CMK) เมื่อใช้ CMK คุณจะควบคุมการหมุนเวียนคีย์ได้ เพิกถอนการเข้าถึงได้ด้วยการปิดใช้งานคีย์ และตรวจสอบการถอดรหัสทั้งหมดใน CloudTrail ได้ เปิดใช้การเข้ารหัส KMS เมื่อข้อกำหนดด้านการปฏิบัติตามกฎระเบียบ (PCI-DSS, HIPAA, FedRAMP) กำหนดให้ใช้คีย์เข้ารหัสที่ลูกค้าควบคุม

การใช้ ECR กับ ECS ใน pipeline ของ CI/CD

pipeline ของ CI/CD ที่สมบูรณ์สำหรับ ECS ร่วมกับ ECR: (1) นักพัฒนาส่งโค้ดไปยัง Git; (2) CodeBuild สร้างอิมเมจ Docker และส่งไปยัง ECR พร้อมแท็ก SHA ของคอมมิต; (3) CodePipeline อัปเดตคำจำกัดความทาสก์ของ ECS ด้วย URI ของอิมเมจใหม่; (4) ECS ดำเนินการอัปเดตบริการแบบทยอย โดยดึงอิมเมจใหม่จาก ECR ทาสก์ ECS ใช้ บทบาทการประมวลผลทาสก์เพื่อยืนยันตัวตนกับ ECR โดยอัตโนมัติ จึงไม่จำเป็นต้องจัดการข้อมูลประจำตัวใน pipeline สำหรับการดึงอิมเมจขณะทำงาน

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

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

สรุปบทเรียน

ในบทเรียนนี้ คุณได้เรียนรู้ว่า: รีจิสทรีส่วนตัวของ ECRจัดเก็บอิมเมจคอนเทนเนอร์พร้อมการควบคุมการเข้าถึงด้วย IAM แท็กแบบเปลี่ยนแปลงไม่ได้เพื่อความเสถียรของระบบจริง และการสแกนช่องโหว่โดยอัตโนมัติด้วย Inspector, นโยบายวงจรชีวิตทำให้อิมเมจเก่าและอิมเมจที่ไม่มีแท็กหมดอายุโดยอัตโนมัติ เพื่อควบคุมค่าใช้จ่ายในการจัดเก็บในสภาพแวดล้อม CI/CD ที่มีการใช้งานอยู่ และ การทำสำเนา ECRคัดลอกอิมเมจไปยัง Region และบัญชีอื่นเพื่อการนำไปใช้งานหลาย Region โดยมีเวลาแฝงในการดึงอิมเมจน้อยลง บทถัดไป เราจะเรียนรู้เกี่ยวกับการปรับขนาดอัตโนมัติของบริการ ECS และการผสานการทำงานกับการกระจายโหลด

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

บทเรียน “ECR: การจัดเก็บและดึงอิมเมจคอนเทนเนอร์” ฟรีหรือไม่

ใช่ — ข้อความเต็มของ “ECR: การจัดเก็บและดึงอิมเมจคอนเทนเนอร์” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Cloud & IT Cert Prep ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Cloud & IT Cert Prep มีบทเรียนทั้งหมด 4 บทเรียน

คุณจะเรียนรู้อะไรในบทเรียน “ECR: การจัดเก็บและดึงอิมเมจคอนเทนเนอร์”

พุชอิมเมจ Docker ไปยัง Amazon ECR ใช้นโยบายวงจรชีวิตเพื่อลบอิมเมจเก่า และดึงอิมเมจเข้าสู่งาน ECS อย่างปลอดภัย คุณปฏิบัติ Cloud & IT Cert Prep ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน

คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Cloud & IT Cert Prep หรือไม่

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

บทเรียน “ECR: การจัดเก็บและดึงอิมเมจคอนเทนเนอร์” ใช้เวลานานแค่ไหน

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

ฉันเขียนและรันโค้ดในบทเรียน Cloud & IT Cert Prep นี้ได้ไหม

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

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

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