Ngân hàng đề — AWS Certified DevOps Engineer Professional
Tìm thấy 681 câu.
A company is developing a continuous delivery pipeline using AWS CodePipeline. The application is deployed across multiple ALBs each of which has a dedicated Auto Scaling group. A DevOps engineer must configure the pipeline so that a simultaneous deployment is triggered to all ALBs and Auto Scaling groups when code is committed to an AWS CodeCommit repository.
Which deployment option meets these requirements with the LEAST amount of configuration?
-
A
Use a single AWS CodePipeline pipeline that deploys the application in parallel using separate AWS CodeDeploy applications and deployment groups for each pair of ALB and Auto Scaling group.
-
B
Use a separate AWS CodePipeline pipeline for each pair of ALB and Auto Scaling group that deploys the application using a single AWS CodeDeploy application and deployment group for those resources.
-
C
Use a single AWS CodePipeline pipeline that deploys the application using a single AWS CodeDeploy application and single deployment group that includes all ALBs and Auto Scaling groups.
-
D
Use a single AWS CodePipeline pipeline that deploys the application in parallel using a single AWS CodeDeploy application and separate deployment groups for each pair of ALB and Auto Scaling group.
Xem giải thích
Đáp án
D — Một pipeline CodePipeline duy nhất, triển khai song song bằng một CodeDeploy application với deployment group riêng cho từng cặp ALB + ASG.
Vì sao đúng
Bài toán: nhiều cặp ALB + ASG, cần deploy đồng thời tới tất cả, với ít cấu hình nhất.
Mô hình phân cấp của CodeDeploy trả lời trực tiếp:
CodeDeploy application "ung-dung-web" ← MỘT ứng dụng
├── deployment group "cum-1" → ALB-1 + ASG-1
├── deployment group "cum-2" → ALB-2 + ASG-2
└── deployment group "cum-3" → ALB-3 + ASG-3
Application đại diện cho phần mềm; deployment group đại diện cho một tập hạ tầng cụ thể. Cùng một ứng dụng nên chỉ cần một application — đó là vế "least configuration".
Deployment group phải tách riêng vì mỗi cặp có ALB và ASG khác nhau, mà một deployment group chỉ gắn được với một cấu hình load balancer.
Chạy song song đạt được bằng cách đặt các action cùng runOrder trong một stage của pipeline.
Vì sao các phương án khác sai
- A. Nhiều CodeDeploy application riêng cho mỗi cặp — thừa: bạn đang deploy cùng một ứng dụng. Mỗi application mới là thêm một bộ cấu hình, thêm một chỗ để lệch nhau khi sửa. Nhiều cấu hình hơn D mà không được gì.
- B. Mỗi cặp một pipeline riêng — nhiều cấu hình nhất trong bốn phương án: n pipeline, n source action, n trigger. Và không còn deploy đồng thời một cách phối hợp — n pipeline chạy độc lập, không có điểm nào biết tổng thể đã xong hay chưa.
- C. Một deployment group chứa tất cả ALB và ASG — nghe gọn nhất nhưng không làm được: một deployment group chỉ cấu hình được một load balancer (hoặc một target group) cho việc gỡ/đăng ký instance trong lúc deploy. Không có cách nào khai ba ALB khác nhau vào một group.
Ghi nhớ
Phân cấp của CodeDeploy: application (phần mềm) → deployment group (môi trường/tập hạ tầng) → deployment (một lần chạy). Quy tắc thực dụng: một application cho một ứng dụng, một deployment group cho mỗi môi trường hoặc mỗi cụm hạ tầng riêng biệt.
A global health care company uses AWS CloudFormation templates to deploy applications across various environments. The template includes Amazon EC2 instances and an Amazon RDS database. During the testing phase before the application went live, the Amazon RDS instance type was changed and caused the instance to be re-created, resulting in the loss of test data. Also, when the CloudFormation stacks are deleted, it is mandatory to keep a snapshot of the EBS volumes for backup and compliance purposes.
How can this be achieved? (Select TWO.)
-
A
Use DeletionPolicy=Snapshot to persist the EBS volumes attached to Amazon EC2 instances.
-
B
Use an AWS CloudFormation stack policy to deny updates to the instance. Only allow UpdateStack permission to IAM principals that are denied SetStackPolicy.
-
C
In the AWS CloudFormation template, set the DeletionPolicy of the AWS::RDS::DBInstance DeletionPolicy property to “Retain.”
-
D
In the AWS CloudFormation template, set the AWS::RDS::DBInstance DBlnstanceClass property to be read-only.
-
E
Enable termination protection for the Amazon EC2 instances and the Amazon RDS database.
Xem giải thích
Đáp án
A và C.
- C — Đặt
DeletionPolicy: RetainchoAWS::RDS::DBInstance. - A — Đặt
DeletionPolicy: Snapshotcho volume EBS gắn với EC2.
Vì sao đúng
Đề nêu hai vấn đề khác nhau, và mỗi vấn đề cần một giá trị DeletionPolicy khác nhau — đó chính là điểm hay của câu hỏi.
Vấn đề 1 — RDS bị tạo lại khi đổi instance class, mất dữ liệu (C).
CoSoDuLieu:
Type: AWS::RDS::DBInstance
DeletionPolicy: Retain # giữ nguyên, không xoá
UpdateReplacePolicy: Retain # nên khai thêm — cho trường hợp bị THAY THẾ
Với Retain, khi CloudFormation cần thay thế tài nguyên, nó bỏ quản lý chứ không xoá — dữ liệu còn nguyên.
Vấn đề 2 — cần giữ snapshot EBS khi xoá stack, để sao lưu và tuân thủ (A).
OD:
Type: AWS::EC2::Volume
DeletionPolicy: Snapshot # chụp ảnh trước khi xoá
Đề nói rõ "mandatory to keep a snapshot" — chính là Snapshot, không phải Retain.
Điểm cần phân biệt cho rõ: Snapshot vẫn XOÁ tài nguyên gốc, chỉ giữ lại một bản chụp. Retain thì giữ nguyên vật.
Vì sao các phương án khác sai
- B. Stack policy chặn cập nhật + trò xoay quanh
SetStackPolicy— stack policy có chặn được việc cập nhật một tài nguyên, nhưng cách đó chặn cả những cập nhật hợp lệ và không giải quyết được vế snapshot EBS. Vế "chỉ cấpUpdateStackcho principal bị từ chốiSetStackPolicy" là một cấu trúc rối rắm không cần thiết. - D. Đặt thuộc tính
DBInstanceClassthành "read-only" — không có khái niệm này. Thuộc tính của tài nguyên CloudFormation không có cờ read-only; muốn chặn thay đổi thì dùng stack policy hoặc IAM. - E. Bật termination protection cho EC2 và RDS — chỉ chặn lời gọi xoá thủ công. Nó không ngăn CloudFormation thay thế tài nguyên khi một thuộc tính đòi replacement, và không tạo snapshot nào. Thực tế còn gây rắc rối: xoá stack sẽ thất bại giữa chừng và để lại stack ở trạng thái
DELETE_FAILED.
Ghi nhớ
| Thuộc tính | Kích hoạt khi | Giá trị |
|---|---|---|
DeletionPolicy |
tài nguyên bị xoá | Delete (mặc định), Retain, Snapshot |
UpdateReplacePolicy |
tài nguyên bị thay thế khi cập nhật | như trên |
Rất nhiều người chỉ khai DeletionPolicy rồi vẫn mất dữ liệu — vì tình huống trong đề (đổi instance class) là replacement, không phải deletion. Khai cả hai.
A company is using AWS Storage Gateway for a branch office location. The gateway is configured in file gateway mode in front of an Amazon S3 bucket that contains files that must be processed by workers in the branch office. Each night a batch process uploads many files to the S3 bucket. Users have reported that the new files are not visible in the morning though they do exist in the S3 bucket.
How can a DevOps engineer ensure that the files become visible?
-
A
Configure the batch process to upload files to the S3 bucket using Amazon S3 transfer acceleration.
-
B
Use S3 same-Region replication to replicate any changes made directly in the S3 bucket to Storage Gateway.
-
C
Configure an Amazon EventBridge event to run on a schedule and trigger an AWS Lambda functions that executes the RefreshCache command.
-
D
Configure the Storage Gateway to run in cached Volume Gateway mode and use S3 event notifications to update the storage gateway when objects are uploaded.
Xem giải thích
Đáp án
C — Dùng EventBridge theo lịch gọi một Lambda chạy lệnh RefreshCache.
Vì sao đúng
Đây là một giới hạn quan trọng và rất hay bị hỏi về File Gateway của AWS Storage Gateway.
File Gateway giữ một bộ nhớ đệm cục bộ về siêu dữ liệu (metadata cache) — danh sách tệp và thuộc tính của chúng. Cache này chỉ được cập nhật khi:
- Có thao tác đi qua chính gateway, hoặc
- Có ai đó gọi
RefreshCache
Khi batch job ghi thẳng vào S3 bucket (bỏ qua gateway), gateway không hề biết. Tệp có thật trong S3 nhưng không xuất hiện trong danh sách thư mục ở phía người dùng — đúng triệu chứng đề mô tả.
Lịch chạy nên khớp với lịch batch — ví dụ 5 giờ sáng, sau khi job đêm đã xong:
aws storagegateway refresh-cache --file-share-arn <arn> \
--folder-list "/" --recursive
Vì sao các phương án khác sai
- A. S3 Transfer Acceleration — chỉ tăng tốc độ tải lên cho client ở xa bằng cách đi qua edge location của CloudFront. Tệp đã lên tới S3 rồi (đề nói rõ chúng tồn tại trong bucket); vấn đề hoàn toàn không nằm ở tốc độ.
- B. S3 same-Region replication "để sao chép thay đổi sang Storage Gateway" — hiểu sai kiến trúc: Storage Gateway không phải đích của replication. Nó là một cửa sổ nhìn vào bucket, không phải một bản sao độc lập. Sao chép sang một bucket khác cũng không cập nhật cache của gateway.
- D. Chuyển sang Cached Volume Gateway + S3 event notification — sai loại gateway. Volume Gateway phơi bày ổ đĩa khối (iSCSI), không phơi bày tệp; nó lưu dữ liệu ở định dạng riêng và không cho bạn truy cập object trong S3 như tệp. Đổi sang nó là mất hẳn khả năng "batch job ghi vào S3, người dùng đọc như tệp".
Ghi nhớ
Ba loại Storage Gateway: | Loại | Phơi bày | Dữ liệu trong S3 | |---|---|---| | File Gateway | NFS/SMB | object đọc được trực tiếp | | Volume Gateway | iSCSI (khối) | định dạng riêng, không đọc trực tiếp | | Tape Gateway | VTL | archive |
Và nhớ dứt khoát: ghi thẳng vào bucket thì phải gọi RefreshCache, nếu không File Gateway sẽ không bao giờ thấy tệp mới. Cách hiện đại hơn là dùng S3 event notification kích hoạt RefreshCache ngay khi có object mới, thay vì chạy theo lịch.
An application was recently migrated to AWS. While the initial version worked, a new version is displaying an error relating to the database layer.
A DevOps engineer checked Amazon CloudWatch Logs and determined that the error was due to a database connection issue. However, no new database deployment has been performed and there were no changes to the database. Typically the application fetches the database credentials from AWS Secrets Manager.
What is the most likely cause of the issue?
-
A
The GetSecretValue API call in the application didn't include the version of the secret to return.
-
B
The secretsmanager:DescribeSecret permission is not enabled for the client-side application component and so it is unable to retrieve the database password.
-
C
The DB credentials and connection details in Secrets Manager have been encrypted using the default Secrets Manager KMS key for the account. The application and secret are in different AWS accounts though, and no cross-account access has been granted.
-
D
When secret rotation is configured in Secrets Manager, it causes the secret to rotate once as soon as you store the secret. This can lead to a situation where the old credentials are not usable anymore after the initial rotation. It is possible that the team forgot to update the application to retrieve the secret from Secrets Manager.
Xem giải thích
Đáp án
D — Khi bật secret rotation, Secrets Manager xoay vòng ngay lần đầu tiên lúc bạn lưu bí mật, dẫn tới việc thông tin đăng nhập cũ không còn dùng được.
Vì sao đúng
Ba manh mối trong đề khoanh vùng rất chặt:
- Phiên bản trước chạy được
- Không có thay đổi nào ở CSDL
- Lỗi là kết nối CSDL
Nghĩa là thứ thay đổi không phải CSDL, mà là thông tin đăng nhập. Và Secrets Manager có một hành vi ít người biết: bật rotation là nó xoay vòng ngay lập tức một lần, không chờ tới chu kỳ đầu tiên.
Hậu quả điển hình: mật khẩu trong CSDL đã đổi, nhưng ứng dụng đang cache giá trị cũ — hoặc tệ hơn, đang gọi GetSecretValue với một version stage cũ. Kết quả là lỗi xác thực trong khi cả ứng dụng lẫn CSDL đều "không có gì thay đổi".
Cách phòng: luôn đọc bí mật ở stage AWSCURRENT, và khi lỗi xác thực thì đọc lại bí mật rồi thử lại thay vì dùng giá trị đã cache:
val = sm.get_secret_value(SecretId='prod/db', VersionStage='AWSCURRENT')
Secrets Manager dùng bốn staging label: AWSCURRENT (đang dùng), AWSPENDING (sắp áp dụng), AWSPREVIOUS (bản trước), và nhãn tuỳ chỉnh. Ứng dụng luôn phải bám vào AWSCURRENT.
Vì sao các phương án khác sai
- A.
GetSecretValuekhông nêu version — không nêu version là hành vi ĐÚNG: khi ấy Secrets Manager trả về bản mang nhãnAWSCURRENT, tức là bản mới nhất đang hiệu lực. Không nêu version mới là cách dùng khuyến nghị. - B. Thiếu quyền
secretsmanager:DescribeSecret— quyền cần để đọc giá trị làsecretsmanager:GetSecretValue.DescribeSecretchỉ trả về siêu dữ liệu (tên, mô tả, lịch rotation), không trả về giá trị. Và thiếu quyền sẽ cho lỗiAccessDeniedrõ ràng, không phải lỗi kết nối CSDL. - C. Bí mật mã hoá bằng KMS key mặc định, ứng dụng ở tài khoản khác — tình huống này có thật và có gây lỗi, nhưng nó mâu thuẫn với đề: nếu cấu hình chéo tài khoản sai thì phiên bản trước cũng đã không chạy được. Đề nói rõ bản đầu tiên hoạt động bình thường.
Ghi nhớ
Hai điều cần thuộc về Secrets Manager rotation:
- Bật rotation là xoay vòng ngay lập tức — đừng bật lần đầu vào giờ cao điểm.
- Đừng cache bí mật vô thời hạn. Cache có TTL ngắn, và luôn đọc lại rồi thử lại khi gặp lỗi xác thực — đó là cách duy nhất để ứng dụng sống sót qua mỗi lần xoay vòng.
A DevOps engineer is migrating an application running on Docker containers from an on-premises data center to AWS. The application must run with minimal management overhead. Encrypted communications between the data center and AWS must be implemented for secure connectivity with on-premises resources.
Which actions should the DevOps engineer take to meet these requirements? (Select TWO.)
-
A
Implement a Network Load Balancer with IP-based targets and configure an HTTPS listener.
-
B
Implement an AWS Managed VPN to encrypt traffic between the on-premises data center and the VPC.
-
C
Migrate the container-based workload to Amazon ECS with the Fargate launch type in a custom VPC.
-
D
Migrate the container-based workload to Amazon ECS with the EC2 launch type in a custom VPC.
-
E
Implement a VPC endpoint and update security groups to enable access to Amazon ECS.
Xem giải thích
Đáp án
B và C.
- C — Chuyển workload container sang Amazon ECS với Fargate launch type trong một VPC riêng.
- B — Dùng AWS Managed VPN để mã hoá lưu lượng giữa trung tâm dữ liệu và VPC.
Vì sao đúng
Hai yêu cầu, hai câu trả lời:
Vế "ít gánh nặng quản lý nhất" (C). Ứng dụng đã chạy trên Docker, nên lựa chọn nằm giữa ECS trên EC2 và ECS trên Fargate:
| ECS + EC2 | ECS + Fargate | |
|---|---|---|
| Quản instance | bạn (vá, scale, giám sát) | AWS |
| Trả tiền | theo instance, kể cả lúc rảnh | theo vCPU và bộ nhớ task dùng |
| Chọn loại máy | bạn phải chọn | không cần |
Fargate thắng dứt khoát ở tiêu chí "minimal management overhead".
Vế "kết nối mã hoá tới on-premises" (B). Site-to-Site VPN tạo đường hầm IPsec mã hoá qua Internet công cộng, thiết lập nhanh và không cần hạ tầng vật lý mới. Đây là câu trả lời chuẩn cho "encrypted communications between the data center and AWS".
Vì sao các phương án khác sai
- D. ECS với EC2 launch type — làm được nhưng bạn phải tự quản cụm EC2: vá hệ điều hành, vá ECS agent, tính dung lượng cluster, xử lý instance hỏng. Trái thẳng yêu cầu.
- A. NLB với IP target và HTTPS listener — sai hai chỗ: NLB không có HTTPS listener (nó có TLS listener ở tầng 4; HTTPS là khái niệm của ALB ở tầng 7). Và một load balancer không tạo kết nối tới trung tâm dữ liệu — nó nhận kết nối đến, không phải cơ chế kết nối lai.
- E. VPC endpoint để truy cập ECS — VPC endpoint cho phép tài nguyên trong VPC gọi API của AWS mà không ra Internet. Nó không nối trung tâm dữ liệu với AWS, nên không đáp ứng vế kết nối lai.
Ghi nhớ
| Cách nối on-premises ↔ AWS | Mã hoá | Thiết lập |
|---|---|---|
| Site-to-Site VPN | IPsec, có sẵn | nhanh, vài giờ |
| Direct Connect | không mã hoá mặc định | vài tuần–tháng, đường riêng |
| Direct Connect + VPN | có | băng thông ổn định + mã hoá |
Chi tiết hay bị hỏi: Direct Connect KHÔNG mã hoá dữ liệu mặc định — nó chỉ là đường truyền riêng. Đề nêu "encrypted communications" thì luôn là VPN, hoặc VPN chạy trên Direct Connect.
A DevOps engineer is creating a pipeline in AWS CodePipeline for automation of a testing process. The engineer wants to be notified when the execution state fails and used the following custom event pattern in Amazon EventBridge:
Which type of events will match this event pattern?
-
A
Failed deploy and build actions across all the pipelines.
-
B
All abandoned or cancelled approval actions across all pipelines.
-
C
Failed stage execution events for the executed stage.
-
D
All rejected or failed approval actions across all the pipelines.
Xem giải thích
Đáp án
D — Mọi hành động phê duyệt bị từ chối hoặc thất bại trên tất cả pipeline.
Vì sao đúng
Đọc từng dòng của event pattern trong đề:
{
"source": ["aws.codepipeline"],
"detail-type": ["CodePipeline Action Execution State Change"], ← mức ACTION
"detail": {
"state": ["FAILED"], ← trạng thái thất bại
"type": { "category": ["Approval"] } ← chỉ action loại Approval
}
}
Ba điều kiện kết hợp lại:
| Trường | Ý nghĩa |
|---|---|
detail-type = Action Execution State Change |
ở mức action, không phải stage hay pipeline |
state = FAILED |
chỉ khi action thất bại |
category = Approval |
chỉ action phê duyệt |
không khai pipeline |
áp dụng cho mọi pipeline trong tài khoản/Region |
Và điểm cuối cùng: với manual approval, khi người duyệt bấm Reject, CodePipeline ghi nhận action ở trạng thái FAILED. Nên pattern này bắt được cả trường hợp bị từ chối lẫn trường hợp thất bại — đúng như phương án D mô tả.
Vì sao các phương án khác sai
- A. "Deploy và build action thất bại trên mọi pipeline" — bộ lọc
"category": ["Approval"]loại thẳng action loạiDeployvàBuild. Chỉ approval mới khớp. - B. "Approval action bị abandoned hoặc cancelled" — pattern chỉ khớp
state = FAILED. Các trạng thái khác nhưCANCELEDhayABANDONEDkhông khớp, nên chúng sẽ không kích hoạt rule. - C. "Sự kiện thất bại ở mức stage" — sai
detail-type. Sự kiện mức stage códetail-typelàCodePipeline Stage Execution State Change, còn pattern trong đề dùngAction. Đây là điểm phân biệt then chốt: CodePipeline phát ba mức sự kiện khác nhau.
Ghi nhớ
Ba detail-type của CodePipeline, đi từ rộng tới hẹp: | detail-type | Phạm vi | |---|---| | CodePipeline Pipeline Execution State Change | cả pipeline | | CodePipeline Stage Execution State Change | một stage | | CodePipeline Action Execution State Change | một action — có type.category để lọc theo loại |
Và nhớ: không khai trường nào trong detail thì trường đó khớp mọi giá trị. Pattern trong đề không nêu tên pipeline, nên nó bắt tất cả — đó là lý do các phương án đúng đều có cụm "across all the pipelines".
A legacy application runs on a single Amazon EC2 instance and is backed with Amazon EBS storage. The company requires the ability to recover quickly with minimal data losses in the event of network connectivity issues or power failures on the EC2 instance.
Which solution will meet these requirements?
-
A
Create an Amazon CloudWatch alarm for the StatusCheckFailed_Instance metric and select the EC2 action to reboot the instance.
-
B
Create an Amazon EC2 Auto Scaling group and configure the minimum, maximum, and desired capacity to 1.
-
C
Create a spread placement group configured across distinct underlying hardware. Enable automatic recovery.
-
D
Create an Amazon CloudWatch alarm for the StatusCheckFailed_System metric and select the EC2 action to recover the instance.
Xem giải thích
Đáp án
D — Tạo CloudWatch alarm cho metric StatusCheckFailed_System và chọn hành động recover instance.
Vì sao đúng
Đề nêu hai loại sự cố cụ thể: mất kết nối mạng và mất điện ở máy chủ vật lý. Cả hai đều là hỏng ở tầng hạ tầng AWS, không phải hỏng bên trong hệ điều hành.
EC2 có hai status check, và chúng phân biệt đúng theo ranh giới đó:
| Check | Phát hiện | Hành động đúng |
|---|---|---|
StatusCheckFailed_Instance |
vấn đề bên trong instance: OS treo, kernel panic, hệ thống tệp hỏng | reboot |
StatusCheckFailed_System |
vấn đề hạ tầng AWS: mất điện, hỏng mạng, hỏng phần cứng máy chủ | recover |
Hành động recover làm đúng thứ cần: khởi động lại instance trên phần cứng vật lý khác, đồng thời giữ nguyên:
- Instance ID
- Địa chỉ IP riêng và IP công khai (Elastic IP)
- Toàn bộ EBS volume và dữ liệu trên đó
- Siêu dữ liệu và cấu hình mạng
Đó chính là "phục hồi nhanh, mất dữ liệu tối thiểu" mà đề yêu cầu.
Vì sao các phương án khác sai
- A. Alarm
StatusCheckFailed_Instance+ reboot — bẫy đối xứng. Reboot giữ instance trên đúng máy chủ vật lý đang hỏng; với sự cố mất điện hoặc hỏng mạng ở tầng hạ tầng, reboot không giải quyết được gì. - B. Auto Scaling group với min = max = desired = 1 — có thay được instance khi nó chết, nhưng máy mới được tạo từ launch template, tức là một instance hoàn toàn mới với EBS volume mới rỗng. Ứng dụng legacy với dữ liệu trên EBS sẽ mất sạch dữ liệu — vi phạm thẳng "minimal data losses".
- C. Spread placement group + auto recovery — spread placement group đặt các instance trên các phần cứng khác nhau để một sự cố phần cứng không hạ nhiều máy cùng lúc. Nhưng đây chỉ có một instance duy nhất, nên placement group không mang lại lợi ích nào. Vế "auto recovery" thì đúng, nhưng phần đầu là thừa và gây nhiễu.
Ghi nhớ
| Reboot | Recover | Stop → Start | |
|---|---|---|---|
| Phần cứng | giữ nguyên | đổi | đổi |
| Instance ID | giữ | giữ | giữ |
| IP công khai (không Elastic) | giữ | giữ | mất |
| Instance store | giữ | mất | mất |
Recover là lựa chọn duy nhất vừa đổi được phần cứng vừa giữ nguyên địa chỉ — đó là lý do nó tồn tại. (Ngày nay EC2 còn có automatic recovery mặc định cho hầu hết instance type, không cần tự tạo alarm — nhưng biết cơ chế alarm vẫn cần cho đề thi và cho các cấu hình đặc biệt.)
A financial organization is already utilizing a CI/CD pipeline to deploy applications in production. A DevOps team has automated the entire upgrade flow for a database upgrade process.
During deployment, they triggered a CI/CD pipeline with no human intervention, and the upgrade progressed smoothly. Then, 20 minutes in, the pipeline became stuck, and the update halted. It was discovered that a planned outage in an AWS region caused the pipeline to fail.
What solution can a DevOps engineer implement to prevent this from happening again without causing unnecessary delay or cost?
-
A
Embed AWS Health API insights into the CI/CD pipelines using AWS Lambda functions to automatically stop deployments when an AWS Health event is reported in the Region.
-
B
Utilize an additional instance of database and apply upgrades on passive database. When the upgrade is complete, route traffic to the passive database and perform a switch between database instances.
-
C
Create an AWS CodePipeline pipeline stage to retrigger the pipeline and rerun the CI/CD process.
-
D
Schedule all database upgrades to avoid any planned outages from AWS in the relevant AWS Regions.
Xem giải thích
Đáp án
A — Nhúng thông tin từ AWS Health API vào pipeline CI/CD bằng Lambda, để tự động dừng triển khai khi có sự kiện AWS Health được báo trong Region đó.
Vì sao đúng
Nguyên nhân gốc của sự cố: pipeline hoàn toàn mù trước tình trạng sức khoẻ của chính AWS. Nó bắt đầu nâng cấp CSDL trong khi Region đang có sự cố theo lịch, và mắc kẹt giữa chừng — trạng thái nguy hiểm nhất cho một lần nâng cấp CSDL.
AWS Health API là nguồn dữ liệu chính thức về:
- Sự kiện theo lịch (bảo trì, retirement) — biết trước hàng ngày
- Sự cố đang diễn ra ảnh hưởng tới Region hoặc dịch vụ bạn dùng
- Tài nguyên bị ảnh hưởng trong chính tài khoản bạn
Thêm một stage kiểm tra trước khi deploy:
def handler(event, context):
health = boto3.client('health', region_name='us-east-1') # API toàn cầu
su_kien = health.describe_events(filter={
'regions': ['ap-southeast-1'],
'eventStatusCodes': ['open', 'upcoming'],
'services': ['RDS']})
if su_kien['events']:
codepipeline.put_job_failure_result(...) # dừng pipeline
else:
codepipeline.put_job_success_result(...)
Vế "không gây gián đoạn" cũng được thoả: pipeline không bao giờ bắt đầu thay vì bị kẹt giữa chừng. Dừng trước khi động vào CSDL an toàn hơn dừng ở giữa một cuộc nâng cấp rất nhiều.
Vì sao các phương án khác sai
- B. CSDL thứ hai, nâng cấp bản passive rồi chuyển đổi — đây là một cải tiến kiến trúc tốt (blue/green cho CSDL), nhưng không giải quyết vấn đề đã nêu: nếu Region đang có sự cố, thao tác trên CSDL passive cũng có thể mắc kẹt y hệt. Nó cũng tốn kém và là thay đổi kiến trúc lớn.
- C. Thêm stage tự chạy lại pipeline — nguy hiểm với nâng cấp CSDL: chạy lại một quá trình đã dừng giữa chừng có thể áp dụng migration hai lần hoặc chạy trên lược đồ đã ở trạng thái nửa vời. Nó cũng không biết Region còn đang hỏng hay không, nên rất dễ lặp vô hạn.
- D. Lên lịch nâng cấp để tránh các đợt bảo trì đã công bố — chỉ tránh được sự cố theo lịch, hoàn toàn không bảo vệ trước sự cố ngoài dự kiến. Nó cũng là công việc thủ công phải theo dõi mãi, trong khi Health API cho biết cùng thông tin đó một cách tự động.
Ghi nhớ
| Nguồn | Cho biết |
|---|---|
| AWS Health API / Personal Health Dashboard | sự kiện ảnh hưởng tới tài khoản BẠN, kèm tài nguyên cụ thể |
Service Health Dashboard (status.aws.amazon.com) |
tình trạng chung, không cá nhân hoá |
Hai lưu ý kỹ thuật: Health API đòi gói hỗ trợ Business trở lên, và endpoint của nó nằm ở us-east-1. Ngoài ra sự kiện Health cũng chảy vào EventBridge với nguồn aws.health, nên có thể phản ứng theo sự kiện thay vì hỏi định kỳ.
An application runs on Amazon EC2 instances in an Auto Scaling group behind an Application Load Balancer (ALB). The application is used by users around the world who access the application using a custom DNS domain name. The application must support encryption in transit, be protected from DDoS attacks and web exploits, should be optimized for performance.
Which actions should a DevOps engineer take to meet these requirements? (Select TWO.)
-
A
Create an AWS WAF web ACL, configure a default action and rule, and specify the Auto Scaling group that WAF should inspect.
-
B
Create an Amazon CloudFront distribution with the Auto Scaling group as an origin. Configure the custom domain name and attach an SSL/TLS certificate.
-
C
Create an AWS WAF web ACL, configure a default action and rule, and specify the CloudFront distribution that WAF should inspect.
-
D
Create an Amazon CloudFront distribution with the ALB as an origin. Configure the custom domain name and attach an SSL/TLS certificate.
-
E
Create an AWS WAF web ACL, configure a default action and rule, and specify the ALB that WAF should inspect.
Xem giải thích
Đáp án
C và D.
- D — Tạo CloudFront distribution với ALB làm origin, cấu hình tên miền tuỳ chỉnh và gắn chứng chỉ SSL/TLS.
- C — Tạo WAF web ACL và gắn vào CloudFront distribution.
Vì sao đúng
Bốn yêu cầu, và thứ tự các quyết định rất rõ:
| Yêu cầu | Đáp ứng bởi |
|---|---|
| Mã hoá khi truyền | Chứng chỉ ACM trên CloudFront (và trên ALB) |
| Chống DDoS | CloudFront + Shield Standard tự động |
| Chống lỗ hổng web | WAF gắn vào CloudFront |
| Tối ưu hiệu năng cho người dùng toàn cầu | CloudFront — hơn 600 edge location |
Vì sao origin phải là ALB, không phải Auto Scaling group (D vs B). CloudFront cần một endpoint có thể phân giải bằng DNS làm origin. Auto Scaling group không có endpoint; nó chỉ là một tập instance thay đổi liên tục. ALB mới là thứ có tên miền ổn định. Đây là điểm loại của phương án B.
Vì sao WAF gắn vào CloudFront, không phải ALB (C vs E). Cả hai đều gắn được, nhưng gắn ở CloudFront tốt hơn hẳn:
- Chặn ngay tại edge, gần người tấn công nhất — request độc hại không bao giờ tới Region
- Giảm tải và giảm chi phí cho origin
- Bảo vệ luôn cả nội dung được cache
Vì sao các phương án khác sai
- A. WAF "kiểm tra Auto Scaling group" — không làm được. WAF chỉ gắn được vào CloudFront, ALB, API Gateway, AppSync và Cognito user pool. Auto Scaling group không nằm trong danh sách.
- B. CloudFront với Auto Scaling group làm origin — như phân tích ở trên, ASG không phải origin hợp lệ.
- E. WAF gắn vào ALB — hợp lệ về kỹ thuật, nhưng kém hơn C: traffic độc hại phải đi hết đường tới Region mới bị chặn, tốn băng thông và không bảo vệ được tầng cache.
Ghi nhớ
Thứ tự phòng thủ chuẩn cho ứng dụng web toàn cầu:
Người dùng → Route 53 → CloudFront (+ Shield + WAF) → ALB → EC2
↑ chặn ở đây, càng sớm càng tốt
Và nhớ chi tiết hay bị hỏi: chứng chỉ ACM cho CloudFront bắt buộc phải cấp ở us-east-1, bất kể ứng dụng chạy ở Region nào.
A company is deploying an application in four AWS Regions across North America, Europe and Asia. The application will be used by millions of users. The application must allow users to submit data through the application layer in each Region and have it saved in a low-latency database layer. The company also must ensure that the data can be read through the application layer in each Region.
Which solution will meet these requirements with the LOWEST latency of reads and writes?
-
A
Create a table in Amazon DynamoDB and enable global tables in each of the four Regions.
-
B
Create a database in Amazon DocumentDB (with MongoDB compatibility) in each of the four Regions.
-
C
Create an Amazon ElastiCache for Redis cluster and configure replication groups in each of the four Regions.
-
D
Create an Amazon RDS database in one Region and create Read Replicas in each of the three other Regions.
Xem giải thích
Đáp án
A — Tạo bảng trong Amazon DynamoDB và bật global tables ở cả bốn Region.
Vì sao đúng
Yêu cầu quyết định: người dùng ở mỗi Region phải ghi được và đọc được với độ trễ thấp nhất.
DynamoDB Global Tables là dịch vụ duy nhất trong bốn phương án cho multi-active: mọi Region đều nhận cả đọc lẫn ghi, sao chép ngầm giữa các Region thường dưới một giây.
| Ghi cục bộ | Đọc cục bộ | Sao chép | |
|---|---|---|---|
| DynamoDB Global Tables | ✅ mọi Region | ✅ | tự động, dưới 1 giây |
| RDS read replica | ❌ chỉ Region chính | ✅ | bất đồng bộ |
Điểm cần biết về mô hình nhất quán: Global Tables dùng last-writer-wins để giải quyết xung đột. Với ứng dụng "người dùng gửi dữ liệu của chính mình" như đề mô tả, điều đó hoàn toàn ổn — hai Region hiếm khi ghi cùng một item.
DynamoDB cũng phù hợp với quy mô "hàng triệu người dùng": độ trễ mili số một chữ số, tự co giãn, không có máy chủ nào phải quản.
Vì sao các phương án khác sai
- D. RDS với read replica ở ba Region còn lại — bẫy chính. Read replica chỉ đọc; mọi lệnh ghi vẫn phải đi về Region chứa primary. Người dùng ở Tokyo ghi dữ liệu sẽ phải chờ một vòng tới Bắc Mỹ — trượt thẳng yêu cầu "lowest latency of reads and writes".
- C. ElastiCache for Redis với replication group ở bốn Region — hai vấn đề. ElastiCache là cache trong bộ nhớ, không phải kho lưu trữ bền vững cho dữ liệu người dùng gửi lên. Và Global Datastore của Redis là mô hình một Region chính ghi, các Region khác chỉ đọc — cùng hạn chế với read replica.
- B. DocumentDB ở mỗi Region — bốn cụm hoàn toàn độc lập, không có cơ chế sao chép tự động giữa chúng. Người dùng ở Region này không đọc được dữ liệu ghi ở Region kia, trái thẳng yêu cầu "data can be read through the application layer in each Region". (DocumentDB có global cluster, nhưng cũng là mô hình một writer.)
Ghi nhớ
Danh sách rất ngắn các dịch vụ AWS cho ghi được ở nhiều Region: | Dịch vụ | Mô hình | |---|---| | DynamoDB Global Tables | multi-active, last-writer-wins | | S3 Multi-Region Access Points | multi-active cho object | | Aurora Global Database | một writer, các Region khác chỉ đọc | | RDS read replica | một writer |
Từ khoá "lowest latency of reads AND writes" ở nhiều Region gần như luôn dẫn tới DynamoDB Global Tables.