Ngân hàng đề — AWS Certified SysOps Administrator Associate

Tìm thấy 936 câu.

Câu 331 Chọn nhiều đáp án AWS Cost Management

A manager in a company needs to see a breakdown of costs in an AWS account on a project by project basis. The manager would like to view this information in AWS Cost Explorer.

Which combination of configuration updates should be applied? (Select TWO.)

  1. A

    Activate consolidated billing.

  2. B

    Create and apply resource tags.

  3. C

    Enable server access logging.

  4. D

    Enable AWS Budgets.

  5. E

    Activate cost allocation tags.

Xem giải thích

Đáp án

B và E — Tạo và gắn TAG lên tài nguyên, VÀ kích hoạt COST ALLOCATION TAG.

Vì sao đúng

Muốn Cost Explorer chia chi phí theo dự án thì phải làm đủ hai bước, thiếu một bước là không có gì hiện ra.

⚠ Điểm mấu chốt — hai bước bắt buộc, không thay thế nhau:

BƯỚC 1 — GẮN TAG  (phương án B)
        ↓
    Gắn Project=Alpha, Project=Beta… lên
    EC2, RDS, S3, Lambda, EBS…
        ↓
    Công cụ: Tag Editor, CloudFormation,
             Terraform, hoặc gắn lúc tạo
        ↓
    Chưa gắn tag → không có gì để phân loại

BƯỚC 2 — KÍCH HOẠT  (phương án E)
        ↓
    Billing and Cost Management →
    Cost Allocation Tags → chọn "Project" → Activate
        ↓
    Chưa kích hoạt → tag CÓ trên tài nguyên
    nhưng KHÔNG hiện trong Cost Explorer

⚠ Và một chi tiết thời gian phải nói rõ với người quản lý:

Sau khi kích hoạt
        ↓
    Mất TỚI 24 GIỜ dữ liệu mới xuất hiện
        ↓
    Và KHÔNG áp ngược cho chi phí trong quá khứ
        ↓
    → chi phí của tháng trước sẽ KHÔNG BAO GIỜ
      được chia theo tag này
        ↓
    → kích hoạt càng sớm càng tốt

⚠ Xem kết quả ở đâu:

Cost Explorer
        ↓
    Group by → Tag → Project
        ↓
    → biểu đồ chi phí theo từng dự án
        ↓
    Muốn cảnh báo: AWS Budgets đặt theo tag
    Muốn chi tiết theo giờ: Cost and Usage Report

Xem thêm câu #11831, #11590, #11636 và #11663: cùng chùm cost allocation tag. #11831 (cùng lô này) bổ sung một chi tiết quan trọng — trong tổ chức, bước kích hoạt chỉ làm được ở tài khoản quản lý.

Vì sao các phương án khác sai

  • A (bật consolidated billing) — đây là phương án gần nhất vì cũng thuộc về chuyện hoá đơn, nhưng nó gộp hoá đơn giữa nhiều TÀI KHOẢN. Đề nói rõ là chia chi phí trong MỘT tài khoản, theo dự án. (Và consolidated billing đã bật sẵn khi dùng Organizations.)

  • D (bật AWS Budgets) — Budgets cảnh báo khi chi phí vượt ngưỡng, không phân tích và chia nhỏ chi phí. Nó là bước sau, không thay được Cost Explorer.

  • C (bật server access logging) — ghi log request tới bucket S3, hoàn toàn không liên quan tới chi phí.

Ghi nhớ

⚠ Bốn công cụ chi phí — bảng phải thuộc: | Công cụ | Việc | |---|---| | Cost Explorer | xem, lọc, nhóm chi phí — 13 tháng lịch sử, có dự báo | | Cost and Usage Report | chi tiết nhất: theo GIỜ, theo từng tài nguyên — đổ ra S3 | | Budgets | cảnh báo khi vượt ngưỡng (chi phí, mức dùng, RI/SP) | | Cost Anomaly Detection | phát hiện chi phí bất thường bằng học máy | | Trusted Advisor | gợi ý tiết kiệm cụ thể (máy nhàn rỗi, EIP không dùng) |

Từ khoá nhận diện:

"chia chi phí theo dự án / phòng ban" → gắn tag + KÍCH HOẠT tag "cảnh báo khi vượt ngân sách" → Budgets "chi phí tăng bất thường" → Cost Anomaly Detection "dữ liệu chi phí chi tiết nhất" → CUR "gộp hoá đơn nhiều tài khoản" → Organizations, bật sẵn

Vì sao tag không hiện trong Cost Explorer Nguyên nhân
Chưa kích hoạt nguyên nhân số một
Chưa qua 24 giờ phải chờ
Kích hoạt sai tài khoản trong tổ chức, phải làm ở tài khoản quản lý
Tài nguyên chưa được gắn tag Tag Editor kiểm tra được
Dịch vụ không hỗ trợ tag trong hoá đơn không phải mọi dịch vụ đều có
Sai chính tả Project khác project — tag phân biệt hoa thường
Bộ tag chuẩn nên có từ ngày đầu Ví dụ
Project hoặc CostCenter chia chi phí
Environment prod / staging / dev
Owner ai chịu trách nhiệm
Application ứng dụng nào
DataClassification mức nhạy cảm của dữ liệu
Chốt sớm quy ước hoa thường và danh sách giá trị hợp lệ
Ép gắn tag — ba tầng Cách
Tag Policy (Organizations) ép định dạng và giá trị hợp lệ
SCP với aws:RequestTag CHẶN tạo tài nguyên thiếu tag
Config required-tags phát hiện tài nguyên còn thiếu
Hạ tầng dạng mã gắn tag mặc định trong provider (Terraform default_tags)
Chi phí không gắn tag được Nội dung
Dữ liệu truyền ra thường không quy được về tài nguyên
Một số phí dịch vụ chung Support, một số phí theo tài khoản
Cách xử lý chấp nhận một mục "không phân loại", hoặc chia theo tỉ lệ
Muốn tách bạch tuyệt đối mỗi dự án một TÀI KHOẢN riêng

Ba việc kiểm chứng: | Việc | Cách | |---|---| | Tag đã kích hoạt chưa | Billing → Cost Allocation Tags — cột Status | | Tài nguyên nào chưa gắn tag | Tag Editor, lọc theo "tag không tồn tại" | | Dữ liệu đã về chưa | Cost Explorer → Group by → Tag → chọn tag đó |

Và một cách làm giúp tránh hẳn phần lớn rắc rối này về sau: khi tách bạch chi phí là yêu cầu quan trọng, hãy cân nhắc mỗi dự án một tài khoản AWS riêng thay vì dựa hoàn toàn vào tag. Tag phụ thuộc vào kỷ luật của mọi người trong đội, và luôn có một phần chi phí không gắn tag được — còn ranh giới tài khoản thì chính xác tuyệt đối và không cần ai nhớ phải làm gì.

Câu 332 Chọn nhiều đáp án AWS Networking & Content Delivery

An international media company is setting up a new service on AWS. The service is deployed across several AWS Regions groups of Amazon EC2 instances. These instances are launched using an Auto Scaling group and supported by an Application Load Balancer (ALB) per region. The company intends to deploy Amazon Route 53 for DNS operations. The DNS configuration should guide users towards the Region closest to them while also supporting automated failover.

Which combination of steps should a SysOps administrator adopt to ensure that Route 53 satisfies these requirements? (Select TWO.)

  1. A

    Implement Amazon CloudWatch alarms to track the health of the ALB in each Region and set up Route 53 DNS failover with a health check linked to these alarms.

  2. B

    Create Amazon CloudWatch alarms to monitor the status of the EC2 instances in every Region, then configure Route 53 DNS failover by using a health check that monitors these alarms.

  3. C

    Establish weighted routing in Route 53. Identify the continent, country, and state or province linked to the infrastructure.

  4. D

    Configure Route 53 DNS failover using a health check that monitors the private IP address of an EC2 instance within each Region.

  5. E

    Configure Route 53 to use geolocation routing. Specify the Regions associated with the infrastructure.

Xem giải thích

Đáp án

A và E — Dùng CloudWatch alarm theo dõi sức khoẻ của ALB ở từng Region rồi cấu hình Route 53 DNS failover với health check gắn vào các alarm đó, VÀ cấu hình Route 53 dùng ĐỊNH TUYẾN THEO VỊ TRÍ ĐỊA LÝ (geolocation) khai các Region tương ứng.

Vì sao đúng

Đề đòi hai thứ: hướng người dùng tới Region gần họ, và tự động chuyển hướng khi hỏng. Mỗi phương án đúng lo một vế.

