Ngân hàng đề — Google Cloud Associate Cloud Engineer

Tìm thấy 449 câu.

Câu 341
You are building a data lake on Google Cloud for your Internet of Things (IoT) application. The IoT application has millions of sensors that are constantly streaming structured and unstructured data to your backend in the cloud. You want to build a highly available and resilient architecture based on Google-recommended practices. What should you do?
  1. A Stream data to Pub/Sub, and use Dataflow to send data to Cloud Storage.
  2. B Stream data to Pub/Sub, and use Storage Transfer Service to send data to BigQuery.
  3. C Stream data to Dataflow, and use Dataprep by Trifacta to send data to Bigtable.
  4. D Stream data to Dataflow, and use Storage Transfer Service to send data to BigQuery.
Xem giải thích

🧩 Phân tích nội dung câu hỏi

Câu hỏi tập trung vào việc xây dựng một data lake trên Google Cloud cho ứng dụng IoT với hàng triệu cảm biến liên tục truyền dữ liệu có cấu trúc và không cấu trúc (structured và unstructured data) theo thời gian thực (streaming). Mục tiêu là thiết kế kiến trúc có tính sẵn sàng cao (highly available) và bền bỉ (resilient) theo các thực hành tốt nhất được Google khuyến nghị (Google-recommended practices).

📌 Yêu cầu chính:

  • Xử lý dữ liệu streaming lớn từ IoT.
  • Data lake thường sử dụng Cloud Storage làm lớp lưu trữ trung tâm (object storage) để lưu dữ liệu thô, hỗ trợ phân tích sau này bằng BigQuery hoặc Dataflow.
  • Kiến trúc phải scalable, fault-tolerant: Sử dụng Pub/Sub cho ingestion, Dataflow cho processing streaming.

🛠️ Bối cảnh kiến thức cập nhật (tính đến 2026): Theo tài liệu Google Cloud mới nhất (Google Cloud Well-Architected Framework và IoT best practices 2024-2026), pattern chuẩn cho IoT data lake là Pub/Sub làm message broker → Dataflow (Apache Beam) xử lý stream → Cloud Storage làm data lake sink. Điều này đảm bảo decoupling, auto-scaling và exactly-once delivery.

📘 Tài liệu tham khảo:

✅ Đáp án đúng và lý do lựa chọn

Đáp án đúng: Stream data to Pub/Sub, and use Dataflow to send data to Cloud Storage.

Lý do chi tiết 🏆:

  • Pub/Sub là dịch vụ messaging managed, lý tưởng cho streaming dữ liệu IoT cao tải (millions of sensors), hỗ trợ at-least-once/exactly-once delivery, auto-scaling và HA (multi-region).
  • Dataflow (dựa trên Apache Beam) đọc trực tiếp từ Pub/Sub, xử lý windowing/transformation dữ liệu streaming (structured/unstructured), rồi sink vào Cloud Storage – nền tảng data lake chuẩn của GCP (hỗ trợ partitioning, lifecycle policies).
  • Kiến trúc này theo Google-recommended practices: Decoupled, resilient (Dataflow tự retry failures), scalable (serverless), và phù hợp data lake (lưu raw data lâu dài). Đáp ứng đầy đủ yêu cầu HA/resilient mà không phức tạp hóa.

🔍 Giải thích tất cả các phương án (đúng/sai)

  • ✅ Stream data to Pub/Sub, and use Dataflow to send data to Cloud Storage.
    Đúng vì: Như giải thích trên, đây là pipeline chuẩn cho IoT streaming data lake. Pub/Sub ingest, Dataflow process & sink vào Cloud Storage (data lake storage). Hoàn hảo cho HA/resilient với auto-scaling. 🏅

  • ❌ Stream data to Pub/Sub, and use Storage Transfer Service to send data to BigQuery.
    Sai vì: Storage Transfer Service (STS) chỉ dành cho batch file transfers (từ URL/Cloud Storage khác), không hỗ trợ streaming real-time từ Pub/Sub. BigQuery là data warehouse cho analytics, không phải data lake (thiếu lưu trữ raw unstructured data rẻ tiền). Không resilient cho streaming IoT. 🚫

  • ❌ Stream data to Dataflow, and use Dataprep by Trifacta to send data to Bigtable.
    Sai vì: Không có cách "stream trực tiếp to Dataflow" mà bỏ qua Pub/Sub cho IoT scale lớn (Dataflow thường đọc từ Pub/Sub). Dataprep by Trifacta là tool visual data prep (batch-oriented), không phải streaming processor. Bigtable là NoSQL database cho operational data (không phải data lake lưu trữ raw). Không theo best practices. 🔴

  • ❌ Stream data to Dataflow, and use Storage Transfer Service to send data to BigQuery.
    Sai vì: Tương tự trên, không stream trực tiếp to Dataflow hiệu quả cho IoT mà thiếu Pub/Sub buffering. STS không hỗ trợ streaming, chỉ batch. BigQuery không thay thế data lake (Cloud Storage). Kiến trúc thiếu resilience cho high-volume streaming. ❌

Câu 342
You are running out of primary internal IP addresses in a subnet for a custom mode VPC. The subnet has the IP range 10.0.0.0/20, and the IP addresses are primarily used by virtual machines in the project. You need to provide more IP addresses for the virtual machines. What should you do?
  1. A Add a secondary IP range 10.1.0.0/20 to the subnet.
  2. B Change the subnet IP range from 10.0.0.0/20 to 10.0.0.0/18.
  3. C Change the subnet IP range from 10.0.0.0/20 to 10.0.0.0/22.
  4. D Convert the subnet IP range from IPv4 to IPv6.
Xem giải thích

🧩 Phân tích nội dung câu hỏi

Câu hỏi mô tả tình huống bạn đang hết địa chỉ IP nội bộ chính (primary internal IP addresses) trong một subnet thuộc VPC ở chế độ custom (custom mode VPC). Subnet hiện tại có dải IP 10.0.0.0/20, và các IP này chủ yếu được sử dụng bởi các máy ảo (virtual machines - EC2 instances) trong project. Nhiệm vụ là cung cấp thêm IP addresses cho các máy ảo mà không làm gián đoạn hoạt động hiện tại.

  • Chi tiết kỹ thuật:
    • Dải 10.0.0.0/20 cung cấp 4.096 địa chỉ IP (từ 10.0.0.0 đến 10.0.15.255), nhưng số IP khả dụng thực tế ít hơn do AWS dành 5 IP đầu và cuối cho hệ thống (network, broadcast, VPC router, DNS, future).
    • Primary CIDR là dải IP chính của subnet, dùng để gán primary private IP cho EC2 instances (mỗi instance cần ít nhất 1 primary IP).
    • Vấn đề: Hết IP khả dụng trong primary range, không thể khởi tạo thêm VM mới.
    • Yêu cầu: Giải pháp phải tăng số IP cho VM, phù hợp với AWS VPC best practices (cập nhật đến 2026: AWS vẫn hỗ trợ mở rộng subnet CIDR mà không downtime).

