Ngân hàng đề — AWS Certified Solutions Architect Professional
Tìm thấy 1221 câu.
An application is being tested for deployment in a Development account. The application consists of an Amazon API Gateway, Amazon EC2 instances behind an Elastic Load Balancer and an Amazon DynamoDB table. The Developers wish to grant a testing team access to deploy the application several times for performing a variety of acceptance tests but don’t want to grant broad permissions to each user. The Developers currently deploy the application using an AWS CloudFormation template and a role that has permission to the APIs for the included services.
How can a Solutions Architect meet the requirements for granting restricted access to the testing team so they can run their tests?
-
A
Upload the AWS CloudFormation template to Amazon S3. Give users in the testing team permission to use CloudFormation and S3 APIs with conditions that restrict the permissions to the template and the resources it creates. Train users to launch the template from the CloudFormation console.
-
B
Create an AWS Service Catalog product from the environment template and add a stack set constraint to the product with the existing role. Give users in the testing team permission to use AWS Service Catalog APIs only. Train users to launch the template from the AWS Service Catalog console.
-
C
Upload the AWS CloudFormation template to Amazon S3. Give users in the testing team permission to assume the Developer's role and add a policy that restricts the permissions to the template and the resources it creates. Train users to launch the template from the CloudFormation console.
-
D
Create an AWS Service Catalog product from the environment template and add a launch constraint to the product with the existing role. Give users in the testing team permission to use AWS Service Catalog APIs only. Train users to launch the template from the AWS Service Catalog console.
Xem giải thích
Đáp án
D — Tạo Service Catalog product từ template môi trường và thêm launch constraint dùng chính role đã có; cấp cho đội kiểm thử quyền dùng API của Service Catalog; hướng dẫn họ khởi chạy từ console Service Catalog.
Vì sao đúng
Đề đòi cho đội kiểm thử dựng được môi trường nhiều lần mà không cấp quyền rộng cho từng người. Launch constraint là cơ chế dựng riêng cho việc đó.
| Yêu cầu | Cách đáp ứng |
|---|---|
| Đội kiểm thử tự dựng môi trường | Service Catalog product |
| Không cấp quyền rộng cho họ | launch constraint — họ mượn quyền của role |
| Dùng lại role đã có | launch constraint trỏ tới chính role đó |
⚠ Điểm mấu chốt: launch constraint cho phép người dùng KHÔNG có quyền vẫn dựng được tài nguyên:
Người dùng chỉ có quyền gọi API Service Catalog
↓
Bấm "Launch" trên product
↓
Service Catalog KHÔNG dùng quyền của người dùng
↓
Nó assume vào IAM role khai trong launch constraint
↓
CloudFormation dựng API Gateway, EC2, ELB, DynamoDB bằng quyền của ROLE
↓
→ người dùng không bao giờ cần quyền tạo các tài nguyên đó
Đây chính là điều đề mô tả: "don't want to grant broad permissions to each user".
aws servicecatalog create-constraint \
--portfolio-id port-abc --product-id prod-xyz --type LAUNCH \
--parameters '{"RoleArn":"arn:aws:iam::111122223333:role/DeveloperDeployRole"}'
⚠ Không có launch constraint thì Service Catalog dùng quyền của chính người dùng — và mô hình sụp đổ:
Product không gắn launch constraint
↓
Người dùng phải có đủ quyền tạo MỌI tài nguyên trong template
↓
→ nghĩa là họ cũng tạo được chúng trực tiếp, ngoài mọi khuôn khổ
→ Service Catalog trở thành một lớp trang trí
Vì sao các phương án khác sai
-
B (Service Catalog product — đúng; nhưng thêm STACK SET constraint với role đã có) — đây là phương án gần nhất và nó chỉ khác đáp án đúng một loại constraint. Nhưng stack set constraint dùng để khai product sẽ được triển khai ra những tài khoản và Region nào khi dùng với CloudFormation StackSets — nó không phải cơ chế uỷ quyền. Loại constraint cho phép người dùng mượn quyền của role là launch constraint. Đây là bẫy kiểm tra xem có nhớ chính xác bốn loại constraint hay không.
-
A (tải template lên S3, cấp quyền dùng CloudFormation và S3 với điều kiện giới hạn, hướng dẫn khởi chạy từ console CloudFormation) — không giải quyết vấn đề gốc. CloudFormation dựng tài nguyên bằng quyền của người gọi (trừ khi khai service role), nên người dùng vẫn cần quyền tạo EC2, ELB, DynamoDB, API Gateway — đúng thứ đề muốn tránh. Điều kiện giới hạn theo template cũng rất khó viết chính xác.
-
C (tải template lên S3, cho đội kiểm thử assume role của Developer, thêm policy giới hạn) — cho họ assume một role có quyền rộng, rồi cố thu hẹp bằng policy bổ sung. Cách này mong manh và khó kiểm soát; nó cũng cho họ toàn bộ quyền của role đó cho mọi mục đích khác, không chỉ để dựng môi trường kiểm thử.
Ghi nhớ
⚠ Bốn loại constraint của Service Catalog — bảng phải thuộc: | Loại | Việc | |---|---| | Launch | chỉ định IAM role mà Service Catalog assume để dựng tài nguyên | | Template | giới hạn giá trị tham số người dùng nhập được | | Notification | gửi thông báo SNS khi có sự kiện stack | | Stack set | khai tài khoản và Region đích khi triển khai bằng StackSets |
Từ khoá nhận diện:
"không cấp quyền rộng cho người dùng" + họ vẫn dựng được → launch constraint "pre-approved templates" → Service Catalog "stack set constraint" để uỷ quyền → SAI loại constraint "cho người dùng chạy CloudFormation trực tiếp" → họ phải có đủ quyền tạo tài nguyên "assume role của developer" → cấp quá rộng, khó thu hẹp
| Hai policy quản lý sẵn cho người dùng cuối | Cho phép |
|---|---|
AWSServiceCatalogEndUserReadOnlyAccess |
xem và launch |
AWSServiceCatalogEndUserFullAccess |
thêm cập nhật và chấm dứt |
| Nguyên tắc | chọn bản hẹp hơn nếu đủ việc |
| Thành phần Service Catalog | Nghĩa |
|---|---|
| Product | một CloudFormation template, có phiên bản |
| Portfolio | tập product cộng quyền và constraint |
| Provisioned product | một lần dựng thật |
| TagOptions | tự gắn tag cho mọi tài nguyên do product dựng |
| Điều kiện để launch constraint hoạt động | Nội dung |
|---|---|
| Role có đủ quyền tạo mọi tài nguyên trong template | bắt buộc |
Trust policy của role cho servicecatalog.amazonaws.com assume |
bắt buộc |
Người dùng có quyền servicecatalog:ProvisionProduct |
bắt buộc |
Ba việc kiểm chứng: | Việc | Cách | |---|---| | Launch constraint có hoạt động không | đăng nhập bằng chính người dùng cuối và bấm launch | | Role có đủ quyền không | đọc sự kiện stack thất bại trong CloudFormation | | Người dùng có dựng được ngoài danh mục không | thử tạo tài nguyên trực tiếp — phải bị từ chối |
Và một lời khuyên: hãy thử launch bằng chính danh tính của một thành viên đội kiểm thử, không thử bằng tài khoản quản trị. Đây là chỗ cấu hình Service Catalog hay hỏng mà không lộ ra trong lúc dựng: quản trị viên tạo product, bấm launch thử và thấy chạy hoàn hảo — nhưng nó chạy bằng quyền quản trị của chính họ, không đi qua launch constraint chút nào. Trust policy thiếu servicecatalog.amazonaws.com, hoặc role thiếu một quyền cụ thể, đều không lộ ra ở phép thử đó. Chúng chỉ lộ ra vào ngày người kiểm thử thật bấm nút và nhận về một stack thất bại giữa chừng.
An eCommerce company runs an application that records product registration information. The application uses an Amazon S3 bucket for storing files and an Amazon DynamoDB table to store customer record data. The application software runs in us-west-1 and eu-central-1. The S3 bucket and DynamoDB table are in us-west-1. A Solutions Architect has been asked to implement protection from data corruption and the loss of connectivity to either Region.
Which solution meets these requirements?
-
A
Create a DynamoDB global table to replicate data between us-west-1 and eu-central-1. Enable continuous backup on the DynamoDB table in us-west-1 . Set up S3 cross-region replication from us-west-1 to eu-central-1.
-
B
Create an AWS Lambda function triggered by Amazon CloudWatch Events to make regular backups of the DynamoDB table. Set up S3 cross-region replication from us-west-1 to eu-central-1. Set up MFA delete on the S3 bucket in us-west-1.
-
C
Create a DynamoDB global table to replicate data between us-west-1 and eu-central-1. Enable continuous backup on the DynamoDB table in us-west-1 . Enable versioning on the S3 bucket.
-
D
Create a DynamoDB global table to replicate data between us-west-1 and eu-central-1. Enable versioning on the S3 bucket. Implement strict ACLs on the S3 bucket.
Xem giải thích
Đáp án
A — Tạo DynamoDB global table sao chép giữa us-west-1 và eu-central-1; bật continuous backup cho bảng ở us-west-1; thiết lập S3 cross-Region replication từ us-west-1 sang eu-central-1.
Vì sao đúng
Đề đòi bảo vệ trước hai mối đe doạ khác nhau, và điều đó cần hai cơ chế khác nhau cho mỗi kho dữ liệu.
| Mối đe doạ | Cách bảo vệ |
|---|---|
| Mất kết nối tới một Region | global table + S3 CRR — dữ liệu có ở cả hai nơi |
| Hỏng dữ liệu (data corruption) | continuous backup — quay ngược về thời điểm trước khi hỏng |
⚠ Điểm mấu chốt: sao chép KHÔNG bảo vệ khỏi hỏng dữ liệu — nó nhân bản luôn cả cái hỏng:
Một lỗi ứng dụng ghi đè dữ liệu sai
↓
Global table sao chép thay đổi đó sang Region kia trong vòng một giây
↓
→ cả hai Region đều hỏng như nhau
↓
Continuous backup (point-in-time recovery)
↓
Cho phép khôi phục về BẤT KỲ giây nào trong 35 ngày qua
↓
→ đây mới là thứ chống hỏng dữ liệu
Đây là lý do phương án A đúng còn C và D thiếu: chúng có sao chép nhưng thiếu hoặc yếu ở vế khôi phục thời điểm.
aws dynamodb update-continuous-backups --table-name khach-hang \
--point-in-time-recovery-specification PointInTimeRecoveryEnabled=true
aws dynamodb restore-table-to-point-in-time \
--source-table-name khach-hang --target-table-name khach-hang-khoi-phuc \
--restore-date-time 2026-09-02T08:30:00Z
⚠ Với S3, cơ chế chống hỏng dữ liệu là VERSIONING — và CRR đòi versioning bật sẵn:
S3 Cross-Region Replication yêu cầu versioning ở cả hai bucket
↓
Nên khi bật CRR, bạn tự động có luôn versioning
↓
→ versioning cho phép quay về phiên bản trước của một object bị ghi đè
→ đó là lý do phương án A không cần nhắc versioning riêng: CRR đã kéo theo
Vì sao các phương án khác sai
-
C (global table; continuous backup cho DynamoDB; bật versioning cho bucket S3) — đây là phương án gần nhất và vế DynamoDB của nó chính xác bằng đáp án đúng. Nhưng nó thiếu S3 cross-Region replication: versioning chống được hỏng dữ liệu nhưng không bảo vệ trước việc mất kết nối tới Region — nếu us-west-1 không truy cập được, tệp vẫn chỉ nằm ở đó. Đề đòi bảo vệ trước cả hai mối đe doạ, cho cả hai kho dữ liệu.
-
D (global table; bật versioning cho S3; áp ACL nghiêm ngặt cho bucket) — thiếu continuous backup cho DynamoDB (không chống được hỏng dữ liệu ở tầng bảng) và thiếu CRR cho S3. ACL nghiêm ngặt là kiểm soát truy cập, không liên quan tới bảo vệ dữ liệu trước hỏng hóc hay mất Region.
-
B (Lambda theo lịch sao lưu DynamoDB; S3 CRR; bật MFA delete cho bucket) — sao lưu theo lịch cho RPO bằng chu kỳ sao lưu, kém hơn hẳn continuous backup vốn cho phép quay về từng giây. Nó cũng thiếu global table nên DynamoDB không sẵn sàng ở Region thứ hai. MFA delete chống xoá nhầm nhưng không chống ghi đè sai.
Ghi nhớ
⚠ Hai mối đe doạ khác nhau, hai nhóm giải pháp — bảng phải thuộc: | Mối đe doạ | DynamoDB | S3 | |---|---|---| | Mất Region | global table | cross-Region replication | | Hỏng dữ liệu | point-in-time recovery | versioning | | Xoá nhầm | PITR | versioning + MFA delete |
Từ khoá nhận diện:
"data corruption" → PITR cho DynamoDB, versioning cho S3 "loss of connectivity to a Region" → global table, CRR "sao chép" như biện pháp chống hỏng dữ liệu → SAI, sao chép nhân bản luôn cái hỏng "backup theo lịch" khi có PITR → RPO kém hơn nhiều cần cả hai → phương án phải có đủ bốn mảnh cho hai kho
| DynamoDB point-in-time recovery | Chi tiết |
|---|---|
| Cửa sổ | 35 ngày |
| Độ chính xác | tới từng giây |
| Khôi phục | tạo ra một bảng mới, không ghi đè bảng cũ |
| Chi phí | theo dung lượng bảng |
| S3 versioning | Chi tiết |
|---|---|
| Ghi đè | tạo phiên bản mới, giữ bản cũ |
| Xoá | tạo delete marker, bản cũ vẫn còn |
| Điều kiện của CRR | versioning phải bật ở cả nguồn và đích |
| Chi phí | trả tiền cho mọi phiên bản — nhớ đặt lifecycle dọn bản cũ |
| Global table — điều cần nhớ | Nội dung |
|---|---|
| Mô hình | multi-active, ghi ở mọi Region |
| Giải quyết xung đột | last writer wins |
| Điều kiện | Streams bật với NEW_AND_OLD_IMAGES |
Ba việc kiểm chứng: | Việc | Cách | |---|---| | PITR đã bật chưa | describe-continuous-backups | | CRR có chạy không | ReplicationLatency và OperationsPendingReplication | | Khôi phục có hoạt động không | thử khôi phục về một thời điểm trong môi trường thử |
Và một lời khuyên: hãy thử khôi phục về một thời điểm ít nhất một lần, đừng chỉ bật PITR rồi coi như xong. Point-in-time recovery tạo ra một bảng mới chứ không ghi đè bảng đang chạy — nghĩa là quy trình khôi phục thật sự gồm cả việc chuyển ứng dụng sang bảng mới, hoặc chép dữ liệu ngược lại, và cả hai đều cần thời gian cùng kế hoạch. Phát hiện điều đó trong một lần diễn tập tốn nửa giờ; phát hiện nó giữa một sự cố hỏng dữ liệu, khi đồng hồ đang chạy và mọi người đang chờ, thì tốn hơn nhiều.
A company is migrating an application into AWS. The application code has already been installed and tested on Amazon EC2. The database layer consists of a 25 TB MySQL database in the on-premises data center. There is a 50 Mbps internet connection and an IPSec VPN connection to the Amazon VPC. The company plans to go live on AWS within 2 weeks.
Which combination of actions will meets the migration schedule with the LEAST downtime? (Select THREE.)
-
A
Launch an AWS DMS instance and configure it with the on-premises and Aurora DB instance information. Replicate using AWS DMS over the VPN connection.
-
B
Export the data from the database using database-native tools and import the data to AWS using AWS Snowball.
-
C
Launch an Amazon RDS Aurora MySQL DB instance and use AWS DMS to migrate the on-premises database.
-
D
When the RDS Aurora MySQL database is fully synchronized, change the DNS entry to point to the Aurora DB instance and stop replication.
-
E
Launch an RDS Aurora MySQL DB instance and load the database data from the Snowball export. Configure replication from the on-premises database to the RDS Aurora instance using the VPN.
-
F
Use AWS SMS to import the on-premises database into AWS and then use AWS DMS to synchronize the database with an Amazon Aurora MySQL DB instance.
Xem giải thích
Đáp án
B, E, D — ba bước chuyển 25 TB MySQL trong hai tuần với downtime ít nhất:
- B — Xuất dữ liệu bằng công cụ gốc của cơ sở dữ liệu và đưa lên AWS bằng AWS Snowball.
- E — Dựng Aurora MySQL và nạp dữ liệu từ bản xuất Snowball; cấu hình sao chép từ cơ sở dữ liệu tại chỗ sang Aurora qua VPN.
- D — Khi Aurora đã đồng bộ hoàn toàn, đổi bản ghi DNS sang Aurora và dừng sao chép.
Vì sao đúng
Một phép tính quyết định toàn bộ: 25 TB qua đường 50 Mbps.
| Thông số | Giá trị |
|---|---|
| Dung lượng | 25 TB |
| Băng thông | 50 Mbps |
| Thời gian lý thuyết (hiệu suất 70%) | khoảng 60–70 ngày |
| Thời hạn | 2 tuần |
⚠ Điểm mấu chốt: 50 Mbps không thể chuyển 25 TB trong hai tuần — Snowball là bắt buộc:
25 TB ÷ (50 Mbps × 70%) ≈ 60 ngày
↓
Thời hạn chỉ có 14 ngày
↓
→ mọi phương án chuyển toàn bộ qua mạng đều bất khả thi
↓
→ nhưng đường VPN vẫn đủ cho phần THAY ĐỔI phát sinh sau đó
Đây là mẫu kết hợp: khối dữ liệu lớn đi bằng thiết bị vật lý, phần thay đổi đi qua mạng.
Ngày 1–5: xuất dữ liệu, chép vào Snowball, gửi đi
Ngày 6–9: AWS nhập vào S3, nạp vào Aurora
Ngày 10–13: bật sao chép từ cơ sở dữ liệu tại chỗ qua VPN, chờ bắt kịp
Ngày 14: đổi DNS, dừng sao chép — downtime chỉ vài phút
⚠ Bước sao chép sau khi nạp là thứ làm cho downtime ngắn:
Chỉ dùng Snowball, không sao chép
↓
Dữ liệu chỉ tới thời điểm xuất
↓
→ phải dừng cơ sở dữ liệu nguồn suốt quá trình vận chuyển → downtime nhiều ngày
↓
Snowball + sao chép qua VPN
↓
Nguồn vẫn chạy trong lúc thiết bị đang đi đường
Sao chép bắt kịp phần chênh lệch
↓
→ downtime chỉ bằng thời gian đổi DNS
Vì sao các phương án khác sai
-
C (dựng Aurora MySQL và dùng DMS chuyển toàn bộ cơ sở dữ liệu tại chỗ) — đây là phương án gần nhất và DMS là công cụ đúng cho việc di chuyển cơ sở dữ liệu, thường là câu trả lời cho dạng câu này. Nhưng ở đây nó vướng đúng phép tính băng thông: DMS chuyển dữ liệu qua mạng, và 25 TB qua 50 Mbps mất khoảng hai tháng — vượt xa thời hạn hai tuần. DMS vẫn hữu ích ở giai đoạn CDC, nhưng nó không thể gánh phần nạp ban đầu.
-
A (dựng DMS instance, sao chép qua VPN) — cùng lỗi băng thông với C, và mô tả lại chính bước mà C đã nêu.
-
F (dùng AWS SMS nhập cơ sở dữ liệu tại chỗ vào AWS rồi dùng DMS đồng bộ với Aurora) — sai công cụ. Server Migration Service di chuyển MÁY CHỦ, không di chuyển cơ sở dữ liệu — nó tạo AMI từ máy ảo. Và SMS đã được thay bằng Application Migration Service (MGN). Kể cả nếu dùng MGN thì kết quả là một EC2 chạy MySQL, không phải Aurora.
Ghi nhớ về chất lượng câu hỏi
⚠ AWS Server Migration Service (SMS) đã được thay bằng MGN:
Phương án F nhắc tới AWS SMS
↓
AWS đã ngừng nhận khách mới cho SMS, khuyến nghị dùng MGN
↓
→ phương án này vốn đã sai vì dùng công cụ di chuyển máy chủ cho cơ sở dữ liệu
Ghi nhớ
⚠ Phép tính băng thông — bảng phải thuộc, đây là kỹ năng ra thi liên tục: | Băng thông | Thời gian chuyển 25 TB (hiệu suất ~70%) | |---|---| | 50 Mbps | khoảng 60 ngày | | 100 Mbps | khoảng 30 ngày | | 1 Gbps | khoảng 3 ngày | | 10 Gbps | khoảng 8 giờ |
Công thức: thời gian ≈ dung lượng ÷ (băng thông × hiệu suất).
Từ khoá nhận diện:
dung lượng lớn + băng thông nhỏ + thời hạn ngắn → Snow Family "least downtime" → Snow cho khối lớn + sao chép cho phần chênh "DMS cho toàn bộ 25 TB qua 50 Mbps" → SAI, không kịp thời hạn "AWS SMS" cho cơ sở dữ liệu → SAI công cụ, và đã bị MGN thay thế luôn tính thời gian trước khi chọn → con số quyết định phương án
| Mẫu di chuyển kết hợp | Ba bước |
|---|---|
| 1 | Snow Family chuyển khối dữ liệu ban đầu |
| 2 | DMS CDC hoặc sao chép gốc chuyển phần thay đổi qua mạng |
| 3 | Cắt chuyển bằng đổi DNS khi đã bắt kịp |
| Chọn thiết bị Snow | Dung lượng dùng được |
|---|---|
| Snowcone | 8–14 TB |
| Snowball Edge Storage Optimized | khoảng 80 TB |
| Snowball Edge Compute Optimized | khoảng 42 TB |
| Giảm downtime khi cắt chuyển | Cách |
|---|---|
| Hạ TTL của bản ghi DNS trước vài ngày | để đổi nhanh |
| Chuyển sang chế độ chỉ đọc ở nguồn trước | tránh ghi mất |
| Kiểm dữ liệu khớp | so số dòng các bảng chính |
Ba việc kiểm chứng: | Việc | Cách | |---|---| | Sao chép đã bắt kịp chưa | độ trễ sao chép về gần 0 | | Dữ liệu có khớp không | so số dòng và checksum các bảng lớn | | DNS đổi mất bao lâu | kiểm TTL trước khi cắt chuyển |
Và một lời khuyên: hãy hạ TTL của bản ghi DNS xuống 60 giây ít nhất vài ngày trước ngày cắt chuyển. Đây là chi tiết nhỏ quyết định downtime thật sự: nếu TTL đang là một giờ, thì sau khi bạn đổi bản ghi, các resolver và client vẫn tiếp tục gửi lưu lượng tới cơ sở dữ liệu cũ trong tối đa một giờ nữa — và bạn phải chọn giữa việc để hai cơ sở dữ liệu cùng nhận ghi, hoặc chấp nhận một giờ gián đoạn. Hạ TTL trước thì cửa sổ đó thu về một phút, và nó là thay đổi duy nhất trong toàn bộ kế hoạch mà bạn phải làm trước chứ không phải trong ngày cắt chuyển.
A company which recently moved to AWS is trying to build a hybrid DNS solution. An AWS Direct Connect (DX) connection between the on-premises corporate network and an AWS Transit Gateway is established.
This solution will use an Amazon Route 53 private hosted zone for the domain internal.company.local for the resources stored within Amazon VPCs. The company has the following DNS resolution requirements:
· On-premises systems should be able to resolve and connect to internal.company.local.
· All VPCs should be able to resolve internal.company.local.
Which architecture should the company use to meet these requirements with the HIGHEST performance?
-
A
Associate the private hosted zone to all the VPCs. Deploy an Amazon EC2 conditional forwarder in the shared services VPC. Attach all VPCs to the transit gateway and create forwarding rules in the on-premises DNS server for internal.company.local that point to the conditional forwarder.
-
B
Associate the private hosted zone to the shared services VPC. Create a Route 53 inbound resolver in the shared services VPC. Attach the shared services VPC to the transit gateway and create forwarding rules in the on- premises DNS server for internal.company.local that point to the inbound resolver.
-
C
Associate the private hosted zone to all the VPCs. Create a Route 53 inbound resolver in the shared services VPC. Attach all VPCs to the transit gateway and create forwarding rules in the on-premises DNS server for internal.company.local that point to the inbound resolver.
-
D
Associate the private hosted zone to the shared services VPC. Create a Route 53 outbound resolver in the shared services VPC. Attach all VPCs to the transit gateway and create forwarding rules in the on-premises DNS server for internal.company.local that point to the outbound resolver.
Xem giải thích
Đáp án
C — Liên kết private hosted zone với TẤT CẢ các VPC; tạo Route 53 inbound resolver trong shared services VPC; gắn mọi VPC vào transit gateway; tạo forwarding rule trên DNS tại chỗ trỏ tới inbound resolver.
Vì sao đúng
Đề có hai yêu cầu phân giải và một tiêu chí: hiệu năng cao nhất.
| Yêu cầu | Cách đáp ứng |
|---|---|
| Hệ thống tại chỗ phân giải được | inbound resolver + forwarding rule ở DNS tại chỗ |
| Mọi VPC phân giải được | liên kết private hosted zone với TẤT CẢ các VPC |
| Hiệu năng cao nhất | VPC hỏi thẳng resolver của chính nó, không đi vòng |
⚠ Điểm mấu chốt: private hosted zone chỉ phân giải được từ VPC đã LIÊN KẾT — liên kết hết là đường ngắn nhất:
Liên kết zone với TẤT CẢ VPC (phương án C)
↓
Mỗi VPC hỏi resolver tại chỗ của chính nó (CIDR + 2)
↓
→ không có chặng mạng nào thêm
Chỉ liên kết với shared services VPC (phương án B, D)
↓
Các VPC khác phải chuyển tiếp truy vấn qua transit gateway
↓
→ thêm chặng, thêm độ trễ, thêm điểm hỏng
Đây là lý do C thắng B: cả hai đều dùng inbound resolver đúng, nhưng B bắt các VPC khác đi vòng.
Vì sao inbound resolver (không phải outbound). Nhớ theo chiều của truy vấn:
| Hướng | Truy vấn đi từ | Tới |
|---|---|---|
| Inbound | mạng tại chỗ | VPC Resolver |
| Outbound | VPC | DNS bên ngoài |
Đề cần hệ thống tại chỗ hỏi vào AWS, nên là inbound.
aws route53resolver create-resolver-endpoint --direction INBOUND \
--name vao-tu-on-prem --security-group-ids sg-dns \
--ip-addresses SubnetId=subnet-a SubnetId=subnet-b
⚠ Inbound resolver endpoint phải có IP ở ít nhất hai AZ, và security group phải mở cổng 53:
Chỉ một IP → mất AZ đó là mất phân giải DNS cho toàn bộ mạng tại chỗ
Security group thiếu cổng 53 TCP và UDP → truy vấn timeout
Vì sao các phương án khác sai
-
B (liên kết zone chỉ với shared services VPC; inbound resolver; gắn shared services VPC vào transit gateway) — đây là phương án gần nhất và nó dùng đúng inbound resolver. Nhưng nó chỉ liên kết zone với một VPC, nên các VPC còn lại không phân giải được
internal.company.local— vi phạm yêu cầu thứ hai của đề. Ngoài ra nó chỉ gắn shared services VPC vào transit gateway, nên các VPC khác cũng không nối được vào mạng chung. -
D (liên kết zone chỉ với shared services VPC; OUTBOUND resolver; forwarding rule ở DNS tại chỗ trỏ tới outbound resolver) — sai hướng. Outbound resolver dùng khi VPC cần hỏi ra ngoài, không phải khi bên ngoài hỏi vào. DNS tại chỗ không trỏ tới outbound endpoint được. Cộng thêm lỗi chỉ liên kết một VPC.
-
A (liên kết zone với tất cả VPC — đúng; nhưng dùng một EC2 làm conditional forwarder trong shared services VPC) — tự dựng thứ Route 53 Resolver cung cấp sẵn: một EC2 phải vá, phải giám sát, phải tự lo tính sẵn sàng, và là một điểm hỏng đơn lẻ nếu chỉ có một máy. Đề đòi hiệu năng cao nhất, và một máy trung gian tự quản không bằng dịch vụ có quản lý.
Ghi nhớ
⚠ Hai hướng của Route 53 Resolver endpoint — bảng phải thuộc: | Hướng | Truy vấn đi từ | Dùng khi | |---|---|---| | Inbound | mạng tại chỗ → VPC Resolver | on-premises phân giải tên trong AWS | | Outbound | VPC → DNS bên ngoài | AWS phân giải tên của mạng tại chỗ | | Cả hai | môi trường lai hai chiều | phổ biến nhất trong thực tế |
Từ khoá nhận diện:
"on-premises resolve AWS names" → inbound resolver "VPC resolve on-premises names" → outbound resolver + forwarding rule "tất cả VPC phải phân giải được" → liên kết zone với TẤT CẢ VPC "HIGHEST performance" → mỗi VPC hỏi resolver của chính nó, không đi vòng EC2 làm conditional forwarder → tự dựng, thêm điểm hỏng
| Private hosted zone — điều cần nhớ | Nội dung |
|---|---|
| Chỉ phân giải từ VPC đã liên kết | VPC chưa liên kết thì bản ghi vô hình |
| Liên kết nhiều VPC | được, kể cả khác Region và khác tài khoản |
| Liên tài khoản | cần authorization rồi associate |
| Điều kiện VPC | enableDnsSupport và enableDnsHostnames |
| Chia sẻ cấu hình DNS ở quy mô lớn | Cách |
|---|---|
| Resolver rule chia sẻ qua RAM | nhiều tài khoản dùng chung quy tắc chuyển tiếp |
| Route 53 Profiles | gói cấu hình DNS gán cho nhiều VPC |
| Địa chỉ VPC Resolver | Giá trị |
|---|---|
| Trong VPC | CIDR của VPC + 2 |
| Cố định | 169.254.169.253 |
Ba việc kiểm chứng: | Việc | Cách | |---|---| | VPC có phân giải được không | dig internal.company.local từ instance trong từng VPC | | Tại chỗ có phân giải được không | dig @<ip-inbound-endpoint> internal.company.local | | Zone đã liên kết VPC nào | aws route53 get-hosted-zone --id <id>, xem VPCs |
Và một lời khuyên: hãy đưa bước liên kết VPC với private hosted zone vào chính template dựng VPC. Đây là thao tác dễ quên nhất trong toàn bộ thiết lập DNS lai, và nó hỏng theo cách khó chẩn đoán: VPC mới được dựng đúng, gắn transit gateway đúng, mạng thông hoàn toàn — chỉ có tên miền nội bộ là không phân giải được. Người gỡ lỗi sẽ kiểm route table, security group, transit gateway attachment, tất cả đều đúng, vì phần sai là một liên kết chưa tồn tại và không có màn hình nào liệt kê những thứ lẽ ra phải được liên kết.
An automotive company is using AWS CodeBuild for CI/CD pipelines where each CodeBuild project is directly mapped to an individual application. Many of these applications use large sets of marketing data which is hosted inside an Amazon S3 bucket.
This data is provided by files which are owned by another third-party agency. A few of these projects need the entire set of data while a few of them require just a subset of more relevant data.
As the number of CodeBuild projects grows, the company notices a significant increase in the time required for the pipeline to finish running. The company wants to optimize the pipeline and reduce the amount of time that the pipeline requires to finish running.
Which solution will meet these requirements?
-
A
Create an S3 bucket for the pipeline. Configure S3 caching for the CodeBuild projects that are in the pipeline. Update the build specifications of the CodeBuild projects. Add the data file directory to the cache definition.
-
B
Create an S3 bucket for the pipeline. Configure the S3 bucket as a secondary source location for the CodeBuild projects. Update the build specifications of the CodeBuild projects. Add the S3 bucket and data file directory to the cache definition.
-
C
Create a new VPC for the CodeBuild projects. Create an Amazon Elastic File System (Amazon EFS) file system in the VPC. Configure the CodeBuild projects to run in the VPC. Mount the EFS file system at the location of the data file directory.
-
D
Configure the cache of the CodeBuild projects as LOCAL_SOURCE_CACHE. Update the build specifications of the CodeBuild projects. Add the data file directory to the cache definition.
Xem giải thích
Đáp án
A — Tạo một bucket S3 cho pipeline; cấu hình S3 caching cho các CodeBuild project; cập nhật buildspec và thêm thư mục dữ liệu vào định nghĩa cache.
Vì sao đúng
Vấn đề của đề rất cụ thể: nhiều project cùng tải một tập dữ liệu marketing lớn từ S3, và pipeline ngày càng chậm. Cache là cách bỏ bớt việc tải lại.
| Vấn đề | Cách chữa |
|---|---|
| Mỗi build tải lại dữ liệu lớn | cache thư mục dữ liệu |
| Nhiều project dùng chung dữ liệu | S3 cache — dùng chung được giữa các project và các máy build |
| Pipeline chậm dần khi thêm project | lần build sau chỉ khôi phục cache |
⚠ Điểm mấu chốt: S3 cache dùng chung được giữa các build và các project — local cache thì không:
S3 caching
↓
Cache lưu trong bucket, mọi máy build đều lấy được
↓
→ project A build xong, project B tận dụng được
→ build chạy trên máy mới vẫn có cache
LOCAL_SOURCE_CACHE (phương án D)
↓
Cache nằm trên chính máy build đó
↓
→ CodeBuild thường cấp máy mới cho mỗi build
→ cache biến mất, gần như không bao giờ trúng
# buildspec.yml
version: 0.2
phases:
build:
commands:
- ./chay-build.sh
cache:
paths:
- 'du-lieu-marketing/**/*'
⚠ Cache chỉ có ích nếu dữ liệu ít thay đổi — với dữ liệu đổi mỗi lần build thì nó thành gánh nặng:
Dữ liệu marketing do bên thứ ba cung cấp, ít thay đổi
↓
Tỷ lệ trúng cache cao → tiết kiệm thật
↓
Nếu dữ liệu đổi hằng ngày
↓
Mỗi build vừa tải mới vừa ghi lại cache → chậm hơn cả không cache
Vì sao các phương án khác sai
-
B (tạo bucket S3 cho pipeline; cấu hình bucket đó làm SECONDARY SOURCE cho các project; thêm bucket và thư mục dữ liệu vào định nghĩa cache) — đây là phương án gần nhất và nó cũng dùng S3, cũng nhắc tới cache. Nhưng nó lẫn hai khái niệm: secondary source là nguồn đầu vào bổ sung, được tải xuống mỗi lần build — tức là đúng thứ đang gây chậm, chỉ đổi chỗ lấy dữ liệu. Và câu "thêm bucket vào định nghĩa cache" không có nghĩa: cache khai theo đường dẫn trong thư mục build, không khai theo bucket.
-
D (đặt cache của project là
LOCAL_SOURCE_CACHE) — sai loại cache. Local cache nằm trên máy build, mà CodeBuild thường cấp máy mới cho mỗi lần chạy — nên tỷ lệ trúng rất thấp. Ngoài raLOCAL_SOURCE_CACHEdành riêng cho việc cache lịch sử Git, không phải cho thư mục dữ liệu tuỳ ý. -
C (tạo VPC mới, dựng EFS trong đó, cho CodeBuild chạy trong VPC và mount EFS vào chỗ thư mục dữ liệu) — chạy được nhưng nặng nề và chậm hơn: đặt CodeBuild vào VPC làm tăng thời gian khởi động build đáng kể vì phải cấp phát ENI. Thêm một EFS file system phải vận hành và trả tiền, cho một bài toán mà cache giải quyết được bằng cấu hình.
Ghi nhớ
⚠ Ba loại cache của CodeBuild — bảng phải thuộc: | Loại | Lưu ở | Dùng chung giữa các build | |---|---|---| | S3 cache | bucket S3 | có — mọi máy, mọi project | | Local cache | máy build | không | | Không cache | — | — |
| Ba chế độ của local cache | Cache gì |
|---|---|
LOCAL_SOURCE_CACHE |
lịch sử Git |
LOCAL_DOCKER_LAYER_CACHE |
lớp Docker image |
LOCAL_CUSTOM_CACHE |
đường dẫn tuỳ ý |
Từ khoá nhận diện:
"nhiều project dùng chung dữ liệu lớn" → S3 cache "build chậm dần khi thêm project" → đang tải lại cùng một thứ nhiều lần "secondary source" → nguồn đầu vào, tải MỖI lần build "LOCAL_SOURCE_CACHE" cho thư mục dữ liệu → sai loại, và không dùng chung được đặt CodeBuild vào VPC → tăng thời gian khởi động build
| Tối ưu thời gian build khác | Cách |
|---|---|
| Cache thư viện phụ thuộc | node_modules, .m2, pip cache |
| Docker layer cache | với build image |
| Chọn compute type lớn hơn | nhiều CPU và RAM hơn |
| Chạy các project song song | trong CodePipeline, dùng action cùng runOrder |
| Reserved capacity | tránh thời gian chờ cấp máy |
| Khi nào cache KHÔNG giúp | Nội dung |
|---|---|
| Dữ liệu đổi mỗi lần build | ghi và đọc cache thành chi phí thuần |
| Dữ liệu rất nhỏ | thời gian tải vốn đã không đáng kể |
| Build rất hiếm | cache hết hạn trước lần dùng tiếp theo |
Ba việc kiểm chứng: | Việc | Cách | |---|---| | Cache có trúng không | log build hiện dòng khôi phục cache | | Thời gian build có giảm không | so duration trước và sau | | Cache có phình không | kiểm dung lượng bucket cache, đặt lifecycle dọn |
Và một lời khuyên: hãy đặt lifecycle rule dọn bucket cache, và đo tỷ lệ trúng trước khi kết luận là đã tối ưu. Cache trong CodeBuild không tự hết hạn: mỗi project ghi phiên bản cache của nó, và với hàng chục project cùng cache một tập dữ liệu lớn, bucket phình lên rất nhanh — bạn tiết kiệm được thời gian build và trả lại bằng chi phí lưu trữ. Tệ hơn, nếu định nghĩa cache trỏ vào một đường dẫn thay đổi mỗi lần build, cache sẽ không bao giờ trúng nhưng vẫn được ghi lại mỗi lần: bạn có toàn bộ chi phí và không có lợi ích nào, và log build không nói gì về điều đó trừ khi bạn đọc kỹ.
A company has recently established 15 Amazon VPCs within the us-east-1 AWS Region. The company has also established an AWS Direct Connect to the Region from their on-premises data center. The company requires full transitive peering between the VPCs and the on-premises data center.
Which combination of actions is required to implement these requirements with the LEAST complexity? (Select TWO.)
-
A
Create an AWS Direct Connect (DX) gateway and attach the DX gateway to a transit gateway. Enable route propagation with BGP.
-
B
Create VPC peering connections between the VPCs in a fully meshed topology. Configure the route tables in the VPCs to route traffic across the peering connections.
-
C
Create an AWS transit gateway and add attachments for all of the VPCs. Configure the route tables in the VPCs to send traffic to the transit gateway.
-
D
Create IPSec VPN connections between the VPCs in a fully meshed topology. Configure the route tables in the VPCs to route traffic across the IPSec VPN connections.
-
E
Create an AWS Direct Connect (DX) gateway and associate the DX gateway with a VGW in each VPC. Enable route propagation with BGP.
Xem giải thích
Đáp án
A, C — hai bước cho kết nối bắc cầu đầy đủ giữa 15 VPC và trung tâm dữ liệu, với ít phức tạp nhất:
- C — Tạo transit gateway và gắn tất cả các VPC vào; cấu hình route table của các VPC gửi lưu lượng tới transit gateway.
- A — Tạo Direct Connect gateway và gắn nó vào transit gateway; bật route propagation với BGP.
Vì sao đúng
Hai từ khoá của đề quyết định tất cả: transitive peering và 15 VPC.
| Yêu cầu | Cách đáp ứng |
|---|---|
| Kết nối bắc cầu giữa các VPC | transit gateway — peering không bắc cầu |
| 15 VPC | transit gateway — mô hình sao, không phải lưới |
| Nối cả trung tâm dữ liệu | Direct Connect gateway gắn vào transit gateway |
| Ít phức tạp nhất | một transit gateway thay cho hàng trăm kết nối |
⚠ Điểm mấu chốt: VPC peering KHÔNG bắc cầu — đó là lý do nó không dùng được ở quy mô này:
VPC peering
↓
A ↔ B và B ↔ C KHÔNG cho A nói chuyện với C
↓
Muốn 15 VPC nói chuyện với nhau → cần n(n-1)/2 = 105 kết nối
↓
Cộng với 105 mục route table phải quản
↓
Transit gateway
↓
Mỗi VPC gắn MỘT lần vào trung tâm
↓
→ 15 attachment thay vì 105 peering
Phép tính này là nội dung chính của câu hỏi.
Vì sao Direct Connect gateway gắn vào transit gateway (A). Để trung tâm dữ liệu nối vào cùng mạng đó, bạn dùng transit VIF tới Direct Connect gateway, rồi liên kết nó với transit gateway.
aws ec2 create-transit-gateway --description "mang-chung"
aws ec2 create-transit-gateway-vpc-attachment --transit-gateway-id tgw-abc --vpc-id vpc-1 --subnet-ids subnet-a
aws directconnect create-direct-connect-gateway-association \
--direct-connect-gateway-id dxgw-abc --gateway-id tgw-abc
⚠ Direct Connect gateway gắn với VGW thì KHÔNG bắc cầu — chỉ gắn với transit gateway mới bắc cầu:
DX gateway + virtual private gateway (phương án E)
↓
Mỗi VPC nối riêng tới DX gateway
↓
→ trung tâm dữ liệu tới được từng VPC
→ nhưng các VPC KHÔNG nói chuyện được với nhau
↓
→ không đạt yêu cầu "full transitive peering"
Vì sao các phương án khác sai
-
E (tạo Direct Connect gateway và liên kết với một VGW ở MỖI VPC, bật route propagation với BGP) — đây là phương án gần nhất và nó thật sự nối được trung tâm dữ liệu với cả 15 VPC. Nhưng nó không tạo ra kết nối bắc cầu giữa các VPC với nhau: DX gateway cho phép mạng tại chỗ tới từng VPC, nhưng lưu lượng không đi xuyên qua nó từ VPC này sang VPC khác. Đề đòi "full transitive peering between the VPCs and the on-premises data center" — cả hai chiều.
-
B (VPC peering lưới đầy đủ giữa các VPC) — 105 kết nối và hàng trăm mục route table cho 15 VPC, và peering vẫn không bắc cầu nên mỗi cặp phải có kết nối riêng. Đây là phương án phức tạp nhất, trái thẳng tiêu chí "LEAST complexity".
-
D (IPSec VPN lưới đầy đủ giữa các VPC) — cùng vấn đề quy mô như B, cộng thêm chi phí và độ phức tạp của việc quản lý hàng trăm đường hầm VPN, mỗi cái có hai tunnel.
Ghi nhớ
⚠ Bốn cách nối nhiều VPC — bảng phải thuộc: | Cách | Bắc cầu | Số kết nối cho n VPC | |---|---|---| | VPC peering | không | n(n-1)/2 | | Transit gateway | có | n | | Transit VPC (mẫu cũ) | có | n, nhưng tự quản router | | PrivateLink | không áp dụng — phơi một dịch vụ | — |
Từ khoá nhận diện:
"transitive peering" → transit gateway, peering không làm được nhiều VPC + "LEAST complexity" → transit gateway nối trung tâm dữ liệu vào cùng mạng đó → DX gateway gắn vào transit gateway "DX gateway + VGW ở mỗi VPC" → tới được từng VPC nhưng KHÔNG bắc cầu giữa chúng lưới đầy đủ peering hoặc VPN → phức tạp nhất, loại ngay
| Ba loại VIF của Direct Connect | Gắn tới |
|---|---|
| Private VIF | virtual private gateway hoặc DX gateway |
| Transit VIF | DX gateway → transit gateway |
| Public VIF | endpoint công cộng của AWS |
| Giới hạn transit gateway | Con số |
|---|---|
| VPC attachment | 5.000 |
| Băng thông mỗi VPC attachment | tới 100 Gbps |
| Phạm vi | một Region — nối Region khác bằng peering giữa hai transit gateway |
| DX gateway liên kết | tối đa 6 transit gateway |
| Chi phí transit gateway | Hai thành phần |
|---|---|
| Phí giờ mỗi attachment | tính theo từng VPC gắn vào |
| Phí mỗi GB đi qua | phần lớn hoá đơn khi lưu lượng cao |
Ba việc kiểm chứng: | Việc | Cách | |---|---| | Tuyến có lan truyền không | kiểm route table của transit gateway | | VPC có nói chuyện được với nhau không | ping giữa instance ở hai VPC khác nhau | | BGP có lên không | describe-direct-connect-gateway-associations |
Và một lời khuyên: hãy dùng nhiều route table của transit gateway để phân đoạn mạng, đừng để mọi VPC nói chuyện được với mọi VPC. Transit gateway mặc định cho kết nối bắc cầu hoàn toàn, và đó thường là điều bạn muốn ở mức kỹ thuật nhưng không phải ở mức bảo mật: một VPC thử nghiệm giờ có đường tới VPC production, và không có gì ngăn nó ngoài security group. Route table riêng cho từng nhóm — production, phi production, dịch vụ chung — cho bạn kiểm soát ở tầng định tuyến, nơi một cấu hình sai security group không phá vỡ được.
An application runs in us-east-1 and consists of Amazon EC2 instances behind an Application Load Balancer (ALB) and an Amazon RDS MySQL database. The company is creating a disaster recovery solution to a second AWS Region (us-west-1). A solution has been created for replicating AMIs across Regions and an ALB is provisioned in us-west-1. Amazon Route 53 failover routing is configured appropriately. A Solutions Architect must complete the solution by designing the disaster recovery processes for the storage layer. The RPO is 5 minutes and the RTO is 15 minutes. The solution must be fully automated.
Which set of actions would complete the disaster recovery solution?
-
A
Use an AWS Lambda function to replicate Amazon RDS snapshots to us-west-1. Use an Amazon EventBridge to trigger an AWS Lambda function that creates a new RDS database from the replicated snapshot.
-
B
Create a cross-Region read replica in us-west-1. Use Amazon EventBridge to trigger an AWS Lambda function that promotes the read replica to primary and updates the DNS endpoint address for the database.
-
C
Deploy an Amazon RDS Multimaster database across both AWS Regions. Configure the EC2 instances in us-west-1 to write to the local RDS writer endpoint.
-
D
Create a cron job that runs the mysqldump command to export the MySQL database to a file stored on Amazon S3. Use Amazon EventBridge to trigger an AWS Lambda function that imports the database export to a standby database in us-west-1.
Xem giải thích
Đáp án
B — Tạo cross-Region read replica ở us-west-1; dùng EventBridge kích hoạt Lambda thăng cấp replica thành primary và cập nhật DNS endpoint của cơ sở dữ liệu.
Vì sao đúng
Hai chỉ tiêu — RPO 5 phút và RTO 15 phút — cùng yêu cầu hoàn toàn tự động chỉ có một lời giải.
| Chỉ tiêu | Cách đáp ứng |
|---|---|
| RPO 5 phút | read replica sao chép liên tục, độ trễ vài giây |
| RTO 15 phút | promote mất vài phút |
| Hoàn toàn tự động | EventBridge → Lambda |
⚠ Điểm mấu chốt: chỉ sao chép liên tục mới đạt RPO tính bằng phút — mọi cách theo chu kỳ đều thua:
Cross-Region read replica
↓
Sao chép bất đồng bộ liên tục
↓
→ RPO tính bằng giây
Sao chép snapshot (phương án A)
↓
RPO bằng chu kỳ chụp, và khôi phục mất hàng chục phút
↓
→ không đạt cả hai chỉ tiêu
def handler(su_kien, ngu_canh):
rds.promote_read_replica(DBInstanceIdentifier='du-phong-us-west')
# cập nhật bản ghi DNS trỏ tới endpoint mới
route53.change_resource_record_sets(...)
⚠ Ứng dụng phải trỏ tới một tên DNS trung gian, không trỏ thẳng endpoint của RDS:
Ứng dụng dùng thẳng endpoint RDS
↓
Chuyển vùng đổi cơ sở dữ liệu nhưng ứng dụng vẫn gọi endpoint cũ
↓
→ phải sửa cấu hình và triển khai lại — mất RTO
↓
Dùng một bản ghi CNAME riêng (ví dụ db.congty.vn)
↓
Lambda chỉ cần trỏ CNAME sang endpoint mới
↓
→ ứng dụng không cần đổi gì
Vì sao các phương án khác sai
-
A (Lambda sao chép snapshot RDS sang us-west-1; EventBridge kích hoạt Lambda tạo cơ sở dữ liệu mới từ snapshot) — đây là phương án gần nhất và nó cũng tự động hoá bằng EventBridge và Lambda. Nhưng nó thua ở cả hai chỉ tiêu: RPO bằng chu kỳ sao chép snapshot (khó xuống 5 phút), và khôi phục từ snapshot mất hàng chục phút tới hàng giờ tuỳ kích thước — vượt RTO 15 phút. Đây là mẫu backup-restore, phù hợp khi RTO tính bằng giờ.
-
C (dùng RDS Multimaster trên cả hai Region, EC2 ở us-west-1 ghi vào writer endpoint tại chỗ) — mô tả một thứ không tồn tại theo cách này. RDS không có chế độ multi-master xuyên Region; Aurora từng có multi-master nhưng chỉ trong một Region và đã ngừng phát triển. Với MySQL trên RDS, lựa chọn đa Region là read replica.
-
D (cron chạy
mysqldumpxuất ra S3; EventBridge kích hoạt Lambda nhập vào cơ sở dữ liệu chờ ở us-west-1) — chậm và thủ công.mysqldumptrên cơ sở dữ liệu production gây tải nặng, và chu kỳ xuất quyết định RPO. Việc nhập lại cũng mất rất nhiều thời gian, phá vỡ RTO.
Ghi nhớ
⚠ Bốn cách bảo vệ cơ sở dữ liệu xuyên Region — bảng phải thuộc: | Cách | RPO | RTO | |---|---|---| | RDS cross-Region read replica | vài giây | vài phút (promote) | | Aurora Global Database | ~1 giây | dưới 1 phút | | Sao chép snapshot | bằng chu kỳ chụp | hàng chục phút tới giờ | | Xuất/nhập thủ công | bằng chu kỳ xuất | rất chậm |
Từ khoá nhận diện:
"RPO 5 phút" + "RTO 15 phút" → read replica, không phải snapshot "fully automated" → EventBridge + Lambda "RDS Multimaster xuyên Region" → LUÔN SAI, không tồn tại "mysqldump theo cron" → RPO và RTO đều kém Aurora + đa Region → Global Database thay vì read replica
| Promote read replica — điều cần nhớ | Nội dung |
|---|---|
| Một chiều | cắt liên kết với nguồn vĩnh viễn |
| Thời gian | vài phút |
| Sau đó | replica thành cụm độc lập, phải dựng replica mới |
| Dữ liệu | mất phần chưa kịp sao chép (thường vài giây) |
| Đừng quên khi chuyển vùng | Việc |
|---|---|
| Đổi endpoint | qua CNAME hoặc Route 53 |
| Security group ở Region phụ | phải cho ứng dụng kết nối |
| Hạn mức | vCPU, số instance ở Region phụ |
| Parameter group và option group | phải dựng sẵn tương đương |
| Cân nhắc về tự động hoá | Đánh đổi |
|---|---|
| Tự động hoàn toàn | RTO ngắn nhất, nhưng báo động giả gây chuyển vùng không cần thiết |
| Có bước phê duyệt | an toàn hơn, RTO dài hơn |
| Thực hành | alarm chặt, kết hợp nhiều chỉ số |
Ba việc kiểm chứng: | Việc | Cách | |---|---| | Độ trễ sao chép | chỉ số ReplicaLag | | RTO thật | diễn tập promote trên một replica dựng riêng để thử | | DNS có đổi được không | kiểm TTL và thử đổi bản ghi |
Và một lời khuyên: hãy hạ TTL của bản ghi DNS trỏ tới cơ sở dữ liệu xuống 60 giây, và giữ nó ở mức đó. Với một kế hoạch chuyển vùng tự động, thời gian Lambda chạy xong chỉ là một nửa câu chuyện — nửa còn lại là bao lâu thì ứng dụng thật sự bắt đầu gọi vào cơ sở dữ liệu mới. Nếu TTL đang là một giờ, thì dù Lambda đổi bản ghi trong ba giây, các máy ứng dụng vẫn kiên trì kết nối tới endpoint cũ cho tới khi cache DNS của chúng hết hạn. RTO thực tế của bạn không phải là thời gian promote, mà là thời gian promote cộng với TTL.
A multinational corporation offers a web-based customer relationship management (CRM) tool that operates in the AWS Cloud. The tool is hosted on Amazon EC2 instances situated behind an Application Load Balancer (ALB), with instances spread across multiple Availability Zones within a single AWS Region. As part of its expansion strategy, the corporation plans to deploy the tool in several new AWS Regions.
To comply with customer security policies, the corporation needs to provide fixed IP addresses for the tool so that customers can include these IPs in their firewall allow lists. Additionally, the corporation wants to ensure that users are automatically directed to the nearest regional deployment for optimal performance.
Which solution would fulfill these requirements?
-
A
Create an Amazon Route 53 geolocation routing policy. Associate each regional deployment's ALB with Route 53 and provide customers with the IP addresses of the ALBs.
-
B
Implement AWS Global Accelerator with a standard accelerator configuration. Associate each regional deployment's ALB with the Global Accelerator and distribute its static IP addresses to customers.
-
C
Create an Amazon CloudFront distribution for each regional deployment. Use CloudFront’s edge locations to route traffic and provide customers with the IP address ranges of these edge locations.
-
D
Deploy an AWS Transit Gateway with inter-region peering. Link each regional deployment's ALB to the Transit Gateway and share its IP addresses with customers.
Xem giải thích
Đáp án
B — Triển khai AWS Global Accelerator với cấu hình standard accelerator; gắn ALB của từng Region vào accelerator và cung cấp cho khách hàng các địa chỉ IP tĩnh của nó.
Vì sao đúng
Đề đòi hai thứ mà chỉ một dịch vụ cho cả hai: địa chỉ IP cố định để khách whitelist và tự động đưa người dùng tới Region gần nhất.
| Yêu cầu | Cách đáp ứng |
|---|---|
| IP cố định để đưa vào tường lửa | Global Accelerator cấp hai IP anycast tĩnh |
| Định tuyến tới Region gần nhất | anycast — mạng tự chọn điểm biên gần nhất |
| Mở rộng ra nhiều Region | thêm endpoint group, IP không đổi |
⚠ Điểm mấu chốt: hai địa chỉ anycast KHÔNG đổi khi bạn thêm Region — đó là điều khiến nó thắng mọi phương án khác:
Global Accelerator
↓
Cấp hai IP tĩnh từ dải anycast của AWS
↓
Thêm Region mới → chỉ thêm endpoint group
↓
→ khách hàng KHÔNG phải cập nhật tường lửa lần nào nữa
↓
Route 53 hoặc CloudFront
↓
Địa chỉ thay đổi hoặc là cả một dải rất lớn
↓
→ khách hàng phải cập nhật liên tục
Với kế hoạch mở rộng ra nhiều Region mà đề nêu, đây là khác biệt quyết định.
aws globalaccelerator create-accelerator --name crm-toan-cau
aws globalaccelerator create-endpoint-group \
--listener-arn <listener> --endpoint-group-region ap-southeast-1 \
--endpoint-configurations EndpointId=<alb-arn>,Weight=100
⚠ Anycast định tuyến theo mạng, không theo địa lý — nên nó tối ưu ĐỘ TRỄ thật:
Người dùng gửi gói tin tới IP anycast
↓
Mạng Internet đưa tới điểm biên AWS gần nhất về mặt MẠNG
↓
Từ đó lưu lượng đi trên xương sống AWS tới Region đích
↓
→ phần lớn quãng đường nằm trong mạng AWS, không phải Internet công cộng
Vì sao các phương án khác sai
-
A (Route 53 geolocation routing; đưa cho khách IP của các ALB) — đây là phương án gần nhất và nó thật sự định tuyến được theo vị trí. Nhưng nó vỡ ở vế IP cố định: ALB không có địa chỉ IP tĩnh — nó chỉ có tên DNS, và các địa chỉ đằng sau thay đổi theo thời gian khi AWS co giãn hạ tầng. Đưa cho khách một danh sách IP của ALB nghĩa là danh sách đó sẽ lỗi thời, và khách bị chặn ngẫu nhiên. Ngoài ra geolocation định tuyến theo quốc gia, không theo độ trễ thật.
-
C (CloudFront distribution cho từng Region; đưa cho khách dải IP của các điểm biên) — hai vấn đề. Dải IP của CloudFront rất lớn và thay đổi liên tục — không thể là danh sách whitelist ổn định. Và dải đó dùng chung cho mọi khách hàng AWS, nên whitelist nó không có nhiều ý nghĩa bảo mật.
-
D (Transit Gateway với inter-region peering; nối ALB của từng Region vào; chia sẻ IP cho khách) — sai công cụ hoàn toàn. Transit gateway nối các mạng riêng với nhau, nó không phải điểm vào cho lưu lượng từ Internet và không cấp địa chỉ công cộng cho khách hàng kết nối.
Ghi nhớ
⚠ Global Accelerator so với CloudFront — bảng phải thuộc: | | Global Accelerator | CloudFront | |---|---|---| | Việc chính | tối ưu đường mạng, IP tĩnh | cache nội dung tại biên | | Giao thức | TCP và UDP | HTTP/HTTPS | | Địa chỉ | hai IP anycast tĩnh | tên DNS, dải IP lớn | | Hợp với | API động, game, IoT, cần IP tĩnh | nội dung tĩnh và động qua HTTP | | Chuyển vùng | vài giây, không phụ thuộc DNS | theo origin group |
Từ khoá nhận diện:
"fixed IP addresses for firewall allow lists" → Global Accelerator "route to nearest regional deployment" → anycast của Global Accelerator "IP của ALB" để whitelist → LUÔN SAI, ALB không có IP tĩnh "dải IP của CloudFront" để whitelist → quá lớn, đổi liên tục, dùng chung cần IP tĩnh trong MỘT Region → NLB với Elastic IP là đủ, rẻ hơn
| Hai loại accelerator | Việc |
|---|---|
| Standard | định tuyến tới endpoint gần nhất, có health check và chuyển vùng |
| Custom routing | ánh xạ cổng tới instance cụ thể — cho game, VoIP |
| Endpoint mà Global Accelerator hỗ trợ | Danh sách |
|---|---|
| ALB, NLB | có |
| EC2 instance | có |
| Elastic IP | có |
| Lợi ích phụ | Nội dung |
|---|---|
| Chuyển vùng nhanh | không phụ thuộc TTL của DNS |
| Client affinity | giữ người dùng ở cùng endpoint nếu cần |
| Traffic dial | chuyển dần lưu lượng sang Region mới |
Ba việc kiểm chứng: | Việc | Cách | |---|---| | IP có cố định không | describe-accelerator, xem IpSets | | Người dùng đi tới Region nào | log của ALB ở từng Region | | Chuyển vùng có chạy không | tắt endpoint group một Region và quan sát |
Và một lời khuyên: hãy cung cấp cho khách hàng cả hai địa chỉ IP của accelerator, không chỉ một. Global Accelerator luôn cấp hai địa chỉ anycast từ hai dải mạng khác nhau, và điều đó là có chủ đích: nếu một dải gặp sự cố định tuyến ở một nhà mạng nào đó, địa chỉ còn lại vẫn tới được. Nếu khách hàng chỉ whitelist một, họ mất toàn bộ khả năng dự phòng đó — và sự cố sẽ xuất hiện dưới dạng "chỉ một số khách hàng không kết nối được", tuỳ nhà mạng của họ, một triệu chứng gần như không thể tái hiện từ phía bạn.
A business is in the process of setting up an Amazon Elastic Kubernetes Service (Amazon EKS) cluster to manage a specific workload. This workload is expected to generate a highly variable number of stateless pods, with a significant number of these pods being launched in a brief timeframe due to automatic scaling of replicas.
What approach should be taken to optimize the resilience of the nodes in this scenario?
-
A
Implement a distinct launch template for deploying the EKS control plane in a secondary cluster, separate from the node groups that handle the workload.
-
B
Modify the node groups for the workload by reducing the number of node groups but opting for larger instances within these groups.
-
C
Adjust the workload configuration to utilize topology spread constraints based on different Availability Zones.
-
D
Set up the Kubernetes Cluster Autoscaler to maintain the compute capacity of the workload node groups at a consistently under provisioned level.
Xem giải thích
Đáp án
C — Điều chỉnh cấu hình workload để dùng topology spread constraint theo Availability Zone.
Vì sao đúng
Đề đòi tối ưu khả năng chịu lỗi của các node cho một workload sinh ra rất nhiều pod stateless trong thời gian ngắn. Vấn đề là phân bố, và Kubernetes có cơ chế khai báo riêng cho nó.
| Yêu cầu | Cách đáp ứng |
|---|---|
| Pod không dồn vào một chỗ | topology spread constraint |
| Chịu được mất một AZ | trải theo topology.kubernetes.io/zone |
| Pod stateless, số lượng biến động lớn | ràng buộc khai báo, tự áp cho pod mới |
⚠ Điểm mấu chốt: bộ lập lịch mặc định của Kubernetes KHÔNG đảm bảo trải đều theo AZ:
Hàng trăm pod được tạo trong vài giây
↓
Scheduler xếp chúng lên các node còn chỗ, theo thứ tự nó thấy
↓
Rất dễ dồn phần lớn pod vào các node của cùng một AZ
↓
Mất AZ đó → mất phần lớn công suất cùng lúc
↓
Topology spread constraint
↓
Khai báo: chênh lệch số pod giữa các AZ không quá N
↓
→ scheduler buộc phải trải đều
topologySpreadConstraints:
- maxSkew: 1
topologyKey: topology.kubernetes.io/zone
whenUnsatisfiable: ScheduleAnyway
labelSelector:
matchLabels:
app: xu-ly
⚠ whenUnsatisfiable quyết định hành vi khi không trải đều được: | Giá trị | Nghĩa | |---|---| | DoNotSchedule | không xếp pod nếu vi phạm ràng buộc — chặt, nhưng pod có thể nằm chờ | | ScheduleAnyway | cố gắng trải đều, nhưng vẫn xếp nếu không được — hợp với workload co giãn nhanh |
Với workload sinh nhiều pod trong thời gian ngắn, ScheduleAnyway tránh được tình trạng pod bị kẹt.
Vì sao các phương án khác sai
-
B (giảm số node group nhưng dùng instance lớn hơn trong đó) — đây là phương án gần nhất và instance lớn hơn thật sự chứa được nhiều pod hơn, giảm áp lực lên scheduler. Nhưng nó làm giảm khả năng chịu lỗi, đúng thứ đề muốn tối ưu: ít node hơn nghĩa là mất một node là mất một tỷ lệ lớn công suất. Với pod stateless, nhiều node nhỏ luôn chịu lỗi tốt hơn ít node lớn.
-
D (cấu hình Cluster Autoscaler giữ công suất của node group ở mức thường xuyên THIẾU) — đi ngược mục tiêu. Cố ý thiếu công suất nghĩa là pod phải chờ node mới khởi động mỗi khi có đợt tạo pod — chậm và kém tin cậy. (Cách đúng cho vấn đề đó là over-provisioning: giữ sẵn một ít node dư bằng các pod ưu tiên thấp.)
-
A (dùng launch template riêng để triển khai EKS control plane ở một cluster phụ) — mô tả một thứ không tồn tại. Control plane của EKS do AWS quản lý hoàn toàn — bạn không triển khai nó, không có launch template cho nó, và nó đã sẵn sàng cao trên nhiều AZ theo mặc định.
Ghi nhớ
⚠ Bốn cơ chế phân bố pod trong Kubernetes — bảng phải thuộc: | Cơ chế | Việc | |---|---| | Topology spread constraint | trải đều theo AZ, node, hoặc nhãn tuỳ ý | | Pod anti-affinity | không xếp hai pod cùng loại lên cùng node | | Node affinity / selector | chỉ xếp lên node có nhãn nhất định | | Taint và toleration | dành riêng node cho một loại workload |
Từ khoá nhận diện:
"resilience of the nodes" + nhiều pod stateless → topology spread constraint "trải đều theo AZ" →
topologyKey: topology.kubernetes.io/zone"triển khai EKS control plane" → LUÔN SAI, AWS quản lý control plane "ít node group, instance lớn hơn" → giảm khả năng chịu lỗi "cố ý thiếu công suất" → pod phải chờ, kém tin cậy
| Chuẩn bị cho đợt tạo pod đột ngột | Cách |
|---|---|
| Over-provisioning | pod ưu tiên thấp giữ chỗ sẵn, bị đẩy ra khi cần |
| Karpenter | cấp node nhanh hơn Cluster Autoscaler, chọn kích cỡ theo nhu cầu thật |
| Cluster Autoscaler | phản ứng theo pod pending, chậm hơn |
| Nhãn topology chuẩn | Nội dung |
|---|---|
topology.kubernetes.io/zone |
Availability Zone |
topology.kubernetes.io/region |
Region |
kubernetes.io/hostname |
từng node |
| Khả năng chịu lỗi ở tầng node | Nguyên tắc |
|---|---|
| Nhiều node nhỏ hơn ít node lớn | mất một node ảnh hưởng ít hơn |
| Trải nhiều AZ | chịu được sự cố một AZ |
| Pod Disruption Budget | giới hạn số pod bị gián đoạn cùng lúc khi bảo trì |
Ba việc kiểm chứng: | Việc | Cách | |---|---| | Pod có trải đều không | kubectl get pods -o wide rồi đếm theo node và AZ | | Có pod nào pending không | kubectl get pods --field-selector status.phase=Pending | | Mất một AZ có sao không | cordon và drain toàn bộ node của một AZ |
Và một lời khuyên: hãy thêm Pod Disruption Budget bên cạnh topology spread constraint. Hai thứ này bảo vệ hai kịch bản khác nhau: spread constraint lo việc pod được xếp ra sao, còn PDB lo việc bao nhiêu pod được phép biến mất cùng lúc trong các thao tác tự nguyện — nâng cấp node group, drain node, Cluster Autoscaler thu gọn cụm. Không có PDB, một lần nâng cấp node group hoàn toàn bình thường có thể drain nhiều node cùng lúc và đưa số pod đang phục vụ xuống dưới mức tối thiểu, dù pod của bạn đã được trải đều hoàn hảo trước đó.
An eCommerce company runs a workload on AWS that includes a web and application tier running on Amazon EC2 and a database tier running on Amazon RDS MySQL. The business requires a cost-efficient disaster recovery solution for the application with an RTO of 5 minutes and an RPO of 1 hour. The solution should ensure the primary and DR sites have a minimum distance of 150 miles between them.
Which of the following options could a Solutions Architect recommend to meet the company’s disaster recovery requirements?
-
A
Deploy a multi-Region solution ensuring the minimum distance requirements are met. Take regular snapshots of the web and application EC2 instances and replicate them to the DR Region. Launch an Amazon cross-Region read replica in the DR Region that can be promoted. Use AWS CloudFormation to launch the web and application tiers in the event of a disaster. Fail over the RDS DB to the standby instance and use Amazon Route 53 to switch traffic to the DR Region.
-
B
Deploy a multi-Region solution ensuring the minimum distance requirements are met. The DR environment should be configured using the pilot light strategy with database replication to a standby database with a minimum of capacity. Use AWS CloudFormation to launch web servers, application servers and load balancers in case of a disaster. Use Amazon Route 53 to switch traffic to the DR Region and vertically scale the Amazon RDS DB instance.
-
C
Deploy a scaled-down version of the production environment in a separate AWS Region ensuring the minimum distance requirements are met. The DR environment should include one instance for the web tier and one instance for the application tier. Create another database instance and configure source-replica replication for MySQL. Configure Auto Scaling for the web and app tiers to they can scale based on load. Use Amazon Route 53 to switch traffic to the DR Region.
-
D
Deploy a multi-Region solution ensuring the minimum distance requirements are met. The DR environment should include fully-functional web, application, and database tiers in both regions with equivalent capacity. Activate the primary database in one region only and the standby database in the other region. Use Amazon Route 53 to automatically switch traffic from one region to another using health check routing policies.
Xem giải thích
Đáp án
C — Triển khai một bản thu nhỏ của môi trường production ở Region khác đảm bảo khoảng cách tối thiểu; môi trường DR gồm một instance cho tầng web và một cho tầng ứng dụng; tạo một cơ sở dữ liệu khác và cấu hình sao chép source-replica cho MySQL; bật Auto Scaling cho tầng web và app; dùng Route 53 chuyển lưu lượng sang Region DR.
Vì sao đúng
Ba chỉ tiêu của đề — RTO 5 phút, RPO 1 giờ, chi phí hợp lý — chỉ thẳng tới warm standby.
| Chỉ tiêu | Cách đáp ứng |
|---|---|
| RTO 5 phút | máy đã chạy sẵn, chỉ cần chuyển lưu lượng |
| RPO 1 giờ | sao chép MySQL liên tục thừa sức đạt |
| Chi phí hợp lý | quy mô nhỏ, tự co giãn lên khi cần |
| Cách nhau ít nhất 150 dặm | Region khác đảm bảo điều đó |
⚠ Điểm mấu chốt: RTO 5 phút không cho phép dựng bất cứ thứ gì từ đầu:
RTO 5 phút
↓
Trừ thời gian phát hiện và quyết định → còn rất ít
↓
Không đủ để chạy CloudFormation dựng web server, app server, load balancer
↓
→ hạ tầng phải ĐANG CHẠY, chỉ cần nhận tải và co giãn lên
Đây là lý do phương án B (pilot light với CloudFormation dựng khi có sự cố) không đạt.
| Chiến lược | Tầng tính toán | RTO điển hình |
|---|---|---|
| Pilot Light | tắt | chục phút |
| Warm Standby | chạy quy mô nhỏ | phút |
| Active/Active | đầy đủ | gần bằng 0 |
⚠ Auto Scaling ở Region DR phải được cấu hình sẵn và đã kiểm chứng:
Môi trường DR chạy một instance mỗi tầng
↓
Chuyển vùng → tải production đổ sang
↓
Auto Scaling phải nhân lên rất nhanh
↓
→ cần đủ hạn mức vCPU ở Region đó, và AMI đã sao chép sẵn
Vì sao các phương án khác sai
-
B (đa Region với chiến lược pilot light; dùng CloudFormation dựng web server, app server và load balancer khi có sự cố) — đây là phương án gần nhất và pilot light là một chiến lược DR hoàn toàn hợp lệ, rẻ hơn warm standby. Nhưng nó không đạt RTO 5 phút: dựng load balancer, khởi động instance, chờ health check qua — tất cả sau khi sự cố đã bắt đầu — thường mất từ mười phút trở lên. Pilot light hợp với RTO tính bằng chục phút tới giờ.
-
D (đa Region với hạ tầng ĐẦY ĐỦ, công suất tương đương ở cả hai; chỉ kích hoạt cơ sở dữ liệu chính ở một Region) — đạt RTO nhưng đắt nhất: bạn trả tiền cho một bản sao production đầy đủ chạy không tải. Đề nói "cost-efficient", nên đây là mức đầu tư quá lớn cho RTO 5 phút mà warm standby cũng đạt được.
-
A (đa Region; snapshot EC2 định kỳ và sao chép sang Region DR; cross-Region read replica; CloudFormation dựng web và app tier khi có sự cố) — cùng vấn đề với B ở vế tính toán: dựng khi sự cố xảy ra thì không kịp RTO 5 phút. Câu "fail over the RDS DB to the standby instance" cũng lẫn giữa Multi-AZ (trong Region) và cross-Region replica.
Ghi nhớ
⚠ Bốn chiến lược DR và RTO tương ứng — bảng phải thuộc: | Chiến lược | Tầng dữ liệu | Tầng tính toán | RTO | Chi phí | |---|---|---|---|---| | Backup & Restore | sao lưu | không có gì | giờ | thấp nhất | | Pilot Light | replica chạy | tắt | chục phút | thấp | | Warm Standby | replica chạy | chạy quy mô nhỏ | phút | trung bình | | Active/Active | multi-master | đầy đủ | gần 0 | cao nhất |
Từ khoá nhận diện:
"RTO 5 phút" → hạ tầng phải đang chạy — warm standby trở lên "cost-efficient" + RTO phút → warm standby, không phải active/active "dựng bằng CloudFormation khi có sự cố" → pilot light, RTO chục phút "công suất tương đương ở cả hai Region" → đắt, chỉ cần khi RTO gần 0 "khoảng cách tối thiểu 150 dặm" → Region khác, không phải AZ khác
| Vì sao khoảng cách quan trọng | Lý do |
|---|---|
| Thảm hoạ tự nhiên | bão, động đất, lụt ảnh hưởng cả vùng |
| Yêu cầu tuân thủ | nhiều quy định tài chính đòi khoảng cách tối thiểu |
| AZ trong một Region | thường cách nhau vài chục km — không đủ |
| Chuẩn bị cho warm standby | Việc |
|---|---|
| AMI sao chép sang Region DR | máy không khởi động được nếu thiếu |
| Hạn mức vCPU đã nâng | xin trước, không xin lúc khủng hoảng |
| Auto Scaling group cấu hình sẵn | min nhỏ, max bằng production |
| Route 53 health check | để chuyển vùng tự động |
Ba việc kiểm chứng: | Việc | Cách | |---|---| | RTO thật | diễn tập chuyển vùng, bấm giờ từ lúc alarm kêu | | Region DR có gánh nổi không | chuyển toàn bộ tải sang và để chạy thật vài giờ | | Sao chép có bắt kịp không | độ trễ sao chép MySQL |
Và một lời khuyên: hãy chuyển toàn bộ tải sang Region DR và để nó chạy thật vài giờ, ít nhất mỗi quý. Warm standby chạy ở quy mô nhỏ suốt thời gian bình thường, nghĩa là nó chưa bao giờ được kiểm chứng dưới tải thật. Auto Scaling có nhân lên kịp không, hạn mức có đủ không, cơ sở dữ liệu replica có chịu nổi tải ghi không — tất cả đều là giả định cho tới khi bạn thử. Và nếu lần đầu tiên chúng được thử lại chính là lúc Region chính đang cháy, thì bạn đang gỡ hai sự cố cùng một lúc.