⚠ Vế thứ nhất — hướng người dùng theo vị trí:

Geolocation routing
        ↓
    Route 53 xem vị trí của người truy vấn DNS
      (theo châu lục / quốc gia / bang)
        ↓
    Trả về bản ghi của Region tương ứng
        ↓
    → người ở châu Âu về Region châu Âu
    → người ở châu Á về Region châu Á
        ↓
    Nhớ khai một bản ghi mặc định (Default)
    cho vị trí không khớp quy tắc nào

⚠ Vế thứ hai — failover phải theo dõi ĐÚNG thứ:

Theo dõi ALB, không theo dõi từng EC2
        ↓
    ALB là điểm vào của cả Region đó
        ↓
    Một máy EC2 hỏng → ASG tự thay,
      ALB tự rút khỏi target group
      → KHÔNG cần failover cả Region
        ↓
    ALB không còn target khoẻ mạnh nào
      → CHÍNH LÚC ĐÓ mới cần chuyển Region
        ↓
    Cách làm: CloudWatch alarm trên
      HealthyHostCount của ALB
      → health check kiểu CloudWatch alarm
      → gắn vào bản ghi Route 53

⚠ Vì sao dùng health check kiểu alarm thay vì health check gọi HTTP thẳng:

Health check gọi HTTP từ ngoài
        ↓
    → phải để endpoint truy cập được từ internet
    → chỉ biết "gọi được hay không"

Health check kiểu CLOUDWATCH ALARM
        ↓
    → dùng được với endpoint riêng tư
    → dựa trên chỉ số THẬT của ALB
      (HealthyHostCount, TargetResponseTime, 5xx)
    → tinh vi hơn nhiều

Vì sao các phương án khác sai

  • B (alarm theo dõi trạng thái các INSTANCE EC2 ở từng Region rồi failover theo đó) — đây là phương án gần nhất và chỉ sai ở đối tượng theo dõi: một máy EC2 hỏng là chuyện bình thường mà ASG và ALB xử lý được tại chỗ. Failover cả Region vì một máy hỏng là phản ứng thái quá và gây bất ổn.

  • C (định tuyến theo TRỌNG SỐ, khai châu lục, quốc gia, bang) — mâu thuẫn ngay trong chính nó: định tuyến theo trọng số chia lưu lượng theo tỉ lệ phần trăm, không hề xét vị trí. Các trường châu lục/quốc gia/bang là của geolocation.

  • D (health check theo dõi ĐỊA CHỈ IP RIÊNG của một EC2 ở mỗi Region) — health check của Route 53 gọi từ internet công cộng, không tới được IP riêng. Và theo dõi một máy đơn lẻ cũng sai như phương án B.

Ghi nhớ

⚠ Bảy kiểu định tuyến của Route 53 — bảng phải thuộc: | Kiểu | Dùng khi | |---|---| | Simple | một bản ghi, không điều kiện | | Weighted | chia theo TỈ LỆ — canary, A/B testing | | Latency-based | Region có ĐỘ TRỄ THẤP NHẤT với người dùng | | Geolocation | theo VỊ TRÍ người dùng — tuân thủ dữ liệu, nội dung theo vùng | | Geoproximity | theo khoảng cách địa lý, có bias kéo giãn vùng phục vụ | | Failover | chính / dự phòng (active-passive) | | Multivalue answer | trả nhiều IP khoẻ mạnh, cân bằng thô |

Từ khoá nhận diện:

"gần người dùng nhất" → latency-based (nếu có), hoặc geolocation "dữ liệu phải ở lại trong nước" → geolocation, BẮT BUỘC "chia 10% sang phiên bản mới" → weighted "dự phòng khi Region chính hỏng" → failover "kết hợp nhiều kiểu" → bản ghi alias lồng nhau

⚠ Ghi nhớ về chất lượng câu hỏi

Với yêu cầu "hướng người dùng tới Region gần nhất", câu trả lời chuẩn mực của AWS thường là latency-based routing — nó chọn theo độ trễ mạng đo được thật, chứ không theo khoảng cách trên bản đồ, và độ trễ mới là thứ người dùng cảm nhận. Geolocation chọn theo vị trí địa lý của người truy vấn, nên về nguyên tắc có thể gửi người dùng tới một Region gần về khoảng cách nhưng chậm hơn về đường mạng.

Tuy vậy, latency-based không có trong bốn phương án, và trong số các lựa chọn được đưa ra thì geolocation là phương án đúng duy nhất — weighted không xét vị trí, còn hai phương án còn lại sai ở đối tượng theo dõi. Khoá đáp án vẫn là A và E. Khi gặp đề tương tự có đủ lựa chọn, hãy phân biệt: "độ trễ thấp nhất / hiệu năng tốt nhất" → latency-based; "theo quốc gia, tuân thủ dữ liệu, nội dung theo vùng" → geolocation.

Ba loại health check của Route 53 Nội dung
Endpoint gọi HTTP/HTTPS/TCP tới địa chỉ công khai
CloudWatch alarm theo dõi một alarm — dùng cho endpoint riêng tư, chỉ số phức tạp
Calculated gộp nhiều health check con bằng logic AND/OR
Tần suất 30 giây (mặc định) hoặc 10 giây (fast)
Nguồn kiểm tra nhiều Region đồng thời — tránh báo động giả
Kiến trúc đa Region đầy đủ Thành phần
DNS Route 53 với geolocation/latency + failover lồng bên trong
Tính toán ASG + ALB ở mỗi Region
Dữ liệu Aurora Global Database, hoặc DynamoDB global table
Tệp tĩnh S3 Cross-Region Replication
Cache CloudFront trước tất cả
Thay thế Global Accelerator khi cần failover nhanh hơn DNS
Vì sao Global Accelerator failover nhanh hơn Nội dung
DNS có TTL client cache bản ghi cũ, failover chậm theo TTL
Global Accelerator IP anycast cố định, chuyển hướng trong mạng AWS
Thời gian khoảng 30 giây, không phụ thuộc DNS cache
Đánh đổi có phí cố định hằng giờ

Ba việc kiểm chứng: | Việc | Cách | |---|---| | Người dùng ở vùng X nhận gì | dig từ resolver ở vùng đó, hoặc test-dns-answer | | Health check đang báo gì | Route 53 → Health checks → tab Monitoring | | Failover có chạy không | tắt tạm target ở một Region, xem DNS đổi trong bao lâu |

Và một cấu hình rất dễ quên khi dùng geolocation: luôn tạo một bản ghi Default. Route 53 chỉ trả lời cho những vị trí khớp một quy tắc — người dùng ở một quốc gia bạn chưa khai, hoặc một resolver mà Route 53 không xác định được vị trí, sẽ nhận về NXDOMAIN thay vì được đưa tới Region gần nhất. Đây là loại lỗi chỉ lộ ra khi có người dùng thật ở đúng vùng bạn chưa nghĩ tới.

Câu 333 AWS Cost Management

A company uses AWS Organizations with consolidated billing for several AWS accounts. The CEO is concerned about rising costs and has asked a SysOps Administrator to determine what is causing the increase.

What is the MOST comprehensive tool that will accomplish this task?

  1. A

    AWS Cost Explorer

  2. B

    AWS Trusted Advisor

  3. C

    Resource groups

  4. D

    Cost allocation tags

Xem giải thích

Đáp án

A — AWS Cost Explorer.

Vì sao đúng

Câu hỏi là "cái gì đang làm chi phí tăng", và Cost Explorer là công cụ toàn diện nhất để trả lời — nhất là khi có nhiều tài khoản gộp hoá đơn.

⚠ Điểm mấu chốt — Cost Explorer cắt lát chi phí theo mọi chiều:

Ở TÀI KHOẢN QUẢN LÝ, Cost Explorer thấy
chi phí của MỌI tài khoản thành viên
        ↓
    Group by:
      Linked Account  → tài khoản nào tăng
      Service         → dịch vụ nào tăng
      Region          → Region nào tăng
      Instance Type   → loại máy nào
      Usage Type      → chi tiết loại sử dụng
      Tag             → dự án / phòng ban nào
        ↓
    Kèm theo:
      13 tháng lịch sử
      dự báo 12 tháng tới
      chi tiết theo NGÀY, và theo GIỜ (bật thêm)

⚠ Quy trình truy tìm nguyên nhân — đi từ rộng tới hẹp:

1. Group by LINKED ACCOUNT
        ↓
    → tài khoản nào tăng
2. Lọc tài khoản đó, group by SERVICE
        ↓
    → dịch vụ nào tăng