📘 Tài liệu tham khảo:

  • AWS VPC User Guide: Modify Subnet IPv4 CIDR Block (xác nhận có thể expand primary CIDR).
  • AWS VPC FAQs: Subnet Sizing (hỗ trợ từ /28 đến /16, không shrink).

✅ Đáp án đúng và lý do lựa chọn

Đáp án đúng: Change the subnet IP range from 10.0.0.0/20 to 10.0.0.0/18.

Lý do 🛠️:

  • Mở rộng primary CIDR từ /20 lên /18 tăng số IP từ 4.096 lên 16.384 (10.0.0.0 đến 10.0.63.255), bao phủ hoàn toàn dải cũ (/20 nằm trong /18), không overlap và không downtime (AWS hỗ trợ modify trực tiếp qua Console/CLI/API).
  • Điều này trực tiếp thêm IP vào primary pool cho VM, giải quyết hết IP mà không cần migrate resources.
  • Phù hợp quy tắc AWS: Chỉ expand (giảm prefix length), phải contiguous và trong VPC CIDR.

📋 Giải thích tất cả các phương án (đúng/sai)

🧩 Tổng quan: AWS cho phép expand primary CIDR (như /20 → /18), thêm secondary CIDR (cho ENI secondary IPs), nhưng không shrink hoặc convert trực tiếp IPv4 sang IPv6 mà không hỗ trợ VM IPv4.

  • ❌ Add a secondary IP range 10.1.0.0/20 to the subnet.
    Sai vì: Secondary CIDR chỉ dùng cho secondary private IPs trên ENI (không phải primary IP của instance). Primary IP của VM vẫn lấy từ primary CIDR (/20), nên không giải quyết hết IP primary. Dải 10.1.0.0/20 phải non-overlapping với VPC/subnet hiện tại, nhưng không thêm vào pool chính cho VM mới. (Không khuyến nghị cho VM primary usage).

  • ✅ Change the subnet IP range from 10.0.0.0/20 to 10.0.0.0/18.
    Đúng vì: Như giải thích trên, expand thành công tăng gấp 4 lần IP primary, chứa dải cũ, hỗ trợ AWS modify subnet mà zero downtime. VMs hiện tại giữ IP cũ, thêm VM mới dùng IP mới từ range mở rộng.

  • ❌ Change the subnet IP range from 10.0.0.0/20 to 10.0.0.0/22.
    Sai vì: /22 chỉ có 1.024 IP (nhỏ hơn /20), là shrink subnet - AWS KHÔNG cho phép (chỉ expand, không decrease size). Sẽ gây lỗi và làm tình hình tệ hơn (ít IP hơn).

  • ❌ Convert the subnet IP range from IPv4 to IPv6.
    Sai vì: AWS VPC hỗ trợ dual-stack (IPv4 + IPv6), nhưng không convert IPv4 sang IPv6 (hai range riêng biệt). VM vẫn cần IPv4 primary IP (hầu hết apps chưa IPv6-only). IPv6 không thay thế IPv4 pool, và cần assign ::/56 riêng (không giải quyết vấn đề IPv4 ngay lập tức).

Kết luận 🚀: Luôn kiểm tra VPC CIDR trước khi expand (phải chứa subnet mới). Sử dụng AWS CLI: aws ec2 modify-subnet-attribute --subnet-id subnet-xxx --ipv4-cidr-block 10.0.0.0/18. Theo dõi qua CloudWatch để tránh hết IP tương lai!

Câu 343
Your company requires all developers to have the same permissions, regardless of the Google Cloud project they are working on. Your company’s security policy also restricts developer permissions to Compute Engine, Cloud Functions, and Cloud SQL. You want to implement the security policy with minimal effort. What should you do?
  1. A • Create a custom role with Compute Engine, Cloud Functions, and Cloud SQL permissions in one project within the Google Cloud organization.
    • Copy the role across all projects created within the organization with the gcloud iam roles copy command.
    • Assign the role to developers in those projects.
  2. B • Add all developers to a Google group in Google Groups for Workspace.
    • Assign the predefined role of Compute Admin to the Google group at the Google Cloud organization level.
  3. C • Add all developers to a Google group in Cloud Identity.
    • Assign predefined roles for Compute Engine, Cloud Functions, and Cloud SQL permissions to the Google group for each project in the Google Cloud organization.
  4. D • Add all developers to a Google group in Cloud Identity.
    • Create a custom role with Compute Engine, Cloud Functions, and Cloud SQL permissions at the Google Cloud organization level.
    • Assign the custom role to the Google group.
Xem giải thích

🧩 Phân tích nội dung câu hỏi

Câu hỏi yêu cầu triển khai chính sách bảo mật cho công ty, nơi tất cả developers phải có cùng quyền hạn (permissions) giống nhau trên mọi Google Cloud project mà họ làm việc. Quyền hạn bị hạn chế chỉ vào Compute Engine, Cloud Functions, và Cloud SQL. Mục tiêu là triển khai với nỗ lực tối thiểu (minimal effort).

🔑 Yêu cầu chính:

  • Permissions thống nhất trên toàn tổ chức (organization).
  • Không cấp quyền thừa (chỉ 3 dịch vụ trên).
  • Sử dụng cơ chế IAM (Identity and Access Management) hiệu quả, tận dụng organization-level để tránh lặp lại công việc trên từng project.

📘 Kiến thức nền tảng (cập nhật đến 2026): Trong Google Cloud IAM, custom roles có thể tạo ở organization/folder/project level. Bindings tại organization level sẽ áp dụng cho tất cả projects con (inheritance). Predefined roles như Compute Admin chỉ dành cho Compute Engine. Cloud Identity groups lý tưởng cho IAM bindings thuần túy GCP (không lẫn Workspace). Tham khảo: Google Cloud IAM Roles Documentation và Organization-level IAM.

✅ Đáp án đúng

Đáp án D:
• Add all developers to a Google group in Cloud Identity.
• Create a custom role with Compute Engine, Cloud Functions, and Cloud SQL permissions at the Google Cloud organization level.
• Assign the custom role to the Google group.

