Ngân hàng đề — AWS Certified SysOps Administrator Associate
Tìm thấy 936 câu.
As a SysOps Administator, you are writing a CloudFormation template in YAML. The template consists of an EC2 instance creation and one RDS resource. Once your resources are created you would like to output the connection endpoint for the RDS database.
Which intrinsic function returns the value needed?
-
A
!GetAtt -
B
!Ref -
C
!Sub -
D
!FindInMap
Xem giải thích
Đáp án
A — !GetAtt
Vì sao đúng
Endpoint kết nối của một RDS instance là một thuộc tính của tài nguyên đó, không phải định danh chính của nó — nên hàm cần dùng là GetAtt.
| Cần lấy gì | Hàm |
|---|---|
| Thuộc tính của tài nguyên | !GetAtt |
| Giá trị mặc định của tài nguyên (thường là id) | !Ref |
⚠ Điểm mấu chốt: Ref trả về một giá trị duy nhất do AWS định nghĩa cho từng loại tài nguyên — muốn thứ khác thì phải dùng GetAtt:
!Ref cho RDS DBInstance → trả về identifier của instance
↓
Không phải endpoint
↓
!GetAtt MyDB.Endpoint.Address → trả về tên máy chủ để kết nối
!GetAtt MyDB.Endpoint.Port → trả về cổng
Outputs:
DiaChiCSDL:
Value: !GetAtt CoSoDuLieu.Endpoint.Address
CongCSDL:
Value: !GetAtt CoSoDuLieu.Endpoint.Port
⚠ Ref trả về gì phụ thuộc từng loại tài nguyên — phải tra tài liệu: | Tài nguyên | !Ref trả về | |---|---| | EC2 instance | instance id | | S3 bucket | tên bucket | | RDS DBInstance | DB instance identifier | | IAM role | tên role | | Security group | group id |
Vì sao các phương án khác sai
-
B (
!Ref) — đây là phương án gần nhất và nó là hàm được dùng nhiều nhất trong CloudFormation. Nhưng với RDS,Reftrả về identifier của instance, không phải endpoint. Đây là nhầm lẫn phổ biến nhất giữa hai hàm, và cách phân biệt là:Refcho một giá trị đã định sẵn,GetAttcho bất kỳ thuộc tính nào được tài liệu liệt kê. -
C (
!Sub) — hàm thay thế chuỗi: nó chèn giá trị biến vào một chuỗi, ví dụ!Sub "${TenStack}-bucket". Nó không tự lấy được thuộc tính; muốn chèn endpoint thì vẫn phải gọiGetAttbên trong nó. -
D (
!FindInMap) — tra giá trị trong khốiMappings, ví dụ tìm AMI id theo Region. Nó đọc bảng tra cứu tĩnh mà bạn tự khai, không đọc thuộc tính của tài nguyên.
Ghi nhớ
⚠ Các hàm nội tại hay dùng của CloudFormation — bảng phải thuộc: | Hàm | Việc | |---|---| | !Ref | giá trị mặc định của tài nguyên, hoặc giá trị của Parameter | | !GetAtt | một thuộc tính cụ thể của tài nguyên | | !Sub | thay thế biến trong chuỗi | | !FindInMap | tra bảng Mappings | | !Join, !Select, !Split | thao tác chuỗi và danh sách | | !ImportValue | đọc Output đã export từ stack khác | | !If, !Equals, !Not | logic điều kiện |
Từ khoá nhận diện:
"endpoint", "ARN", "DNS name", thuộc tính bất kỳ →
!GetAtt"id của tài nguyên" →!Refchèn giá trị vào chuỗi →!Subtra AMI theo Region →!FindInMapdùng Output của stack khác →!ImportValue
Cú pháp GetAtt |
Hai dạng |
|---|---|
| Dạng ngắn YAML | !GetAtt TenTaiNguyen.TenThuocTinh |
| Dạng đầy đủ | Fn::GetAtt: [TenTaiNguyen, TenThuocTinh] |
| Thuộc tính lồng | !GetAtt MyDB.Endpoint.Address |
| Thuộc tính hay dùng | Tài nguyên |
|---|---|
.Endpoint.Address, .Endpoint.Port |
RDS |
.DNSName |
ELB |
.Arn |
hầu hết tài nguyên |
.PublicIp, .PrivateIp |
EC2 |
.DomainName |
CloudFront |
Ba việc kiểm chứng: | Việc | Cách | |---|---| | Tài nguyên có thuộc tính nào | tra phần Return values trong tài liệu của loại tài nguyên đó | | Output có đúng không | xem tab Outputs của stack sau khi tạo | | Template có hợp lệ không | aws cloudformation validate-template |
Và một lời khuyên: hãy export những Output mà stack khác cần, thay vì chép tay endpoint sang template khác. !ImportValue tạo ra một liên kết thật giữa hai stack: CloudFormation biết stack B đang phụ thuộc vào Output của stack A, nên nó chặn việc xoá hoặc sửa Output đó khi còn ai đang dùng. Chép tay thì không có ràng buộc nào, và ngày ai đó dựng lại stack A với endpoint mới, stack B vẫn trỏ vào địa chỉ cũ mà không có gì cảnh báo.
A systems administrator is configuring Amazon EC2 status check alarm to publish a notification to an SNS topic when the instance fails either the instance check or system status check.
Which CloudWatch metric is the right choice for this configuration?
-
A
StatusCheckFailed_Instance -
B
StatusCheckFailed -
C
CombinedStatusCheckFailed -
D
StatusCheckFailed_System
Xem giải thích
Đáp án
B — StatusCheckFailed
Vì sao đúng
Đề đòi cảnh báo khi instance hỏng một trong hai loại kiểm tra. Có đúng một chỉ số gộp cả hai.
| Chỉ số | Bao gồm |
|---|---|
StatusCheckFailed_Instance |
chỉ kiểm tra ở mức instance |
StatusCheckFailed_System |
chỉ kiểm tra ở mức hệ thống |
StatusCheckFailed |
cả hai — bằng 1 nếu một trong hai hỏng |
⚠ Điểm mấu chốt: hai loại status check chỉ ra hai nhóm nguyên nhân khác nhau, và cách xử lý cũng khác:
System status check
↓
Vấn đề ở hạ tầng AWS: mất điện, lỗi mạng, lỗi phần cứng máy chủ vật lý
↓
→ cách chữa: STOP rồi START (máy chuyển sang phần cứng khác)
Instance status check
↓
Vấn đề bên trong máy: hệ điều hành treo, hết bộ nhớ, cấu hình mạng sai, đầy đĩa
↓
→ cách chữa: khởi động lại, hoặc sửa cấu hình
aws cloudwatch put-metric-alarm --alarm-name kiem-tra-trang-thai \
--namespace AWS/EC2 --metric-name StatusCheckFailed \
--dimensions Name=InstanceId,Value=i-0abc123 \
--statistic Maximum --period 60 --threshold 1 \
--comparison-operator GreaterThanOrEqualToThreshold \
--evaluation-periods 2 --alarm-actions <sns-arn>
⚠ Reboot KHÔNG chữa được system status check — phải stop rồi start:
Reboot: máy khởi động lại trên CÙNG phần cứng vật lý
↓
Nếu vấn đề nằm ở phần cứng đó → vẫn hỏng
↓
Stop rồi Start: AWS chuyển instance sang phần cứng KHÁC
↓
→ đây mới là cách chữa system status check
↓
→ lưu ý: dữ liệu trên instance store sẽ MẤT khi stop
Vì sao các phương án khác sai
-
A (
StatusCheckFailed_Instance) — đây là phương án gần nhất và nó là một chỉ số có thật, rất hữu ích. Nhưng nó chỉ bắt được một nửa yêu cầu: nếu system status check hỏng mà instance check vẫn tốt, alarm không kêu. -
D (
StatusCheckFailed_System) — cùng lý do, chỉ bắt nửa còn lại. -
C (
CombinedStatusCheckFailed) — không tồn tại chỉ số nào tên như vậy. Tên đúng cho chỉ số gộp làStatusCheckFailed.
Ghi nhớ
⚠ Ba chỉ số status check của EC2 — bảng phải thuộc: | Chỉ số | Bằng 1 khi | |---|---| | StatusCheckFailed_System | hạ tầng AWS có vấn đề | | StatusCheckFailed_Instance | hệ điều hành hoặc cấu hình máy có vấn đề | | StatusCheckFailed | một trong hai cái trên hỏng |
(Từ 2023 có thêm StatusCheckFailed_AttachedEBS cho vấn đề với EBS volume gắn kèm.)
Từ khoá nhận diện:
"either check fails" →
StatusCheckFailed"chỉ hạ tầng AWS" →StatusCheckFailed_System"chỉ hệ điều hành" →StatusCheckFailed_InstanceCombinedStatusCheckFailed→ LUÔN SAI, không tồn tại system check hỏng → stop rồi start, không phải reboot
| Hành động tự động khi alarm kêu | Cách |
|---|---|
recover |
AWS tự chuyển instance sang phần cứng khác — cho system check |
reboot |
khởi động lại — cho instance check |
terminate |
huỷ — dùng với ASG |
| Kết hợp | alarm gọi SNS để báo, và gọi action để tự chữa |
| Điều kiện dùng auto recovery | Nội dung |
|---|---|
| Loại instance | phần lớn dòng hiện đại hỗ trợ |
| Lưu trữ | không có instance store |
| Giữ nguyên | instance id, IP riêng, Elastic IP, metadata |
| Mất | dữ liệu trong RAM và trên instance store |
Ba việc kiểm chứng: | Việc | Cách | |---|---| | Máy đang hỏng check nào | tab Status checks trong console EC2 | | Alarm có kêu không | tạm hạ ngưỡng hoặc dùng set-alarm-state để thử | | Auto recovery có bật không | kiểm alarm action của instance |
Và một lời khuyên: hãy đặt EvaluationPeriods ít nhất là 2, đừng để alarm kêu ngay ở lần kiểm tra đầu tiên thất bại. Status check chạy mỗi phút và thỉnh thoảng có một lần trượt thoáng qua mà không phản ánh vấn đề thật — một gói tin mất, một khoảnh khắc máy bận. Nếu alarm kích hoạt ngay lập tức và gắn với hành động reboot hoặc terminate, bạn sẽ có những lần khởi động lại hoàn toàn không cần thiết, và chúng gây gián đoạn thật cho người dùng. Hai chu kỳ liên tiếp là ngưỡng đủ để loại nhiễu mà vẫn phản ứng nhanh.
A systems administration team is configuring Amazon EC2 metrics that are sent to Amazon CloudWatch for monitoring purposes. The team is looking for a metric that can help them identify the processing power required to run an application on the selected instance.
Which of the below metric should be used for this requirement?
-
A
CPUProcessPowermetric should be used to identify the processing power required -
B
CPUCreditUsagemetric should be used to identify the processing power required -
C
ResourceCountis the correct metric to identify the processing power required -
D
CPUUtilizationmetric should be used to identify the processing power required
Xem giải thích
Đáp án
D — Dùng chỉ số CPUUtilization để xác định năng lực xử lý cần thiết.
Vì sao đúng
Đề hỏi chỉ số giúp xác định năng lực xử lý mà ứng dụng cần. CPUUtilization là chỉ số cơ bản nhất của EC2 và có sẵn không cần cài gì.
| Yêu cầu | Chỉ số |
|---|---|
| Năng lực xử lý (CPU) | CPUUtilization |
| Đơn vị | phần trăm |
| Có sẵn | có, không cần agent |
⚠ Điểm mấu chốt: CloudWatch có sẵn chỉ số CPU nhưng KHÔNG có sẵn chỉ số bộ nhớ và đĩa:
Chỉ số có sẵn từ hypervisor (không cần agent)
↓
CPUUtilization, NetworkIn/Out, DiskReadOps, StatusCheck...
↓
Chỉ số cần CloudWatch agent
↓
Bộ nhớ (mem_used_percent), dung lượng đĩa còn trống (disk_used_percent),
swap, số tiến trình
↓
→ hypervisor không nhìn được vào bên trong hệ điều hành khách
Đây là kiến thức nền quan trọng nhất về giám sát EC2.
⚠ CPUUtilization cao chưa chắc là vấn đề — và thấp chưa chắc là ổn:
CPU 90% liên tục trên máy xử lý theo lô
↓
→ đó là dùng hết tài nguyên đã trả tiền, hoàn toàn tốt
CPU 20% mà ứng dụng chậm
↓
→ nút thắt nằm ở nơi khác: I/O, mạng, khoá, hoặc chờ cơ sở dữ liệu
Vì sao các phương án khác sai
-
B (
CPUCreditUsage) — đây là phương án gần nhất và nó là một chỉ số CPU có thật. Nhưng nó chỉ tồn tại với instance dòng T (burstable) và đo lượng credit đã tiêu, không đo mức sử dụng năng lực xử lý. Với instance thường, chỉ số này không có. -
A (
CPUProcessPower) — không tồn tại chỉ số nào tên như vậy. -
C (
ResourceCount) — không phải chỉ số của EC2; nó xuất hiện trong ngữ cảnh khác (ví dụ đếm tài nguyên trong Config) và không liên quan tới năng lực xử lý.
Ghi nhớ
⚠ Chỉ số EC2 có sẵn so với cần agent — bảng phải thuộc: | Có sẵn (từ hypervisor) | Cần CloudWatch agent | |---|---| | CPUUtilization | bộ nhớ | | NetworkIn, NetworkOut | dung lượng đĩa còn trống | | DiskReadOps, DiskWriteOps (instance store) | swap | | StatusCheckFailed* | số tiến trình | | CPUCreditUsage, CPUCreditBalance (chỉ dòng T) | log ứng dụng |
Từ khoá nhận diện:
"processing power" →
CPUUtilization"bộ nhớ" hoặc "dung lượng đĩa" → cần cài CloudWatch agentCPUCreditUsage→ chỉ có với instance dòng T |CPUProcessPower→ LUÔN SAI, không tồn tại CPU thấp mà chậm → tìm nút thắt ở I/O, mạng, hoặc phụ thuộc bên ngoài
| Hai chế độ giám sát EC2 | Chu kỳ |
|---|---|
| Basic monitoring | 5 phút, miễn phí |
| Detailed monitoring | 1 phút, tính phí |
| Khi nào cần detailed | co giãn tự động cần phản ứng nhanh |
| Chỉ số dòng T cần nhớ | Nghĩa |
|---|---|
CPUCreditBalance |
credit còn lại |
CPUCreditUsage |
credit đã tiêu trong chu kỳ |
CPUSurplusCreditBalance |
credit vay khi bật unlimited mode — sẽ bị tính tiền |
| Chỉ số hay dùng để co giãn | Nội dung |
|---|---|
CPUUtilization |
phổ biến nhất |
ALBRequestCountPerTarget |
phản ánh tải thật tốt hơn cho ứng dụng web |
| Chỉ số tuỳ chỉnh | độ sâu hàng đợi, số kết nối |
Ba việc kiểm chứng: | Việc | Cách | |---|---| | Có chỉ số bộ nhớ không | tìm namespace CWAgent — không có nghĩa là chưa cài agent | | Chu kỳ là bao lâu | kiểm detailed monitoring đã bật chưa | | CPU có phải nút thắt không | so CPUUtilization với độ trễ ứng dụng |
Và một lời khuyên: hãy cài CloudWatch agent để có chỉ số bộ nhớ trước khi chọn kích cỡ instance. Đây là điểm mù phổ biến nhất trong việc right-size: bạn nhìn CPUUtilization thấy 20% và kết luận máy quá lớn, rồi giảm xuống một lớp nhỏ hơn — và ứng dụng bắt đầu bị OOM killer giết tiến trình, vì thứ nó thiếu là bộ nhớ chứ không phải CPU. Chỉ số đó không tồn tại trong CloudWatch cho tới khi bạn cài agent, nên quyết định của bạn được đưa ra với đúng một nửa bức tranh.
An organization has multiple AWS accounts to manage different lines of business. A user from the Finance account has to access reports stored in Amazon S3 buckets of two other AWS accounts (belonging to the HR and Audit departments) and copy these reports back to the S3 bucket in the Finance account. The user has requested the necessary permissions from the systems administrator to perform this task.
As a SysOps Administrator, how will you configure a solution for this requirement?
-
A
Create IAM roles in the HR, Audit accounts, which can be assumed by the user from the Finance account when the user needs to access the S3 buckets of the accounts
-
B
Create identity-based IAM policy in the Finance account that allows the user to make a request to the S3 buckets in the HR and Audit accounts. Also, create resource-based IAM policies in the HR, Audit accounts that will allow the requester from the Finance account to access the respective S3 buckets
-
C
Create resource-based policies in the HR, Audit accounts that will allow the requester from the Finance account to access the respective S3 buckets
-
D
Create resource-level permissions in the HR, Audit accounts to allow access to respective S3 buckets for the user in the Finance account
Xem giải thích
Đáp án
B — Tạo identity-based IAM policy ở tài khoản Finance cho phép người dùng gửi request tới bucket ở HR và Audit; đồng thời tạo resource-based policy ở HR và Audit cho phép người yêu cầu từ Finance truy cập bucket tương ứng.
Vì sao đúng
Đây là truy cập liên tài khoản, và quy tắc đánh giá quyền khác hẳn so với trong cùng một tài khoản.
| Trường hợp | Cần gì |
|---|---|
| Cùng tài khoản | một trong hai policy cho phép là đủ |
| Khác tài khoản | CẢ HAI cùng phải cho phép |
⚠ Điểm mấu chốt: truy cập liên tài khoản đòi cả hai phía cùng đồng ý — thiếu một bên là bị từ chối:
Người dùng ở Finance gọi s3:GetObject vào bucket của HR
↓
Tài khoản Finance kiểm: identity policy của user có cho phép không?
↓
Tài khoản HR kiểm: bucket policy có cho phép principal đó không?
↓
→ chỉ khi CẢ HAI cùng Allow thì request mới thành công
// Ở tài khoản HR — bucket policy
{
"Effect": "Allow",
"Principal": {"AWS": "arn:aws:iam::<finance>:user/nguoi-dung"},
"Action": "s3:GetObject",
"Resource": "arn:aws:s3:::bao-cao-hr/*"
}
⚠ Object do tài khoản khác ghi vào có thể không thuộc về chủ bucket:
Người dùng Finance chép báo cáo VÀO bucket của Finance → không vấn đề
Nhưng nếu ghi vào bucket của tài khoản khác
↓
Với chế độ ownership cũ, object thuộc về người ghi
↓
→ chủ bucket có thể không đọc được chính object trong bucket của mình
→ chế độ "Bucket owner enforced" (mặc định từ 4/2023) đã sửa điều này
Vì sao các phương án khác sai
-
A (tạo IAM role ở HR và Audit để người dùng Finance assume khi cần truy cập) — đây là phương án gần nhất và nó là một cách làm hoàn toàn hợp lệ, thậm chí thường được ưa chuộng hơn trong thực tế. Nhưng nó thay đổi quy trình làm việc: người dùng phải chủ động assume role trước mỗi lần truy cập, và khi đó họ mang danh tính của tài khoản kia — nên việc chép ngược về bucket của Finance lại cần thêm một bước hoặc thêm quyền. Với yêu cầu "đọc từ hai nơi rồi ghi về nơi thứ ba", cấp quyền trực tiếp cho chính danh tính của họ đơn giản hơn.
-
C (chỉ tạo resource-based policy ở HR và Audit) — thiếu một nửa: identity policy ở tài khoản Finance cũng phải cho phép. Không có nó thì request bị chặn ngay ở phía người gọi.
-
D (tạo resource-level permission ở HR và Audit) — mơ hồ về thuật ngữ. "Resource-level permission" thường chỉ việc giới hạn policy tới một ARN cụ thể, không phải một loại policy riêng. Và như C, nó vẫn thiếu vế identity policy.
Ghi nhớ
⚠ Quy tắc đánh giá quyền — bảng phải thuộc: | Trường hợp | Yêu cầu | |---|---| | Cùng tài khoản | một policy cho phép là đủ | | Khác tài khoản | cả identity policy LẪN resource policy | | Deny tường minh ở bất kỳ đâu | thắng tất cả |
Từ khoá nhận diện:
truy cập liên tài khoản → cần cả hai phía cho phép "chỉ resource-based policy" → thiếu identity policy assume role → hợp lệ, nhưng đổi quy trình làm việc object thuộc về ai → kiểm chế độ Object Ownership
| Hai cách truy cập liên tài khoản với S3 | Đặc điểm |
|---|---|
| Identity + resource policy | người dùng giữ danh tính của mình — đơn giản khi cần ghi về tài khoản gốc |
| Assume role | mượn danh tính tài khoản kia — sạch hơn về audit, nhưng thêm một bước |
| Dịch vụ có resource-based policy | Danh sách |
|---|---|
| S3 (bucket policy) | có |
| SQS, SNS | có |
| Lambda, KMS, Secrets Manager | có |
| EC2, RDS | không — chỉ dùng identity policy |
| Khi ghi object sang tài khoản khác | Nên |
|---|---|
| Chế độ ownership | Bucket owner enforced |
| Nếu dùng chế độ cũ | thêm ACL bucket-owner-full-control |
Ba việc kiểm chứng: | Việc | Cách | |---|---| | Bị chặn ở phía nào | CloudTrail ở tài khoản sở hữu bucket | | Quyền hiệu dụng | aws iam simulate-principal-policy | | Object thuộc về ai | aws s3api get-object-acl |
Và một lời khuyên: hãy đọc CloudTrail ở tài khoản sở hữu bucket, không phải ở tài khoản của người gọi. Với truy cập liên tài khoản, cả hai bên đều ghi lại sự kiện, nhưng chỉ bản ghi ở phía tài nguyên mới thường kèm errorMessage nói rõ chính sách nào đã từ chối. Đội ở tài khoản Finance sẽ nhìn vào log của chính họ, thấy AccessDenied không giải thích gì, và bắt đầu rà soát IAM policy của mình — nơi mọi thứ đều đúng.
A retail company is working on moving their technology infrastructure to AWS Cloud. The company has developed several custom scripts to monitor the instances hosting their applications and want to reuse these scripts on AWS Cloud. The development team is looking at a way to disable the pre-existing Amazon EC2 status checks.
As a SysOps Administrator, which of the following will you suggest to meet the given requirement?
-
A
Amazon EC2 automated checks to identify hardware issues cannot be disabled. Automated checks for software issues can however be disabled
-
B
Amazon EC2 status checks are interwoven into CloudWatch metrics. You can disable EC2 instance status checks from the CloudWatch metrics console
-
C
Status checks are built into Amazon EC2, so they cannot be disabled, but can be deleted from active configuration
-
D
Status checks are built into Amazon EC2, so they cannot be disabled or deleted
Xem giải thích
Đáp án
D — Status check được xây sẵn trong Amazon EC2 nên không thể tắt cũng không thể xoá.
Vì sao đúng
Đề hỏi cách tắt status check có sẵn để thay bằng script tự viết. Câu trả lời là không có cách nào.
| Sự thật | Nội dung |
|---|---|
| Status check là một phần của EC2 | không phải tính năng bật/tắt |
| Chạy mỗi phút | tự động, miễn phí |
| Không tắt, không xoá được | — |
⚠ Điểm mấu chốt: script tự viết BỔ SUNG cho status check, không thay thế nó:
Status check của AWS
↓
Nhìn từ bên ngoài: máy có phản hồi không, hạ tầng có khoẻ không
↓
Script giám sát của bạn
↓
Nhìn từ bên trong: ứng dụng có chạy đúng không, hàng đợi có tồn không
↓
→ hai góc nhìn khác nhau, giữ cả hai là đúng
Không có lý do gì phải tắt status check: nó miễn phí, không tiêu tài nguyên của máy, và bắt được những sự cố mà script bên trong không thể phát hiện — ví dụ máy treo hoàn toàn.
⚠ Điều bạn tắt được là ALARM, không phải bản thân status check:
Không tắt được: bản thân việc kiểm tra
Tắt được: CloudWatch alarm bạn tạo dựa trên chỉ số StatusCheckFailed
↓
→ nếu script của bạn đã bao phủ, chỉ cần không tạo alarm trùng lặp
Vì sao các phương án khác sai
-
C (status check được xây sẵn nên không tắt được, nhưng có thể xoá khỏi cấu hình đang chạy) — đây là phương án gần nhất và nửa đầu của nó chính xác. Nhưng "xoá khỏi cấu hình đang chạy" là một thao tác không tồn tại: không có nơi nào liệt kê status check như một mục cấu hình để gỡ bỏ.
-
A (kiểm tra phần cứng không tắt được, nhưng kiểm tra phần mềm thì tắt được) — không có sự phân biệt nào như vậy. Cả system check lẫn instance check đều không tắt được.
-
B (status check gắn với CloudWatch metric, có thể tắt từ console CloudWatch metric) — nhầm hai thứ. CloudWatch nhận và hiển thị chỉ số status check, nhưng nó không điều khiển việc kiểm tra. Và console CloudWatch không có nút tắt chỉ số.
Ghi nhớ
⚠ Hai loại status check của EC2 — bảng phải thuộc: | Loại | Kiểm gì | Cách chữa | |---|---|---| | System status check | hạ tầng AWS: điện, mạng, phần cứng | stop rồi start | | Instance status check | hệ điều hành, cấu hình mạng, đầy đĩa | reboot hoặc sửa cấu hình |
Từ khoá nhận diện:
"tắt status check" → không thể, nó là một phần của EC2 "xoá status check khỏi cấu hình" → không tồn tại thao tác đó system check hỏng → stop/start, KHÔNG phải reboot instance check hỏng → vấn đề bên trong máy | script riêng → bổ sung, không thay thế
| Bổ sung giám sát của riêng bạn | Công cụ |
|---|---|
| CloudWatch agent | chỉ số hệ thống và log |
| Custom metric | đẩy chỉ số nghiệp vụ lên CloudWatch |
| CloudWatch Synthetics | canary gọi endpoint từ bên ngoài |
| Systems Manager | kiểm kê, tuân thủ, chạy lệnh |
| Tự chữa khi status check hỏng | Cách |
|---|---|
Alarm action recover |
AWS chuyển instance sang phần cứng khác |
Alarm action reboot |
cho instance check |
| Trong ASG | health check tự thay máy hỏng |
Ba việc kiểm chứng: | Việc | Cách | |---|---| | Máy đang hỏng check nào | tab Status checks trong console EC2 | | Có alarm nào không | describe-alarms lọc theo instance | | Script riêng có chạy không | kiểm chỉ số tuỳ chỉnh trong CloudWatch |
Và một lời khuyên: hãy giữ status check của AWS và thêm giám sát của riêng bạn bên cạnh, đừng coi chúng là hai lựa chọn loại trừ nhau. Script bên trong máy chỉ báo cáo được khi máy còn chạy — nghĩa là đúng vào lúc sự cố nghiêm trọng nhất, khi hệ điều hành treo hoặc phần cứng hỏng, nó im lặng hoàn toàn. Status check nhìn từ bên ngoài nên nó vẫn phát hiện được, và đó chính là loại sự cố bạn cần biết nhất.
As a SysOps Administrator, you create and maintain various system configurations for the teams you work with. You have created a CloudFront distribution with origin as an Amazon S3 bucket. The configuration has worked fine so far. However, for a few hours now, an error similar to this has cropped up - The authorization header is malformed; the region '<AWS Region>' is wrong; expecting '<AWS Region>'.
What is the reason for this error and how will you fix it?
-
A
This error indicates that when CloudFront forwarded a request to the origin, the origin didn’t respond before the request expired. This could be an access issue caused by a firewall or a Security Group not allowing access to CloudFront to access S3 resources
-
B
This error indicates the configured Amazon S3 bucket has been moved from one AWS Region to the other. That is, deleted from one AWS Region and created with the same name in another. To fix this error, update your CloudFront distribution so that it finds the S3 bucket in the bucket's current AWS Region
-
C
This error indicates that the API key used for authorization is from an AWS Region that is different from the Region that S3 bucket is created in
-
D
This error indicates that the CloudFront distribution and Amazon S3 are not in the same AWS Region. Move one resource so that, both the CloudFront distribution and Amazon S3 are in the same AWS Region
Xem giải thích
Đáp án
B — Lỗi này cho biết bucket S3 đã được chuyển từ Region này sang Region khác (xoá ở một nơi rồi tạo lại cùng tên ở nơi khác). Cần cập nhật CloudFront distribution để nó tìm bucket ở Region hiện tại.
Vì sao đúng
Thông báo lỗi nói chính xác vấn đề: "the region '' is wrong; expecting ''" — CloudFront đang ký request cho một Region, còn bucket lại ở Region khác.
| Manh mối | Suy ra |
|---|---|
| Cấu hình đã chạy tốt trước đó | không phải lỗi cấu hình ban đầu |
| Lỗi nhắc tới hai Region khác nhau | bucket đã đổi Region |
| Lỗi về authorization header | chữ ký SigV4 gắn với Region |
⚠ Điểm mấu chốt: chữ ký SigV4 bao gồm Region — nên CloudFront phải biết đúng Region của bucket:
CloudFront ký request tới origin bằng SigV4
↓
Chữ ký chứa Region mà nó tin là bucket đang ở đó
↓
Bucket đã chuyển sang Region khác (xoá rồi tạo lại cùng tên)
↓
→ S3 từ chối: "the region is wrong; expecting..."
↓
→ cập nhật origin trong CloudFront để trỏ đúng Region
⚠ Tên bucket là toàn cầu nhưng dữ liệu thì theo Region — đó là chỗ gây nhầm lẫn:
Tên bucket duy nhất trên toàn thế giới
↓
Nhưng bucket sống ở một Region cụ thể
↓
Xoá bucket rồi tạo lại cùng tên ở Region khác là hoàn toàn hợp lệ
↓
→ mọi thứ trỏ tới nó bằng tên vẫn "tìm thấy", nhưng ký sai Region
Vì sao các phương án khác sai
-
D (lỗi này nghĩa là CloudFront và S3 không cùng Region, hãy chuyển một trong hai về cùng Region) — đây là phương án gần nhất và nó nhắc đúng tới sự lệch Region. Nhưng nó hiểu sai kiến trúc: CloudFront là dịch vụ toàn cầu, nó không nằm ở Region nào cả, nên khái niệm "cùng Region với S3" không tồn tại. Bucket ở bất kỳ Region nào cũng làm origin được — vấn đề chỉ là CloudFront phải biết đúng Region đó.
-
A (origin không phản hồi trước khi request hết hạn, có thể do firewall hoặc security group chặn) — đó là mô tả của lỗi 504 Gateway Timeout, không phải lỗi về authorization header. Và S3 không đứng sau security group.
-
C (API key dùng để uỷ quyền đến từ Region khác với Region của bucket) — không có "API key" trong luồng CloudFront tới S3; xác thực dùng OAC/OAI với chữ ký SigV4.
Ghi nhớ
⚠ Bốn lỗi thường gặp giữa CloudFront và S3 — bảng phải thuộc: | Lỗi | Nguyên nhân | |---|---| | region is wrong; expecting | origin trỏ sai Region của bucket | | 403 Access Denied | thiếu OAC/OAI trong bucket policy, hoặc Block Public Access | | 504 Gateway Timeout | origin không phản hồi kịp | | 404 Not Found | object không tồn tại, hoặc sai path pattern |
Từ khoá nhận diện:
"the region is wrong" → origin trỏ sai Region, cập nhật distribution "CloudFront phải cùng Region với S3" → SAI, CloudFront là toàn cầu "API key" trong luồng CloudFront–S3 → không tồn tại timeout → 504, khác hẳn lỗi authorization
| Hai loại endpoint S3 làm origin | Khác |
|---|---|
| REST endpoint | hỗ trợ OAC/OAI, bucket giữ riêng tư |
| Website endpoint | không hỗ trợ OAC/OAI, bucket phải công khai |
| Chuyển bucket sang Region khác | Cách đúng |
|---|---|
| Không có thao tác "di chuyển bucket" | phải tạo mới rồi chép dữ liệu |
| Công cụ | aws s3 sync, hoặc S3 Batch Replication |
| Đừng quên | cập nhật mọi thứ trỏ tới bucket: CloudFront, IAM policy, ứng dụng |
Ba việc kiểm chứng: | Việc | Cách | |---|---| | Bucket đang ở Region nào | aws s3api get-bucket-location --bucket <ten> | | Origin của CloudFront trỏ đâu | get-distribution-config, xem DomainName của origin | | Có lỗi origin nào không | log của CloudFront, hoặc chỉ số 5xxErrorRate |
Và một lời khuyên: hãy dùng tên miền đầy đủ có chứa Region cho origin S3, thay vì dạng rút gọn. Endpoint dạng bucket.s3.ap-southeast-1.amazonaws.com nêu rõ Region trong chính tên, nên khi ai đó nhìn vào cấu hình distribution, họ thấy ngay bucket được kỳ vọng ở đâu. Dạng rút gọn bucket.s3.amazonaws.com dựa vào việc chuyển hướng của S3 và che mất thông tin đó — nên khi bucket đổi Region, cấu hình vẫn trông y hệt như cũ trong khi đã sai, và không ai đọc nó mà nhận ra điều gì bất thường.
An IT company runs its server infrastructure on Amazon EC2 instances configured in an Auto Scaling Group (ASG) fronted by an Elastic Load Balancer (ELB). For ease of deployment and flexibility in scaling, this AWS architecture is maintained via an Elastic Beanstalk environment. The Technology Lead of a project has requested to automate the replacement of unhealthy Amazon EC2 instances in the Elastic Beanstalk environment.
How will you configure a solution for this requirement?
-
A
Modify the Auto Scaling Group from Amazon EC2 console directly to change the health check type to EC2
-
B
Modify the Auto Scaling Group from Amazon EC2 console directly to change the health check type to ELB
-
C
To automate the replacement of unhealthy EC2 instances, you must change the health check type of your instance's Auto Scaling group from EC2 to ELB by using a configuration file of your Beanstalk environment
-
D
To automate the replacement of unhealthy EC2 instances, you must change the health check type of your instance's Auto Scaling group from ELB to EC2 by using a configuration file of your Beanstalk environment
Xem giải thích
Đáp án
C — Để tự động thay thế EC2 instance không khoẻ, phải đổi health check type của Auto Scaling group từ EC2 sang ELB, và làm việc đó bằng CONFIGURATION FILE của môi trường Beanstalk.
Vì sao đúng
Đề có hai phần, và phần thứ hai là điểm phân biệt: đổi health check type, và đổi ở đâu.
| Yêu cầu | Cách đáp ứng |
|---|---|
| Thay máy hỏng theo góc nhìn ứng dụng | health check type = ELB |
| Môi trường do Beanstalk quản lý | sửa bằng configuration file, không sửa trực tiếp |
⚠ Điểm mấu chốt: sửa trực tiếp tài nguyên do Beanstalk quản lý sẽ bị ghi đè:
Sửa ASG từ console EC2
↓
Beanstalk không biết về thay đổi đó
↓
Lần cập nhật môi trường tiếp theo, Beanstalk dựng lại theo cấu hình của nó
↓
→ thay đổi của bạn biến mất, không có cảnh báo nào
↓
Sửa bằng .ebextensions
↓
Thay đổi trở thành một phần cấu hình môi trường, tồn tại qua mọi lần cập nhật
# .ebextensions/autoscaling.config
Resources:
AWSEBAutoScalingGroup:
Type: "AWS::AutoScaling::AutoScalingGroup"
Properties:
HealthCheckType: ELB
HealthCheckGracePeriod: 300
⚠ EC2 health check chỉ thấy máy còn sống — ELB health check thấy ứng dụng còn phục vụ:
EC2 health check
↓
Máy đang chạy, status check qua → coi là khoẻ
Kể cả khi ứng dụng đã treo
↓
ELB health check
↓
Gọi một endpoint của ứng dụng, đọc mã phản hồi
↓
→ ứng dụng treo → target unhealthy → ASG thay máy
Vì sao các phương án khác sai
-
B (sửa ASG trực tiếp từ console EC2 để đổi health check type sang ELB) — đây là phương án gần nhất và nó chọn đúng health check type. Nhưng nó sửa sai chỗ: tài nguyên do Beanstalk tạo và quản lý, nên thay đổi thủ công sẽ bị ghi đè ở lần cập nhật môi trường tiếp theo. Đây là bẫy kiểm tra hiểu biết về cách Beanstalk quản lý tài nguyên.
-
A (sửa trực tiếp từ console EC2 để đổi sang EC2) — sai cả hai vế: sai chỗ sửa, và EC2 là giá trị mặc định đang gây ra vấn đề.
-
D (dùng configuration file để đổi từ ELB sang EC2) — đúng chỗ sửa nhưng đảo ngược chiều: đổi sang EC2 làm health check kém nhạy hơn, đúng thứ đề muốn tránh.
Ghi nhớ
⚠ Hai loại health check của Auto Scaling group — bảng phải thuộc: | Loại | Kiểm gì | |---|---| | EC2 (mặc định) | status check của instance — máy còn sống | | ELB | health check của load balancer — ứng dụng còn phục vụ |
Từ khoá nhận diện:
"thay thế instance không khoẻ theo góc nhìn ứng dụng" → health check type ELB môi trường Beanstalk → sửa bằng
.ebextensions, không sửa trực tiếp sửa tài nguyên do Beanstalk quản lý bằng tay → sẽ bị ghi đè đổi sang EC2 → kém nhạy hơn, ngược yêu cầu
| Cách tuỳ chỉnh môi trường Beanstalk | Nội dung |
|---|---|
.ebextensions/*.config |
trong gói mã nguồn — bền qua mọi lần cập nhật |
| Configuration option trong console | cũng bền, nhưng ít linh hoạt hơn |
| Sửa tài nguyên trực tiếp | bị ghi đè — đừng làm |
| Saved configuration | lưu lại bộ cấu hình để tái dùng |
HealthCheckGracePeriod |
Vì sao quan trọng |
|---|---|
| Việc | thời gian chờ trước khi bắt đầu tính health check |
| Nếu quá ngắn | máy bị coi là hỏng khi còn đang khởi động → vòng lặp thay máy vô tận |
| Giá trị hợp lý | dài hơn thời gian khởi động ứng dụng |
Ba việc kiểm chứng: | Việc | Cách | |---|---| | Health check type hiện tại | describe-auto-scaling-groups, xem HealthCheckType | | Cấu hình có bền không | cập nhật môi trường rồi kiểm lại | | Endpoint health check có đủ sâu không | nó phải chạm tới phụ thuộc quan trọng |
Và một lời khuyên: hãy đặt HealthCheckGracePeriod dài hơn thời gian khởi động thật của ứng dụng trước khi chuyển sang ELB health check. Đây là chỗ một cải thiện đúng đắn gây ra sự cố tệ hơn: ELB health check nhạy hơn nhiều, nên nếu ứng dụng của bạn mất ba phút để sẵn sàng mà grace period chỉ có sáu mươi giây, mọi instance mới đều bị đánh dấu hỏng trước khi kịp phục vụ — và ASG rơi vào vòng lặp dựng máy rồi huỷ máy liên tục. Nó trông giống hệt một sự cố hạ tầng, nhưng nguyên nhân là một tham số thời gian.
Your company has decided that certain users should have Multi-Factor Authentication (MFA) enabled for their sign-in credentials. A newly hired manager has a Gemalto MFA device that he used in his earlier company. He has approached you to configure it for his AWS account.
How will you configure his existing Gemalto MFA device so he can seamlessly connect with AWS services in the new company?
-
A
AWS MFA does not support the use of your existing Gemalto device
-
B
Security constraints mandate that sharing of secrets between multiple parties can only happen in edge cases. Hence, formal approval is needed between AWS and the previous company to use the same Gemalto device
-
C
AWS MFA relies on knowing a unique secret associated with your hardware MFA. This has to be generated again with AWS MFA for the Gemalto device to work with AWS
-
D
You can re-use an existing Gemalto device with AWS MFA, as Gemalto devices do not share any secrets between multiple parties
Xem giải thích
Đáp án
A — AWS MFA không hỗ trợ dùng lại thiết bị Gemalto sẵn có của bạn.
Vì sao đúng
Thiết bị MFA phần cứng hoạt động dựa trên một bí mật dùng chung được nạp vào thiết bị lúc sản xuất. Bí mật đó chỉ được chia sẻ với một bên.
| Sự thật | Nội dung |
|---|---|
| Thiết bị MFA phần cứng chứa một seed | nạp lúc sản xuất |
| Seed đó được chia sẻ với một nhà cung cấp dịch vụ | AWS, hoặc công ty cũ |
| Không nạp lại được | thiết bị không cho ghi seed mới |
⚠ Điểm mấu chốt: bí mật trong thiết bị phần cứng là cố định và chỉ đăng ký được với một bên:
Thiết bị Gemalto đã đăng ký với hệ thống của công ty cũ
↓
Seed của nó nằm trong hệ thống đó
↓
AWS không có seed ấy và không có cách nào lấy được
↓
→ không xác minh được mã OTP mà thiết bị sinh ra
↓
→ phải mua thiết bị mới đã đăng ký với AWS, hoặc dùng lựa chọn khác
⚠ Có nhiều lựa chọn MFA khác không cần mua thiết bị: | Loại | Chi phí | |---|---| | Virtual MFA (Google Authenticator, Authy) | miễn phí — điện thoại là đủ | | Passkey / FIDO2 | thiết bị hoặc sinh trắc học có sẵn trên máy | | Hardware TOTP token | phải mua từ nhà cung cấp AWS hỗ trợ | | U2F security key | YubiKey và tương đương |
Với một quản lý mới cần MFA ngay, virtual MFA là lựa chọn nhanh nhất và không tốn gì.
Vì sao các phương án khác sai
-
C (AWS MFA dựa trên một bí mật duy nhất gắn với thiết bị phần cứng; phải sinh lại bí mật đó với AWS để thiết bị Gemalto hoạt động) — đây là phương án gần nhất và nửa đầu của nó mô tả đúng cơ chế: MFA phần cứng thật sự dựa trên một bí mật gắn với thiết bị. Nhưng kết luận sai: bí mật đó không sinh lại được trên một thiết bị đã xuất xưởng. Đó chính là lý do khiến thiết bị an toàn — nếu ai cũng nạp lại được seed thì cơ chế mất hết ý nghĩa.
-
D (dùng lại được vì thiết bị Gemalto không chia sẻ bí mật giữa nhiều bên) — hiểu ngược: chính vì không chia sẻ với nhiều bên nên nó chỉ dùng được với một bên, và bên đó là công ty cũ.
-
B (cần phê duyệt chính thức giữa AWS và công ty cũ để dùng chung thiết bị) — không có quy trình nào như vậy; đây không phải vấn đề thủ tục mà là giới hạn kỹ thuật.
Ghi nhớ
⚠ Bốn loại MFA mà AWS hỗ trợ — bảng phải thuộc: | Loại | Đặc điểm | |---|---| | Virtual MFA | ứng dụng trên điện thoại, miễn phí | | Passkey / FIDO2 | vân tay, khuôn mặt, hoặc security key | | Hardware TOTP token | thiết bị vật lý sinh mã 6 số | | U2F security key | cắm USB hoặc NFC |
Từ khoá nhận diện:
"dùng lại thiết bị MFA từ nơi khác" → không được "sinh lại bí mật cho thiết bị cũ" → SAI, seed cố định từ nhà máy cần MFA nhanh và rẻ → virtual MFA yêu cầu bảo mật cao nhất → FIDO2 security key |
| Thực hành tốt với MFA | Nội dung |
|---|---|
| Bắt buộc cho root account | ưu tiên security key phần cứng |
| Bắt buộc cho user có quyền cao | qua điều kiện IAM |
| Nhiều thiết bị mỗi user | AWS hỗ trợ tới 8 thiết bị MFA cho một danh tính |
| Ép bằng chính sách | điều kiện aws:MultiFactorAuthPresent |
| Điều kiện IAM về MFA | Ví dụ |
|---|---|
| Chặn mọi hành động nếu chưa MFA | "Bool": {"aws:MultiFactorAuthPresent": "false"} với Deny |
| Bắt buộc khi assume role | đặt trong trust policy |
| Giới hạn tuổi phiên MFA | aws:MultiFactorAuthAge |
Ba việc kiểm chứng: | Việc | Cách | |---|---| | Ai chưa bật MFA | báo cáo IAM credential report | | MFA có bắt buộc thật không | thử một hành động với phiên chưa MFA | | Root có MFA chưa | kiểm trang Security credentials của root |
Và một lời khuyên: hãy cho phép mỗi người đăng ký nhiều hơn một thiết bị MFA. AWS hỗ trợ tới tám thiết bị cho một danh tính, và điều đó giải quyết trọn vẹn kịch bản tệ nhất của MFA: người dùng mất điện thoại, hoặc đổi máy mà quên chuyển ứng dụng xác thực. Không có thiết bị dự phòng, quy trình khôi phục đòi liên hệ AWS Support và xác minh danh tính — mất hàng giờ tới hàng ngày. Với một thiết bị thứ hai đã đăng ký sẵn, đó chỉ là chuyện mở ứng dụng trên máy khác.
A healthcare web application has been deployed on Amazon EC2 instances behind an Application Load Balancer (ALB). The application worked well in the development and test environments. In production, however, users are getting logged off and are being asked to log in several times in an hour.
How will you fix this issue and what precaution needs to be taken to avoid recurrence of the issue?
-
A
Enable Sticky Sessions on Application Load Balancer
-
B
Routing configuration of a Load Balancer is used to route traffic to targets. Use this configuration to set the protocol and port number to the correct one
-
C
Use Slow Start Mode when registering the targets to ALB. This assures that the instances get enough time to warm up and hence will not lose the cached data
-
D
Enable logging on ALB and check the logs to see the error being generated
Xem giải thích
Đáp án
A — Bật Sticky Sessions trên Application Load Balancer.
Vì sao đúng
Triệu chứng của đề rất đặc trưng: người dùng bị đăng xuất nhiều lần trong một giờ, và chỉ xảy ra ở production.
| Manh mối | Suy ra |
|---|---|
| Dev và test chạy tốt | thường chỉ có một instance |
| Production bị đăng xuất liên tục | nhiều instance, phiên lưu cục bộ |
| Đăng xuất nhiều lần mỗi giờ | mỗi request rơi vào máy khác nhau |
⚠ Điểm mấu chốt: phiên lưu trên từng máy + load balancer phân phối đều = mất phiên liên tục:
Người dùng đăng nhập → phiên được lưu trên máy A
↓
Request tiếp theo → ALB gửi tới máy B
↓
Máy B không có phiên đó → yêu cầu đăng nhập lại
↓
→ xảy ra liên tục, và KHÔNG xuất hiện ở môi trường một máy
Sticky session buộc ALB gửi cùng một người dùng về đúng máy đã phục vụ họ:
aws elbv2 modify-target-group-attributes --target-group-arn <arn> \
--attributes Key=stickiness.enabled,Value=true \
Key=stickiness.type,Value=lb_cookie \
Key=stickiness.lb_cookie.duration_seconds,Value=86400
⚠ Sticky session là cách chữa nhanh, không phải cách chữa gốc:
Sticky session giữ người dùng ở một máy
↓
Máy đó chết → phiên vẫn mất
Tải phân bổ lệch vì phiên dài bám vào vài máy
↓
→ cách bền là đưa phiên ra ngoài: ElastiCache Redis hoặc DynamoDB
→ khi đó mọi máy tương đương, sticky session không còn cần thiết
Vì sao các phương án khác sai
-
C (dùng Slow Start Mode khi đăng ký target để instance có thời gian khởi động và không mất dữ liệu cache) — đây là phương án gần nhất và Slow Start là tính năng có thật của ALB. Nhưng vai trò của nó khác: nó tăng dần lưu lượng vào một target mới đăng ký để ứng dụng kịp làm nóng cache và kết nối. Nó không liên quan gì tới việc phiên của người dùng nằm ở máy nào, và không giải quyết triệu chứng đăng xuất.
-
B (dùng cấu hình routing của load balancer để đặt đúng giao thức và cổng) — sai giao thức hay cổng thì ứng dụng hoàn toàn không truy cập được, chứ không phải hoạt động rồi thỉnh thoảng đăng xuất.
-
D (bật logging trên ALB và xem log để tìm lỗi) — là bước chẩn đoán hợp lý nói chung, nhưng đề đã mô tả rõ triệu chứng và hỏi cách sửa. Log của ALB cũng không ghi lại việc ứng dụng xử lý phiên thế nào.
Ghi nhớ
⚠ Bốn nơi lưu phiên — bảng phải thuộc: | Nơi | Sống sót khi mất máy | Cần sửa mã | |---|---|---| | Sticky session ở ALB | không | không | | ElastiCache Redis | có | có | | DynamoDB | có | có | | Cookie phía client | có | có, và giới hạn dung lượng |
Từ khoá nhận diện:
"đăng xuất nhiều lần, chỉ ở production" → phiên lưu cục bộ + nhiều máy cách nhanh nhất, không sửa mã → sticky session cách bền vững → đưa phiên ra ngoài máy chủ "Slow Start Mode" → làm nóng target mới, không liên quan phiên sai giao thức hoặc cổng → không truy cập được, không phải đăng xuất
| Hai kiểu sticky session của ALB | Khác |
|---|---|
lb_cookie |
ALB tự sinh cookie, thời hạn từ 1 giây tới 7 ngày |
app_cookie |
dựa trên cookie do ứng dụng đặt — bám theo vòng đời phiên thật |
| Ràng buộc của sticky session | Nội dung |
|---|---|
| Thuật toán | chỉ dùng được với round_robin |
| Không tương thích | least_outstanding_requests |
| Nhược điểm | tải lệch, và mất máy vẫn mất phiên |
| Slow Start Mode | Việc |
|---|---|
| Tăng dần lưu lượng vào target mới | 30 tới 900 giây |
| Dùng khi | ứng dụng cần làm nóng cache, JIT, connection pool |
| Không liên quan | tới phiên người dùng |
Ba việc kiểm chứng: | Việc | Cách | |---|---| | Sticky session có hoạt động không | gửi nhiều request cùng cookie, xem có về một target không | | Tải có lệch không | chỉ số RequestCount theo từng target | | Mất máy có mất phiên không | huỷ thử một instance và quan sát |
Và một lời khuyên: hãy coi sticky session là biện pháp tạm và lên kế hoạch đưa phiên ra kho ngoài. Nó chữa được triệu chứng ngay hôm nay mà không cần chạm vào mã, và đó là giá trị thật của nó. Nhưng nó không làm ứng dụng của bạn thành stateless: mỗi lần một instance bị thay — do co giãn, do triển khai, do health check thất bại — những người dùng đang bám vào máy đó vẫn mất phiên. Sự cố nhỏ đi rất nhiều nhưng không biến mất, và nó sẽ quay lại đúng vào những ngày bạn triển khai phiên bản mới.
Consider this scenario - the primary instance of an Amazon Aurora cluster is unavailable because of an outage that has affected an entire AZ. The primary instance and all the reader instances are in the same AZ.
As a SysOps Administrator, what action will you take to get the database online?
-
A
Aurora promotes an existing replica in another AZ to a new primary instance, so nothing needs to be done
-
B
You must manually create one or more new DB instances in another AZ
-
C
Aurora automatically creates a new primary instance in the same AZ
-
D
For a cluster using single-master replication, Aurora can create up to 15 read-only Aurora Replicas to serve requests from users
Xem giải thích
Đáp án
B — Bạn phải tự tạo một hoặc nhiều DB instance mới ở Availability Zone khác.
Vì sao đúng
Đề nêu một tình huống rất cụ thể: primary và TẤT CẢ reader đều nằm trong cùng một AZ, và AZ đó gặp sự cố.
| Sự thật trong đề | Suy ra |
|---|---|
| Mọi instance ở cùng một AZ | không còn instance nào ở AZ khác |
| AZ đó mất | không có gì để Aurora thăng cấp |
| Dữ liệu vẫn an toàn | lưu trữ Aurora trải ba AZ |
⚠ Điểm mấu chốt: lưu trữ Aurora luôn trải ba AZ, nhưng KHẢ NĂNG PHỤC VỤ phụ thuộc vào vị trí các instance:
Aurora sao chép lưu trữ sáu bản trên ba AZ — luôn luôn, không cần cấu hình
↓
Dữ liệu của bạn an toàn dù mất một AZ
↓
NHƯNG nếu mọi instance đều ở AZ vừa mất
↓
→ không có instance nào để thăng cấp
→ phải tạo instance MỚI ở AZ khác, nó sẽ gắn vào lớp lưu trữ còn nguyên vẹn
Đây là lý do vì sao "Aurora tự chuyển dự phòng" chỉ đúng khi bạn đã đặt replica ở AZ khác.
⚠ Cách phòng ngừa: luôn đặt reader ở AZ khác với writer:
aws rds create-db-instance --db-instance-identifier reader-1b \
--db-cluster-identifier cum-chinh --availability-zone ap-southeast-1b \
--db-instance-class db.r6g.large --engine aurora-mysql
Aurora chọn replica có failover priority (tier) thấp nhất để thăng cấp; cùng tier thì chọn instance lớn nhất.
Vì sao các phương án khác sai
-
A (Aurora thăng cấp một replica ở AZ khác, nên không cần làm gì) — đây là phương án gần nhất và nó mô tả đúng hành vi bình thường của Aurora. Nhưng nó bỏ qua chính điều kiện của đề: không có replica nào ở AZ khác — tất cả đều ở AZ vừa mất. Đây là bẫy chọn hành vi mặc định mà quên dữ kiện đặc biệt.
-
C (Aurora tự tạo primary mới trong cùng AZ) — AZ đó đang mất, nên không tạo được gì ở đó. Aurora cũng không tự tạo instance mới để thay thế theo cách này.
-
D (với cụm single-master, Aurora tạo được tới 15 Aurora Replica để phục vụ request) — là một sự thật đúng về Aurora nhưng không trả lời câu hỏi: đề hỏi hành động cần làm để đưa cơ sở dữ liệu trở lại, không hỏi giới hạn số replica.
Ghi nhớ
⚠ Bốn điều về tính sẵn sàng của Aurora — bảng phải thuộc: | Điều | Nội dung | |---|---| | Lưu trữ | luôn 6 bản trên 3 AZ — mặc định | | Instance | chỉ ở AZ bạn khai — đây là chỗ quyết định | | Thăng cấp tự động | chỉ khi có replica ở AZ còn sống | | Thời gian chuyển dự phòng | thường dưới 30 giây |
Từ khoá nhận diện:
"mọi instance cùng một AZ" → không có gì để thăng cấp "Aurora tự thăng cấp" → chỉ đúng khi có replica ở AZ khác lưu trữ vẫn an toàn → đúng, nhưng cần instance mới để phục vụ phòng ngừa → luôn đặt reader ở AZ khác writer
| Failover priority (tier) | Cách hoạt động |
|---|---|
| Tier 0 tới 15 | tier thấp hơn được ưu tiên thăng cấp |
| Cùng tier | chọn instance có kích cỡ lớn nhất |
| Đặt hợp lý | để replica mạnh nhất lên làm writer |
| Ba endpoint của Aurora | Trỏ tới |
|---|---|
| Cluster (writer) | instance ghi hiện tại — tự đổi khi failover |
| Reader | phân tải giữa các replica |
| Instance | một instance cụ thể — đừng dùng trong ứng dụng |
| Aurora so với RDS Multi-AZ | Khác |
|---|---|
| Aurora | replica phục vụ đọc và thăng cấp được |
| RDS Multi-AZ instance | bản dự phòng không phục vụ đọc |
Ba việc kiểm chứng: | Việc | Cách | |---|---| | Instance nằm ở AZ nào | describe-db-instances, xem AvailabilityZone của từng cái | | Chuyển dự phòng có chạy không | aws rds failover-db-cluster trong giờ thấp điểm | | Ứng dụng dùng endpoint nào | kiểm chuỗi kết nối là cluster endpoint |
Và một lời khuyên: hãy kiểm tra AZ của từng instance trong cụm, đừng tin vào việc Aurora "vốn đã sẵn sàng cao". Lưu trữ trải ba AZ là mặc định và không tắt được, nên bảng điều khiển luôn tạo cảm giác cụm đã được bảo vệ — và trong phần lớn thời gian điều đó đúng, vì dữ liệu thật sự an toàn. Nhưng khả năng tiếp tục phục vụ phụ thuộc hoàn toàn vào việc bạn có instance ở nơi khác hay không, và đó là một quyết định bạn đưa ra lúc tạo từng instance chứ không phải một thuộc tính của cụm.