3. Lọc dịch vụ đó, group by USAGE TYPE
        ↓
    → tăng ở phần nào: giờ máy? dữ liệu ra? lưu trữ?
4. Group by REGION và INSTANCE TYPE
        ↓
    → khoanh vùng chính xác
5. Cần tới từng tài nguyên → CUR + Athena

⚠ Và một công cụ nên bật kèm:

Cost Anomaly Detection
        ↓
    Học mẫu hình chi tiêu bằng học máy
        ↓
    → báo NGAY khi có mức tăng bất thường
    → thay vì đợi CEO hỏi vào cuối tháng
        ↓
    Miễn phí, và cấu hình trong vài phút

Vì sao các phương án khác sai

  • D (cost allocation tag) — đây là phương án gần nhất và là một phần rất quan trọng của việc phân tích chi phí, nhưng bản thân tag không phải là công cụ phân tích — nó là cách phân loại dữ liệu để công cụ như Cost Explorer dùng. Và tag chỉ hữu ích khi tài nguyên đã được gắn tag từ trước.

  • B (Trusted Advisor) — có mục kiểm tra tối ưu chi phí (máy nhàn rỗi, Elastic IP không dùng, RI chưa tận dụng), nhưng đó là một danh sách gợi ý cố định, không phân tích được xu hướng theo thời gian và không cho biết chi phí đã tăng ở đâu.

  • C (resource groups) — chỉ là cách nhóm tài nguyên lại để quản lý, hoàn toàn không có chức năng chi phí.

Ghi nhớ

⚠ Năm công cụ chi phí — bảng phải thuộc: | Công cụ | Việc | Dùng khi | |---|---|---| | Cost Explorer | phân tích, lọc, nhóm, dự báo | "vì sao chi phí tăng" | | Cost and Usage Report | chi tiết nhất: giờ, từng tài nguyên | phân tích sâu bằng SQL | | Budgets | cảnh báo vượt ngưỡng | chủ động, ngăn trước | | Cost Anomaly Detection | phát hiện bất thường bằng ML | báo sớm, tự động | | Trusted Advisor | gợi ý tiết kiệm cụ thể | tìm việc tối ưu ngay |

Từ khoá nhận diện:

"vì sao chi phí tăng" → Cost Explorer "cảnh báo trước khi vượt" → Budgets "tăng đột biến bất thường" → Cost Anomaly Detection "chi tiết từng tài nguyên, từng giờ" → CUR + Athena "lãng phí gì có thể cắt ngay" → Trusted Advisor, Compute Optimizer

Nguyên nhân chi phí tăng hay gặp Cách phát hiện
Máy để quên không tắt Cost Explorer group by Instance Type, Trusted Advisor
Dữ liệu truyền ra tăng vọt group by Usage Type, tìm DataTransfer-Out
NAT Gateway phí xử lý dữ liệu — chữa bằng VPC endpoint
Snapshot / ảnh AMI tích tụ không có lifecycle dọn
Log ghi quá nhiều CloudWatch Logs không đặt hạn lưu
Môi trường dev chạy 24/7 Instance Scheduler tắt ngoài giờ
S3 phiên bản cũ versioning không kèm lifecycle
Bốn cách giảm chi phí bền vững Nội dung
Savings Plans / Reserved Instances giảm tới 72% cho tải ổn định
Spot Instances giảm tới 90% cho tải chịu được gián đoạn
Right-sizing Compute Optimizer gợi ý loại máy phù hợp
Lifecycle policy S3 chuyển lớp lưu trữ, xoá snapshot cũ
Thêm Graviton — hiệu năng trên giá tốt hơn
Cấu hình Cost Explorer nên bật Nội dung
Hourly and resource-level data có phí, nhưng đáng khi cần điều tra
Cost allocation tag kích hoạt ở tài khoản quản lý
Cost categories nhóm chi phí theo quy tắc riêng của công ty
Quyền xem cấp cho đội tài chính bằng IAM, chỉ đọc

Ba việc kiểm chứng: | Việc | Cách | |---|---| | Tài khoản nào tăng | Cost Explorer → Group by Linked Account, so hai tháng | | Dịch vụ nào tăng | lọc tài khoản đó → Group by Service | | Tài nguyên cụ thể nào | CUR + Athena, hoặc bật dữ liệu mức tài nguyên |

Và một việc nên làm ngay sau khi tìm ra nguyên nhân lần này: bật Cost Anomaly Detection và một vài Budget theo tài khoản. Cả hai đều miễn phí hoặc gần như miễn phí, và chúng biến việc kiểm soát chi phí từ một cuộc điều tra bị động sau khi có người phàn nàn, thành một cảnh báo tự động tới đúng đội chịu trách nhiệm trong vòng một ngày kể từ khi chi tiêu đi lệch khỏi mẫu hình bình thường.

Câu 334 AWS Management & Governance

A company plans to use AWS CloudFormation to deploy their infrastructure using templates. The deployments will include several environments across multiple AWS Regions. A SysOps Administrator plans to write a single template that can be reused for each environment deployment.

What is the recommended way to use AWS CloudFormation to meet this requirement?

  1. A

    Use change sets to provision additional environments.

  2. B

    Use nested stacks to provision the resources.

  3. C

    Use cross-stack references to provision the resources.

  4. D

    Use parameters to provision the resources.

Xem giải thích

Đáp án

D — Dùng PARAMETERS để cung cấp giá trị khác nhau cho từng lần triển khai.

Vì sao đúng

Đề muốn MỘT template dùng lại được cho nhiều môi trường và nhiều Region. Parameters chính là cơ chế sinh ra cho việc đó.

⚠ Điểm mấu chốt — parameter tách CẤU TRÚC khỏi GIÁ TRỊ:

Template mô tả CẤU TRÚC (giống nhau mọi nơi)
        ↓
    Parameter giữ GIÁ TRỊ (khác nhau mỗi nơi)
        ↓
    Triển khai dev:   InstanceType=t3.micro,  Size=1
    Triển khai prod:  InstanceType=m5.large,  Size=6
        ↓
    → CÙNG một tệp template
    → khác nhau ở giá trị truyền vào lúc tạo stack

⚠ Ví dụ thực tế:

Parameters:
  MoiTruong:
    Type: String
    AllowedValues: [dev, staging, prod]
    Default: dev
  LoaiMay:
    Type: String
    Default: t3.micro
  AmiId:
    Type: AWS::SSM::Parameter::Value<AWS::EC2::Image::Id>
    Default: /aws/service/ami-amazon-linux-latest/al2023-ami-kernel-default-x86_64
Kiểu AWS::SSM::Parameter::Value<...>
        ↓
    → tự lấy AMI ĐÚNG CỦA TỪNG REGION
    → giải quyết luôn vấn đề "AMI khác nhau mỗi Region"

⚠ Ba công cụ đi kèm parameter, rất hay ra thi:

MAPPINGS
        ↓
    Bảng tra cứu theo Region hoặc theo môi trường
      → !FindInMap [CauHinh, !Ref MoiTruong, LoaiMay]

CONDITIONS
        ↓
    Tạo hay không tạo một tài nguyên tuỳ môi trường
      → chỉ prod mới dựng Multi-AZ RDS

PSEUDO PARAMETERS
        ↓
    AWS::Region, AWS::AccountId, AWS::StackName
      → template tự biết mình đang ở đâu

Vì sao các phương án khác sai

  • B (dùng nested stack) — đây là phương án gần nhất về mức độ hữu ích, nhưng nested stack giải bài toán CHIA NHỎ một template lớn thành các thành phần dùng lại được, chứ không phải bài toán truyền giá trị khác nhau cho mỗi môi trường. (Rất hay dùng kèm parameter, nhưng không thay thế được.)

  • C (dùng cross-stack reference) — dùng để một stack đọc đầu ra của stack khác (Export/ImportValue), ví dụ stack ứng dụng lấy VPC id từ stack mạng. Không liên quan tới việc tái sử dụng template.

  • A (dùng change set để tạo thêm môi trường) — change set chỉ xem trước thay đổi trên một stack ĐANG TỒN TẠI, nó không tạo môi trường mới.

Ghi nhớ

⚠ Các phần của một template CloudFormation — bảng phải thuộc: | Phần | Việc | |---|---| | Parameters | giá trị truyền vào lúc tạo/cập nhật stack | | Mappings | bảng tra cứu tĩnh — thường theo Region | | Conditions | tạo tài nguyên có điều kiện | | Resources | phần DUY NHẤT bắt buộc | | Outputs | giá trị trả ra, Export được cho stack khác | | Metadata | nhóm và mô tả tham số cho giao diện | | Transform | dùng macro, hoặc AWS::Serverless (SAM) |