Lý do chọn:
🛠️ Phương án này tối ưu nhất vì:

  • Tạo custom role tại organization level chứa chính xác permissions cho 3 dịch vụ → Áp dụng tự động cho tất cả projects (inheritance).
  • Sử dụng Cloud Identity group để quản lý developers tập trung, assign role chỉ một lần tại org level → Không cần lặp lại trên từng project.
  • Minimal effort: Chỉ 3 bước đơn giản, scale tốt cho nhiều projects. Không cấp quyền thừa.
    ✅ Hoàn hảo khớp yêu cầu "same permissions regardless of project" và "minimal effort".

❌ Phân tích tất cả các phương án

Dưới đây là phân tích chi tiết từng lựa chọn, giữ nguyên văn bản gốc:

  • [SAI] • Create a custom role with Compute Engine, Cloud Functions, and Cloud SQL permissions in one project within the Google Cloud organization.
    • Copy the role across all projects created within the organization with the gcloud iam roles copy command.
    • Assign the role to developers in those projects.
    ❌ Sai vì: Phải tạo role ở project level (không propagate), copy role bằng gcloud iam roles copy chỉ sao chép definition sang projects khác, nhưng vẫn cần assign thủ công từng project → Không minimal effort, dễ lỗi khi có projects mới. Không tận dụng org-level inheritance. (Tham khảo: gcloud iam roles copy docs).

  • [SAI] • Add all developers to a Google group in Google Groups for Workspace.
    • Assign the predefined role of Compute Admin to the Google group at the Google Cloud organization level.
    ❌ Sai vì:

    • Compute Admin chỉ dành cho Compute Engine (quyền VM, instances), không bao gồm Cloud Functions hay Cloud SQL → Vi phạm "restricts to those services".
    • Google Groups for Workspace phù hợp hơn cho email/collaboration, kém tối ưu cho pure GCP IAM so với Cloud Identity. Org-level binding tốt nhưng role sai. (Tham khảo: Compute Admin role).
  • [SAI] • Add all developers to a Google group in Cloud Identity.
    • Assign predefined roles for Compute Engine, Cloud Functions, and Cloud SQL permissions to the Google group for each project in the Google Cloud organization.
    ❌ Sai vì: Dù dùng Cloud Identity group tốt, nhưng phải assign predefined roles cho TỪNG PROJECT → Lặp lại công việc nhiều lần, không minimal effort. Không thống nhất dễ dàng khi projects mới xuất hiện. Predefined roles (như Cloud SQL Client, Cloud Functions Developer) tồn tại nhưng vẫn cần per-project binding.

🧠 Tóm tắt lợi ích đáp án đúng: Sử dụng org-level custom role + group binding là best practice cho enterprise-scale IAM (theo Google Cloud Well-Architected Framework 2026). Tránh over-permissioning và quản lý tập trung! 🚀

Câu 344
You are working for a hospital that stores its medical images in an on-premises data room. The hospital wants to use Cloud Storage for archival storage of these images. The hospital wants an automated process to upload any new medical images to Cloud Storage. You need to design and implement a solution. What should you do?
  1. A Create a Pub/Sub topic, and enable a Cloud Storage trigger for the Pub/Sub topic. Create an application that sends all medical images to the Pub/Sub topic.
  2. B Create a script that uses the gcloud storage command to synchronize the on-premises storage with Cloud Storage, Schedule the script as a cron job.
  3. C Create a Pub/Sub topic, and create a Cloud Function connected to the topic that writes data to Cloud Storage. Create an application that sends all medical images to the Pub/Sub topic.
  4. D In the Google Cloud console, go to Cloud Storage. Upload the relevant images to the appropriate bucket.
Xem giải thích

🏥 Phân tích câu hỏi trắc nghiệm Google Cloud Associate Cloud Engineer

🧩 Nội dung câu hỏi được giải thích chi tiết:
Câu hỏi mô tả tình huống một bệnh viện lưu trữ hình ảnh y tế (medical images) trong phòng dữ liệu tại chỗ (on-premises data room). Bệnh viện muốn sử dụng Cloud Storage của Google Cloud để lưu trữ lưu trữ (archival storage) các hình ảnh này. Họ cần một quy trình tự động để tải lên (upload) bất kỳ hình ảnh y tế mới nào vào Cloud Storage. Nhiệm vụ của bạn là thiết kế và triển khai giải pháp phù hợp.
🔑 Yêu cầu chính: Giải pháp phải tự động hóa việc đồng bộ hóa dữ liệu từ on-premises lên Cloud Storage, không phải tải thủ công, và phù hợp với môi trường hybrid (kết hợp on-premises và cloud). Đây là chủ đề về tích hợp dữ liệu on-premises với Google Cloud Storage, sử dụng các công cụ tự động như script, scheduler, hoặc event-driven services. (Lưu ý: Đây là kiến thức Google Cloud, không phải AWS như đề cập nhầm; dựa trên docs cập nhật 2024-2026).

✅ Đáp án đúng và lý do lựa chọn:
Đáp án đúng: Create a script that uses the gcloud storage command to synchronize the on-premises storage with Cloud Storage, Schedule the script as a cron job.
Lý do: Giải pháp này tự động hóa hoàn hảo bằng cách sử dụng lệnh gcloud storage (CLI chính thức của Google Cloud, thay thế gsutil từ 2023) với tính năng rsync để đồng bộ hóa thư mục on-premises lên bucket Cloud Storage. Lập lịch chạy script qua cron job (trên máy on-premises hoặc Compute Engine) đảm bảo chạy định kỳ, phát hiện và upload chỉ dữ liệu mới/thay đổi mà không cần can thiệp thủ công. Đây là cách đơn giản, đáng tin cậy, chi phí thấp cho archival storage, phù hợp quy mô bệnh viện. 📘 Nguồn: Google Cloud Storage CLI docs & Transfer data with gsutil rsync (cập nhật 2025).

