Ngân hàng đề — AWS Certified DevOps Engineer Professional
Tìm thấy 681 câu.
To increase security, a company plans to use AWS Systems Manager Session Manager to managed Amazon EC2 instances rather than SSH. The connectivity to Session Manager should also use a private network connection.
Which configuration actions should be taken to implement this? (Select TWO.)
-
A
Allow inbound access to TCP port 22 in all associated EC2 security groups from the VPC CIDR range.
-
B
Attach an Elastic IP to a NAT gateway in a public subnet and specify a route to the NAT gateway in the private subnet route tables.
-
C
Establish private Session Manager connectivity using the instance IDs of EC2 instances.
-
D
Create a VPC endpoint for Systems Manager in the Region where the instances are running.
-
E
Attach an IAM instance profile to the EC2 instances that provides the necessary permissions for Systems Manager.
Xem giải thích
Đáp án
D và E.
- E — Gắn IAM instance profile cho EC2 với quyền cần thiết cho Systems Manager.
- D — Tạo VPC endpoint cho Systems Manager ở Region đang chạy instance.
Vì sao đúng
Hai yêu cầu: dùng Session Manager thay SSH, và kết nối đi qua mạng riêng.
Vế quyền (E). SSM Agent phải tự đăng ký với dịch vụ Systems Manager, và nó dùng instance profile để làm việc đó. Policy dựng sẵn là AmazonSSMManagedInstanceCore. Không có nó thì instance không bao giờ hiện ra trong danh sách managed instances.
Vế mạng riêng (D). Mặc định SSM Agent gọi ra endpoint công cộng, tức là cần Internet (qua IGW hoặc NAT). Muốn đi hoàn toàn trong mạng riêng thì phải có VPC interface endpoint — và cần ba cái:
| Endpoint | Vai trò |
|---|---|
com.amazonaws.<region>.ssm |
API của Systems Manager |
com.amazonaws.<region>.ssmmessages |
kênh dữ liệu của Session Manager |
com.amazonaws.<region>.ec2messages |
kênh lệnh cho agent |
Thiếu ssmmessages là lỗi kinh điển: instance hiện trạng thái Managed bình thường, nhưng bấm mở phiên thì treo rồi timeout mà không có thông báo nào hữu ích.
Vì sao các phương án khác sai
- A. Mở cổng 22 vào từ dải CIDR của VPC — đi ngược mục đích. Session Manager không dùng SSH và không cần cổng inbound nào cả; agent tự mở kết nối đi ra. Giá trị lớn nhất của Session Manager chính là security group không cần rule inbound nào.
- B. NAT gateway + Elastic IP — cách này có làm Session Manager chạy được, nhưng traffic đi ra Internet công cộng rồi vòng lại AWS. Đề yêu cầu rõ "private network connection", nên VPC endpoint mới đúng. NAT cũng tốn phí giờ chạy và phí xử lý dữ liệu.
- C. "Thiết lập kết nối riêng bằng instance ID" — vô nghĩa về mặt kỹ thuật. Instance ID là thứ bạn chỉ định khi mở phiên, không phải cấu hình mạng.
Ghi nhớ
Công thức Session Manager trong subnet riêng: AmazonSSMManagedInstanceCore + ba VPC endpoint (ssm, ssmmessages, ec2messages) + security group của endpoint cho phép HTTPS 443 từ dải VPC. Cộng thêm s3 gateway endpoint nếu muốn ghi log phiên vào S3, và kms nếu bật mã hoá phiên.
A company is running an eCommerce application on a fleet of Amazon EC2 instances in an Auto Scaling group behind an Application Load Balancer. There have been issues occurring occasionally where instances fail to launch successfully, and the support team wants to be notified whenever this occurs.
Which configuration update will achieve these requirements?
Which action will accomplish this?
-
A
Create an Amazon CloudWatch alarm that sends an Amazon SNS notification when a failed SetInstanceHealth API call is made.
-
B
Create an Amazon CloudWatch alarm that sends a notification when an Amazon EC2 status check fails.
-
C
Configure an Amazon SNS topic for the Auto Scaling group that sends a notification whenever a failed instance launch occurs.
-
D
Add a health check to the Auto Scaling group to invoke an AWS Lambda function whenever an instance status is impaired.
Xem giải thích
Đáp án
C — Cấu hình SNS notification cho chính Auto Scaling group, chọn sự kiện EC2_INSTANCE_LAUNCH_ERROR.
Vì sao đúng
Auto Scaling group có cơ chế thông báo dựng sẵn, khai một lần là xong, không cần alarm, không cần Lambda:
aws autoscaling put-notification-configuration \
--auto-scaling-group-name nhom-web \
--topic-arn arn:aws:sns:ap-southeast-1:123456789012:canh-bao-asg \
--notification-types autoscaling:EC2_INSTANCE_LAUNCH_ERROR
Bốn loại thông báo có sẵn:
| Loại | Khi nào |
|---|---|
EC2_INSTANCE_LAUNCH |
tạo instance thành công |
EC2_INSTANCE_LAUNCH_ERROR |
tạo instance thất bại |
EC2_INSTANCE_TERMINATE |
huỷ thành công |
EC2_INSTANCE_TERMINATE_ERROR |
huỷ thất bại |
Thông báo kèm lý do thất bại — hết dung lượng instance type ở AZ đó, chạm service quota, AMI không tồn tại, subnet hết địa chỉ IP — tức là đúng thứ đội hỗ trợ cần để xử lý.
Vì sao các phương án khác sai
- A. Alarm khi "gọi
SetInstanceHealththất bại" — không liên quan.SetInstanceHealthlà API bạn gọi để đánh dấu instance không lành; lời gọi đó thất bại chẳng nói gì về việc launch. Và CloudWatch alarm không đặt trực tiếp lên "một lời gọi API thất bại" như vậy được. - B. Alarm khi EC2 status check hỏng — status check chỉ chạy trên instance đã tồn tại và đang chạy. Instance không launch được thì không bao giờ có status check nào để mà hỏng. Sai hẳn giai đoạn trong vòng đời.
- D. "Thêm health check vào ASG để gọi Lambda khi instance bị impaired" — ASG không hỗ trợ gọi Lambda từ health check. Health check chỉ có hai loại (
EC2vàELB), và kết quả của nó chỉ dẫn tới việc thay thế instance. Ngoài ra "impaired" lại là trạng thái của instance đang chạy, không phải launch hỏng.
Ghi nhớ
Trước khi nghĩ tới CloudWatch alarm hay Lambda, hãy kiểm xem dịch vụ đã có sẵn cơ chế thông báo chưa. Ngoài ASG notification, còn có EventBridge sự kiện EC2 Instance Launch Unsuccessful — cho cùng thông tin nhưng định tuyến linh hoạt hơn.
An organization is running containerized applications across Amazon EKS, Amazon ECS, and on-premises clusters. Due to some recent issues that caused outages, a solution is required to track container performance and system health, detect errors. The solution should enable collection and aggregation of time-series metrics from all container services for monitoring and analytics.
Which combination of services can the organization use?
-
A
Use Amazon Managed Service for Prometheus for collection of metrics and use Amazon Managed Grafana for visualization and analytics.
-
B
Use AWS AppConfig to collect application metrics from the containers and use Amazon OpenSearch Service for visualization and analytics.
-
C
Use the AWS Systems Manager agent to collect the metrics and use Amazon Managed Service for Prometheus for visualization and analytics.
-
D
Use the unified Amazon CloudWatch agent to collect the metrics, Amazon Athena to run SQL queries, and AWS Glue for visualization.
Xem giải thích
Đáp án
A — Amazon Managed Service for Prometheus để thu thập metric, Amazon Managed Grafana để trực quan hoá và phân tích.
Vì sao đúng
Ba đặc điểm của đề chỉ thẳng vào cặp này:
| Đặc điểm | Vì sao Prometheus + Grafana |
|---|---|
| EKS, ECS và cụm on-premises | Prometheus là tiêu chuẩn de facto của hệ sinh thái container, chạy ở đâu cũng được |
| Metric chuỗi thời gian | Prometheus là cơ sở dữ liệu chuỗi thời gian đúng nghĩa, có PromQL |
| Trực quan hoá và phân tích | Grafana là công cụ đi kèm mặc định của Prometheus |
Từ khoá quan trọng nhất là on-premises. Cụm nằm ngoài AWS vẫn đẩy metric lên Managed Service for Prometheus được qua remote write, nên một hệ giám sát duy nhất phủ cả ba môi trường — đúng yêu cầu "thu thập và tổng hợp từ tất cả".
Cả hai đều là bản được AWS quản lý của phần mềm mã nguồn mở: không phải tự vận hành máy chủ Prometheus, không lo mở rộng lưu trữ, nhưng vẫn dùng đúng PromQL và đúng dashboard đã quen.
Vì sao các phương án khác sai
- B. AWS AppConfig — dịch vụ quản lý cấu hình ứng dụng (feature flag, tham số triển khai theo giai đoạn). Nó không thu thập metric. Sai hoàn toàn vai trò.
- C. SSM Agent thu metric, Prometheus trực quan hoá — đảo ngược vai trò: Prometheus là nơi lưu trữ và truy vấn, không phải công cụ trực quan hoá (giao diện tự thân của nó rất tối giản). SSM Agent cũng không phải cơ chế thu metric container.
- D. CloudWatch Agent + Athena + Glue để trực quan hoá — sai ở vế cuối: Glue là dịch vụ ETL, không vẽ được gì cả. Ngoài ra, đường CloudWatch Container Insights có dùng được cho EKS/ECS nhưng phủ on-premises kém, và mô hình truy vấn theo SQL không hợp với dữ liệu chuỗi thời gian bằng PromQL.
Ghi nhớ
| Bối cảnh | Bộ giám sát |
|---|---|
| Thuần AWS, muốn tích hợp sẵn | CloudWatch Container Insights |
| Nhiều môi trường (AWS + on-prem), đội đã quen Kubernetes | Managed Prometheus + Managed Grafana |
| Theo dấu request xuyên dịch vụ | X-Ray hoặc OpenTelemetry |
A company has several AWS accounts and an on-premises data center. Several microservices applications run across the accounts and data center. The distributed architecture results in challenges with investigating application issues as the logs are saved in a variety of locations. A DevOps engineer must configure a solution that centralizes and aggregates the logs for analytics.
What is the MOST efficient and cost-effective solution?
-
A
Collect system logs and application logs using the Amazon CloudWatch Logs agent. Install the CloudWatch Logs agent on the on-premises servers. Use the Amazon S3 API to export log files and store them on-premises. Use an Amazon Elasticsearch Logstash Kibana stack to analyze logs in the on-premises data center.
-
B
Collect system logs and application logs using the Amazon CloudWatch Logs agent. Install the CloudWatch Logs agent on the on-premises servers. Store all logs in an S3 bucket in a central account. Set up an Amazon S3 trigger and an AWS Lambda function to analyze incoming logs and automatically identify anomalies. Use Amazon Athena to run ad hoc queries on the logs in the central account.
-
C
Collect system logs and application logs using the Amazon CloudWatch Logs agent. Use the Amazon S3 API to export on-premises logs and store the logs in an S3 bucket in a central account. Use Amazon Kinesis Data Analytics to query the data in the S3 bucket.
-
D
Collect system logs and application logs using the Amazon CloudWatch Logs agent. Use the Amazon S3 API to import on-premises logs. Store all logs in S3 buckets in individual accounts. Use Amazon Athena to run SQL queries on the logs in each account.
Xem giải thích
Đáp án
B — CloudWatch Logs agent thu log ở cả tài khoản AWS lẫn máy chủ on-premises, rồi lưu toàn bộ vào một S3 bucket ở tài khoản trung tâm.
Vì sao đúng
Đề đòi hiệu quả nhất và tiết kiệm nhất, cho log nằm rải rác ở nhiều tài khoản AWS và một trung tâm dữ liệu riêng.
Vế thu thập. CloudWatch Logs agent chạy được trên máy chủ on-premises — chỉ cần một IAM user hoặc role với quyền logs:PutLogEvents (thực tế nên dùng SSM hybrid activation để có thông tin xác thực tạm thời thay vì khoá tĩnh). Nhờ vậy một cơ chế duy nhất phủ cả hai bên.
Vế lưu trữ — và đây là điểm quyết định. Gom về một bucket ở tài khoản trung tâm:
- S3 rẻ hơn hẳn CloudWatch Logs khi lưu dài hạn, và có lifecycle chuyển sang Glacier
- Một chỗ duy nhất để phân quyền và kiểm toán
- Athena truy vấn thẳng, không cần dựng gì
So sánh nhanh chi phí lưu trữ: CloudWatch Logs tính khoảng 0,03 USD/GB/tháng, S3 Standard khoảng 0,023 USD/GB/tháng, và Glacier rẻ hơn nhiều lần nữa. Với log nhiều terabyte, khoảng cách này là đáng kể.
Vì sao các phương án khác sai
- A. "Dùng S3 API để export log file" —
CreateExportTasklà thao tác thủ công, một lần, không phải cơ chế liên tục. Muốn tự động thì phải tự viết và tự lên lịch, và mỗi tài khoản chỉ chạy được một export task tại một thời điểm. - C. Dùng S3 API để "export log on-premises" — nghĩa là tự viết công cụ tải log cho máy chủ on-premises, trong khi CloudWatch agent đã chạy được ở đó. Thêm mã, thêm chỗ hỏng, không được gì.
- D. Lưu log trong các bucket riêng ở từng tài khoản — đi ngược thẳng yêu cầu "centralize and aggregate". Muốn truy vấn xuyên tài khoản thì phải cấu hình quyền chéo cho từng bucket, hoặc chạy truy vấn nhiều lần rồi tự ghép — đúng vấn đề mà đề đang muốn bỏ.
Ghi nhớ
Mẫu chuẩn cho log tập trung đa tài khoản: agent → CloudWatch Logs (từng tài khoản) → subscription filter → Kinesis Data Firehose xuyên tài khoản → một S3 bucket trung tâm → Athena. Giữ log nóng trong CloudWatch Logs vài tuần cho việc gỡ lỗi, đẩy log nguội xuống S3/Glacier cho lưu trữ dài hạn.
A DevOps engineer builds an artifact locally and then uploads it to an Amazon S3 bucket. The application has a local cache that must be cleared as part of the deployment. The engineer executes a command to do this, retrieves the artifact from Amazon S3, and unzips the artifact to complete the deployment.
The engineer wants to migrate to an automated CI/CD solution and incorporate checks to stop and roll back the deployment in the event of a failure. This requires tracking the progression of the deployment.
Which combination of actions will accomplish this? (Select THREE.)
-
A
Add user data to the Amazon EC2 instances that contains script to clear the cache. Once deployed, test the application. If it is not successful, deploy it again.
-
B
Check the code into a code repository. On each pull into master use Amazon CloudWatch Events to trigger an AWS Lambda function that builds the artifact and uploads it to Amazon S3.
-
C
Set up an AWS CodePipeline pipeline to deploy the application. Check the code into a code repository as a source for the pipeline.
-
D
Write a custom script that clears the cache and specify the script in the BeforeInstall lifecycle hook in the AppSpec file.
-
E
Use AWS CodeBuild to build the artifact and upload it to Amazon S3. Use AWS CodeDeploy to deploy the artifact to the Amazon EC2 instances.
-
F
Use AWS Systems Manager to download the artifact from Amazon S3 and deploy it to all the EC2 instances.
Xem giải thích
Đáp án
C, D và E.
- C — Dựng CodePipeline, đưa mã vào repository làm nguồn của pipeline.
- E — CodeBuild dựng artifact và đẩy lên S3; CodeDeploy triển khai xuống EC2.
- D — Script xoá cache khai trong hook
BeforeInstallcủa tệp AppSpec.
Vì sao đúng
Đề mô tả một quy trình thủ công gồm bốn bước và đòi tự động hoá kèm theo dõi tiến trình và rollback khi hỏng. Ba phương án được chọn khớp từng bước:
| Bước thủ công hiện tại | Thay bằng |
|---|---|
| Dựng artifact tại máy | CodeBuild (E) |
| Tải lên S3 | CodeBuild đẩy artifact (E) |
| Chạy lệnh xoá cache | hook BeforeInstall trong AppSpec (D) |
| Tải về và giải nén | CodeDeploy (E) |
| (chưa có) điều phối, theo dõi, rollback | CodePipeline (C) |
Vì sao BeforeInstall. Cache phải được dọn trước khi phiên bản mới được ghi xuống. Vòng đời CodeDeploy trên EC2:
ApplicationStop → DownloadBundle → BeforeInstall → Install → AfterInstall
→ ApplicationStart → ValidateService
BeforeInstall là mốc đúng: bundle đã tải xong, tệp mới chưa được đặt vào chỗ.
Vì sao CodePipeline là mảnh không thể thiếu. Nó cho cái nhìn tiến trình theo từng stage và là nơi gắn quy tắc dừng/rollback — đúng hai thứ đề nêu tên.
Vì sao các phương án khác sai
- A. User data xoá cache, hỏng thì "deploy lại" — user data chỉ chạy lúc instance khởi động lần đầu, không chạy mỗi lần deploy. Và "hỏng thì deploy lại" chính là không có rollback.
- B. Lambda tự build artifact khi có pull vào master — Lambda vướng trần 15 phút cho việc build, không có môi trường build sẵn, không có cache phụ thuộc, và không cho khả năng theo dõi tiến trình như pipeline.
- F. Dùng Systems Manager tải artifact và deploy — Run Command chạy lệnh được, nhưng không có khái niệm lifecycle hook, không có rollback tự động, không có theo dõi tiến trình deploy. Nó là công cụ vận hành, không phải công cụ triển khai.
Ghi nhớ
Bộ ba của AWS cho CI/CD trên EC2: CodePipeline điều phối, CodeBuild dựng, CodeDeploy triển khai. Và học thuộc vòng đời hook của CodeDeploy — đề rất hay hỏi "đặt script ở hook nào", mà câu trả lời luôn suy ra được từ vị trí của hook trong chuỗi.
The information security policy of a company has been updated and now requires that all Amazon EBS volumes must be encrypted. Any volumes that are not encrypted should be marked as non-compliant. The company uses AWS Organizations to manage multiple accounts. A DevOps engineer needs to automatically deploy the solution and ensure that this compliance check is applied.
Which solution will accomplish this MOST efficiently?
-
A
Create an AWS Config rule at the AWS organization level to check whether EBS encryption is enabled. Create and apply an SCP to prohibit stopping and deleting AWS Config across the organization.
-
B
Run a scheduled AWS Lambda function in each account that checks the encryption status of EBS volumes in the account. Publish the report to a centralized Amazon S3 bucket. Use Amazon Athena to analyze the data.
-
C
Apply an SCP in Organizations that uses conditional expressions to prevent the launch of Amazon EC2 instances that do not have encrypted EBS volumes. Apply the SCP to all AWS accounts.
-
D
Enable the AWS Config ec2-ebs-encryption-by-default rule to check whether EBS encryption is enabled. Deploy the rule in the management account of the Organization.
Xem giải thích
Đáp án
A — Tạo AWS Config rule ở cấp tổ chức kiểm tra EBS đã mã hoá chưa, và áp SCP cấm dừng hoặc xoá AWS Config trong toàn tổ chức.
Vì sao đúng
Đọc kỹ hai yêu cầu: volume chưa mã hoá phải bị đánh dấu non-compliant, và giải pháp phải tự động triển khai cho nhiều tài khoản.
Chữ "marked as non-compliant" là chìa khoá: đề đòi kiểm soát phát hiện (detective), không phải kiểm soát ngăn chặn (preventive). Đó chính xác là vai trò của AWS Config.
Config organization rule triển khai một lần từ tài khoản quản lý (hoặc delegated administrator) và phủ mọi tài khoản thành viên, kể cả tài khoản tạo sau này:
aws configservice put-organization-config-rule \
--organization-config-rule-name encrypted-volumes-toan-to-chuc \
--organization-managed-rule-metadata RuleIdentifier=ENCRYPTED_VOLUMES
Vế SCP là mảnh thường bị bỏ quên và rất quan trọng. Một kiểm soát phát hiện chỉ có giá trị khi không ai tắt được nó. SCP cấm config:StopConfigurationRecorder, config:DeleteConfigurationRecorder, config:DeleteConfigRule khoá luôn khả năng "vô hiệu hoá bộ giám sát rồi vi phạm thoải mái" — kể cả với root của tài khoản thành viên.
Vì sao các phương án khác sai
- B. Lambda theo lịch ở mỗi tài khoản + báo cáo S3 + Athena — tự viết lại AWS Config: phải deploy hàm vào từng tài khoản, tự phân trang, tự bảo trì, tự dựng báo cáo. Trái hẳn tiêu chí "MOST efficiently".
- C. SCP chặn tạo EC2 với EBS chưa mã hoá — đây là preventive, và nghe rất hấp dẫn. Nhưng nó không làm được điều đề yêu cầu: những volume chưa mã hoá ĐANG TỒN TẠI vẫn nằm đó và không bị đánh dấu gì cả. SCP chỉ chặn hành động tương lai. Nó bổ sung tốt cho A, nhưng không thay được A.
- D. Rule
ec2-ebs-encryption-by-defaultdeploy ở management account — sai hai chỗ. Thứ nhất, rule đó kiểm cài đặt "mã hoá mặc định" của tài khoản, không kiểm từng volume đã mã hoá hay chưa — volume tạo trước khi bật cài đặt vẫn không mã hoá và vẫn lọt. Thứ hai, deploy ở một tài khoản duy nhất thì không phủ các tài khoản thành viên.
Ghi nhớ
| Kiểu kiểm soát | Công cụ | Giới hạn |
|---|---|---|
| Preventive | SCP, IAM policy | không đụng tới thứ đã tồn tại |
| Detective | AWS Config, Security Hub | phát hiện sau khi đã xảy ra |
| Corrective | Config remediation, SSM Automation | cần detective đi trước |
Đề dùng chữ "marked as non-compliant" thì luôn là Config. Và đừng quên: kiểm soát phát hiện phải được bảo vệ khỏi việc bị tắt.
A company needs is deploying a new application in AWS and requires a CI/CD pipeline to automate process. The company requires that the entire CI/CD pipeline can be re-provisioned in different AWS accounts or Regions within minutes.
The pipeline must support continuous integration, continuous delivery, and automatic rollback upon deployment failure. A DevOps engineer has already created an AWS CodeCommit repository to store the source code.
Which combination of actions should the DevOps engineer take to meet these requirements? (Select THREE.)
-
A
Provision all resources using AWS CloudFormation.
-
B
Launch Amazon EC2 instances in an AWS Elastic Beanstalk environment and configure the environment as the deployment target in AWS CodePipeline.
-
C
Configure an AWS CodePipeline pipeline with a build stage using AWS CodeBuild.
-
D
Implement an Amazon SQS queue to decouple the pipeline components.
-
E
Launch Amazon EC2 instances in an Auto Scaling group behind an Application Load Balancer (ALB) and set the ALB as the deployment target in AWS CodePipeline.
-
F
Copy the build artifact from CodeCommit to Amazon S3.
Xem giải thích
Đáp án
A, B và C.
- A — Cung cấp toàn bộ tài nguyên bằng CloudFormation.
- C — Cấu hình CodePipeline với một build stage dùng CodeBuild.
- B — Dựng EC2 trong môi trường Elastic Beanstalk và đặt môi trường đó làm đích triển khai của CodePipeline.
Vì sao đúng
Ba yêu cầu, mỗi phương án đáp một cái:
"Tái tạo toàn bộ pipeline ở tài khoản/Region khác trong vài phút" ⇒ A. Chỉ hạ tầng dưới dạng mã làm được. Toàn bộ pipeline, build project, deployment group, vai trò IAM đều khai trong template; deploy sang nơi khác chỉ là chạy lại một stack.
"Continuous integration" ⇒ C. CodePipeline điều phối, CodeBuild dựng và chạy test. Đây là phần CI.
"Continuous delivery + tự động rollback khi deploy hỏng" ⇒ B. Đây là mảnh cần lý giải kỹ nhất. Elastic Beanstalk là đích triển khai hợp lệ của CodePipeline và có rollback tự động dựng sẵn: deploy hỏng health check thì môi trường tự quay về phiên bản trước, không cần cấu hình thêm.
Vì sao các phương án khác sai
- E. EC2 trong ASG sau ALB, đặt ALB làm đích triển khai của CodePipeline — đây là bẫy chính, và nó sai ở một chi tiết cụ thể: ALB không phải deployment target. CodePipeline triển khai qua CodeDeploy (nhắm vào deployment group), qua Elastic Beanstalk, ECS, CloudFormation, S3 — nhưng không bao giờ nhắm thẳng vào một load balancer. Mô tả trong phương án không tồn tại về mặt kỹ thuật.
- D. SQS để "tách rời các thành phần pipeline" — CodePipeline tự quản chuyển tiếp giữa các stage. Chèn hàng đợi vào giữa là thêm một tầng không có vai trò gì.
- F. Chép artifact từ CodeCommit sang S3 — nhầm khái niệm: CodeCommit chứa mã nguồn, không chứa artifact đã build. Artifact do CodeBuild sinh ra và CodePipeline tự đưa vào artifact store, không cần bước chép tay nào.
Ghi nhớ về chất lượng câu hỏi
Đề không hề nói ứng dụng chạy trên Elastic Beanstalk, nên thoạt nhìn B có vẻ áp đặt một nền tảng. Nhưng nó vẫn là đáp án đúng nhất trong bộ này vì phương án thay thế duy nhất (E) mô tả một cơ chế không tồn tại. Nếu E viết là "đặt CodeDeploy deployment group làm đích" thì E mới là câu trả lời tự nhiên hơn — điểm loại thật sự nằm ở chữ "ALB as the deployment target", không nằm ở việc chọn nền tảng.
A DevOps engineer is using AWS CodeBuild to build an application into a Docker image. The buildspec file is used to run the application build. The engineer needs to push the Docker image to an Amazon ECR repository only upon the successful completion of each build.
-
A
Add an install phase to the buildspec file that uses the commands block to push the Docker image.
-
B
Add a post_build phase to the buildspec file that uses the finally block to push the Docker image.
-
C
Add a post_build phase to the buildspec file that uses the commands block to push the Docker image.
-
D
Add a post_build phase to the buildspec file that uses the artifacts sequence to find the build artifacts and push to Amazon ECR.
Xem giải thích
Đáp án
C — Thêm phase post_build vào buildspec và đặt lệnh đẩy image trong khối commands.
Vì sao đúng
Cấu trúc của buildspec chạy theo thứ tự cố định:
version: 0.2
phases:
install: # cài công cụ cần cho build
commands: [...]
pre_build: # chuẩn bị — đăng nhập ECR ở đây
commands:
- aws ecr get-login-password --region ap-southeast-1 | docker login --username AWS --password-stdin $ECR_URI
build: # dựng image
commands:
- docker build -t $ECR_URI:$CODEBUILD_RESOLVED_SOURCE_VERSION .
post_build: # chỉ chạy SAU KHI build kết thúc
commands:
- docker push $ECR_URI:$CODEBUILD_RESOLVED_SOURCE_VERSION
post_build là phase đúng vì nó chạy sau phase build. Và khối commands của post_build chỉ chạy khi build thành công — đúng yêu cầu "chỉ đẩy khi build hoàn tất thành công".
Vì sao các phương án khác sai
-
A. Phase
install— chạy đầu tiên, trước cả khi image được dựng. Lúc đó chẳng có gì để đẩy. -
B.
post_buildvới khốifinally— đây là bẫy tinh vi nhất và cần hiểu chính xác:commands— chỉ chạy khi các lệnh trước thành côngfinally— luôn chạy, kể cả khicommandsthất bại
Đặt
docker pushvàofinallynghĩa là đẩy image kể cả khi build hỏng — trái thẳng yêu cầu.finallydành cho dọn dẹp, ghi log, gửi thông báo. -
D. Dùng sequence
artifacts—artifactskhai tệp nào được đóng gói và đưa vào S3 (artifact store của pipeline). Nó không đẩy được Docker image lên ECR; đẩy image là việc của lệnhdocker push.
Ghi nhớ
| Khối | Chạy khi |
|---|---|
commands |
các lệnh trước thành công |
finally |
luôn luôn, kể cả sau lỗi |
Và nhớ đăng nhập ECR ở pre_build: token của get-login-password có hạn 12 giờ, lấy sớm rồi dùng ở post_build là hoàn toàn an toàn.
A company manages a continuous integration and continuous delivery (CI/CD) pipeline that includes a Jenkins implementation that runs on Amazon EC2. The security team has requested that all build artifacts are encrypted as they contain company sensitive data.
Which changes should a DevOps engineer make to meet these requirements whilst reducing operational overhead for ongoing management?
-
A
Store build artifacts on Amazon S3 with default encryption enabled and move Jenkins to an Auto Scaling group.
-
B
Add a build action using AWS CodePipeline and encrypt the artifacts using AWS Certification Manager (ACM).
-
C
Replace the Jenkins instance running on Amazon EC2 with AWS CodeBuild and configure artifact encryption.
-
D
Configure AWS Systems Manager to patch the Jenkins EC2 instances and set encryption for all Amazon EBS volumes.
Xem giải thích
Đáp án
C — Thay Jenkins chạy trên EC2 bằng AWS CodeBuild và bật mã hoá artifact.
Vì sao đúng
Yêu cầu kép: mã hoá artifact và giảm gánh nặng vận hành lâu dài.
Chỉ chữa vế mã hoá thì vẫn còn nguyên gánh nặng Jenkins: vá hệ điều hành, vá chính Jenkins và hàng chục plugin, quản lý build agent, xử lý lúc máy hết đĩa, tự lo dung lượng khi tải tăng.
CodeBuild bỏ toàn bộ phần đó:
- Không máy chủ nào để quản — mỗi build chạy trong môi trường sạch, cô lập
- Trả tiền theo phút build, không trả tiền cho máy nhàn rỗi
- Mã hoá artifact bằng KMS ngay trong cấu hình project — mặc định đã dùng khoá quản lý được, chỉ định CMK riêng cũng được
- Tích hợp sẵn IAM role nên không cần khoá tĩnh
aws codebuild create-project --name dung-ung-dung \
--artifacts type=S3,location=kho-artifact,encryptionDisabled=false \
--encryption-key arn:aws:kms:ap-southeast-1:123456789012:key/xxxx
Vì sao các phương án khác sai
- A. S3 default encryption + đưa Jenkins vào Auto Scaling group — vế mã hoá thì đúng, nhưng ASG không giảm gánh nặng vận hành Jenkins; nó thêm việc: Jenkins controller có trạng thái (job config, lịch sử build, plugin), nên đưa vào ASG còn phải giải bài toán lưu trữ chia sẻ và bầu chọn node. Nhiều việc hơn, không ít hơn.
- B. "Mã hoá artifact bằng AWS Certificate Manager" — nhầm dịch vụ hoàn toàn. ACM cấp và quản lý chứng chỉ TLS; nó không mã hoá dữ liệu lưu trữ. Việc đó thuộc về KMS.
- D. Vá Jenkins bằng SSM + mã hoá EBS — mã hoá EBS bảo vệ đĩa của máy Jenkins, nhưng artifact được đẩy lên S3 hoặc nơi khác vẫn không được bảo vệ. Và vá bằng SSM chỉ làm nhẹ một phần rất nhỏ trong gánh nặng vận hành Jenkins.
Ghi nhớ
Câu hỏi có cụm "reducing operational overhead" thường là dấu hiệu chuyển từ tự vận hành sang dịch vụ được quản lý: Jenkins → CodeBuild, tự dựng Git → CodeCommit, tự viết script deploy → CodeDeploy. Và nhớ tách bạch: KMS mã hoá dữ liệu, ACM cấp chứng chỉ TLS — hai việc không liên quan.
A company is using AWS CodeCommit for version control and AWS CodePipeline for orchestration of software deployments. The development team are using a remote main branch as the trigger for the pipeline. A developer noticed that the CodePipeline pipeline was not triggered after the developer pushed code changes to the CodeCommit repository.
Which of the following actions should be taken to troubleshoot this issue?
-
A
Check that an AWS Lambda function has been created to check for code commits and trigger the pipeline.
-
B
Check that an Amazon CloudWatch Events rule has been created for the main branch to trigger the pipeline.
-
C
Check that the CodePipeline service role has permission to access the CodeCommit repository.
-
D
Check that the developer's IAM role has permission to push to the CodeCommit repository.
Xem giải thích
Đáp án
B — Kiểm tra xem đã có CloudWatch Events (EventBridge) rule cho nhánh main để kích hoạt pipeline hay chưa.
Vì sao đúng
Điều nhiều người tưởng nhầm: CodePipeline không tự theo dõi CodeCommit. Có hai cơ chế phát hiện thay đổi, và mặc định hiện nay là cơ chế thứ nhất:
| Cơ chế | Cách hoạt động | Độ trễ |
|---|---|---|
| EventBridge rule (mặc định, khuyến nghị) | CodeCommit phát sự kiện CodeCommit Repository State Change → rule gọi StartPipelineExecution |
gần như tức thì |
| Periodic checks (cũ) | CodePipeline định kỳ hỏi repository | tới vài phút |
Khi tạo pipeline qua Console hoặc CloudFormation, rule này được sinh tự động — nhưng nó là một tài nguyên riêng biệt. Ai đó xoá nhầm, hoặc rule bị tạo cho sai tên nhánh (master trong khi đội đã đổi sang main), thì triệu chứng đúng như đề: push thành công, pipeline im lặng, không lỗi ở đâu cả.
Kiểm tra:
aws events list-rules --name-prefix codepipeline-
aws events list-targets-by-rule --rule <ten-rule>
Chú ý mẫu sự kiện phải khớp đúng tên nhánh:
{"source": ["aws.codecommit"],
"detail-type": ["CodeCommit Repository State Change"],
"detail": {"referenceName": ["main"], "referenceType": ["branch"]}}
Vì sao các phương án khác sai
- A. Lambda kiểm tra commit — không phải cơ chế của CodePipeline. Không có Lambda nào tham gia vào luồng kích hoạt chuẩn.
- C. Quyền của CodePipeline service role với CodeCommit — thiếu quyền thì pipeline vẫn khởi động rồi thất bại ở source stage với lỗi rõ ràng. Triệu chứng đề mô tả là pipeline không chạy chút nào, khác hẳn.
- D. Quyền push của lập trình viên — đề nói rõ "the developer pushed code changes", tức là push đã thành công. Nếu thiếu quyền thì chính lệnh
git pushđã báo lỗi.
Ghi nhớ
Chẩn đoán "pipeline không chạy" theo thứ tự: (1) rule EventBridge còn tồn tại không, (2) mẫu sự kiện có khớp đúng tên nhánh không, (3) target của rule có trỏ đúng pipeline không, (4) role của rule có quyền codepipeline:StartPipelineExecution không. Ngược lại, "pipeline chạy rồi hỏng ở source stage" mới là câu chuyện về quyền của service role.