Từ khoá nhận diện:

"một template, nhiều môi trường" → Parameters (+ Mappings, Conditions) "chia nhỏ template lớn" → nested stacks "stack này cần giá trị của stack kia" → Export / ImportValue "triển khai ra nhiều tài khoản và Region cùng lúc" → StackSets "xem trước thay đổi" → change set

Kiểu parameter hữu ích Nội dung
AWS::EC2::KeyPair::KeyName console hiện danh sách chọn
AWS::EC2::VPC::Id, Subnet::Id chọn từ danh sách, kiểm tra hợp lệ sẵn
AWS::SSM::Parameter::Value<...> lấy giá trị từ Parameter Store — rất mạnh
List<Number>, CommaDelimitedList nhiều giá trị
NoEcho: true che giá trị nhạy cảm khỏi console và log
AllowedValues, AllowedPattern kiểm tra hợp lệ trước khi triển khai
Nhiều Region — những gì KHÁC nhau Nội dung
AMI id khác nhau mỗi Region → dùng SSM public parameter
Tên AZ dùng !GetAZs, đừng ghi cứng us-east-1a
ARN dịch vụ dùng !Sub với ${AWS::Region}
Chứng chỉ ACM cho CloudFront bắt buộc ở us-east-1
Dịch vụ chưa có ở Region đó kiểm tra trước khi triển khai
StackSets — khi cần rất nhiều nơi Nội dung
Việc triển khai một template ra NHIỀU tài khoản và Region
Chế độ service-managed (qua Organizations) hoặc self-managed
Hữu ích cho luật Config, IAM role chuẩn, cấu hình bảo mật nền
Tự động thêm tài khoản mới vào OU → tự triển khai
Nơi lưu giá trị cho từng môi trường Cách
Tệp parameter riêng dev.json, prod.json — --parameters file://prod.json
SSM Parameter Store template tự đọc, không cần tệp
Secrets Manager cho mật khẩu, dùng dynamic reference {{resolve:secretsmanager:...}}
Không bao giờ ghi cứng mật khẩu vào template

Ba việc kiểm chứng: | Việc | Cách | |---|---| | Template có hợp lệ không | validate-template, và cfn-lint để kiểm sâu hơn | | Stack đang dùng giá trị gì | describe-stacks --query 'Stacks[0].Parameters' | | Thay đổi sẽ ảnh hưởng gì | tạo change set rồi đọc trước khi execute |

Và một mẫu tổ chức mã rất đáng theo cho hạ tầng nhiều môi trường: một template duy nhất trong git, kèm một tệp parameter cho mỗi môi trường. Khi ấy mọi khác biệt giữa dev và prod đều nằm gọn trong một tệp JSON nhỏ mà bạn đọc hết trong nửa phút — thay vì nằm rải rác trong hai template gần giống nhau, nơi những khác biệt vô tình và những khác biệt có chủ đích trông y hệt nhau.

Câu 335 AWS Compute

A corporate application is used by remote workers and is hosted on Amazon EC2 instances behind an Application Load Balancer (ALB). User authentication is handled at the individual EC2 instance level. Once a user is authenticated; all requests from that user must go to the same EC2 instance.

Which feature of the Elastic Load Balancer must a SysOps Administrator use to control the behavior?

  1. A

    Cross-zone load balancing

  2. B

    Deregistration delay

  3. C

    Sticky sessions

  4. D

    TCP listeners

Xem giải thích

Đáp án

C — STICKY SESSIONS (session affinity).

Vì sao đúng

Yêu cầu rất rõ: sau khi đăng nhập, mọi request của người dùng đó phải về ĐÚNG một máy EC2. Đó là định nghĩa của sticky session.

⚠ Điểm mấu chốt — vì sao cần dính phiên ở đây:

Xác thực diễn ra TRÊN TỪNG MÁY EC2
        ↓
    Phiên đăng nhập lưu trong bộ nhớ của máy đó
        ↓
    Request tiếp theo rơi vào máy KHÁC
        ↓
    → máy đó không biết người này là ai
    → bắt đăng nhập lại
        ↓
STICKY SESSIONS
        ↓
    ALB gắn một cookie, và mọi request kèm cookie đó
    được gửi về ĐÚNG target cũ

⚠ Hai loại cookie của ALB:

DURATION-BASED (do ALB tự quản)
        ↓
    Cookie tên AWSALB
    Thời hạn do bạn đặt: 1 giây đến 7 NGÀY
    → không cần sửa ứng dụng

APPLICATION-BASED (do ứng dụng quản)
        ↓
    Ứng dụng tự sinh cookie, ALB bọc thêm AWSALBAPP
    → thời hạn theo phiên của chính ứng dụng
    → linh hoạt hơn

⚠ Nhưng phải nói rõ — sticky session là giải pháp TẠM:

Nhược điểm:
    - Tải phân bố KHÔNG ĐỀU
      (máy giữ nhiều phiên sẽ nặng hơn)
    - Máy hỏng → NGƯỜI DÙNG MẤT PHIÊN
    - Auto Scaling thu nhỏ → cũng mất phiên
    - Triển khai phiên bản mới khó êm
        ↓
CÁCH ĐÚNG VỀ LÂU DÀI: ứng dụng KHÔNG GIỮ TRẠNG THÁI
        ↓
    Lưu phiên ra ngoài:
      ElastiCache for Redis  (phổ biến nhất)
      DynamoDB
      hoặc JWT ký sẵn, không cần lưu phiên
        ↓
    → mọi máy phục vụ được mọi người dùng

Vì sao các phương án khác sai

  • B (deregistration delay) — đây là phương án gần nhất vì cũng liên quan tới việc giữ kết nối với một target, nhưng nó chỉ quy định ALB chờ bao lâu cho các request ĐANG DỞ hoàn tất trước khi rút một target ra. Nó không định tuyến request mới của một người dùng cụ thể.

  • A (cross-zone load balancing) — quyết định ALB có phân phối lưu lượng đều sang target ở MỌI AZ hay không. Liên quan tới cân bằng tải, không liên quan tới phiên. (Với ALB thì tính năng này luôn bật.)

  • D (TCP listener) — ALB chỉ làm việc ở tầng 7 (HTTP/HTTPS), không có TCP listener. Đó là của Network Load Balancer.

Ghi nhớ

⚠ Ba loại load balancer — bảng phải thuộc: | | ALB | NLB | GWLB | |---|---|---|---| | Tầng | 7 (HTTP/HTTPS) | 4 (TCP/UDP/TLS) | 3 (GENEVE) | | Sticky session | cookie (duration hoặc app-based) | theo IP nguồn | — | | Định tuyến | theo path, host, header, query | theo cổng | — | | Hiệu năng | rất cao | cực cao, độ trễ cực thấp | — | | IP tĩnh | không (dùng tên miền) | CÓ, mỗi AZ một IP | — | | Dùng khi | web, API, microservice | game, IoT, cần IP tĩnh | thiết bị bảo mật |

Từ khoá nhận diện:

"mọi request về cùng một máy" → sticky sessions "người dùng bị đăng xuất khi máy bị thay" → lưu phiên RA NGOÀI (Redis) "chờ request đang dở xong rồi mới rút máy" → deregistration delay "cần IP tĩnh cho load balancer" → NLB "định tuyến theo đường dẫn URL" → ALB với rule

Các tham số target group hay ra thi Nội dung
stickiness.enabled bật dính phiên
stickiness.lb_cookie.duration_seconds 1 giây đến 7 ngày
deregistration_delay.timeout_seconds mặc định 300 giây
slow_start.duration_seconds tăng dần lưu lượng cho target mới
load_balancing.algorithm.type round_robin hoặc least_outstanding_requests
Health check đường dẫn, ngưỡng khoẻ/hỏng, timeout, khoảng cách
Kiến trúc không giữ trạng thái — nên hướng tới Cách
Phiên trong ElastiCache Redis phổ biến nhất, độ trễ dưới mili giây
Phiên trong DynamoDB không phải quản lý cụm, có TTL sẵn
JWT ký không lưu phiên ở đâu cả — kiểm tra bằng chữ ký
Cognito AWS lo cả việc xác thực
Lợi ích co giãn tự do, thay máy không ai biết, triển khai êm
ALB còn làm được việc xác thực luôn Nội dung
Authenticate với Cognito ALB tự chuyển hướng đăng nhập
Authenticate với OIDC dùng Google, Okta, Entra ID…
Lợi ích ứng dụng không phải viết mã xác thực
Kết quả hết luôn nhu cầu sticky session cho việc đăng nhập