📋 Giải thích tất cả các phương án (đúng/sai):

  • ❌ Phương án SAI: Create a Pub/Sub topic, and enable a Cloud Storage trigger for the Pub/Sub topic. Create an application that sends all medical images to the Pub/Sub topic.
    Lý do sai: Pub/Sub là dịch vụ messaging event-driven, nhưng không có Cloud Storage trigger cho Pub/Sub (ngược lại, Cloud Storage có event trigger gửi đến Pub/Sub). Không thể "enable Cloud Storage trigger for Pub/Sub topic" – đây là hiểu lầm khái niệm. Ứng dụng gửi images đến Pub/Sub sẽ không tự động upload mà cần xử lý thêm, không phù hợp tự động hóa đơn giản từ on-premises. 🛠️ Vấn đề: Sai kiến trúc, Pub/Sub dùng cho streaming, không phải sync file.

  • ✅ Phương án ĐÚNG (đã giải thích ở trên): Create a script that uses the gcloud storage command to synchronize the on-premises storage with Cloud Storage, Schedule the script as a cron job.
    Tóm tắt lý do đúng: Tự động, hiệu quả với rsync + cron, lý tưởng cho archival. 🚀

  • ❌ Phương án SAI: Create a Pub/Sub topic, and create a Cloud Function connected to the topic that writes data to Cloud Storage. Create an application that sends all medical images to the Pub/Sub topic.
    Lý do sai: Mặc dù Pub/Sub + Cloud Functions có thể viết dữ liệu vào Cloud Storage, nhưng yêu cầu ứng dụng riêng gửi images đến Pub/Sub từ on-premises – điều này không tự động, cần phát triển app custom và xử lý file lớn (images y tế có thể GB). Không giải quyết đồng bộ hóa tự động mà chỉ là pipeline thủ công. Pub/Sub phù hợp real-time, không phải batch sync archival. 🧩 Vấn đề: Phức tạp thừa, chi phí cao hơn cron script.

  • ❌ Phương án SAI: In the Google Cloud console, go to Cloud Storage. Upload the relevant images to the appropriate bucket.
    Lý do sai: Đây là cách thủ công qua Console UI, không tự động chút nào. Bệnh viện cần quy trình upload bất kỳ hình ảnh mới – không thể lặp lại thủ công hàng ngày. Không phù hợp quy mô lớn hoặc on-premises integration. 📱 Vấn đề: Chỉ dành test nhỏ, không phải giải pháp production.

Kết luận 💡: Giải pháp cron + gcloud storage là best practice cho hybrid data sync đến 2026, dễ scale với Cloud Scheduler nếu cần cloud-native. Khuyến nghị thêm authentication via service account cho script!

Câu 345
Your company has an internal application for managing transactional orders. The application is used exclusively by employees in a single physical location. The application requires strong consistency, fast queries, and ACID guarantees for multi-table transactional updates. The first version of the application is implemented in PostgreSQL, and you want to deploy it to the cloud with minimal code changes. Which database is most appropriate for this application?
  1. A Bigtable
  2. B BigQuery
  3. C Cloud SQL
  4. D Firestore
Xem giải thích

🧩 Phân tích chi tiết nội dung câu hỏi

Câu hỏi mô tả một ứng dụng nội bộ của công ty dùng để quản lý các đơn hàng giao dịch (transactional orders). Ứng dụng chỉ được sử dụng bởi nhân viên tại một vị trí vật lý duy nhất (không cần phân tán toàn cầu), và có các yêu cầu nghiêm ngặt sau:

  • Strong consistency (tính nhất quán mạnh mẽ, dữ liệu luôn cập nhật ngay lập tức).
  • Fast queries (truy vấn nhanh chóng).
  • ACID guarantees cho multi-table transactional updates (đảm bảo ACID – Atomicity, Consistency, Isolation, Durability – cho các cập nhật giao dịch liên quan nhiều bảng).

Phiên bản đầu tiên được triển khai trên PostgreSQL (một cơ sở dữ liệu quan hệ mã nguồn mở), và mục tiêu là deploy lên cloud với minimal code changes (thay đổi code tối thiểu).

🛠️ Tóm tắt yêu cầu chính: Cần một dịch vụ cơ sở dữ liệu managed relational database hỗ trợ PostgreSQL, tương thích cao để không cần viết lại code, đảm bảo ACID đầy đủ, phù hợp cho workload transactional nội bộ với quy mô vừa phải tại một location.

✅ Đáp án đúng: Cloud SQL

Lý do lựa chọn:
Cloud SQL là dịch vụ managed relational database của Google Cloud, hỗ trợ đầy đủ PostgreSQL (và MySQL, SQL Server). Nó cung cấp strong consistency, ACID transactions cho multi-table updates, fast queries nhờ tích hợp tối ưu với Compute Engine/VPC. Vì ứng dụng đã dùng PostgreSQL, deploy lên Cloud SQL chỉ cần minimal code changes (chỉ thay connection string). Phù hợp hoàn hảo cho workload OLTP (Online Transaction Processing) nội bộ tại single location.
📘 Dẫn nguồn: Cloud SQL for PostgreSQL documentation (cập nhật 2024-2026, hỗ trợ PostgreSQL 16+ với high availability và automatic backups).

📋 Giải thích tất cả các phương án

  • Cloud SQL ✅
    Đúng vì: Như đã giải thích ở trên, đây là lựa chọn lý tưởng với full ACID, PostgreSQL native support, strong consistency và performance cao cho transactional apps. Minimal migration effort từ on-prem PostgreSQL.

  • Bigtable ❌
    Sai vì: Bigtable là NoSQL wide-column store được thiết kế cho massive scale analytics và time-series data (hàng tỷ rows, petabyte-scale). Nó chỉ hỗ trợ eventual consistency (không strong), không có ACID transactions đầy đủ cho multi-table, và không tương thích PostgreSQL (cần rewrite code hoàn toàn). Không phù hợp cho OLTP transactional với ACID.
    📘 Dẫn nguồn: Bigtable overview (cập nhật 2026, nhấn mạnh eventual consistency cho big data).

  • BigQuery ❌
    Sai vì: BigQuery là serverless data warehouse cho analytics và OLAP (batch queries lớn), không hỗ trợ real-time transactional updates hay ACID multi-table transactions. Nó dùng columnar storage với eventual consistency, không phải relational DB, và không tương thích PostgreSQL (cần ETL để migrate). Không phù hợp cho fast transactional queries nội bộ.
    📘 Dẫn nguồn: BigQuery capabilities (cập nhật 2026, tập trung vào petabyte-scale analytics, không ACID OLTP).

  • Firestore ❌
    Sai vì: Firestore là NoSQL document database cho mobile/web apps với real-time sync, chỉ hỗ trợ limited ACID (single document transactions, không full multi-table/collection ACID như relational). Nó có eventual consistency mặc định, không hỗ trợ SQL/PostgreSQL syntax (cần rewrite code lớn), và kém tối ưu cho complex joins/multi-table updates. Không phù hợp cho ứng dụng PostgreSQL transactional.
    📘 Dẫn nguồn: Firestore transactions (cập nhật 2026, giới hạn transactions ở single/multi-document nhưng không full relational ACID).

