Ngân hàng đề — AWS Certified SysOps Administrator Associate
Tìm thấy 936 câu.
A popular application uses an Amazon Aurora DB cluster for storing data. The application’s usage is highly variable with unpredictable spikes in traffic. Much of the load is database queries and the same query is rarely performed multiple times. The application logs show that performance issues have occurred during peak usage periods when many searches were submitted.
A SysOps administrator must improve the performance of the application. Which solution will meet these requirements?
-
A
Create an Amazon ElastiCache cluster to cache database queries and update the application to check the cache.
-
B
Create RAID 0 arrays for the Aurora database cluster instances to improve I/O performance.
-
C
Implement Aurora Auto Scaling to scale the database instance size based on the number of queries submitted.
-
D
Implement Aurora Auto Scaling to scale the number of replicas and update the application to use the Aurora reader endpoint.
Xem giải thích
Đáp án
D — Bật AURORA AUTO SCALING để co giãn SỐ LƯỢNG REPLICA, và sửa ứng dụng dùng READER ENDPOINT.
Vì sao đúng
Đề có ba manh mối, và cả ba đều chỉ về cùng một hướng: mở rộng năng lực ĐỌC theo chiều ngang.
⚠ Manh mối thứ nhất — tải BIẾN ĐỘNG, có đỉnh khó đoán:
"usage is highly variable with unpredictable spikes"
↓
→ cần cơ chế TỰ CO GIÃN
→ Aurora Auto Scaling thêm/bớt replica
theo CPU hoặc số kết nối
⚠ Manh mối thứ hai — cùng một truy vấn HIẾM KHI lặp lại:
"the same query is rarely performed multiple times"
↓
→ CACHE gần như VÔ DỤNG
→ tỉ lệ cache hit sẽ rất thấp
↓
→ loại hẳn phương án ElastiCache
↓
Đây là câu chốt của cả bài
⚠ Manh mối thứ ba — phần lớn tải là TRUY VẤN (đọc):
"Much of the load is database queries"
↓
→ tải ĐỌC, không phải tải GHI
→ chia được qua nhiều replica
↓
Reader endpoint tự cân bằng tải
qua MỌI replica đang có
↓
→ replica mới do Auto Scaling tạo ra
TỰ ĐỘNG được đưa vào
→ ứng dụng không phải biết gì
⚠ Vì sao phải sửa ứng dụng dùng reader endpoint:
Ứng dụng đang gọi CLUSTER (writer) ENDPOINT
↓
→ mọi truy vấn dồn vào node GHI
→ thêm bao nhiêu replica cũng vô ích
↓
Tách đường đọc sang READER ENDPOINT
↓
→ tải đọc mới thật sự được chia
→ đây là phần "update the application"
trong phương án đúng
Xem thêm câu #11823 (lô 127): cùng giải pháp thêm Aurora Replica để chia tải đọc, ở đó là thao tác thủ công một lần; ở đây là tự động co giãn. Khoá nhất quán.
Vì sao các phương án khác sai
-
A (dựng ElastiCache để cache truy vấn) — đây là phương án gần nhất và thường là câu trả lời đúng cho các đề tương tự, nhưng đề đã cố ý loại nó: "cùng một truy vấn hiếm khi được thực hiện nhiều lần". Cache chỉ có giá trị khi dữ liệu được đọc lại — ở đây tỉ lệ hit sẽ gần bằng không.
-
C (Aurora Auto Scaling để co giãn KÍCH THƯỚC instance) — Aurora Auto Scaling co giãn SỐ LƯỢNG REPLICA, không co giãn cỡ instance. Đây là điểm phân biệt trực tiếp với phương án D.
-
B (tạo mảng RAID 0 cho các instance của cụm Aurora) — bạn không quản lý lưu trữ của Aurora: tầng lưu trữ do AWS lo, tự mở rộng, 6 bản sao trên 3 AZ. Không có đĩa nào để cấu hình RAID.
Ghi nhớ
⚠ Aurora Auto Scaling — bảng phải thuộc: | Đặc điểm | Nội dung | |---|---| | Co giãn cái gì | SỐ LƯỢNG read replica (tối đa 15) | | KHÔNG co giãn | kích thước instance, và node ghi | | Dựa trên | CPUUtilization trung bình hoặc DatabaseConnections trung bình | | Replica mới | tự vào READER ENDPOINT | | Điều kiện | ứng dụng phải dùng reader endpoint | | Cấu hình | min/max replica, giá trị mục tiêu, thời gian chờ |
Từ khoá nhận diện:
"tải đọc biến động, cần tự co giãn" → Aurora Auto Scaling replica + reader endpoint "truy vấn lặp lại nhiều" → ElastiCache "truy vấn HIẾM KHI lặp lại" → cache vô dụng — thêm replica "tải ghi cao" → đổi cỡ node ghi, hoặc phân mảnh "tải khó đoán, không muốn chọn cỡ" → Aurora Serverless v2
| Bốn endpoint của Aurora — nhắc lại | Nội dung |
|---|---|
| Cluster (writer) | luôn trỏ tới node GHI hiện tại |
| Reader | cân bằng tải qua MỌI replica |
| Custom | nhóm node theo cấu hình riêng |
| Instance | một node cụ thể — đừng ghi cứng vào ứng dụng |
| Bẫy | mọi truy vấn dùng cluster endpoint → replica nhàn rỗi |
| Khi nào cache HỮU ÍCH, khi nào KHÔNG | Nội dung |
|---|---|
| Hữu ích | truy vấn lặp lại, dữ liệu ít đổi, đọc nhiều ghi ít |
| Hữu ích | phiên đăng nhập, bảng xếp hạng, danh mục sản phẩm |
| KHÔNG hữu ích | truy vấn gần như không lặp (tìm kiếm tự do, báo cáo tuỳ biến) |
| KHÔNG hữu ích | dữ liệu đổi liên tục, đòi hỏi nhất quán tuyệt đối |
| Chỉ số quyết định | CacheHitRate — thấp là cache đang vô ích |
| Aurora Serverless v2 — lựa chọn đáng cân nhắc | Nội dung |
|---|---|
| Co giãn | theo ACU, từng bước rất mịn |
| Phù hợp | tải biến động, có đỉnh khó đoán — đúng mô tả của đề |
| Ưu điểm | không phải chọn cỡ instance, co giãn trong vài giây |
| Kết hợp | dùng cho cả writer lẫn reader |
| Vì sao không phải khoá | đề nhấn vào tải ĐỌC và reader endpoint |
| Chỉ số Aurora nên đặt cảnh báo | Nội dung |
|---|---|
CPUUtilization theo từng node |
cơ sở cho Auto Scaling |
DatabaseConnections |
sắp chạm max_connections |
AuroraReplicaLagMaximum |
replica tụt hậu |
SelectLatency, CommitLatency |
độ trễ truy vấn |
FreeableMemory |
buffer pool không đủ |
Ba việc kiểm chứng: | Việc | Cách | |---|---| | Tải có được chia không | DatabaseConnections theo TỪNG instance | | Auto Scaling có chạy không | describe-scalable-targets, và sự kiện của cụm | | Truy vấn nào nặng | Performance Insights → Top SQL |
Và một việc nên làm trước khi tăng số replica: kiểm tra ứng dụng thực sự đang gọi endpoint nào. Rất nhiều hệ thống thêm replica rồi không thấy cải thiện gì, đơn giản vì mọi kết nối vẫn trỏ tới cluster endpoint — và trong trường hợp đó, thứ bạn vừa mua là những node nhàn rỗi được tính tiền theo giờ.
A SysOps administrator is deploying a new website running on Amazon EC2 instances. The application requires both incoming and outgoing connectivity to the internet.
Which combination of steps are required to provision the required connectivity? (Select TWO.)
-
A
Attach a private address to the elastic network interface on the EC2 instance.
-
B
Add an entry to the route table for the subnet that points to an internet gateway.
-
C
Attach an Elastic IP address to the internet gateway.
-
D
Add a NAT gateway to a public subnet and update the route table.
-
E
Create an internet gateway and attach it to a VPC.
Xem giải thích
Đáp án
B và E — Thêm một tuyến trong ROUTE TABLE của subnet trỏ tới internet gateway, VÀ tạo INTERNET GATEWAY rồi gắn vào VPC.
Vì sao đúng
Đề cần kết nối cả hai chiều — vào và ra internet. Đó là định nghĩa của public subnet, và public subnet cần đúng hai thành phần này.
⚠ Điểm mấu chốt — ba điều kiện để một máy ra vào internet được:
1. Internet Gateway gắn vào VPC ← phương án E
↓
2. Route table của subnet có tuyến:
0.0.0.0/0 → igw-xxxxx ← phương án B
↓
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:
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
Xem thêm câu #11862 (lô 128): gần như cùng một câu hỏi, cùng cặp đáp án — tạo IGW và thêm tuyến route table. Chỉ khác chữ cái vì bộ đề xáo thứ tự phương án (ở đó là B và C, ở đây là B và E). Khoá nhất quán.
Vì sao các phương án khác sai
-
D (thêm NAT gateway vào public subnet và cập nhật route table) — đây là phương án gần nhất và NAT đúng là đặt ở public subnet, nhưng NAT chỉ cho chiều RA. Đề đòi cả chiều vào.
-
C (gắn Elastic IP vào internet gateway) — IGW không nhận Elastic IP. EIP gắn vào instance, ENI, NAT Gateway hoặc NLB.
-
A (gắn địa chỉ RIÊNG vào elastic network interface của máy) — mọi ENI đã có sẵn IP riêng; và IP riêng không giúp gì cho việc ra internet — thứ cần là IP công cộng.
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 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, hoặc gắn EIP |
| Thêm | security group, NACL, và DNS của VPC (enableDnsSupport, enableDnsHostnames) |
| 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 |
| Chi phí | EIP không gắn vào đâu thì BỊ TÍNH TIỀN |
| 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í |
| Cả ba | đều cần tuyến trong route table mới có tác dụng |
| Thiết kế VPC chuẩn | Nội dung |
|---|---|
| Public subnet (mỗi AZ một cái) | ALB, NAT Gateway |
| Private subnet ứng dụng | EC2 / container |
| Private subnet dữ liệu | RDS, ElastiCache — không tuyến ra internet |
| Số AZ | ít nhất hai |
| CIDR | chừa dư chỗ, không trùng mạng tại chỗ |
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.
A SysOps administrator has created an Amazon CloudFront distribution that uses an Amazon S3 bucket as the origin. The S3 static website endpoint is used as the origin domain name.
When testing access the administrator receives a 403 Access Denied message.
Which action should resolve this issue?
-
A
Create a bucket policy that allows public read access to the bucket.
-
B
Ensure default encryption using the Amazon S3-managed keys.
-
C
Remove the default bucket policy that denies read access to the bucket.
-
D
Create a bucket policy that allows public read access for all objects in the bucket.
Xem giải thích
Đáp án
D — Tạo bucket policy cho phép ĐỌC CÔNG KHAI với MỌI ĐỐI TƯỢNG trong bucket.
Vì sao đúng
Điểm mấu chốt nằm ở một chi tiết trong đề: origin dùng S3 STATIC WEBSITE ENDPOINT, chứ không phải REST endpoint.
⚠ Điểm mấu chốt — hai loại endpoint của S3 hành xử KHÁC HẲN:
S3 REST endpoint
bucket.s3.<region>.amazonaws.com
↓
→ CloudFront dùng được ORIGIN ACCESS CONTROL (OAC)
→ bucket giữ RIÊNG TƯ hoàn toàn
→ chỉ CloudFront đọc được
S3 STATIC WEBSITE endpoint ← đề này
bucket.s3-website-<region>.amazonaws.com
↓
→ CloudFront coi nó là CUSTOM ORIGIN
→ KHÔNG dùng được OAC / OAI
→ bucket BẮT BUỘC phải cho ĐỌC CÔNG KHAI
↓
Thiếu quyền công khai → 403 Access Denied
→ đúng lỗi trong đề
⚠ Bucket policy cần thiết:
{
"Effect": "Allow",
"Principal": "*",
"Action": "s3:GetObject",
"Resource": "arn:aws:s3:::ten-bucket/*"
}
Chú ý Resource có /*
↓
s3:GetObject là thao tác trên ĐỐI TƯỢNG
→ thiếu /* thì chính sách VÔ TÁC DỤNG
→ đây là điểm phân biệt với phương án A
⚠ Và phải tắt Block Public Access:
Block Public Access bật ở cấp bucket hoặc tài khoản
↓
→ bucket policy công khai bị VÔ HIỆU
→ vẫn 403
↓
Phải tắt các cờ liên quan cho bucket đó
⚠ Nhưng vì sao đề lại dùng website endpoint:
Website endpoint có những thứ REST endpoint không có:
↓
- Index document (index.html cho mỗi thư mục)
- Error document tuỳ chỉnh
- Redirect rule
↓
→ cần các tính năng này thì phải dùng
website endpoint, và chấp nhận bucket công khai
↓
Nếu KHÔNG cần → dùng REST endpoint + OAC
→ an toàn hơn hẳn
Vì sao các phương án khác sai
-
A (bucket policy cho phép đọc công khai BUCKET) — đây là phương án gần nhất và gần đúng hoàn toàn, nhưng sai ở phạm vi: quyền đọc phải áp cho các ĐỐI TƯỢNG (
arn:aws:s3:::bucket/*), không phải cho bucket (arn:aws:s3:::bucket). Đây chính là bẫy/*quen thuộc. -
C (gỡ bucket policy mặc định từ chối đọc) — S3 không có bucket policy mặc định nào. Bucket mới tạo không có policy, và mặc định là từ chối mọi truy cập ẩn danh — không phải do một chính sách nào để mà gỡ.
-
B (bật mã hoá mặc định bằng khoá do S3 quản lý) — mã hoá không liên quan gì tới quyền truy cập. Lỗi 403 là lỗi quyền.
Ghi nhớ
⚠ Hai loại endpoint S3 làm origin — bảng phải thuộc: | | REST endpoint | Website endpoint | |---|---|---| | Tên miền | bucket.s3.<region>.amazonaws.com | bucket.s3-website-<region>.amazonaws.com | | OAC / OAI | DÙNG ĐƯỢC | KHÔNG | | Bucket riêng tư | CÓ | KHÔNG — phải công khai | | Index document | không | CÓ | | Error document, redirect | không | CÓ | | CloudFront coi là | S3 origin | custom origin | | Khuyến nghị | REST + OAC cho hầu hết trường hợp | |
Từ khoá nhận diện:
"403 với S3 website endpoint làm origin" → bucket phải cho ĐỌC CÔNG KHAI "muốn bucket riêng tư sau CloudFront" → REST endpoint + OAC "cần index.html cho mỗi thư mục" → website endpoint, hoặc CloudFront Function "Resource không có
/*" → chính sách vô tác dụng với GetObject "đã có policy công khai mà vẫn 403" → Block Public Access
| Nguyên nhân 403 giữa CloudFront và S3 | Nội dung |
|---|---|
| Website endpoint mà bucket không công khai | lỗi của đề này |
| Block Public Access đang bật | vô hiệu hoá policy công khai |
Resource thiếu /* |
policy không khớp GetObject |
| OAC chưa được cấp quyền trong bucket policy | với REST endpoint |
| Đối tượng mã hoá SSE-KMS | OAC cần thêm quyền kms:Decrypt |
| Sai Region trong tên origin |
| Cách làm KHUYẾN NGHỊ — REST endpoint + OAC | Bước |
|---|---|
| 1 | Origin dùng REST endpoint |
| 2 | Tạo Origin Access Control trong CloudFront |
| 3 | CloudFront tự sinh bucket policy cho phép chỉ distribution đó |
| 4 | Bật Block Public Access hoàn toàn |
| 5 | Cần index document → dùng CloudFront Function viết lại URI |
| 6 | Cần trang lỗi → Custom error response của CloudFront |
| Kết quả | bucket riêng tư tuyệt đối, vẫn có đủ tính năng |
| OAC ↔ OAI | Khác nhau |
|---|---|
| OAC | cách hiện đại — hỗ trợ SSE-KMS, mọi Region, cả PUT/DELETE |
| OAI | cách cũ, không hỗ trợ SSE-KMS |
| Khuyến nghị | dùng OAC cho mọi distribution mới |
| Chuyển đổi | tạo OAC, cập nhật bucket policy, rồi gỡ OAI |
| Bảo mật cho website tĩnh trên CloudFront | Nội dung |
|---|---|
| Block Public Access + OAC | bucket không lộ ra internet |
| HTTPS bắt buộc | redirect-to-https |
| WAF | chặn bot, rate limit |
| Geo restriction | nếu có ràng buộc vùng |
| Security headers | qua CloudFront response headers policy |
Ba việc kiểm chứng: | Việc | Cách | |---|---| | Gọi thẳng S3 có được không | mở URL của bucket — với OAC phải nhận 403 | | Origin là loại nào | get-distribution-config → đọc DomainName của origin | | Block Public Access đang thế nào | get-public-access-block |
Và một lời khuyên nên áp dụng cho gần như mọi website tĩnh mới: dùng REST endpoint kèm OAC thay vì website endpoint. Hai tính năng khiến người ta chọn website endpoint — index document và trang lỗi tuỳ chỉnh — đều thay thế được bằng CloudFront Function và custom error response, và đổi lại bạn có một bucket hoàn toàn riêng tư thay vì một bucket mở ra internet mà chỉ trông chờ vào việc không ai đoán được tên nó.
A company manages several applications running across multiple AWS Regions. The applications use Amazon EC2 On-Demand instances and AWS Lambda functions. The SysOps team must optimize the cost of running the workloads. The overall consumption of compute resources is stable.
Which approach should the SysOps team use to optimize costs?
-
A
Purchase Convertible Reserved Instances based on CloudWatch metrics.
-
B
Purchase EC2 Instance Savings Plans based recommendations in Cost Explorer.
-
C
Purchase Standard Reserved Instances based on CloudWatch metrics.
-
D
Purchase Compute Savings Plans based recommendations in Cost Explorer.
Xem giải thích
Đáp án
D — Mua COMPUTE SAVINGS PLANS theo khuyến nghị trong Cost Explorer.
Vì sao đúng
Đề có ba đặc điểm, và chỉ Compute Savings Plans phủ được cả ba.
⚠ Điểm mấu chốt — ba ràng buộc và cách Compute SP đáp ứng:
1. "EC2 On-Demand VÀ Lambda"
↓
Compute Savings Plans áp cho
EC2 + FARGATE + LAMBDA
↓
→ phủ được CẢ HAI loại tải
→ RI và EC2 Instance SP KHÔNG áp cho Lambda
2. "nhiều AWS Region"
↓
Compute SP áp cho MỌI REGION
↓
→ không phải mua riêng cho từng Region
3. "mức tiêu thụ ỔN ĐỊNH"
↓
→ cam kết dài hạn là hợp lý
→ và Cost Explorer khuyến nghị được
mức cam kết dựa trên lịch sử thật
⚠ Vì sao dùng khuyến nghị của Cost Explorer thay vì tự đoán:
Cost Explorer → Savings Plans → Recommendations
↓
Phân tích lịch sử dùng thật (7/30/60 ngày)
↓
Đề xuất:
- mức cam kết mỗi giờ
- kỳ hạn (1 hay 3 năm)
- kiểu thanh toán
- ƯỚC TÍNH số tiền tiết kiệm
↓
→ dựa trên DỮ LIỆU, không phải cảm tính
→ và nó tự tính mức an toàn
để không bị lãng phí cam kết
⚠ Nguyên tắc chọn mức cam kết:
Cam kết theo mức chi tiêu THẤP NHẤT
mà bạn CHẮC CHẮN sẽ dùng
↓
Phần vượt lên → vẫn tính giá On-Demand
↓
→ cam kết thấp mà dùng hết
LUÔN tốt hơn cam kết cao rồi lãng phí
Xem thêm câu #11897 (cùng lô): cũng chọn Compute Savings Plans, ở đó lý do là sắp chuyển sang Fargate. Khoá nhất quán — Compute SP là lựa chọn khi tải trải trên nhiều loại dịch vụ tính toán.
Vì sao các phương án khác sai
-
B (EC2 Instance Savings Plans theo khuyến nghị Cost Explorer) — đây là phương án gần nhất và cũng dùng đúng công cụ khuyến nghị, nhưng EC2 Instance SP khoá vào MỘT họ máy trong MỘT Region và KHÔNG áp cho Lambda. Đề có cả Lambda và nhiều Region.
-
A (Convertible Reserved Instances dựa trên chỉ số CloudWatch) — Convertible RI linh hoạt hơn Standard RI nhưng vẫn chỉ áp cho EC2, không áp cho Lambda. Và CloudWatch không phải công cụ để quyết định mua sắm — đó là việc của Cost Explorer.
-
C (Standard Reserved Instances dựa trên chỉ số CloudWatch) — kém linh hoạt nhất: khoá vào loại máy, Region và AZ; không áp cho Lambda; và cũng dùng sai công cụ phân tích.
Ghi nhớ
⚠ Phạm vi áp dụng của các cam kết — bảng phải thuộc: | Cơ chế | Áp cho | Linh hoạt | |---|---|---| | Compute Savings Plans | EC2 + FARGATE + LAMBDA, mọi Region, mọi họ máy | cao nhất | | EC2 Instance Savings Plans | một họ máy, một Region | trung bình | | Convertible RI | EC2, đổi được loại máy | trung bình | | Standard RI | EC2, cố định loại máy | thấp nhất | | Mức giảm | Compute ~66% ↔ EC2 Instance / Standard RI ~72% | đánh đổi linh hoạt lấy giảm giá |
Từ khoá nhận diện:
"có cả Lambda / Fargate" → Compute Savings Plans "nhiều Region" → Compute Savings Plans "một họ máy cố định, một Region" → EC2 Instance SP (giảm sâu hơn) "cần bảo đảm CÓ máy" → Capacity Reservation hoặc Zonal RI "quyết định mua sắm dựa trên gì" → Cost Explorer recommendations
| Công cụ nào cho việc gì | Nội dung |
|---|---|
| Cost Explorer | phân tích chi phí, KHUYẾN NGHỊ mua sắm, dự báo |
| Cost and Usage Report | chi tiết nhất, theo giờ và theo tài nguyên |
| Budgets | cảnh báo vượt ngưỡng, kể cả ngưỡng utilization của SP |
| Compute Optimizer | gợi ý right-sizing — nên làm TRƯỚC khi cam kết |
| CloudWatch | chỉ số kỹ thuật, KHÔNG phải công cụ mua sắm |
| Thứ tự tối ưu chi phí đúng | Bước |
|---|---|
| 1 | Dọn lãng phí trước — máy nhàn rỗi, EIP không dùng, snapshot cũ |
| 2 | Right-sizing bằng Compute Optimizer |
| 3 | Tắt môi trường dev ngoài giờ (Instance Scheduler) |
| 4 | Rồi mới cam kết Savings Plans cho phần nền ổn định |
| 5 | Spot cho phần chịu được gián đoạn |
| Lý do | cam kết trước khi right-sizing = khoá luôn sự lãng phí trong 1-3 năm |
| Theo dõi sau khi mua | Chỉ số |
|---|---|
| Utilization | bao nhiêu phần cam kết đã dùng — nên gần 100% |
| Coverage | bao nhiêu phần chi tiêu đã được phủ |
| Cảnh báo | Budgets cho Savings Plans utilization |
| Xem lại | mỗi quý, và trước mỗi thay đổi kiến trúc lớn |
| Ba cách thanh toán — nhắc lại | Đánh đổi |
|---|---|
| No Upfront | không trả trước, rủi ro thấp nhất |
| Partial Upfront | cân bằng phổ biến nhất |
| All Upfront | giảm sâu nhất, rủi ro cao nhất |
| Chọn No Upfront khi | tương lai chưa chắc chắn, hoặc không muốn khoá dòng tiền |
Ba việc kiểm chứng: | Việc | Cách | |---|---| | Nên cam kết bao nhiêu | Cost Explorer → Savings Plans recommendations | | Đã dùng hết chưa | utilization report | | Còn chi tiêu nào chưa phủ | coverage report |
Và một sai lầm rất tốn kém mà thứ tự công việc có thể tránh được: mua Savings Plans trước khi right-sizing. Nếu đội máy đang lớn hơn mức cần thiết, một cam kết ba năm sẽ khoá luôn sự lãng phí đó lại — và bạn sẽ mất động lực tối ưu, vì giảm mức dùng xuống chỉ khiến tỉ lệ sử dụng cam kết tụt đi chứ không tiết kiệm thêm đồng nào.
A custom application is running in a single AWS region in the United States. The application runs on a fleet of Amazon EC2 instances behind a Network Load Balancer. The application provides an SFTP endpoint to users.
Recently, the application has been launched for users in Europe and the European users have reported high latency and connection instability. A SysOps administrator must improve performance and stability for the application.
What should the SysOps administrator do to meet these requirements?
-
A
Create an accelerator in AWS Global Accelerator and update the DNS record.
-
B
Create an Amazon CloudFront distribution and update the DNS record.
-
C
Create an Auto Scaling group in an AWS Region in Europe.
-
D
Create a new Network Load Balancer in an AWS Region in Europe.
Xem giải thích
Đáp án
A — Tạo một accelerator trong AWS GLOBAL ACCELERATOR và cập nhật bản ghi DNS.
Vì sao đúng
Hai chi tiết trong đề loại hết các phương án khác: giao thức là SFTP (không phải HTTP), và load balancer là Network Load Balancer (tầng 4).
⚠ Điểm mấu chốt — CloudFront chỉ làm HTTP/HTTPS:
SFTP chạy trên TCP cổng 22
↓
KHÔNG phải HTTP
↓
→ CloudFront KHÔNG dùng được
→ và cũng không có gì để CACHE
(SFTP là truyền tệp có phiên, có trạng thái)
↓
GLOBAL ACCELERATOR
↓
Hoạt động ở TẦNG 4 — mọi giao thức TCP/UDP
↓
→ đúng loại lưu lượng của đề
⚠ Global Accelerator cải thiện bằng cách nào:
Người dùng châu Âu
↓
Vào MẠNG AWS ngay tại điểm hiện diện gần nhất
(chỉ vài mili giây)
↓
Từ đó đi trên ĐƯỜNG TRỤC RIÊNG của AWS
tới NLB ở Hoa Kỳ
↓
→ tránh phần lớn chặng đường internet công cộng
→ ít mất gói, đường ổn định hơn
→ cải thiện cả ĐỘ TRỄ lẫn ĐỘ ỔN ĐỊNH
↓
Đúng hai thứ đề yêu cầu
⚠ Và nó cho thêm hai IP tĩnh anycast:
Global Accelerator cấp 2 ĐỊA CHỈ IP TĨNH
↓
→ client SFTP thường cấu hình bằng IP
hoặc bằng tên miền cố định
→ không phụ thuộc DNS TTL
↓
Sau này muốn thêm endpoint ở Region châu Âu
↓
→ chỉ thêm vào accelerator
→ KHÔNG phải đổi gì phía client
Vì sao các phương án khác sai
-
D (tạo Network Load Balancer mới ở một Region châu Âu) — đây là phương án gần nhất và thực sự giảm độ trễ, nhưng nó đòi triển khai cả một bản sao ứng dụng ở Region đó: máy chủ, dữ liệu, đồng bộ trạng thái. Rất nhiều công so với việc bật một accelerator.
-
B (tạo CloudFront distribution) — CloudFront chỉ phục vụ HTTP/HTTPS, không chuyển tiếp được SFTP.
-
C (tạo Auto Scaling group ở một Region châu Âu) — chỉ thêm máy, không có gì đưa lưu lượng tới đó; và cũng vướng đúng vấn đề nhân bản dữ liệu như phương án D.
Ghi nhớ
⚠ CloudFront ↔ Global Accelerator — bảng phải thuộc: | | CloudFront | Global Accelerator | |---|---|---| | Giao thức | CHỈ HTTP/HTTPS | MỌI TCP/UDP | | Cache | CÓ | KHÔNG | | IP tĩnh | không (dùng tên miền) | CÓ — 2 IP anycast | | Failover đa Region | qua origin group | nhanh, khoảng 30 giây | | Tính tiền | dữ liệu ra + request | phí cố định mỗi giờ + dữ liệu | | Dùng khi | web, ảnh, video, API HTTP | game, VoIP, IoT, SFTP, MQTT |
Từ khoá nhận diện:
"TCP/UDP không phải HTTP" → Global Accelerator "cần IP TĨNH" → Global Accelerator hoặc NLB "nội dung tĩnh, người dùng toàn cầu" → CloudFront "failover đa Region nhanh hơn DNS" → Global Accelerator "tải LÊN S3 chậm từ xa" → Transfer Acceleration
| Global Accelerator — cấu trúc | Thành phần |
|---|---|
| Accelerator | cấp 2 IP tĩnh anycast |
| Listener | cổng và giao thức (TCP/UDP) |
| Endpoint group | một nhóm cho mỗi Region, có traffic dial |
| Endpoint | NLB, ALB, EC2, Elastic IP — có weight |
| Health check | tự động, chuyển hướng khỏi endpoint hỏng |
| Lợi ích thêm | triển khai blue/green giữa các Region bằng traffic dial |
| Vì sao đi trên mạng AWS lại nhanh hơn | Nội dung |
|---|---|
| Ít chặng hơn | không qua nhiều nhà mạng trung gian |
| Ít mất gói | đường trục riêng, ổn định |
| TCP hoạt động tốt hơn | ít mất gói → cửa sổ TCP mở rộng được |
| Định tuyến ổn định | không phụ thuộc BGP của internet công cộng |
| Kết quả đo được | cải thiện rõ nhất với người dùng ở xa |
| Nếu muốn giải pháp SFTP được quản lý | Nội dung |
|---|---|
| AWS Transfer Family | SFTP, FTPS, FTP được quản lý |
| Lưu trữ | trực tiếp vào S3 hoặc EFS |
| Lợi ích | không phải quản máy chủ SFTP, tích hợp IAM |
| Kết hợp | đặt sau Global Accelerator cho người dùng toàn cầu |
| Đáng cân nhắc | khi đội đang tự vận hành SFTP trên EC2 |
| Khi nào nên thật sự triển khai đa Region | Nội dung |
|---|---|
| Global Accelerator không đủ | khi độ trễ vẫn quá cao cho tải nặng |
| Điều kiện | dữ liệu phải nhân bản được |
| Công cụ | S3 CRR, Aurora Global Database, DynamoDB global table |
| Chi phí | gần như gấp đôi hạ tầng |
| Thứ tự hợp lý | thử Global Accelerator trước — rẻ và nhanh hơn nhiều |
Ba việc kiểm chứng: | Việc | Cách | |---|---| | Có cải thiện thật không | đo độ trễ từ châu Âu trước và sau | | Endpoint có khoẻ không | Global Accelerator console → Endpoint health | | Lưu lượng đi đâu | flow log của accelerator |
Và một lựa chọn đáng đưa ra bàn cùng lúc: AWS Transfer Family thay cho việc tự chạy SFTP trên EC2. Nó là dịch vụ SFTP được quản lý, ghi thẳng vào S3, dùng IAM để phân quyền — nên ngoài việc giải quyết độ trễ bằng Global Accelerator, bạn còn bỏ được cả một đội máy chủ phải vá và phải theo dõi.
A SysOps administrator has launched a new web application and Amazon RDS database instance in private subnets within a VPC. The administrator updated the application with the connection information for the DB. After ensuring the application and DB are fully deployed, the administrator checked the web server logs and noticed that the connection to the database is repeatedly failing.
Which of the following may be causes of the connectivity problems? (Select TWO.)
-
A
The wrong DNS name or database endpoint was used to connect.
-
B
The database is still being created and is not available for connectivity.
-
C
The source used to connect is not authorized in the database security group egress rules.
-
D
The database instance does not have an Elastic IP address attached.
-
E
The source used to connect is not authorized in the database security group ingress rules.
Xem giải thích
Đáp án
A và E — Dùng SAI tên DNS hoặc sai endpoint của CSDL, VÀ nguồn kết nối chưa được cho phép trong luật INGRESS của security group của CSDL.
Vì sao đúng
Hai nguyên nhân này chiếm phần lớn các ca "ứng dụng không kết nối được RDS" trong thực tế.
⚠ Nguyên nhân thứ nhất — sai endpoint:
Endpoint RDS có dạng:
ten-db.abc123xyz.ap-southeast-1.rds.amazonaws.com
↓
Rất dài, dễ chép thiếu, dễ nhầm giữa
các môi trường
↓
Và với Aurora còn có NHIỀU endpoint:
cluster (writer), reader, instance
↓
→ dùng nhầm reader endpoint để GHI
→ lỗi read-only
→ dùng nhầm endpoint của môi trường khác
→ không kết nối được
⚠ Nguyên nhân thứ hai — security group chiều VÀO:
Security group của RDS
↓
Mặc định inbound: KHÔNG CHO GÌ
↓
Phải có luật:
Type: MySQL/Aurora (3306)
Source: sg-của-máy-ứng-dụng
↓
Thiếu luật này → kết nối TIMEOUT
↓
Thực hành tốt: nguồn là SECURITY GROUP
của ứng dụng, không phải một dải CIDR
→ máy mới tự động được phép
⚠ Vì sao chiều EGRESS không phải nguyên nhân:
Security group có TRẠNG THÁI (stateful)
↓
Kết nối vào đã được chấp nhận
→ phản hồi TỰ ĐỘNG được đi ra
↓
Và outbound của security group
MẶC ĐỊNH cho phép TẤT CẢ
↓
→ phương án C sai vì lý do này
Vì sao các phương án khác sai
-
C (nguồn chưa được cho phép trong luật EGRESS của security group của CSDL) — đây là phương án gần nhất và chỉ sai một từ: phải là INGRESS. Security group là stateful, và outbound mặc định đã mở hết.
-
B (CSDL vẫn đang được tạo nên chưa kết nối được) — đề nói rõ "sau khi bảo đảm ứng dụng và CSDL đã triển khai đầy đủ", nên tình huống này đã bị loại.
-
D (instance CSDL không có Elastic IP) — RDS trong private subnet KHÔNG cần và KHÔNG nên có IP công cộng. Ứng dụng cũng nằm trong VPC nên kết nối bằng IP riêng.
Ghi nhớ
⚠ Danh sách kiểm tra kết nối ứng dụng → RDS — bảng phải thuộc: | Bước | Kiểm tra | |---|---| | 1 | Endpoint có đúng không — chép nguyên văn từ console | | 2 | SG của RDS có luật inbound cho SG của ứng dụng ở cổng CSDL | | 3 | NACL của cả hai subnet — cả hai chiều, nhớ cổng tạm | | 4 | Route table — hai subnet có định tuyến tới nhau | | 5 | Cùng VPC không, hay cần peering / Transit Gateway | | 6 | Thông tin đăng nhập và tên database | | 7 | PubliclyAccessible — nếu gọi từ ngoài VPC |
Từ khoá nhận diện:
"kết nối CSDL thất bại" → security group inbound và endpoint, trước tiên "timeout" → SG, NACL, route table "connection refused" → tới được máy nhưng không ai nghe cổng đó "access denied for user" → mạng OK, sai thông tin đăng nhập "read-only" → đang gọi READER endpoint
| Ba loại lỗi kết nối CSDL — phân biệt | Nội dung |
|---|---|
| Timeout | mạng: SG, NACL, route table |
| Connection refused | dịch vụ không nghe, hoặc sai cổng |
| Access denied / authentication failed | mạng THÔNG, sai user hoặc mật khẩu |
Unknown database |
sai tên database trong chuỗi kết nối |
| Thực hành tốt cho security group của CSDL | Nội dung |
|---|---|
| Nguồn là SECURITY GROUP của ứng dụng | không dùng CIDR — máy mới tự được phép |
| Chỉ mở đúng cổng CSDL | 3306, 5432, 1433… |
| CSDL ở private subnet | PubliclyAccessible = false |
Không mở 0.0.0.0/0 |
không bao giờ, với bất kỳ cổng CSDL nào |
| Thêm | RDS Proxy để gộp kết nối và giấu mật khẩu |
| Endpoint của RDS và Aurora — đừng nhầm | Nội dung |
|---|---|
| RDS instance endpoint | ten.abc.region.rds.amazonaws.com |
| Aurora cluster (writer) | luôn trỏ node GHI |
| Aurora reader | cân bằng tải qua replica — CHỈ ĐỌC |
| Aurora custom | nhóm node theo cấu hình |
| RDS Proxy endpoint | ten-proxy.proxy-abc.region.rds.amazonaws.com |
| Lời khuyên | lưu endpoint trong Parameter Store, không ghi cứng |
| Công cụ chẩn đoán nhanh | Việc |
|---|---|
| VPC Reachability Analyzer | chỉ đúng thành phần đang chặn |
| VPC Flow Logs | bằng chứng gói tin, ACCEPT hay REJECT |
| Từ máy ứng dụng | nc -zv <endpoint> 3306 — kiểm tra tầng mạng riêng |
dig <endpoint> |
endpoint phân giải ra IP nào |
Ba việc kiểm chứng: | Việc | Cách | |---|---| | Endpoint đúng chưa | describe-db-instances --query '...Endpoint.Address' | | SG cho phép gì | describe-security-groups — đọc JSON, đừng nhìn console | | Mạng có thông không | nc -zv từ chính máy ứng dụng |
Và một cách tách bạch vấn đề rất nhanh khi gặp lỗi kết nối: chạy nc -zv <endpoint> 3306 từ máy ứng dụng trước khi động vào bất cứ thứ gì. Nếu lệnh đó thành công thì tầng mạng hoàn toàn ổn và bạn nên đi tìm ở phía chuỗi kết nối hoặc thông tin đăng nhập; nếu nó treo rồi timeout thì vấn đề nằm ở security group, NACL hoặc định tuyến — và bạn vừa loại được một nửa số nghi phạm trong vài giây.
A SysOps administrator reviewed the performance of an Amazon CloudFront distribution and noticed the cache hit ratio was less than 20% causing excessive origin requests. The administrator needs to implement configuration changes to increase the cache hit ratio.
Which combination of changes should the administrator implement? (Select TWO.)
-
A
Use the Cache-Control max-age directive to increase the time objects remain in the cache.
-
B
Restrict allowed HTTP methods to GET and HEAD to limit the methods forwarded to the origin.
-
C
Modify the cache behavior settings to ensure only required cookies, query strings, and headers are forwarded.
-
D
Decrease the origin response timeout to cause more objects to be returned from the cache.
-
E
Change the viewer protocol policy to redirect HTTP to HTTPS to increase security.
Xem giải thích
Đáp án
A và C — Dùng Cache-Control max-age để tăng thời gian đối tượng nằm trong cache, VÀ sửa cache behavior để chỉ chuyển tiếp những cookie, query string và header THẬT SỰ CẦN.
Vì sao đúng
Tỉ lệ cache hit dưới 20% gần như luôn có đúng hai nguyên nhân, và hai phương án đúng chữa đúng hai nguyên nhân đó.
⚠ Nguyên nhân thứ nhất — TTL quá ngắn:
Đối tượng hết hạn quá nhanh
↓
→ CloudFront phải hỏi lại origin liên tục
↓
Cách chữa:
origin gửi header
Cache-Control: max-age=86400
hoặc đặt Default TTL / Max TTL
trong cache policy
↓
→ đối tượng nằm lại edge lâu hơn
⚠ Nguyên nhân thứ hai — KHOÁ CACHE quá chi tiết (quan trọng hơn):
CloudFront tạo MỘT MỤC CACHE RIÊNG cho
mỗi tổ hợp khoá cache
↓
Khoá cache gồm: đường dẫn + những
header/cookie/query string được khai
↓
Chuyển tiếp TẤT CẢ cookie
↓
→ mỗi người dùng có cookie phiên khác nhau
→ MỖI NGƯỜI một mục cache riêng
→ tỉ lệ hit gần bằng 0
↓
Chuyển tiếp query string theo dõi quảng cáo
?utm_source=..., ?fbclid=...
↓
→ mỗi liên kết chia sẻ là một mục cache mới
↓
Cách chữa: CHỈ khai những thứ THẬT SỰ
làm thay đổi nội dung phản hồi
⚠ Phân biệt hai chính sách — điểm hay nhầm nhất:
CACHE POLICY
↓
Quyết định KHOÁ CACHE và TTL
→ ảnh hưởng TRỰC TIẾP tới tỉ lệ hit
ORIGIN REQUEST POLICY
↓
Quyết định thứ gì được CHUYỂN XUỐNG ORIGIN
→ KHÔNG nằm trong khoá cache
↓
→ cần một header ở origin (ví dụ User-Agent
để ghi log) nhưng KHÔNG muốn nó tạo
biến thể cache?
→ đưa vào ORIGIN REQUEST POLICY
Xem thêm câu #11876 (lô 128): cùng chủ đề CloudFront cache cho nội dung tĩnh.
Vì sao các phương án khác sai
-
B (giới hạn phương thức HTTP chỉ còn GET và HEAD) — đây là phương án gần nhất vì CloudFront chỉ cache GET và HEAD thật. Nhưng việc cho phép thêm POST/PUT không làm giảm tỉ lệ hit: các request đó vốn đã không được cache, và chúng cũng không tạo ra biến thể cache nào.
-
D (giảm origin response timeout để nhiều đối tượng được trả về từ cache hơn) — hiểu sai cơ chế: timeout quyết định CloudFront chờ origin bao lâu trước khi báo lỗi, không liên quan gì tới việc cache.
-
E (đổi viewer protocol policy sang redirect HTTP → HTTPS) — cải thiện bảo mật, hoàn toàn không ảnh hưởng tới tỉ lệ cache hit.
Ghi nhớ
⚠ Những gì làm giảm tỉ lệ cache hit — bảng phải thuộc: | Nguyên nhân | Cách chữa | |---|---| | Chuyển tiếp TẤT CẢ cookie | chỉ khai cookie thật sự cần | | Chuyển tiếp TẤT CẢ query string | chỉ khai tham số ảnh hưởng nội dung | | Chuyển tiếp nhiều header | bỏ User-Agent, Accept-Language nếu không cần | | TTL quá ngắn | tăng max-age, đặt Default TTL | | Origin gửi Cache-Control: no-cache | sửa ở origin | | Nội dung thật sự cá nhân hoá | không cache được — dùng Lambda@Edge hoặc tách đường dẫn |
Từ khoá nhận diện:
"cache hit thấp" → khoá cache quá chi tiết, và TTL quá ngắn "cần header ở origin nhưng không muốn biến thể cache" → origin request policy "nội dung mới không hiện ra" → invalidation, hoặc tên tệp có mã băm "phí origin cao" → tăng cache hit, và Origin Shield "nội dung động, không cache được" → TTL 0 nhưng vẫn hưởng đường trục AWS
| Cache policy — các thành phần | Nội dung |
|---|---|
| Minimum / Default / Maximum TTL | khoảng thời gian giữ |
| Headers included in cache key | None / Whitelist / All |
| Cookies | None / Whitelist / All |
| Query strings | None / Whitelist / All / All except |
| Nén | bật Gzip và Brotli |
| Chính sách có sẵn | CachingOptimized — nên dùng làm điểm bắt đầu |
| Thứ tự ưu tiên TTL | Nội dung |
|---|---|
Origin gửi Cache-Control: max-age |
CloudFront tôn trọng, trong khoảng Min-Max TTL |
| Origin không gửi gì | dùng Default TTL |
Cache-Control: no-store / private |
không cache |
| Ép ghi đè | đặt Minimum TTL > 0 |
| Chiến lược TTL theo loại nội dung | Nội dung |
|---|---|
Tệp có mã băm trong tên (app.a1b2c3.js) |
TTL RẤT DÀI — một năm |
| HTML | TTL ngắn hoặc 0 |
| Ảnh, video | TTL dài |
| API động | TTL 0, nhưng vẫn hưởng đường trục AWS |
| Kết quả | không cần invalidation, không tốn phí |
| Origin Shield — tăng hit thêm một tầng | Nội dung |
|---|---|
| Việc | thêm một lớp cache TRUNG TÂM giữa edge và origin |
| Lợi ích | giảm mạnh số request tới origin khi có nhiều edge |
| Đặt ở đâu | Region gần origin nhất |
| Chi phí | có phí request, nhưng thường rẻ hơn phí origin tiết kiệm được |
Ba việc kiểm chứng: | Việc | Cách | |---|---| | Tỉ lệ hit hiện tại | chỉ số CacheHitRate | | Vì sao miss | header X-Cache trong phản hồi, và x-edge-result-type trong access log | | Khoá cache đang gồm những gì | get-cache-policy |
Và một cách chẩn đoán rất nhanh khi tỉ lệ hit thấp: mở access log và nhóm theo URL đầy đủ kèm query string. Nếu bạn thấy cùng một tệp xuất hiện hàng trăm lần với các tham số theo dõi khác nhau, thủ phạm đã lộ diện — và cách sửa chỉ là loại những tham số đó khỏi khoá cache, không cần đụng tới bất kỳ thứ gì ở origin.
An application uses several AWS Lambda functions that each generate a large volume of log data each day in its own Amazon CloudWatch Logs log group. A SysOps administrator is troubleshooting application issues and needs to generate a count of application errors, grouped by type, across all the log groups.
What should the administrator do to meet this requirement?
-
A
Perform an Amazon RDS query that uses the SELECT and GROUP BY keywords.
-
B
Perform a CloudWatch Logs search that uses the groupby keyword and count function.
-
C
Perform a CloudWatch Logs Insights query that uses the stats command and count function.
-
D
Perform an Amazon Athena query that uses the SELECT and GROUP BY keywords.
Xem giải thích
Đáp án
C — Chạy truy vấn CLOUDWATCH LOGS INSIGHTS dùng lệnh stats và hàm count.
Vì sao đúng
Log đã nằm sẵn trong CloudWatch Logs, và Logs Insights là công cụ truy vấn dành riêng cho chúng — truy vấn được nhiều log group cùng lúc.
⚠ Điểm mấu chốt — Logs Insights có ngôn ngữ truy vấn riêng:
fields @timestamp, @message
| filter @message like /ERROR/
| parse @message "ERROR: * -" as loaiLoi
| stats count(*) as soLuong by loaiLoi
| sort soLuong desc
↓
stats ... by ... → NHÓM và ĐẾM
↓
Chọn NHIỀU log group cùng lúc
→ đúng yêu cầu "across all the log groups"
⚠ Vì sao nó hợp với Lambda:
Mỗi hàm Lambda ghi vào log group riêng
/aws/lambda/<ten-ham>
↓
Logs Insights chọn được nhiều log group
bằng mẫu tên
↓
→ một truy vấn duy nhất bao quát
toàn bộ ứng dụng
↓
Và có sẵn các trường đặc thù của Lambda:
@requestId, @duration, @billedDuration,
@maxMemoryUsed, @initDuration
⚠ Các lệnh Logs Insights cần thuộc:
fields → chọn trường hiển thị
filter → lọc theo điều kiện
parse → TÁCH trường từ văn bản log
stats → NHÓM và tính toán
sort → sắp xếp
limit → giới hạn số dòng
↓
Hàm hay dùng:
count(), sum(), avg(), min(), max(),
percentile(), count_distinct()
Vì sao các phương án khác sai
-
B (tìm kiếm CloudWatch Logs dùng từ khoá
groupbyvà hàmcount) — đây là phương án gần nhất và rất dễ nhầm, nhưng tính năng tìm kiếm cơ bản của CloudWatch Logs chỉ khớp chuỗi, không cógroupbyvà không tổng hợp được. Từ khoá đúng làstats ... by ...trong Logs Insights. -
D (truy vấn Athena với
SELECTvàGROUP BY) — Athena truy vấn dữ liệu trên S3. Muốn dùng thì phải xuất log từ CloudWatch sang S3 trước — thêm một bước không cần thiết khi Logs Insights làm được ngay. -
A (truy vấn Amazon RDS) — log không nằm trong CSDL quan hệ nào.
Ghi nhớ
⚠ Công cụ truy vấn log — bảng phải thuộc: | Công cụ | Dữ liệu ở đâu | Dùng khi | |---|---|---| | CloudWatch Logs Insights | CloudWatch Logs | truy vấn nhanh, nhiều log group | | Athena | S3 | khối lượng RẤT lớn, log lịch sử, SQL | | OpenSearch | cụm OpenSearch | tìm kiếm toàn văn, dashboard phong phú | | Metric filter | CloudWatch Logs | biến mẫu log thành CHỈ SỐ để đặt alarm | | CloudWatch Logs search | CloudWatch Logs | chỉ khớp chuỗi, không tổng hợp |
Từ khoá nhận diện:
"đếm và nhóm log" → Logs Insights với
stats ... by ..."log đã ở S3" → Athena "cảnh báo khi số lỗi vượt ngưỡng" → metric filter + alarm "tìm kiếm toàn văn, dashboard" → OpenSearch "log của nhiều tài khoản" → cross-account observability, hoặc gom về một nơi
| Cú pháp Logs Insights — mẫu hay dùng | Nội dung |
|---|---|
| Đếm lỗi theo loại | filter @message like /ERROR/ | stats count(*) by loaiLoi |
| Top request chậm nhất | stats max(@duration) by @requestId | sort @duration desc |
| Phân vị độ trễ | stats percentile(@duration, 99) by bin(5m) |
| Theo thời gian | stats count(*) by bin(1h) |
| Tách trường | parse @message "user=* action=*" as nguoiDung, hanhDong |
| Log dạng JSON | truy cập thẳng: filter level = "ERROR" |
| Trường đặc thù của Lambda trong Logs Insights | Nội dung |
|---|---|
@duration |
thời gian chạy |
@billedDuration |
thời gian bị tính tiền |
@maxMemoryUsed |
bộ nhớ đã dùng — để right-sizing |
@initDuration |
thời gian cold start |
@requestId |
nối các dòng của cùng một lần gọi |
@type |
START, END, REPORT |
| Ghi log có cấu trúc — nên làm | Nội dung |
|---|---|
| Ghi log dạng JSON | Logs Insights tự phân tích được các trường |
| Lợi ích | không phải parse bằng biểu thức |
| Nên có trường | level, requestId, errorType, userId |
| Với Lambda | dùng Lambda Powertools cho log có cấu trúc |
| Chi phí và giới hạn | Nội dung |
|---|---|
| Truy vấn | tính theo lượng dữ liệu QUÉT |
| Cách giảm | thu hẹp khoảng thời gian, lọc sớm bằng filter |
| Giới hạn | tối đa 50 log group mỗi truy vấn (nay đã nâng), kết quả tối đa 10.000 dòng |
| Lưu truy vấn | lưu lại các truy vấn hay dùng cho đội trực |
Ba việc kiểm chứng: | Việc | Cách | |---|---| | Truy vấn có đúng không | thử trên khoảng thời gian ngắn trước | | Có bỏ sót log group nào không | chọn theo mẫu tên, ví dụ /aws/lambda/ | | Có nên chuyển sang Athena không | nếu quét quá nhiều dữ liệu mỗi lần |
Và một thay đổi nhỏ ở phía ứng dụng làm mọi truy vấn về sau dễ hơn rất nhiều: ghi log dưới dạng JSON có cấu trúc. Khi ấy Logs Insights tự nhận ra từng trường và bạn viết được stats count(*) by errorType ngay lập tức — thay vì phải vật lộn với một biểu thức parse mỗi lần định dạng thông báo lỗi thay đổi một chút.
A multinational business maintains its digital platform in the AWS Region us-east-1. The business plans to establish a new deployment of its platform in the AWS Region eu-central-1. It's crucial that European users are directed to the platform hosted in eu-central-1, while users from other regions should interact with the platform in us-east-1. The business leverages Amazon Route 53 for DNS records management of its digital platform.
To accomplish this, what sort of routing policy should a SysOps administrator set up in the Route 53 record set?
-
A
Latency routing policy
-
B
Geolocation routing policy
-
C
Geoproximity routing policy
-
D
Multivalue answer routing policy
Xem giải thích
Đáp án
B — Chính sách định tuyến theo VỊ TRÍ ĐỊA LÝ (geolocation routing policy).
Vì sao đúng
Đề mô tả một yêu cầu theo vùng địa lý cụ thể: người dùng châu Âu đi tới eu-central-1, mọi người còn lại đi tới us-east-1.
⚠ Điểm mấu chốt — geolocation định tuyến theo VỊ TRÍ, không theo tốc độ:
Route 53 xem vị trí của người truy vấn DNS
↓
Khớp theo: CHÂU LỤC / QUỐC GIA / BANG (chỉ Hoa Kỳ)
↓
Cấu hình cho đề này:
Continent = Europe → eu-central-1
Default → us-east-1
↓
→ đúng hai quy tắc đề mô tả
→ "mọi người còn lại" chính là bản ghi DEFAULT
⚠ Bản ghi Default là bắt buộc phải có:
Không khai Default
↓
Người dùng ở vùng chưa được khai
→ Route 53 KHÔNG TRẢ LỜI
→ client nhận NXDOMAIN
↓
Và một số resolver không xác định
được vị trí → cũng rơi vào Default
↓
→ thiếu Default là mất luôn
những người dùng ngoài châu Âu
⚠ Vì sao KHÔNG chọn latency-based ở đây:
Latency-based routing
↓
Chọn Region có ĐỘ TRỄ THẤP NHẤT đo được
↓
→ tối ưu HIỆU NĂNG
→ nhưng KHÔNG bảo đảm người châu Âu
luôn về eu-central-1
↓
Đề nói "crucial that European users are
directed to eu-central-1"
↓
→ đây là yêu cầu VỊ TRÍ, mang tính
quy định/kinh doanh
→ geolocation mới bảo đảm được
Xem thêm câu #11855 (lô 128): cũng chọn geolocation routing, ở đó kết hợp thêm DNS failover với health check gắn vào alarm của ALB. Khoá nhất quán.
Vì sao các phương án khác sai
-
C (geoproximity routing policy) — đây là phương án gần nhất và cũng dựa trên địa lý, nhưng nó định tuyến theo KHOẢNG CÁCH tới tài nguyên, có thêm bias để kéo giãn hoặc thu hẹp vùng phục vụ. Nó không khai được theo châu lục hay quốc gia, nên không diễn đạt được ràng buộc "người châu Âu" một cách rõ ràng. (Và nó đòi bật Route 53 Traffic Flow.)
-
A (latency routing policy) — tối ưu độ trễ, không bảo đảm ràng buộc theo vùng.
-
D (multivalue answer routing policy) — trả về nhiều bản ghi khoẻ mạnh một cách ngẫu nhiên, hoàn toàn không xét vị trí.
Ghi nhớ
⚠ Bảy kiểu định tuyến 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 — tối ưu hiệu năng | | Geolocation | theo VỊ TRÍ người dùng — tuân thủ, nội dung theo vùng | | Geoproximity | theo KHOẢNG CÁCH, có bias | | Failover | chính / dự phòng (active-passive) | | Multivalue answer | trả nhiều IP khoẻ mạnh |
Từ khoá nhận diện:
"người dùng ở CHÂU ÂU phải về Region châu Âu" → geolocation "độ trễ thấp nhất", "hiệu năng tốt nhất" → latency-based "dữ liệu phải ở lại trong nước" → geolocation, BẮT BUỘC "kéo giãn vùng phục vụ của một Region" → geoproximity với bias "chia 10% sang phiên bản mới" → weighted
| Geolocation ↔ Geoproximity — khác nhau ở đâu | Nội dung |
|---|---|
| Geolocation | khai theo châu lục / quốc gia / bang |
| Geoproximity | khai theo vị trí tài nguyên + bias |
| Geolocation dùng khi | ràng buộc pháp lý, nội dung theo vùng |
| Geoproximity dùng khi | muốn điều chỉnh mềm vùng phục vụ |
| Điều kiện | geoproximity cần Traffic Flow |
| Cả hai | nên có bản ghi Default / vùng bao phủ toàn cầu |
| Kết hợp nhiều kiểu định tuyến | Cách |
|---|---|
| Bản ghi alias lồng nhau | geolocation ở tầng ngoài, failover ở tầng trong |
| Kết quả | người châu Âu về eu-central-1, nhưng nếu Region đó hỏng thì tự sang us-east-1 |
| Công cụ | Traffic Flow vẽ được cây định tuyến trực quan |
| Health check | gắn vào từng bản ghi |
| Health check của Route 53 — ba loại | Nội dung |
|---|---|
| Endpoint | gọi HTTP/HTTPS/TCP tới địa chỉ CÔNG KHAI |
| CloudWatch alarm | dùng được cho endpoint riêng tư và chỉ số phức tạp |
| Calculated | gộp nhiều health check bằng AND/OR |
| Tần suất | 30 giây, hoặc 10 giây (fast) |
| Nguồn | nhiều Region cùng kiểm tra — tránh báo động giả |
| Kiến trúc đa Region đầy đủ | Thành phần |
|---|---|
| DNS | geolocation + 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 |
| Thay thế DNS | Global Accelerator khi cần failover nhanh hơn |
Ba việc kiểm chứng: | Việc | Cách | |---|---| | Người dùng vùng X nhận gì | test-dns-answer với --resolver-ip của vùng đó | | Có bản ghi Default không | list-resource-record-sets — tìm GeoLocation: {CountryCode: "*"} | | Failover có chạy không | tắt tạm target ở một Region, xem DNS đổi |
Và một cấu hình rất dễ quên khi dùng geolocation: luôn tạo bản ghi Default. Route 53 chỉ trả lời cho những vị trí khớp một quy tắc cụ thể — 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 NXDOMAIN thay vì được đưa về Region mặc định. Đâ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.
An eCommerce company run a website that is hosted on burstable performance Amazon EC2 instances in an Auto Scaling group. The website occasionally experiences sustained spikes in sales for a few hours when email promotions are sent out. Users have reported poor performance a couple of hours into these events. A SysOps administrator noticed that the CPU utilization is <30% across the fleet and the ASG did not scale as it is configured to scale when CPU utilization is >60%.
How can the SysOps administrator resolve the performance issues?
-
A
Configure unlimited mode for the EC2 instances.
-
B
Create an Amazon CloudFront distribution for the Auto Scaling group.
-
C
Add an Elastic Load Balancer and enable ELB health checks.
-
D
Modify the Auto Scaling group to use EBS-optimized EC2 instances.
Xem giải thích
Đáp án
A — Cấu hình chế độ UNLIMITED cho các instance.
Vì sao đúng
Đề có một triệu chứng rất đặc trưng, và nó chỉ có một lời giải thích: CPU thấp (<30%) mà hiệu năng vẫn kém, và Auto Scaling không kích hoạt.
⚠ Điểm mấu chốt — instance burstable chạy bằng CPU CREDIT:
Họ T (t2, t3, t3a, t4g) là BURSTABLE
↓
Mỗi instance có một mức CPU CƠ SỞ
(ví dụ t3.medium: 20% mỗi vCPU)
↓
Chạy DƯỚI mức cơ sở → TÍCH LUỸ credit
Chạy TRÊN mức cơ sở → TIÊU credit
↓
HẾT CREDIT (chế độ standard)
↓
→ CPU bị GIỚI HẠN CỨNG về mức cơ sở
→ máy chậm hẳn
→ nhưng CloudWatch báo CPU ~20-30%
vì đó là TRẦN mới, không phải mức nhàn rỗi
↓
→ ASG không thấy CPU > 60% → KHÔNG co giãn
→ đúng y hệt mô tả của đề
⚠ Vì sao triệu chứng xuất hiện "vài giờ sau khi bắt đầu":
Khuyến mãi gửi đi → tải tăng
↓
Vài giờ đầu: còn credit tích luỹ
→ máy chạy nhanh, mọi thứ bình thường
↓
Credit cạn dần rồi HẾT
↓
→ đúng lúc "a couple of hours into these events"
→ người dùng bắt đầu báo chậm
↓
Đây là dấu vân tay của bài toán CPU credit
⚠ Chế độ Unlimited giải quyết thế nào:
Unlimited mode
↓
Khi hết credit, instance VẪN chạy trên
mức cơ sở
↓
Phần vượt được tính thành SURPLUS CREDIT
↓
- Bù lại bằng credit tích luỹ trong 24 giờ tới,
hoặc
- Bị TÍNH THÊM TIỀN theo giờ vCPU
↓
→ không bao giờ bị bóp CPU nữa
→ mặc định đã BẬT với t3/t3a/t4g,
nhưng t2 thì mặc định là standard
Vì sao các phương án khác sai
-
B (tạo CloudFront distribution cho Auto Scaling group) — đây là phương án gần nhất và giảm tải thật nếu có nhiều nội dung tĩnh, nhưng nó không chạm tới nguyên nhân gốc: máy vẫn bị bóp CPU khi hết credit, và mọi request động vẫn chậm.
-
C (thêm ELB và bật health check của ELB) — đề đã có Auto Scaling group; health check không liên quan tới hiệu năng CPU.
-
D (dùng instance tối ưu cho EBS) — EBS-optimized cải thiện I/O của đĩa, không liên quan tới CPU credit. Và hầu hết loại máy hiện nay đã EBS-optimized mặc định.
Ghi nhớ
⚠ Instance burstable — bảng phải thuộc: | Đặc điểm | Nội dung | |---|---| | Họ máy | t2, t3, t3a, t4g | | Cơ chế | CPU credit — chạy dưới mức cơ sở thì tích, trên thì tiêu | | Standard mode | hết credit → BỊ BÓP về mức cơ sở | | Unlimited mode | vẫn chạy nhanh, tính thêm tiền nếu cần | | Mặc định | t2: standard; t3/t3a/t4g: unlimited | | Chỉ số cần theo dõi | CPUCreditBalance, CPUSurplusCreditBalance |
Từ khoá nhận diện:
"CPU thấp mà vẫn chậm, ASG không co giãn" → CẠN CPU CREDIT "chậm sau vài giờ tải cao" → credit cạn dần "instance họ T" → luôn nghĩ tới CPU credit "tải ổn định và cao" → chuyển sang họ M hoặc C "cần biết trước khi hết credit" → alarm trên
CPUCreditBalance
| Chỉ số CPU credit — phải thuộc | Ý nghĩa |
|---|---|
CPUCreditBalance |
credit còn lại — về 0 là bị bóp |
CPUCreditUsage |
credit đã tiêu trong chu kỳ |
CPUSurplusCreditBalance |
credit vay ở chế độ unlimited |
CPUSurplusCreditsCharged |
phần bị TÍNH TIỀN |
| Alarm nên có | CPUCreditBalance < một ngưỡng an toàn |
| Standard ↔ Unlimited | Khác nhau |
|---|---|
| Hết credit | bị bóp về mức cơ sở ↔ vẫn chạy bình thường |
| Chi phí | cố định, đoán trước được ↔ có thể phát sinh thêm |
| Dùng khi | tải thật sự nhẹ và đều |
| Đổi được | bật/tắt trên instance đang chạy |
| Khi nào KHÔNG nên dùng họ T | Nội dung |
|---|---|
| Tải cao và ổn định | chi phí unlimited có thể vượt họ M |
| Ứng dụng nhạy độ trễ | bị bóp CPU là thảm hoạ |
| CSDL production | dùng họ M hoặc R |
| Nên dùng T khi | dev/test, tải rất nhẹ, web lưu lượng thấp |
| So sánh | Compute Optimizer gợi ý loại phù hợp |
| Vì sao Auto Scaling không kích hoạt | Nội dung |
|---|---|
| CPU bị bóp | không bao giờ vượt ngưỡng 60% |
| Cách chữa gốc | unlimited mode, hoặc đổi họ máy |
| Cách chữa bổ sung | co giãn theo ALBRequestCountPerTarget thay vì theo CPU |
| Hoặc | TargetResponseTime làm chỉ số tuỳ chỉnh |
Ba việc kiểm chứng: | Việc | Cách | |---|---| | Có bị cạn credit không | vẽ CPUCreditBalance trong khung giờ sự cố | | Đang ở chế độ nào | describe-instance-credit-specifications | | Có bị tính thêm tiền không | CPUSurplusCreditsCharged, và Cost Explorer |
Và một bài học rút ra từ chính triệu chứng của đề: chỉ số CPU thấp không có nghĩa là máy đang nhàn rỗi. Với instance burstable, con số 25% có thể là trần cứng mà máy không được phép vượt qua — và mọi chính sách co giãn dựa trên CPU sẽ mù hoàn toàn trước tình trạng đó. Đây cũng là lý do nhiều đội chọn ALBRequestCountPerTarget làm chỉ số co giãn: nó phản ánh tải thật, không phụ thuộc vào việc CPU có đang bị bóp hay không.