Ba việc kiểm chứng: | Việc | Cách | |---|---| | Sticky đã bật chưa | describe-target-group-attributes | | Cookie có được gắn không | mở DevTools, tìm cookie AWSALB | | Tải có lệch không | chỉ số RequestCount theo từng target |

Và một lời khuyên nên nói thẳng với đội phát triển khi bật tính năng này: sticky session chữa triệu chứng, không chữa nguyên nhân. Nguyên nhân là ứng dụng giữ trạng thái trong bộ nhớ của một máy — và chừng nào còn như vậy thì mỗi lần Auto Scaling thu nhỏ, mỗi lần triển khai phiên bản mới, mỗi lần một máy hỏng đều là một lần một nhóm người dùng bị đăng xuất giữa chừng.

Câu 336 AWS Management & Governance

A SysOps administrator must automate the invocation of an AWS Lambda function. This Lambda function needs to execute at the end of each day to compile a report based on data stored in an Amazon S3 bucket.

Which solution is the most operationally efficient to meet these needs?

  1. A

    Configure an Amazon EC2 instance with a cron job set to trigger the Lambda function.

  2. B

    Create an Amazon EventBridge rule that uses a scheduled pattern, setting the Lambda function as a target.

  3. C

    Create an Amazon EventBridge rule that uses an event pattern for Amazon S3, setting the Lambda function as a target.

  4. D

    Configure an S3 event notification that triggers the Lambda function whenever objects in the S3 bucket are modified.

Xem giải thích

Đáp án

B — Tạo quy tắc Amazon EventBridge dùng SCHEDULE (mẫu theo lịch), đặt hàm Lambda làm target.

Vì sao đúng

Đề cần chạy hàm Lambda vào cuối mỗi ngày. Đó là một lịch cố định, và EventBridge có sẵn cơ chế đó — không cần hạ tầng nào cả.

⚠ Điểm mấu chốt — EventBridge Scheduler / rule theo lịch:

Tạo quy tắc với biểu thức cron
        ↓
      cron(0 23 * * ? *)   → 23:00 mỗi ngày UTC
      hoặc rate(1 day)
        ↓
    Target: hàm Lambda
        ↓
    → không máy chủ nào phải chạy
    → không phải vá, không phải theo dõi
    → chỉ trả tiền cho lần chạy Lambda
        ↓
    Đây đúng nghĩa "hiệu quả vận hành nhất"

⚠ Cú pháp cron của EventBridge có SÁU trường — khác cron của Linux:

cron(phút giờ ngày-trong-tháng tháng thứ năm)
        ↓
    cron(0 23 * * ? *)
        ↓
    Lưu ý:
      - có thêm trường NĂM
      - KHÔNG được đặt cả "ngày-trong-tháng" và "thứ"
        → một trong hai phải là dấu ?
      - mặc định chạy theo GIỜ UTC
        (EventBridge Scheduler hỗ trợ múi giờ)

⚠ Vì sao KHÔNG dùng sự kiện của S3 ở đây:

Đề nói: chạy VÀO CUỐI MỖI NGÀY
        ↓
    Đây là kích hoạt THEO THỜI GIAN
        ↓
    Không phải theo sự kiện dữ liệu
        ↓
    Nếu dùng sự kiện S3:
      - tệp đổi 1000 lần → chạy 1000 lần
      - cả ngày không có tệp nào đổi → KHÔNG chạy
        ↓
    → sai hoàn toàn mô hình kích hoạt

Vì sao các phương án khác sai

  • D (S3 event notification kích hoạt Lambda mỗi khi đối tượng thay đổi) — đây là phương án gần nhất vì cùng liên quan tới bucket trong đề, nhưng nó kích hoạt theo sự kiện dữ liệu, không phải theo lịch: báo cáo sẽ chạy nhiều lần mỗi ngày, hoặc không chạy lần nào.

  • C (EventBridge rule với event pattern cho S3) — cùng vấn đề như D: event pattern là phản ứng với sự kiện, còn đề cần schedule pattern. Sự khác biệt nằm đúng ở một chữ.

  • A (dựng một EC2 chạy cron để gọi Lambda) — chạy được nhưng lãng phí: phải trả tiền máy chạy 24/7, phải vá hệ điều hành, và chính máy đó trở thành điểm hỏng đơn lẻ cho một việc mà AWS làm sẵn miễn phí.

Ghi nhớ

⚠ Ba cách kích hoạt Lambda — bảng phải thuộc: | Cách | Dùng khi | |---|---| | EventBridge SCHEDULE | theo thời gian: hằng ngày, hằng giờ, cron | | EventBridge EVENT PATTERN | phản ứng với sự kiện AWS: EC2 đổi trạng thái, Config vi phạm | | Nguồn sự kiện trực tiếp | S3 notification, SQS, DynamoDB Streams, Kinesis, API Gateway | | Bẫy hay gặp | lẫn schedule với event pattern |

Từ khoá nhận diện:

"chạy vào cuối ngày / mỗi giờ / mỗi thứ Hai" → EventBridge schedule "khi có tệp mới tải lên" → S3 event notification "khi tài nguyên vi phạm tuân thủ" → EventBridge event pattern (Config) "cần múi giờ địa phương" → EventBridge SCHEDULER (không phải rule thường) "chạy đúng một lần trong tương lai" → EventBridge Scheduler one-time

EventBridge Rule ↔ EventBridge Scheduler Khác nhau
Rule (kiểu cũ) cron/rate, chỉ UTC, target trên cùng bus
Scheduler (mới hơn) HỖ TRỢ MÚI GIỜ, lịch chạy một lần, cửa sổ linh hoạt, hơn 270 dịch vụ target
Khuyến nghị dùng Scheduler cho lịch mới
Quy mô Scheduler chịu được hàng triệu lịch
Cú pháp lịch — nhớ chính xác Nội dung
rate(1 day) mỗi ngày kể từ lúc tạo
rate(5 minutes) số nhiều khi giá trị > 1
cron(0 23 * * ? *) 23:00 UTC mỗi ngày
cron(0 8 ? * MON-FRI *) 08:00 UTC các ngày làm việc
Sáu trường phút giờ ngày tháng thứ năm
Quy tắc ? không đặt cả ngày-trong-tháng lẫn thứ
Làm cho tác vụ theo lịch đáng tin cậy Cách
Dead-letter queue cho target khi gọi thất bại
Retry policy số lần thử và tuổi tối đa của sự kiện
Alarm trên FailedInvocations biết khi lịch không chạy được
Alarm trên lỗi của Lambda và trên Duration sát timeout
Idempotent hàm phải chịu được chạy hai lần
Tác vụ dài Lambda tối đa 15 phút → dài hơn thì dùng Step Functions, ECS task, Batch

Ba việc kiểm chứng: | Việc | Cách | |---|---| | Lịch có kích hoạt không | CloudWatch chỉ số Invocations của quy tắc | | Hàm có lỗi không | CloudWatch Logs của Lambda, và chỉ số Errors | | Biểu thức cron có đúng ý không | tạo thử một quy tắc rate(1 minute) ở môi trường dev |

Và một lỗi rất hay gặp với loại tác vụ này: quên rằng biểu thức cron của EventBridge rule chạy theo UTC. Một báo cáo "cuối ngày" đặt ở cron(0 23 * * ? *) sẽ chạy lúc 6 giờ sáng hôm sau theo giờ Việt Nam — tức là báo cáo của ngày hôm trước ra đời sau khi ngày mới đã bắt đầu. Với lịch mới, hãy dùng EventBridge Scheduler và khai thẳng múi giờ để tránh cả lớp lỗi này.

Câu 337 AWS Compute

An eCommerce application consists of Amazon EC2 instances in an Auto Scaling group. The ASG scales based on CPU utilization. Users report the application response time is slow at the beginning of each business day

What action will address this issue?

  1. A

    Change the launch configuration to launch larger EC2 instance types.

  2. B

    Modify the scaling policy to deploy more EC2 instances when scaling up.

  3. C

    Change the Auto Scaling group to scale up and down based on memory utilization.

  4. D

    Create a scheduled scaling action to scale up in anticipation of the traffic.

Xem giải thích

Đáp án

D — Tạo hành động co giãn THEO LỊCH (scheduled scaling) để tăng số máy trước khi lưu lượng tới.

Vì sao đúng

Manh mối nằm gọn trong một cụm từ: "chậm vào ĐẦU MỖI NGÀY LÀM VIỆC" — tức là thời điểm đã biết trước và lặp lại đều đặn.