🧠 Kết luận: Cloud SQL là lựa chọn tối ưu nhất cho migration PostgreSQL với yêu cầu ACID/strong consistency, giúp deploy nhanh chóng mà không thay đổi code lớn! 🚀

Câu 346
Your company runs one batch process in an on-premises server that takes around 30 hours to complete. The task runs monthly, can be performed offline, and must be restarted if interrupted. You want to migrate this workload to the cloud while minimizing cost. What should you do?
  1. A Create an Instance Template with Spot VMs On. Create a Managed Instance Group from the template and adjust Target CPU Utilization. Migrate the workload.
  2. B Migrate the workload to a Compute Engine VM. Start and stop the instance as needed.
  3. C Migrate the workload to a Google Kubernetes Engine cluster with Spot nodes.
  4. D Migrate the workload to a Compute Engine Spot VM.
Xem giải thích

🧩 Phân tích chi tiết nội dung câu hỏi

Câu hỏi mô tả một batch process chạy trên máy chủ on-premises, mất khoảng 30 giờ để hoàn thành, chạy hàng tháng, có thể thực hiện offline (không cần kết nối liên tục), và phải khởi động lại từ đầu nếu bị gián đoạn. Yêu cầu là di chuyển workload này lên cloud (Google Cloud Platform - GCP) đồng thời tối ưu hóa chi phí nhất có thể. 🔍
Điểm then chốt: Workload dài (30 giờ), chạy định kỳ ít (hàng tháng), không chịu được gián đoạn (preemption), và cần chi phí thấp. Do đó, giải pháp phải tránh rủi ro bị ngắt đột ngột như Spot VMs, ưu tiên kiểm soát thủ công để tiết kiệm (chỉ chạy khi cần).

✅ Đáp án đúng: Migrate the workload to a Compute Engine VM. Start and stop the instance as needed.

Lý do lựa chọn:

  • Compute Engine VM on-demand cho phép bật/tắt thủ công theo lịch chạy hàng tháng, chỉ tính phí khi VM đang chạy (không mất phí khi stop). Với workload 30 giờ/tháng, chi phí rất thấp (~1-2% so với chạy liên tục). 🛡️
  • Không bị gián đoạn bất ngờ (khác Spot VM), đảm bảo hoàn thành mà không cần restart.
  • Phù hợp migrate từ on-prem: Tạo VM, copy data, chạy script batch.
    📘 Tài liệu tham khảo: Compute Engine Pricing (cập nhật 2024-2026: Stopped instances không tính phí machine type, chỉ lưu trữ disk ~$0.04/GB/tháng).

📋 Giải thích tất cả các phương án

  • ❌ Create an Instance Template with Spot VMs On. Create a Managed Instance Group from the template and adjust Target CPU Utilization. Migrate the workload.
    Sai vì: Managed Instance Group (MIG) với Spot VMs tự động scale dựa trên CPU, nhưng workload batch cố định 30 giờ không cần scale. Spot VMs có thể bị preempted (ngắt) bất cứ lúc nào (xác suất cao với job dài), buộc restart – vi phạm yêu cầu. MIG + Spot phức tạp, chi phí quản lý cao hơn cần thiết. 🛑

  • ✅ Migrate the workload to a Compute Engine VM. Start and stop the instance as needed.
    (Đã giải thích ở trên – lý tưởng cho chi phí thấp, kiểm soát cao).

  • ❌ Migrate the workload to a Google Kubernetes Engine cluster with Spot nodes.
    Sai vì: GKE cluster với Spot nodes dùng cho workload containerized phân tán, không phù hợp batch đơn lẻ 30 giờ/offline. Spot nodes dễ bị preempt, pod bị evict → restart toàn bộ. Cluster GKE có chi phí master/control plane cố định (~$0.1/giờ), đắt đỏ cho job hàng tháng. Container hóa không bắt buộc ở đây. 🚫
    📘 Tham khảo: GKE Spot Pods (2024: Spot VMs preemptible up to 24 giờ, không ổn cho 30 giờ).

  • ❌ Migrate the workload to a Compute Engine Spot VM.
    Sai vì: Spot VM rẻ hơn 60-91% nhưng preemptible bất cứ lúc nào (thông báo 30 giây), đặc biệt job dài 30 giờ gần như chắc chắn bị ngắt → phải restart từ đầu. Không đáp ứng "must be restarted if interrupted" một cách đáng tin cậy. 💥
    📘 Tham khảo: Spot VMs Documentation (2024-2026: Preemption rate cao cho long-running jobs; khuyến nghị chỉ cho fault-tolerant workloads).

Kết luận 🏆: Giải pháp đơn giản, tiết kiệm nhất là VM on-demand với start/stop thủ công – phù hợp Associate Cloud Engineer exam (AOCE). Sử dụng Cloud Scheduler + startup script để tự động hóa nếu cần! 🚀

Câu 347
You are planning to migrate the following on-premises data management solutions to Google Cloud:

•One MySQL cluster for your main database
•Apache Kafka for your event streaming platform
•One Cloud SQL for PostgreSQL database for your analytical and reporting needs

You want to implement Google-recommended solutions for the migration. You need to ensure that the new solutions provide global scalability and require minimal operational and infrastructure management. What should you do?
  1. A Migrate from MySQL to Cloud SQL, from Kafka to Pub/Sub, and from Cloud SQL for PostgreSQL to BigQuery.
  2. B Migrate from MySQL to Cloud Spanner, from Kafka to Pub/Sub, and from Cloud SQL for PostgreSQL to BigQuery.
  3. C Migrate from MySQL to Cloud Spanner, from Kafka to Memorystore, and from Cloud SQL for PostgreSQL to Cloud SQL.
  4. D Migrate from MySQL to Cloud SQL, from Kafka to Memorystore, and from Cloud SQL for PostgreSQL to Cloud SQL.
Xem giải thích

🧩 Phân tích chi tiết câu hỏi

📘 Nội dung câu hỏi:
Câu hỏi yêu cầu lập kế hoạch di chuyển (migrate) các giải pháp quản lý dữ liệu on-premises sang Google Cloud. Các thành phần cụ thể bao gồm:

  • Một cluster MySQL cho cơ sở dữ liệu chính (main database).
  • Apache Kafka cho nền tảng streaming sự kiện (event streaming platform).
  • Một cơ sở dữ liệu Cloud SQL for PostgreSQL dành cho nhu cầu phân tích và báo cáo (analytical and reporting needs).

Yêu cầu chính:

  • Sử dụng các giải pháp được Google khuyến nghị (Google-recommended solutions).
  • Đảm bảo các giải pháp mới có khả năng mở rộng toàn cầu (global scalability).
  • Yêu cầu quản lý vận hành và hạ tầng tối thiểu (minimal operational and infrastructure management).

🛠️ Mục tiêu chính: Tìm giải pháp thay thế managed, scalable globally, phù hợp với từng workload: transactional DB (MySQL) cần Spanner cho global consistency; streaming (Kafka) cần Pub/Sub; analytics (PostgreSQL) cần BigQuery cho serverless querying. Đây là best practice theo Google Cloud migration guidelines (cập nhật đến 2026, với Spanner hỗ trợ multi-region replication tự động và autoscaling).

✅ Đáp án đúng và lý do lựa chọn

Đáp án đúng: Migrate from MySQL to Cloud Spanner, from Kafka to Pub/Sub, and from Cloud SQL for PostgreSQL to BigQuery.

Lý do:

  • Cloud Spanner thay MySQL: Là database relational globally distributed, hỗ trợ SQL chuẩn, ACID transactions, horizontal scaling tự động qua multi-region, không cần quản lý infra (fully managed). Hoàn hảo cho main DB cần global scalability.
  • Pub/Sub thay Kafka: Dịch vụ messaging managed, hỗ trợ high-throughput streaming, global replication, autoscaling, tích hợp tốt với GCP ecosystem – Google khuyến nghị cho event streaming.
  • BigQuery thay PostgreSQL analytics: Serverless data warehouse, columnar storage, ML integration, petabyte-scale analytics với zero management, lý tưởng cho reporting mà không cần scale infra thủ công.
    Tất cả đều minimal ops, global scalable ✅.

📚 Tài liệu tham khảo:

🛡️ Giải thích tất cả các phương án

Dưới đây là phân tích từng lựa chọn, giữ nguyên văn bản gốc bằng tiếng Anh. Mỗi phương án được đánh giá đúng/sai với lý do chi tiết:

  • ❌ [SAI] Migrate from MySQL to Cloud SQL, from Kafka to Pub/Sub, and from Cloud SQL for PostgreSQL to BigQuery.
    Phương án này sai vì Cloud SQL (managed MySQL/PostgreSQL) chỉ hỗ trợ regional high availability (multi-zone), không có global scalability tự động như Spanner (không multi-region replication native). Phần Kafka → Pub/Sub và PostgreSQL → BigQuery đúng, nhưng MySQL → Cloud SQL không đáp ứng "global scalability" cho main DB. Không phải Google-recommended cho workload global transactional.

  • ✅ [ĐÚNG] Migrate from MySQL to Cloud Spanner, from Kafka to Pub/Sub, and from Cloud SQL for PostgreSQL to BigQuery.
    Hoàn toàn đúng như giải thích ở phần đáp án trên: Spanner cho global relational DB, Pub/Sub cho streaming, BigQuery cho analytics – tất cả managed, scalable globally, minimal ops 🏆.

  • ❌ [SAI] Migrate from MySQL to Cloud Spanner, from Kafka to Memorystore, and from Cloud SQL for PostgreSQL to Cloud SQL.
    Sai vì Memorystore (Redis/Memcached managed) là in-memory caching/key-value store, không thay thế Kafka (thiếu streaming pub/sub semantics, durability, ordering). Phần MySQL → Spanner và PostgreSQL → Cloud SQL (regional) không phù hợp analytics (Cloud SQL kém cho large-scale reporting so với BigQuery). Không global/minimal cho toàn bộ.

  • ❌ [SAI] Migrate from MySQL to Cloud SQL, from Kafka to Memorystore, and from Cloud SQL for PostgreSQL to Cloud SQL.
    Sai toàn diện: Cloud SQL không global scalable cho MySQL main DB; Memorystore không thay Kafka (như trên); PostgreSQL → Cloud SQL chỉ là regional managed DB, không tối ưu analytics (thiếu columnar storage, ML, serverless scaling như BigQuery). Toàn bộ yêu cầu ops cao hơn và không scalable globally 🚫.

🎯 Kết luận: Lựa chọn đúng đảm bảo migration theo best practices GCP 2026, tận dụng managed services để giảm 90%+ operational overhead! Nếu cần lab thực hành, dùng Google Cloud Skills Boost.

Câu 348
During a recent audit of your existing Google Cloud resources, you discovered several users with email addresses outside of your Google Workspace domain. You want to ensure that your resources are only shared with users whose email addresses match your domain. You need to remove any mismatched users, and you want to avoid having to audit your resources to identify mismatched users. What should you do?
  1. A Create a Cloud Scheduler task to regularly scan your projects and delete mismatched users.
  2. B Create a Cloud Scheduler task to regularly scan your resources and delete mismatched users.
  3. C Set an organizational policy constraint to limit identities by domain to automatically remove mismatched users.
  4. D Set an organizational policy constraint to limit identities by domain, and then retroactively remove the existing mismatched users
Xem giải thích

🧩 Phân tích nội dung câu hỏi

Câu hỏi mô tả tình huống trong Google Cloud Platform (GCP): Trong một cuộc kiểm toán gần đây, bạn phát hiện nhiều người dùng có địa chỉ email ngoài domain Google Workspace của tổ chức đang được chia sẻ quyền truy cập vào các tài nguyên GCP. Mục tiêu là:

  • Đảm bảo tài nguyên chỉ được chia sẻ với người dùng thuộc domain của tổ chức (ví dụ: @company.com).
  • Loại bỏ ngay lập tức các người dùng không khớp (mismatched users).
  • Tránh phải kiểm toán thủ công lặp lại để tìm mismatched users trong tương lai.

Vấn đề cốt lõi liên quan đến IAM (Identity and Access Management) và Organizational Policies trong GCP, nơi cần một giải pháp tự động hóa và phòng ngừa để hạn chế principals (người dùng, groups, service accounts) chỉ từ domain được phép, đồng thời xử lý các trường hợp hiện có. Giải pháp phải tuân thủ nguyên tắc least privilege và automation theo best practices của GCP (cập nhật đến 2024-2026, không có thay đổi lớn trong IAM constraints).

✅ Đáp án đúng và lý do lựa chọn

Đáp án đúng: Set an organizational policy constraint to limit identities by domain, and then retroactively remove the existing mismatched users