⚠ Điểm mấu chốt — co giãn theo CPU luôn đi SAU lưu lượng:

8:00 người dùng bắt đầu vào
        ↓
    CPU tăng dần
        ↓
    CloudWatch thu thập chỉ số        ~1-5 phút
    Alarm cần đủ số chu kỳ liên tiếp  ~2-3 phút
    Máy mới khởi chạy                 ~1-2 phút
    Khởi động ứng dụng + health check ~2-5 phút
        ↓
    → máy mới sẵn sàng lúc 8:10-8:15
    → 10-15 phút đầu tiên NGƯỜI DÙNG CHỊU CHẬM
        ↓
    Đúng triệu chứng đề mô tả

⚠ Co giãn theo lịch xoá bỏ hẳn khoảng trũng đó:

Đặt hành động lúc 7:40 (trước 20 phút):
      MinSize = 10,  DesiredCapacity = 10
        ↓
    8:00 lưu lượng tới → máy ĐÃ SẴN SÀNG
        ↓
Đặt hành động lúc 18:30:
      MinSize = 2,   DesiredCapacity = 2
        ↓
    → không trả tiền thừa cả đêm

⚠ Và giữ NGUYÊN chính sách động làm lưới an toàn:

Lịch      → lo phần tải ĐOÁN ĐƯỢC
Động      → lo phần BẤT NGỜ vượt dự kiến
        ↓
    Hai cơ chế chạy song song, bổ sung nhau
        ↓
    Lưu ý: đặt cả MinSize, không chỉ DesiredCapacity
    → nếu không, chính sách động có thể kéo tụt lại

Xem thêm câu #11827 (lô 127): gần như cùng một câu hỏi, cùng khoá scheduled scaling. Và #11764 (lô 126): cũng hỏi chọn kiểu co giãn nhưng khoá là dynamic, vì ở đó trigger là một ngưỡng CPU chứ không phải khung giờ định sẵn — hai khoá khác nhau vì ràng buộc trong đề khác nhau, không mâu thuẫn.

Vì sao các phương án khác sai

  • B (sửa chính sách để thêm NHIỀU máy hơn mỗi lần mở rộng) — đây là phương án gần nhất và giảm bớt vấn đề, nhưng vẫn phải chờ CPU tăng trước. Khoảng trũng ban đầu vẫn còn nguyên, chỉ ngắn hơn một chút.

  • A (đổi launch configuration sang loại máy lớn hơn) — trả tiền cho máy lớn suốt 24 giờ để phục vụ một khoảng cao điểm ngắn, và vẫn không có thêm máy nào sẵn sàng vào lúc 8 giờ — chỉ là mỗi máy khoẻ hơn.

  • C (đổi sang co giãn theo mức dùng BỘ NHỚ) — đổi chỉ số không đổi được bản chất phản ứng chậm. Hơn nữa chỉ số bộ nhớ cần CloudWatch agent mới có, và đề không hề nói vấn đề là bộ nhớ.

Ghi nhớ

⚠ Bốn kiểu co giãn — bảng phải thuộc: | Kiểu | Dùng khi | Ví dụ | |---|---|---| | Theo lịch | biết TRƯỚC thời điểm | đầu giờ làm việc, khuyến mãi đã lên lịch | | Động | bất ngờ, chỉ biết ngưỡng | CPU > 70% | | Dự đoán | mẫu hình lặp lại, để ML học | tải theo mùa | | Thủ công | thay đổi một lần | sự kiện đặc biệt |

Từ khoá nhận diện:

"chậm vào đầu mỗi ngày làm việc" → scheduled scaling "tải tăng bất ngờ" → dynamic scaling "có mẫu hình nhưng giờ không cố định" → predictive scaling "máy mới lên quá chậm" → warm pool, golden AMI, detailed monitoring "trả tiền cả đêm cho máy nhàn rỗi" → scheduled scale-in

Tăng tốc phản ứng của co giãn động Cách
Detailed monitoring chỉ số 1 phút thay vì 5 phút
Warm pool giữ sẵn máy đã khởi động, trạng thái Stopped — lên rất nhanh
Golden AMI ứng dụng cài sẵn, không cài lúc khởi chạy
Target tracking phản ứng mượt hơn step scaling
HealthCheckGracePeriod đủ để ứng dụng khởi động, không quá dài
Cấu hình scheduled action Nội dung
Đặt được MinSize, MaxSize, DesiredCapacity
Thời gian một lần, hoặc lặp lại kiểu cron
TimeZone khai rõ — mặc định UTC, rất dễ nhầm
Đặt sớm trước 15-20 phút để máy kịp sẵn sàng
Kết hợp giữ nguyên chính sách động
Bốn sai lầm hay gặp Nội dung
Quên TimeZone lệch 7 tiếng với giờ Việt Nam
Chỉ đặt DesiredCapacity chính sách động kéo tụt lại → đặt cả MinSize
Đặt đúng giờ cao điểm máy chưa kịp sẵn sàng
Quên lịch thu nhỏ trả tiền cả đêm

Ba việc kiểm chứng: | Việc | Cách | |---|---| | Lịch có chạy không | describe-scheduled-actions, và tab Activity của ASG | | Máy sẵn sàng lúc mấy giờ | so thời điểm InService với giờ bắt đầu cao điểm | | Người dùng còn thấy chậm không | TargetResponseTime của ALB trong khung 8:00-8:30 |

Và một cách kiểm chứng rất trực quan cho loại sự cố này: vẽ chồng đồ thị TargetResponseTime của ALB và GroupInServiceInstances của ASG trên cùng một khung giờ. Bạn sẽ thấy rất rõ một khoảng thời gian đầu giờ nơi đường phản hồi vọt lên trong khi số máy vẫn nằm yên — và sau khi bật scheduled scaling, chính khoảng vọt đó sẽ biến mất khỏi đồ thị.

Câu 338 AWS Compute

A corporation runs an application exclusively on Amazon EC2 Spot Instances. These instances operate within an EC2 Auto Scaling group with scheduled scaling actions configured. The operations team have noted that the capacity doesn't consistently scale at the scheduled intervals, and instances face numerous terminations within a single day. It's the responsibility of a SysOps administrator to ensure timely instance launch with fewer disruptions.

Which solution would satisfy these requirements?

  1. A

    Use the capacity-optimized allocation strategy for Spot Instances and augment the maximum size of the Auto Scaling group.

  2. B

    Use the on-demand instance allocation strategy and expand the range of instance types within the Auto Scaling group.

  3. C

    Use the capacity-optimized allocation strategy for Spot Instances and broaden the range of instance types within the Auto Scaling group.

  4. D

    Use the on-demand instance allocation strategy and increase the maximum size of the Auto Scaling group.

Xem giải thích

Đáp án

C — Dùng chiến lược phân bổ capacity-optimized cho Spot, và MỞ RỘNG DANH SÁCH LOẠI INSTANCE trong Auto Scaling group.

Vì sao đúng

Đề nêu hai triệu chứng, và cả hai đều bắt nguồn từ danh sách loại instance quá hẹp.

⚠ Điểm mấu chốt — Spot có sẵn theo từng "capacity pool":

Một capacity pool = một tổ hợp:
    loại instance × Availability Zone
        ↓
    ASG chỉ khai 1-2 loại instance
        ↓
    → chỉ có vài pool để chọn
    → pool cạn → KHÔNG khởi chạy được đúng giờ
    → pool bị thu hồi → hàng loạt máy bị dừng
        ↓
    Đúng hai triệu chứng của đề
        ↓
Khai 10-15 loại instance tương đương
        ↓
    → hàng chục pool trải trên nhiều AZ
    → gần như luôn có pool còn chỗ

⚠ Và capacity-optimized chọn pool SÂU nhất:

lowest-price
        ↓
    Chọn pool RẺ NHẤT
    → nhưng thường cũng là pool đông người dùng nhất
    → BỊ THU HỒI NHIỀU NHẤT

capacity-optimized     ← khuyến nghị
        ↓
    Chọn pool có DUNG LƯỢNG DƯ NHIỀU NHẤT
    → ít bị thu hồi hơn hẳn
    → đúng yêu cầu "ít gián đoạn hơn"

price-capacity-optimized  (mới hơn)
        ↓
    Cân bằng cả giá lẫn dung lượng dư
    → AWS khuyến nghị cho phần lớn trường hợp

⚠ Vì sao TĂNG MaxSize không giải quyết được:

Vấn đề KHÔNG phải là trần số lượng
        ↓
    Là KHÔNG CÓ chỗ trong các pool đang khai
        ↓
    Nâng MaxSize từ 20 lên 40
        ↓
    → vẫn không khởi chạy nổi máy thứ 15
    → vì pool đã cạn

Vì sao các phương án khác sai

  • A (capacity-optimized + TĂNG kích thước tối đa của ASG) — đây là phương án gần nhất, vế đầu hoàn toàn đúng, nhưng vế sau sai: tăng MaxSize không tạo ra dung lượng Spot. Đây chính là điểm phân biệt giữa A và C.

  • B (chiến lược phân bổ on-demand + mở rộng danh sách loại instance) — mở rộng danh sách thì đúng, nhưng "on-demand allocation strategy" không phải là thứ giải quyết vấn đề Spot bị thu hồi. (Nếu chuyển hẳn sang On-Demand thì hết bị thu hồi thật — nhưng cũng mất luôn khoản tiết kiệm, và đề không nói muốn bỏ Spot.)

  • D (on-demand + tăng MaxSize) — kết hợp hai vế đều không nhắm đúng nguyên nhân.

Ghi nhớ

⚠ Ba chiến lược phân bổ Spot — bảng phải thuộc: | Chiến lược | Chọn pool theo | Kết quả | |---|---|---| | lowest-price | giá rẻ nhất | bị thu hồi NHIỀU nhất | | capacity-optimized | dung lượng dư nhiều nhất | ít bị thu hồi | | price-capacity-optimized | cân bằng cả hai | AWS khuyến nghị hiện nay | | capacity-optimized-prioritized | ưu tiên loại bạn xếp trước, trong giới hạn dung lượng | khi có ràng buộc phần cứng |

Từ khoá nhận diện:

"Spot bị thu hồi nhiều" → capacity-optimized + NHIỀU loại instance "không khởi chạy được đủ máy" → mở rộng loại instance và AZ "cần một phần dung lượng bảo đảm" → mix On-Demand + Spot "tải không chịu được gián đoạn" → đừng dùng Spot hoặc dùng On-Demand base "tiết kiệm cho tải ổn định" → Savings Plans, không phải Spot

Nguyên tắc dùng Spot cho đúng Nội dung
Đa dạng hoá loại instance 10-15 loại tương đương — quan trọng NHẤT
Đa dạng hoá AZ dùng mọi AZ trong Region
capacity-optimized hoặc price-capacity-optimized chọn pool sâu
Xử lý thông báo thu hồi 2 phút báo trước qua metadata hoặc EventBridge
Ứng dụng không giữ trạng thái mất một máy không mất dữ liệu
Mixed instances policy On-Demand làm nền, Spot làm phần co giãn
Mixed instances policy — cấu hình đáng nhớ Nội dung
OnDemandBaseCapacity số máy On-Demand tối thiểu, luôn có
OnDemandPercentageAboveBaseCapacity tỉ lệ On-Demand cho phần vượt nền
SpotAllocationStrategy price-capacity-optimized
Overrides danh sách loại instance thay thế
Ví dụ nền 4 máy On-Demand + phần còn lại 100% Spot
Xử lý thu hồi Spot Cách
Thông báo 2 phút đọc từ instance metadata, hoặc bắt bằng EventBridge
Rebalance recommendation báo SỚM HƠN cả thông báo 2 phút
Nên làm rút khỏi target group, lưu trạng thái, kết thúc việc đang dở
Capacity Rebalancing bật ở ASG để tự chuẩn bị máy thay thế trước
Spot ↔ Savings Plans ↔ On-Demand Chọn khi
Spot giảm tới 90%, chịu được gián đoạn — batch, CI, xử lý dữ liệu
Savings Plans / RI giảm tới 72%, tải ỔN ĐỊNH, cam kết 1-3 năm
On-Demand tải không đoán được, ngắn hạn, không cam kết
Kết hợp SP cho phần nền, Spot cho phần đỉnh

Ba việc kiểm chứng: | Việc | Cách | |---|---| | Bị thu hồi bao nhiêu lần | EC2 → Spot Requests, và sự kiện EventBridge | | Pool nào đang sâu | Spot placement score | | ASG đang khai bao nhiêu loại | describe-auto-scaling-groups → Overrides |

Và một con số đáng nhớ khi thiết kế: AWS khuyến nghị khai ít nhất 10 loại instance cho một Auto Scaling group dùng Spot. Nghe có vẻ nhiều, nhưng với một ứng dụng web thông thường thì m5, m5a, m5n, m6i, m6a, c5, c5a, c6i ở vài cỡ khác nhau đã đủ số đó — và chính sự đa dạng ấy là thứ quyết định bạn có đủ máy vào đúng lúc cần hay không, nhiều hơn bất kỳ tham số nào khác.

Câu 339 Chọn nhiều đáp án AWS Networking & Content Delivery

A SysOps Administrator has created a new Amazon VPC in the us-east-1 Region. A development site will be deployed running on Amazon EC2 instances. The application requires both incoming and outgoing connectivity to the internet.

Which combination of steps are required to provide internet connectivity to the EC2 instances? (Select TWO.)

  1. A

    Add a NAT Gateway in private subnet

  2. B

    Create an internet gateway and attach it to the VPC.

  3. C

    Add an entry to the route table for the subnet that points to the internet gateway.

  4. D

    Attach an Elastic IP address to the internet gateway.

  5. E

    Add a NAT gateway to a private subnet.

Xem giải thích

Đáp án

B và C — Tạo INTERNET GATEWAY rồi gắn vào VPC, VÀ thêm một tuyến trong route table của subnet trỏ tới internet gateway đó.

Vì sao đúng

Đề cần kết nối cả hai chiều — vào và ra internet. Đó là định nghĩa của một public subnet, và public subnet cần đúng hai thứ này.

⚠ Điểm mấu chốt — ba điều kiện của một máy ra vào internet được:

1. Internet Gateway gắn vào VPC        ← phương án B
        ↓
2. Route table của subnet có tuyến:
       0.0.0.0/0  →  igw-xxxxx          ← phương án C
        ↓
3. Instance có ĐỊA CHỈ IP CÔNG CỘNG
   (public IP hoặc Elastic IP)
        ↓
    Thiếu BẤT KỲ điều nào → không ra vào được

⚠ Và hai lớp lọc phải cho phép:

4. Security group: mở cổng cần thiết chiều vào
5. Network ACL: mở CẢ HAI chiều
       (nhớ dải cổng tạm 1024-65535 chiều ra)

⚠ Vì sao NAT Gateway không phải câu trả lời ở đây:

NAT Gateway
        ↓
    Cho máy ở PRIVATE subnet đi RA internet
        ↓
    NHƯNG chặn hoàn toàn chiều VÀO
        ↓
    Đề cần "cả incoming và outgoing"
        ↓
    → NAT không thoả được vế incoming

⚠ Và Internet Gateway không có địa chỉ IP:

IGW là thành phần định tuyến ảo
        ↓
    - Mở rộng theo chiều ngang, dự phòng sẵn
    - KHÔNG có băng thông giới hạn
    - KHÔNG gắn Elastic IP được
    - Miễn phí (chỉ trả tiền dữ liệu truyền)
        ↓
    Nó thực hiện NAT 1-1 giữa IP riêng
    và IP công cộng của chính instance

Vì sao các phương án khác sai

  • A và E (thêm NAT Gateway vào private subnet) — hai phương án gần như trùng nhau, và NAT Gateway chỉ cho chiều RA. Đề đòi cả chiều vào. (Và về nguyên tắc, NAT Gateway phải đặt ở PUBLIC subnet, không phải private — nó cần một tuyến ra IGW để hoạt động.)

  • D (gắn Elastic IP vào internet gateway) — IGW không nhận Elastic IP. Elastic IP gắn vào instance, ENI, NAT Gateway hoặc NLB, không bao giờ gắn vào IGW.

Ghi nhớ

⚠ Public subnet ↔ Private subnet — bảng phải thuộc: | | Public subnet | Private subnet | |---|---|---| | Định nghĩa | route table có 0.0.0.0/0 → IGW | không có tuyến tới IGW | | Ra internet | có (nếu máy có IP công cộng) | chỉ qua NAT Gateway | | Vào từ internet | CÓ | không bao giờ | | Đặt gì ở đây | ALB, NAT Gateway, bastion | máy ứng dụng, CSDL |

Từ khoá nhận diện:

"cần cả vào và ra internet" → IGW + tuyến trong route table + IP công cộng "ra được nhưng không ai vào được" → NAT Gateway "IPv6, chỉ ra không vào" → Egress-only Internet Gateway "không được ra internet chút nào" → private subnet, không NAT "gọi dịch vụ AWS mà không qua internet" → VPC endpoint

Ba nguyên nhân "máy không ra được internet" Kiểm tra
Không có IGW, hoặc chưa gắn vào VPC describe-internet-gateways
Route table thiếu 0.0.0.0/0 nguyên nhân phổ biến nhất
Máy không có IP công cộng MapPublicIpOnLaunch của subnet, hoặc gắn EIP
Thêm security group, NACL, và DNS của VPC (enableDnsSupport)
Elastic IP — gắn được vào đâu Nội dung
EC2 instance / ENI được
NAT Gateway được — bắt buộc phải có
Network Load Balancer được (mỗi AZ một cái)
Internet Gateway KHÔNG
ALB không — ALB dùng tên miền
Lưu ý chi phí EIP không gắn vào đâu thì BỊ TÍNH TIỀN
Thiết kế VPC chuẩn cho ứng dụng web Nội dung
Public subnet (mỗi AZ một cái) ALB, NAT Gateway
Private subnet ứng dụng máy EC2 / container
Private subnet dữ liệu RDS, ElastiCache — không có tuyến ra internet
Số AZ ít nhất hai
CIDR chừa dư chỗ, không trùng với mạng tại chỗ
IGW ↔ NAT Gateway ↔ Egress-only IGW Khác nhau
IGW hai chiều, IPv4 và IPv6, miễn phí
NAT Gateway một chiều ra, IPv4, có phí giờ + dữ liệu
Egress-only IGW một chiều ra, CHỈ IPv6, miễn phí

Ba việc kiểm chứng: | Việc | Cách | |---|---| | IGW đã gắn chưa | describe-internet-gateways --filters Name=attachment.vpc-id,... | | Subnet có phải public không | đọc route table, tìm 0.0.0.0/0 → igw- | | Máy ra được chưa | trên máy: curl https://checkip.amazonaws.com |

Và một sai lầm rất hay gặp khi tự dựng VPC lần đầu: tạo Internet Gateway rồi quên thêm tuyến vào route table. Console không báo lỗi gì, mọi thứ trông như đã xong, và triệu chứng duy nhất là mọi kết nối ra ngoài đều timeout — thứ dễ bị đổ nhầm cho security group hơn là cho một dòng còn thiếu trong bảng định tuyến.

Câu 340 AWS Management & Governance

A SysOps Administrator has stored the login credentials for a database as secure string parameters in AWS Systems Manager Parameter Store. An application running on an Amazon EC2 instance must use the credentials to access the database.

What is the MOST secure way to grant the application access to the credentials?

  1. A

    Create an IAM user for the application and grant the user permission to read the Systems Manager parameters.

  2. B

    Create an IAM group for the application and grant the group permission to read the Systems Manager parameters.

  3. C

    Create an IAM policy for the application and grant the policy permission to read the Systems Manager parameters.

  4. D

    Create an IAM role for the EC2 instances and grant the role permission to read the Systems Manager parameters.

Xem giải thích

Đáp án

D — Tạo IAM ROLE cho các instance EC2 và cấp cho role đó quyền đọc tham số trong Systems Manager.

Vì sao đúng

Nguyên tắc bất di bất dịch: tải công việc chạy trên EC2 luôn dùng role, không bao giờ dùng IAM user.

⚠ Điểm mấu chốt — chỉ role mới gắn được vào instance:

IAM ROLE + instance profile
        ↓
    Gắn thẳng vào instance EC2
        ↓
    IMDS cấp thông tin xác thực TẠM THỜI,
    tự làm mới, không nằm trên đĩa
        ↓
    → SDK/CLI tự tìm thấy
    → không có khoá nào để lộ
        ↓
IAM USER / GROUP / POLICY
        ↓
    KHÔNG gắn được vào instance
        ↓
    User → phải có access key trên máy
    Group → chỉ là tập hợp user
    Policy → chỉ là tài liệu, phải gắn vào ai đó

⚠ Chính sách nên viết chặt tới đâu:

{
  "Effect": "Allow",
  "Action": ["ssm:GetParameter", "ssm:GetParameters"],
  "Resource": "arn:aws:ssm:ap-southeast-1:123456789012:parameter/ung-dung/csdl/*"
}

Và với SecureString còn cần thêm quyền giải mã:

{
  "Effect": "Allow",
  "Action": "kms:Decrypt",
  "Resource": "arn:aws:kms:...:key/<id-cua-CMK>"
}
Thiếu kms:Decrypt
        ↓
    → GetParameter với WithDecryption=true
      trả về AccessDenied
    → lỗi rất hay gặp, và thông báo không nói rõ

Xem thêm câu #11842 (cùng lô) và #11813, #11814 (lô 127): cùng nguyên tắc — EC2 dùng IAM role, không dùng khoá dài hạn.

Vì sao các phương án khác sai

  • C (tạo IAM policy cho ứng dụng và cấp quyền đọc tham số) — đây là phương án gần nhất và chính sách đúng là thứ cần viết, nhưng policy phải được GẮN vào một thực thể (user, group hay role). Bản thân nó không cấp quyền cho ai cả — câu trả lời phải nói rõ là gắn vào role.

  • A (tạo IAM user cho ứng dụng) — kéo theo access key dài hạn phải nằm trên máy, đúng thứ role sinh ra để loại bỏ.

  • B (tạo IAM group cho ứng dụng) — group chỉ chứa user, không gắn vào instance được, và cũng không phải là một danh tính có thể đảm nhận.

Ghi nhớ

⚠ Bốn thực thể IAM — bảng phải thuộc: | Thực thể | Gắn vào EC2 được | Dùng khi | |---|---|---| | Role | CÓ (qua instance profile) | tải công việc: EC2, Lambda, ECS, EKS | | User | không | người thật, hoặc hệ thống NGOÀI AWS | | Group | không | gom user để quản lý quyền | | Policy | không (phải gắn vào thực thể) | mô tả quyền |

Từ khoá nhận diện:

"EC2 cần truy cập dịch vụ AWS" → IAM role "cách AN TOÀN NHẤT" → role + quyền tối thiểu "đọc SecureString" → nhớ thêm kms:Decrypt "bí mật cần XOAY tự động" → Secrets Manager "máy tại chỗ cần gọi AWS" → IAM Roles Anywhere hoặc SSM Hybrid Activation

Ba loại tham số của Parameter Store Nội dung
String giá trị thường
StringList danh sách phân tách bằng dấu phẩy
SecureString mã hoá bằng KMS — cần kms:Decrypt để đọc
Hai bậc Standard (miễn phí, 4 KB) và Advanced (có phí, 8 KB, có policy)
Parameter Store ↔ Secrets Manager — nhắc lại Khác nhau
Xoay tự động không ↔ CÓ, tích hợp sẵn với RDS
Chi phí Standard miễn phí ↔ có phí mỗi secret
Sao chép đa Region không ↔ có
Dùng khi cấu hình, tham số ↔ bí mật cần xoay
Đọc tham số từ ứng dụng Cách
CLI aws ssm get-parameter --name /a/b --with-decryption
Lambda extension của Parameter Store — có cache sẵn
EC2 SDK + IAM role, nên cache trong bộ nhớ
CloudFormation dynamic reference {{resolve:ssm-secure:...}}
Container secret của ECS task definition trỏ tới tham số
Bảo vệ chính tham số đó Nội dung
CMK riêng, không dùng khoá mặc định ghi log truy cập khoá riêng biệt
Đặt tên theo cây thư mục /ung-dung/moi-truong/khoa — phân quyền theo nhánh
CloudTrail ghi mọi lời gọi GetParameter
Parameter policy (Advanced) đặt hạn dùng, nhắc xoay

Ba việc kiểm chứng: | Việc | Cách | |---|---| | Máy đang dùng role nào | trên máy: aws sts get-caller-identity | | Đọc được tham số không | aws ssm get-parameter --name ... --with-decryption | | Thiếu quyền ở đâu | CloudTrail — bản ghi AccessDenied nói rõ action nào bị chặn |

Và một lỗi rất tốn thời gian nếu chưa từng gặp: quyền ssm:GetParameter không đủ để đọc một SecureString. Lời gọi sẽ trả về AccessDenied, và người gỡ lỗi thường quay lại soi chính sách SSM hết lần này tới lần khác — trong khi thứ còn thiếu là kms:Decrypt trên khoá đã mã hoá tham số đó, một chính sách nằm ở dịch vụ hoàn toàn khác.