Lý do:

  • GCP cung cấp Organizational Policy Constraint cụ thể là constraints/iam.allowedPolicyMemberDomains, cho phép hạn chế IAM bindings chỉ với các domain được chỉ định (như domain Google Workspace của bạn). Constraint này tự động ngăn chặn việc thêm principals ngoài domain trong tương lai, tránh nhu cầu audit thủ công.
  • Tuy nhiên, constraint không tự động xóa các IAM bindings hiện có (non-retroactive). Do đó, cần retroactively remove (xóa thủ công hoặc dùng script/tools như gcloud hoặc Policy Analyzer) các mismatched users hiện tại một lần duy nhất.
  • Đây là best practice của Google Cloud: Kết hợp preventive policy (tương lai) + one-time cleanup (hiện tại), hiệu quả, scalable và không cần scheduler phức tạp. ✅ Hoàn hảo cho quy mô lớn!

🛠️ Giải thích chi tiết tất cả các phương án

Dưới đây là phân tích từng lựa chọn, giữ nguyên văn bản gốc tiếng Anh. Mỗi phương án được đánh giá dựa trên tính khả thi, best practices GCP (IAM, Org Policies phiên bản mới nhất 2024-2026), và khả năng đáp ứng yêu cầu (remove mismatched + tránh audit tương lai).

  • ❌ [SAI] Create a Cloud Scheduler task to regularly scan your projects and delete mismatched users.
    Giải thích sai: Phương án này dùng Cloud Scheduler để chạy job định kỳ quét projects và xóa mismatched users. Tuy kỹ thuật khả thi (kết hợp Cloud Functions + IAM APIs), nhưng không hiệu quả: Phải duy trì script phức tạp, tốn chi phí (Scheduler + Functions), và không ngăn chặn việc thêm mismatched users mới (chỉ reactive, không preventive). GCP khuyến nghị dùng Org Policies thay vì custom automation để tránh audit lặp lại. ❌ Không scalable và không phải best practice!

  • ❌ [SAI] Create a Cloud Scheduler task to regularly scan your resources and delete mismatched users.
    Giải thích sai: Tương tự phương án trên, nhưng quét resources (như buckets, VMs) thay vì projects. Vẫn phức tạp và reactive: Cần script liệt kê IAM policies trên từng resource (dùng getIamPolicy API), tốn tài nguyên lớn ở quy mô lớn, và không block future additions. GCP docs nhấn mạnh tránh custom scanners vì dễ lỗi và chi phí cao. ❌ Lặp lại vấn đề tương tự, kém hơn vì quét resources chi tiết hơn projects!

  • ❌ [SAI] Set an organizational policy constraint to limit identities by domain to automatically remove mismatched users.
    Giải thích sai: Constraint iam.allowedPolicyMemberDomains đúng là hạn chế domain cho IAM principals, nhưng KHÔNG tự động xóa existing mismatched users (chỉ enforce cho new bindings). Nếu áp dụng, policy sẽ block future nhưng existing users vẫn tồn tại, buộc phải audit thủ công – trái yêu cầu "avoid having to audit". GCP docs rõ ràng: Org Policies là preventive, cần cleanup riêng. ❌ Gần đúng nhưng thiếu bước retroactive, dẫn đến lỗ hổng bảo mật!

  • ✅ [ĐÚNG] Set an organizational policy constraint to limit identities by domain, and then retroactively remove the existing mismatched users
    Giải thích đúng: Như đã phân tích ở phần đáp án đúng. Kết hợp policy preventive (block tương lai) + retroactive cleanup (xóa một lần bằng gcloud iam policies delete hoặc IAM Recommender). Đáp ứng đầy đủ: Remove mismatched ngay + tránh audit mãi mãi. Best practice cho Associate Cloud Engineer exam! 🎯

📘 Tài liệu tham khảo (cập nhật mới nhất GCP 2024-2026)

Hy vọng phân tích này giúp bạn nắm vững! Nếu cần demo lệnh gcloud, hãy hỏi thêm nhé 🚀

Câu 349
Your application is running on Google Cloud in a managed instance group (MIG). You see errors in Cloud Logging for one VM that one of the processes is not responsive. You want to replace this VM in the MIG quickly. What should you do?
  1. A Use the gcloud compute instances update command with a REFRESH action for the VM.
  2. B Use the gcloud compute instance-groups managed recreate-instances command to recreate the VM.
  3. C Select the MIG from the Compute Engine console and, in the menu, select Replace VMs.
  4. D Update and apply the instance template of the MIG.
Xem giải thích

🧩 Phân tích chi tiết nội dung câu hỏi

Câu hỏi mô tả tình huống: Ứng dụng của bạn đang chạy trên Google Cloud trong một Managed Instance Group (MIG). Bạn phát hiện lỗi trong Cloud Logging trên một VM cụ thể, cho thấy một tiến trình không phản hồi (not responsive). Mục tiêu là thay thế VM này trong MIG một cách nhanh chóng để đảm bảo tính sẵn sàng cao (high availability) của ứng dụng.

🛠️ MIG là nhóm instance được quản lý tự động bởi Compute Engine, hỗ trợ auto-scaling, self-healing và rolling updates. Khi một VM gặp vấn đề (như process không responsive), bạn cần recreate (tái tạo) nó mà không ảnh hưởng đến các VM khác, tận dụng template để tạo VM mới khỏe mạnh thay thế.

📘 Nguồn tham khảo:

✅ Đáp án đúng và lý do lựa chọn

Đáp án đúng: Use the gcloud compute instance-groups managed recreate-instances command to recreate the VM.

Lý do:

  • Lệnh gcloud compute instance-groups managed recreate-instances chính xác dành riêng để tái tạo một hoặc nhiều VM cụ thể trong MIG mà không làm gián đoạn toàn bộ group. Nó sẽ delete VM cũ và tạo VM mới từ instance template hiện tại, rất nhanh chóng (thường vài phút) và tự động.
  • Phù hợp hoàn hảo với yêu cầu "replace this VM quickly" cho một VM có vấn đề (process not responsive), tận dụng self-healing của MIG. Đây là best practice theo docs Google Cloud mới nhất (2026).

📋 Giải thích tất cả các phương án (đúng/sai)

Dưới đây là phân tích từng lựa chọn, giữ nguyên nội dung gốc tiếng Anh, kèm giải thích chi tiết bằng tiếng Việt với đánh giá đúng/sai:

  • ❌ [SAI] Use the gcloud compute instances update command with a REFRESH action for the VM.
    Giải thích sai: Lệnh gcloud compute instances update dùng để cập nhật metadata hoặc tags của một instance riêng lẻ, không có action REFRESH (không tồn tại trong gcloud SDK mới nhất 2026). Nó không recreate VM hay thay thế trong MIG, chỉ sửa metadata mà không giải quyết vấn đề process không responsive. Sử dụng sẽ thất bại hoặc không hiệu quả.

  • ✅ [ĐÚNG] Use the gcloud compute instance-groups managed recreate-instances command to recreate the VM.
    Giải thích đúng: Như đã nêu ở trên, lệnh này tái tạo VM cụ thể trong MIG một cách nhanh chóng, an toàn, sử dụng template hiện tại để tạo bản sao mới khỏe mạnh. Hỗ trợ chỉ định instance name (ví dụ: --instances=vm-name), lý tưởng cho trường hợp một VM lỗi logging mà không ảnh hưởng autoscaler.

  • ❌ [SAI] Select the MIG from the Compute Engine console and, in the menu, select Replace VMs.
    Giải thích sai: Trong Compute Engine console (cập nhật 2026), menu của MIG không có tùy chọn "Replace VMs" trực tiếp cho một VM cụ thể. Console chỉ hỗ trợ "Rollout update" hoặc "Abandon/Restart" cho toàn group, hoặc recreate qua advanced actions. Không nhanh chóng cho single VM, dễ gây downtime không mong muốn.

  • ❌ [SAI] Update and apply the instance template of the MIG.
    Giải thích sai: Cập nhật instance template và apply chỉ rolling update toàn bộ MIG dần dần (qua canary hoặc batch), không nhắm đến một VM cụ thể ngay lập tức. Quá trình chậm (có thể hàng giờ), yêu cầu template mới và không giải quyết nhanh VM lỗi hiện tại – VM cũ vẫn tồn tại cho đến khi rollout hoàn tất.

🧠 Lưu ý bổ sung: Trong thực tế, sau recreate, kiểm tra Cloud Logging để xác nhận VM mới ổn định. Nếu MIG có autoscaler, recreate không trigger scale-in/out tự động. Best practice: Sử dụng gcloud cho automation/scripting!

Câu 350
You want to permanently delete a Pub/Sub topic managed by Config Connector in your Google Cloud project. What should you do?
  1. A Use kubectl to create the label deleted-by-cnrm and to change its value to true for the topic resource.
  2. B Use kubectl to delete the topic resource.
  3. C Use gcloud CLI to delete the topic.
  4. D Use gcloud CLI to update the topic label managed-by-cnrm to false.
Xem giải thích

🧩 Phân tích chi tiết nội dung câu hỏi

Câu hỏi tập trung vào việc xóa vĩnh viễn một Pub/Sub topic được quản lý bởi Config Connector trong dự án Google Cloud.

  • Pub/Sub topic: Là một tài nguyên thuộc Google Cloud Pub/Sub, dùng để publish/subscribe messages.
  • Config Connector (CNRM): Là một extension cho Google Kubernetes Engine (GKE), cho phép quản lý các tài nguyên Google Cloud (như Pub/Sub topic) thông qua Kubernetes Custom Resource Definitions (CRDs). Khi một topic được "managed by Config Connector", nó được khai báo dưới dạng Kubernetes resource (ví dụ: PubSubTopic), và CNRM sẽ tự động đồng bộ hóa với Google Cloud APIs.
  • Mục tiêu: Xóa vĩnh viễn (permanently delete), nghĩa là không chỉ xóa Kubernetes resource mà còn xóa thực sự trên Google Cloud.
    ✅ Nguyên tắc chính: Với resources managed by CNRM, bạn phải sử dụng kubectl để quản lý (tạo, cập nhật, xóa), vì CNRM controller sẽ reconcile và áp dụng thay đổi lên GCP. Không nên dùng gcloud trực tiếp để tránh xung đột hoặc resource bị recreate tự động.

(Kiến thức cập nhật đến 2026: Config Connector phiên bản mới nhất ~v1.15+ vẫn giữ nguyên quy trình quản lý qua kubectl cho deletion. Không có thay đổi lớn từ Google Cloud docs 2024-2026).

✅ Đáp án đúng: Use kubectl to delete the topic resource.

Lý do chọn đáp án này:

  • Khi Pub/Sub topic được managed by Config Connector, nó tồn tại dưới dạng Kubernetes Custom Resource (CR). Sử dụng lệnh kubectl delete pubsubtopic <topic-name> sẽ xóa CR, và CNRM controller sẽ tự động xóa topic tương ứng trên Google Cloud Pub/Sub vĩnh viễn.
  • Đây là cách chuẩn và an toàn nhất, tránh tình trạng resource bị reconcile lại (tái tạo).
    🛠️ Ví dụ lệnh: kubectl delete pubsubtopic my-topic --namespace my-namespace.
    📘 Nguồn tham khảo:
  • Config Connector Documentation: Deleting Resources (Google Cloud official docs, cập nhật 2025).
  • Pub/SubTopic CRD Reference.

📋 Giải thích tất cả các phương án (đúng/sai)

  • ❌ [SAI] Use kubectl to create the label deleted-by-cnrm and to change its value to true for the topic resource.
    Giải thích sai: Label deleted-by-cnrm không tồn tại trong Config Connector và không được dùng để xóa resource. CNRM không hỗ trợ cơ chế label-based deletion như vậy. Việc tạo label này chỉ là thao tác metadata vô nghĩa, không trigger xóa vĩnh viễn, và có thể gây lỗi reconcile.

  • ✅ [ĐÚNG] Use kubectl to delete the topic resource.
    Giải thích đúng: Như đã phân tích ở trên, đây là cách chính thức để xóa CR và đồng bộ xóa trên GCP. CNRM đảm bảo deletion là permanent sau finalizer hoàn tất (thường <1 phút).

  • ❌ [SAI] Use gcloud CLI to delete the topic.
    Giải thích sai: Lệnh gcloud pubsub topics delete <topic> chỉ xóa trực tiếp trên GCP, nhưng CNRM controller sẽ phát hiện sự khác biệt và tái tạo topic ngay lập tức (reconcile loop). Không đạt được xóa vĩnh viễn.

  • ❌ [SAI] Use gcloud CLI to update the topic label managed-by-cnrm to false.
    Giải thích sai: Label managed-by-cnrm không phải là label chuẩn của CNRM (thường là cnrm.cloud.google.com/managed: true nội bộ). Cập nhật label qua gcloud không ảnh hưởng đến CR Kubernetes, nên CNRM vẫn quản lý và không xóa resource. Đây là cách sai hoàn toàn, có thể gây inconsistent state.

🧠 Lưu ý bổ sung: Luôn kiểm tra status CR bằng kubectl describe pubsubtopic <name> sau deletion để xác nhận deletionTimestamp và finalizers đã hoàn tất. Nếu gặp lỗi, dùng kubectl patch để remove finalizer thủ công (theo docs).