Ngân hàng đề — Google Cloud Associate Cloud Engineer
Tìm thấy 449 câu.
-
A
gcloud projects describe [PROJECT_ID] or gcloud projects describe [PROJECT_NAME]
-
B
gcloud projects describe [PROJECT_NAME] only
-
C
gcloud describe project [PROJECT_ID] only
-
D
gcloud describe project [PROJECT_NAME] only
Xem giải thích
Đáp án
A — gcloud projects describe [PROJECT_ID] hoặc gcloud projects describe [PROJECT_NAME].
Vì sao đúng
Lệnh gcloud tuân theo một cấu trúc rất đều đặn, và câu này kiểm tra đúng cấu trúc đó.
⚠ Điểm mấu chốt — thứ tự của lệnh gcloud:
gcloud <NHÓM> <ĐỘNG TỪ> [THAM SỐ]
↓
gcloud projects describe my-project
↑ ↑
nhóm động từ
↓
→ NHÓM đứng TRƯỚC, ĐỘNG TỪ đứng SAU
→ "gcloud describe project" là SAI thứ tự
⚠ Và nhận được cả PROJECT_ID lẫn PROJECT_NAME:
gcloud projects describe
↓
Chấp nhận:
- PROJECT_ID (định danh duy nhất toàn cầu)
- PROJECT_NAME (tên hiển thị)
↓
→ nên phương án A đầy đủ hơn phương án B
⚠ Ba định danh của một project — đừng lẫn:
PROJECT_ID
↓
Duy nhất TOÀN CẦU, KHÔNG đổi được sau khi tạo
→ dùng trong hầu hết lệnh và API
PROJECT_NAME
↓
Tên hiển thị, ĐỔI ĐƯỢC, không cần duy nhất
PROJECT_NUMBER
↓
Số do Google sinh, duy nhất, không đổi
→ xuất hiện trong một số service account
Vì sao các phương án khác sai
-
B (
gcloud projects describe [PROJECT_NAME]mà thôi) — đây là phương án gần nhất và cú pháp đúng, nhưng chữ "only" làm nó sai: lệnh này cũng nhận PROJECT_ID, và trong thực tế PROJECT_ID mới là thứ được dùng nhiều hơn. -
C và D (
gcloud describe project ...) — sai thứ tự:gcloudluôn là nhóm trước, động từ sau. Không có nhóm nào tên làdescribe.
Ghi nhớ
⚠ Cấu trúc lệnh gcloud — bảng phải thuộc: | Thành phần | Ví dụ | |---|---| | Cấu trúc | gcloud <nhóm> <nhóm con> <động từ> [tham số] | | Ví dụ | gcloud compute instances list | | Ví dụ | gcloud projects describe my-proj | | Ví dụ | gcloud iam roles create ... | | Động từ thường gặp | list, describe, create, delete, update, add-iam-policy-binding | | Trợ giúp | gcloud <nhóm> --help |
Từ khoá nhận diện:
"xem thông tin một tài nguyên" →
describe"liệt kê nhiều tài nguyên" →list"cấp quyền IAM" →add-iam-policy-binding"gcloud describe ..." → SAI thứ tự, luôn luôn "đổi tên project" → đổi PROJECT_NAME được, PROJECT_ID thì KHÔNG
| Các lệnh quản lý project hay dùng | Việc |
|---|---|
gcloud projects list |
liệt kê project truy cập được |
gcloud projects describe <ID> |
xem metadata của một project |
gcloud projects create <ID> |
tạo project mới |
gcloud projects delete <ID> |
xoá (có 30 ngày để khôi phục) |
gcloud config set project <ID> |
đặt project mặc định cho phiên làm việc |
gcloud projects get-iam-policy <ID> |
xem chính sách IAM |
| Ba định danh của project — nhắc lại | Nội dung |
|---|---|
| PROJECT_ID | duy nhất toàn cầu, KHÔNG đổi được — dùng trong lệnh |
| PROJECT_NAME | tên hiển thị, đổi được |
| PROJECT_NUMBER | số do Google sinh — xuất hiện trong service account mặc định |
| Cấu hình gcloud — nên biết | Nội dung |
|---|---|
gcloud config list |
xem cấu hình hiện tại |
gcloud config configurations list |
nhiều bộ cấu hình song song |
gcloud auth list |
tài khoản đang đăng nhập |
gcloud info |
thông tin môi trường và SDK |
--format=json |
đổi định dạng đầu ra — rất hữu ích khi viết script |
--filter |
lọc kết quả ngay trong lệnh |
Ba việc kiểm chứng: | Việc | Cách | |---|---| | Project hiện tại là gì | gcloud config get-value project | | Có những project nào | gcloud projects list | | Cú pháp một lệnh | gcloud <nhóm> --help |
Và một tuỳ chọn rất đáng dùng khi làm việc với gcloud trong script: --format=json kết hợp với --filter. Nó cho phép lấy đúng trường cần mà không phải cắt chuỗi bằng awk hay sed — một thói quen giúp script bền hơn nhiều khi Google thay đổi định dạng hiển thị mặc định.
The contents of a Cloud Storage bucket called free-photos-gcp are currently stored in a standard storage class bucket. You want to change the storage class to nearline. What command would you use?
-
A
gcloud storage objects update gs://free-photos-gcp --storage-class=Nearline
- B gsutil migrate -s nearline gs://free-photos-gcp
- C gsutil rewrite -from multiregional --to nearline gs://free-photos-gcp
- D gsutil migrate --from multiregional --to nearline gs://free-photos-gcp
Xem giải thích
Đáp án
A — gcloud storage objects update gs://free-photos-gcp --storage-class=Nearline
Vì sao đúng
Đây là câu kiểm tra xem bạn có biết lệnh nào THẬT SỰ TỒN TẠI hay không — ba phương án còn lại đều là lệnh bịa.
⚠ Điểm mấu chốt — gcloud storage là công cụ hiện hành:
gsutil (công cụ CŨ)
↓
Vẫn dùng được, nhưng Google đang chuyển
sang gcloud storage
↓
gcloud storage (công cụ MỚI)
↓
Nhanh hơn đáng kể với thao tác hàng loạt
Cú pháp thống nhất với phần còn lại của gcloud
↓
gcloud storage objects update gs://bucket/** \
--storage-class=NEARLINE
⚠ Đổi storage class thực chất là GHI LẠI đối tượng:
Storage class là thuộc tính của TỪNG ĐỐI TƯỢNG
↓
Đổi class = REWRITE đối tượng đó
↓
→ tính phí thao tác ghi
→ và với Nearline/Coldline/Archive
còn có THỜI GIAN LƯU TỐI THIỂU
↓
Xoá hoặc đổi class trước thời hạn tối thiểu
→ vẫn bị tính đủ tiền cho thời gian đó
⚠ Và có cách TỰ ĐỘNG tốt hơn — Object Lifecycle Management:
Đặt luật vòng đời trên bucket
↓
"Đối tượng quá 30 ngày → Nearline"
"Quá 90 ngày → Coldline"
"Quá 365 ngày → Archive"
"Quá 7 năm → xoá"
↓
→ Google tự chuyển, KHÔNG tốn phí thao tác
→ không phải chạy lệnh thủ công
↓
Hoặc: Autoclass — Google tự chọn class
theo mẫu truy cập thật
Vì sao các phương án khác sai
-
C (
gsutil rewrite -from multiregional --to nearline ...) — đây là phương án gần nhất vìgsutil rewritelà lệnh CÓ THẬT để đổi storage class, nhưng cú pháp sai: lệnh đúng làgsutil rewrite -s nearline gs://bucket/**, không có cờ-fromvà--to. -
B và D (
gsutil migrate ...) — không có lệnhgsutil migrate. Đây là lệnh hoàn toàn bịa.
Ghi nhớ
⚠ Bốn storage class của Cloud Storage — bảng phải thuộc: | Class | Thời gian lưu tối thiểu | Dùng khi | |---|---|---| | Standard | không có | truy cập thường xuyên | | Nearline | 30 ngày | truy cập khoảng 1 lần/tháng | | Coldline | 90 ngày | khoảng 1 lần/quý | | Archive | 365 ngày | dưới 1 lần/năm — rẻ nhất | | Đánh đổi | class càng lạnh: lưu càng rẻ, ĐỌC càng đắt | |
Từ khoá nhận diện:
"đổi storage class" →
gcloud storage objects update --storage-class, hoặcgsutil rewrite -s"tự động chuyển theo tuổi" → Object Lifecycle Management "không đoán được mẫu truy cập" → Autoclass "gsutil migrate" → KHÔNG TỒN TẠI "dữ liệu lưu trữ dài hạn" → Archive
| Các lệnh Cloud Storage hay dùng | Việc |
|---|---|
gcloud storage ls gs://bucket |
liệt kê |
gcloud storage cp |
sao chép (có -r cho thư mục) |
gcloud storage rsync |
đồng bộ thư mục |
gcloud storage objects update --storage-class |
đổi class |
gcloud storage buckets update --lifecycle-file |
đặt luật vòng đời |
gcloud storage buckets add-iam-policy-binding |
phân quyền |
| Công cụ cũ tương ứng | gsutil ls / cp / rsync / rewrite -s |
| Object Lifecycle Management — nên dùng thay vì làm tay | Nội dung |
|---|---|
| Điều kiện | age, createdBefore, numNewerVersions, matchesStorageClass |
| Hành động | SetStorageClass hoặc Delete |
| Chi phí | không tính phí thao tác chuyển class |
| Khai bằng | tệp JSON, hoặc trên console |
| Kiểm tra | gcloud storage buckets describe --format="value(lifecycle)" |
| Autoclass — lựa chọn hiện đại | Nội dung |
|---|---|
| Việc | Google tự chuyển class theo mẫu truy cập thật |
| Ưu điểm | không cần đặt luật, không có phí truy xuất sớm |
| Phù hợp | dữ liệu có mẫu truy cập không đoán trước được |
| Bật lúc nào | khi tạo bucket, hoặc bật sau cho bucket có sẵn |
| Chi phí | có phí quản lý nhỏ theo số đối tượng |
| Bẫy chi phí với class lạnh | Nội dung |
|---|---|
| Thời gian lưu tối thiểu | xoá sớm vẫn bị tính đủ |
| Phí truy xuất | Archive đắt nhất khi đọc |
| Nhiều tệp nhỏ | phí thao tác cộng dồn — gộp lại trước khi lưu |
| Đổi class hàng loạt | tính phí ghi cho từng đối tượng |
Ba việc kiểm chứng: | Việc | Cách | |---|---| | Class hiện tại của đối tượng | gcloud storage objects describe gs://bucket/tep | | Bucket có luật vòng đời không | gcloud storage buckets describe gs://bucket | | Chi phí thay đổi ra sao | Cloud Billing report, lọc theo SKU của Cloud Storage |
Và một lời khuyên nên áp dụng thay cho việc chạy lệnh đổi class bằng tay: đặt Object Lifecycle Management ngay từ khi tạo bucket. Nó không tốn phí thao tác chuyển class, chạy tự động mãi mãi, và tránh được tình huống rất hay gặp là ai đó đổi class hàng loạt cho hàng triệu đối tượng rồi nhận một hoá đơn thao tác ghi ngoài dự kiến.
You are using HTTP(S) Load Balancing for a Web application that has several services. Depending on the URL specified by a user, requests are routed to different backend services. What would you use to specify how those requests should be routed?
- A URL maps
- B Routes
- C Firewall rules
- D Traces
Xem giải thích
Đáp án
A — URL MAPS.
Vì sao đúng
Với HTTP(S) Load Balancing của Google Cloud, URL map chính là thành phần quyết định request đi tới backend service nào.
⚠ Điểm mấu chốt — URL map là bộ định tuyến tầng 7:
URL map chứa các quy tắc:
↓
Host rule → theo TÊN MIỀN
api.example.com → path matcher A
www.example.com → path matcher B
↓
Path matcher → theo ĐƯỜNG DẪN
/api/users/* → backend-service-users
/api/orders/* → backend-service-orders
/* → backend-service-default
↓
→ đúng thứ đề mô tả: "tuỳ URL người dùng
gõ mà chuyển tới backend service khác nhau"
⚠ Các thành phần của HTTP(S) Load Balancer:
Forwarding rule
↓
Địa chỉ IP + cổng
↓
Target HTTP(S) proxy
↓
Kết thúc kết nối, gắn chứng chỉ SSL
↓
URL MAP ← đề này
↓
Quyết định request đi tới backend nào
↓
Backend service
↓
Nhóm máy (instance group / NEG),
health check, thuật toán cân bằng
↓
Backend (instance group hoặc NEG)
⚠ URL map còn làm được nhiều hơn định tuyến:
Ngoài host và path, còn có:
↓
- CHUYỂN HƯỚNG (redirect) HTTP → HTTPS
- VIẾT LẠI (rewrite) đường dẫn
- Chia lưu lượng theo TRỌNG SỐ
→ dùng cho canary và blue/green
- Sửa header của request và response
- Mirror lưu lượng sang backend thử nghiệm
↓
→ gọi là "advanced traffic management"
Vì sao các phương án khác sai
-
B (Routes) — đây là phương án gần nhất về mặt tên gọi, nhưng route trong VPC là bảng định tuyến ở TẦNG 3: nó quyết định gói tin IP đi đâu (tới internet gateway, tới VPN, tới máy khác), không đọc được URL.
-
C (Firewall rules) — cho phép hoặc chặn lưu lượng theo IP, cổng, giao thức và tag. Là kiểm soát truy cập, không phải định tuyến ứng dụng.
-
D (Traces) — Cloud Trace là công cụ theo dõi độ trễ phân tán, dùng để chẩn đoán hiệu năng, hoàn toàn không định tuyến gì.
Ghi nhớ
⚠ Các loại load balancer của Google Cloud — bảng phải thuộc: | Loại | Tầng | Đặc điểm | |---|---|---| | Global external HTTP(S) | 7 | URL map, IP anycast toàn cầu, tích hợp Cloud CDN và Cloud Armor | | SSL Proxy | 4 | TLS không phải HTTP | | TCP Proxy | 4 | TCP toàn cầu | | External passthrough Network LB | 4 | giữ nguyên IP nguồn, theo Region | | Internal HTTP(S) | 7 | trong VPC, có URL map | | Internal passthrough Network LB | 4 | trong VPC |
Từ khoá nhận diện:
"định tuyến theo URL / theo đường dẫn" → URL map "cân bằng tải toàn cầu cho web" → Global external HTTP(S) LB "cần giữ IP nguồn của client" → passthrough Network LB "chặn theo IP, cổng" → firewall rule "gói tin đi đâu trong VPC" → route
| Các thành phần của HTTP(S) LB — nhắc lại | Việc |
|---|---|
| Forwarding rule | IP + cổng |
| Target proxy | kết thúc TLS, gắn SSL certificate |
| URL map | định tuyến theo host và path |
| Backend service | health check, thuật toán, Cloud CDN, Cloud Armor |
| Backend | instance group hoặc NEG |
| Health check | quyết định backend nào còn khoẻ |
| Advanced traffic management của URL map | Tính năng |
|---|---|
| Traffic splitting theo trọng số | canary, blue/green |
| URL rewrite | đổi đường dẫn trước khi gửi tới backend |
| Redirect | HTTP → HTTPS, hoặc đổi tên miền |
| Header transformation | thêm, sửa, xoá header |
| Traffic mirroring | gửi bản sao sang backend thử nghiệm |
| Fault injection | thêm độ trễ hoặc lỗi để kiểm thử |
| Dịch vụ đi kèm HTTP(S) LB | Việc |
|---|---|
| Cloud CDN | bật ở BACKEND SERVICE — cache tại edge |
| Cloud Armor | WAF và chống DDoS — luật theo IP, quốc gia, mẫu tấn công |
| IAP (Identity-Aware Proxy) | xác thực người dùng trước khi vào ứng dụng |
| Google-managed SSL certificate | tự cấp và tự gia hạn |
Ba việc kiểm chứng: | Việc | Cách | |---|---| | URL map đang định tuyến ra sao | gcloud compute url-maps describe <ten> | | Backend có khoẻ không | gcloud compute backend-services get-health <ten> | | Request đi tới đâu | Cloud Logging với log của load balancer |
Và một công cụ rất hữu ích khi cấu hình URL map phức tạp: gcloud compute url-maps validate. Nó kiểm tra bộ quy tắc trước khi áp dụng và chỉ ra những quy tắc bị che khuất bởi quy tắc rộng hơn đứng trước — đúng loại lỗi khiến một đường dẫn cụ thể im lặng đi nhầm backend mà không có thông báo nào.
You want to run a Kubernetes cluster for a high-availability set of applications using Google Kubernetes Engine (GKE). What type of cluster would you use?
- A Single zone
- B Multi-zonal
- C Regional
-
D
Dedicated cluster
Xem giải thích
Đáp án
C — Cụm REGIONAL (theo Region).
Vì sao đúng
Yêu cầu là tính sẵn sàng cao, và chỉ cụm regional nhân bản CẢ control plane lẫn node ra nhiều zone.
⚠ Điểm mấu chốt — ba kiểu cụm GKE khác nhau ở chỗ nào:
SINGLE-ZONE (một zone)
↓
Control plane: 1 bản, MỘT zone
Node: MỘT zone
↓
→ zone hỏng là MẤT TẤT CẢ
MULTI-ZONAL (nhiều zone)
↓
Control plane: 1 bản, MỘT zone ← điểm yếu
Node: NHIỀU zone
↓
→ zone của control plane hỏng
→ ứng dụng vẫn chạy nhưng
KHÔNG QUẢN LÝ ĐƯỢC cụm
→ không co giãn, không triển khai được
REGIONAL (theo Region) ← đề này
↓
Control plane: NHIỀU BẢN, nhiều zone
Node: NHIỀU zone
↓
→ mất một zone: control plane vẫn sống,
node ở zone khác vẫn phục vụ
→ đây mới là sẵn sàng cao thật sự
⚠ Và có một chi tiết về số node cần nhớ:
Cụm regional
↓
Số node bạn khai là SỐ NODE MỖI ZONE
↓
Khai 3 node, cụm trải 3 zone
↓
→ THỰC TẾ có 9 node
→ và trả tiền cho 9 node
↓
→ tính chi phí phải nhân với số zone
⚠ Nâng cấp control plane cũng khác nhau:
Cụm zonal
↓
Nâng cấp control plane → GIÁN ĐOẠN
API server không dùng được vài phút
Cụm regional
↓
Nâng cấp lần lượt từng bản
↓
→ API server LUÔN sẵn sàng
→ đây là lợi ích lớn cho môi trường production
Vì sao các phương án khác sai
-
B (Multi-zonal) — đây là phương án gần nhất và node đúng là trải nhiều zone, nhưng control plane vẫn chỉ có MỘT bản ở MỘT zone. Mất zone đó thì ứng dụng còn chạy nhưng bạn không triển khai, không co giãn và không sửa được gì — không đạt chuẩn sẵn sàng cao.
-
A (Single zone) — mọi thứ trong một zone, không có dự phòng nào.
-
D ("Dedicated cluster") — không phải một kiểu cụm của GKE. GKE có zonal (single-zone, multi-zonal) và regional; ngoài ra còn phân biệt Standard ↔ Autopilot, và public ↔ private cluster.
Ghi nhớ
⚠ Ba kiểu cụm GKE — bảng phải thuộc: | Kiểu | Control plane | Node | |---|---|---| | Single-zone | 1 bản, 1 zone | 1 zone | | Multi-zonal | 1 bản, 1 zone | nhiều zone | | Regional | nhiều bản, nhiều zone | nhiều zone | | Sẵn sàng cao | chỉ Regional | | | Nâng cấp control plane | zonal có gián đoạn, regional không | |
Từ khoá nhận diện:
"tính sẵn sàng cao cho cụm Kubernetes" → regional cluster "không muốn quản node nào cả" → GKE Autopilot "node không có IP công cộng" → private cluster "cụm tự thêm node khi thiếu" → Cluster Autoscaler, hoặc node auto-provisioning "chi phí cụm regional cao bất ngờ" → số node được NHÂN với số zone
| Standard ↔ Autopilot — bảng đáng thuộc | Nội dung |
|---|---|
| Standard | bạn quản node pool, chọn loại máy, tự vá |
| Autopilot | Google quản node hoàn toàn — trả tiền theo POD |
| Autopilot | luôn là regional, bảo mật mặc định chặt hơn |
| Autopilot hạn chế | không dùng được DaemonSet đặc quyền, một số cấu hình node |
| Chọn Autopilot khi | muốn ít công vận hành nhất |
| Tính sẵn sàng cao cho ứng dụng trong cụm | Cách |
|---|---|
| Nhiều replica | ít nhất 2-3 pod cho mỗi deployment |
| Pod anti-affinity | trải pod ra nhiều node và nhiều zone |
| Pod Disruption Budget | giới hạn số pod bị gỡ cùng lúc khi bảo trì |
| Readiness và liveness probe | để traffic không tới pod chưa sẵn sàng |
| Cluster Autoscaler | thêm node khi pod Pending |
| Regional cluster | nền tảng của tất cả những thứ trên |
| Nâng cấp cụm GKE | Nội dung |
|---|---|
| Release channel | Rapid / Regular / Stable — Google tự nâng cấp |
| Maintenance window | khai khung giờ được phép nâng cấp |
| Surge upgrade | tạo node mới trước khi gỡ node cũ |
| Blue/green node pool | cách an toàn nhất cho production |
| Kèm theo | PDB để pod không bị gỡ quá nhiều cùng lúc |
| Chi phí cụm GKE | Nội dung |
|---|---|
| Phí quản lý cụm | một mức phí mỗi giờ cho mỗi cụm (miễn phí một cụm zonal) |
| Node | trả tiền như Compute Engine bình thường |
| Regional | số node × số zone |
| Giảm chi phí | Spot VM cho tải chịu gián đoạn, committed use discount |
| Autopilot | trả theo tài nguyên pod yêu cầu, không theo node |
Ba việc kiểm chứng: | Việc | Cách | |---|---| | Cụm thuộc kiểu nào | gcloud container clusters describe <ten> → xem location | | Node trải mấy zone | kubectl get nodes -L topology.kubernetes.io/zone | | Pod có trải đều không | kubectl get pods -o wide |
Và một chi tiết về chi phí rất hay gây bất ngờ khi chuyển từ zonal sang regional: con số node bạn khai là số node MỖI ZONE. Một cụm regional trải ba zone với "3 node" thực chất chạy chín máy — nên khi lập dự toán, hãy luôn nhân với số zone trước khi so sánh với cụm zonal hiện tại.
The CFO of your company feels you are spending too much on BigQuery. You determine that a few long running queries are costing more than they should. You would like to experiment with different ways of writing these queries. You'd like to know the estimated cost of running each query without actually running them. How could you do this?
- A Use the --dry-run option with a bq query command
- B Use the Price Calculator
- C Use the --estimate-cost option with the bq command
- D Use the --estimate-cost with the gcloud command
Xem giải thích
Đáp án
A — Dùng tuỳ chọn --dry-run với lệnh bq query.
Vì sao đúng
BigQuery tính tiền theo lượng dữ liệu QUÉT, và --dry-run cho biết con số đó mà không chạy truy vấn.
⚠ Điểm mấu chốt — dry run trả về số byte sẽ được quét:
bq query --dry-run --use_legacy_sql=false \
'SELECT ... FROM ...'
↓
BigQuery PHÂN TÍCH truy vấn
↓
Trả về: "Query successfully validated.
Assuming the tables are not modified,
running this query will process
N bytes of data."
↓
→ KHÔNG chạy, KHÔNG tính tiền
→ biết trước chi phí để so sánh các cách viết
⚠ Từ số byte ra tiền:
Giá on-demand: tính theo TB dữ liệu quét
↓
Chi phí = (số byte / 2^40) × đơn giá mỗi TB
↓
→ so sánh được hai cách viết truy vấn
trước khi chạy cái nào
↓
Console BigQuery cũng hiện ước tính này
ở góc phải khi bạn gõ truy vấn
⚠ Và những cách giảm dữ liệu quét — quan trọng hơn cả:
1. ĐỪNG DÙNG SELECT *
↓
BigQuery lưu theo CỘT
→ chỉ quét cột được nêu tên
→ SELECT * quét TOÀN BỘ bảng
2. PHÂN VÙNG (partition) theo ngày
↓
WHERE ngay BETWEEN ... → chỉ quét phân vùng đó
→ giảm được hàng chục tới hàng trăm lần
3. PHÂN CỤM (cluster) theo cột hay lọc
↓
→ BigQuery bỏ qua khối dữ liệu không khớp
4. Materialized view / bảng tổng hợp
↓
→ tính sẵn kết quả cho truy vấn lặp lại
Vì sao các phương án khác sai
-
C (
--estimate-costvới lệnhbq) — đây là phương án gần nhất và nghe rất hợp lý, nhưng cờ này không tồn tại. Cờ đúng là--dry-run. -
D (
--estimate-costvới lệnhgcloud) — sai cả cờ lẫn công cụ: BigQuery dùngbq, không phảigcloud. -
B (dùng Price Calculator) — Google Cloud Pricing Calculator ước tính chi phí hạ tầng ở mức tổng quát, dựa trên con số bạn tự nhập. Nó không phân tích một truy vấn cụ thể để biết truy vấn đó quét bao nhiêu dữ liệu.
Ghi nhớ
⚠ Hai mô hình tính giá của BigQuery — bảng phải thuộc: | Mô hình | Cách tính | |---|---| | On-demand | theo TB dữ liệu QUÉT — có mức miễn phí mỗi tháng | | Capacity (slot) | mua slot theo giờ hoặc cam kết — chi phí cố định, đoán được | | Lưu trữ | active và long-term (không sửa quá 90 ngày thì rẻ hơn) | | Streaming insert | tính riêng | | Chọn capacity khi | khối lượng truy vấn lớn và ổn định |
Từ khoá nhận diện:
"biết chi phí truy vấn trước khi chạy" →
bq query --dry-run"giảm chi phí truy vấn" → partition, cluster, bỏSELECT *"chi phí ổn định, đoán trước được" → capacity pricing (slot) "giới hạn chi tiêu" → custom quota theo project hoặc theo user "truy vấn lặp lại nhiều" → materialized view, hoặc kết quả được cache
| Tối ưu truy vấn BigQuery — theo thứ tự hiệu quả | Cách |
|---|---|
Bỏ SELECT * |
chỉ nêu cột cần — hiệu quả nhất và dễ nhất |
| Bảng có PARTITION | lọc theo cột phân vùng trong WHERE |
| Bảng có CLUSTER | lọc theo cột phân cụm |
LIMIT KHÔNG giảm chi phí |
vẫn quét toàn bộ rồi mới cắt |
| Preview bảng | xem dữ liệu MIỄN PHÍ, đừng dùng SELECT * LIMIT 10 |
| Materialized view | tính sẵn cho truy vấn tổng hợp lặp lại |
| Kiểm soát chi phí BigQuery | Cách |
|---|---|
--maximum_bytes_billed |
truy vấn vượt ngưỡng thì THẤT BẠI thay vì tốn tiền |
| Custom quota | trần dữ liệu quét mỗi ngày, theo project hoặc theo user |
| Budget alert | cảnh báo qua Cloud Billing |
| Cache kết quả | truy vấn giống hệt trong 24 giờ là MIỄN PHÍ |
| Bảng tạm | dùng CREATE TABLE AS SELECT cho kết quả trung gian |
| Partition ↔ Cluster — đừng lẫn | Nội dung |
|---|---|
| Partition | chia bảng theo NGÀY, số nguyên, hoặc thời điểm nạp |
| Cluster | sắp xếp dữ liệu trong phân vùng theo tối đa 4 cột |
| Partition giảm | lượng dữ liệu quét — thấy rõ trong dry run |
| Cluster giảm | dữ liệu quét, nhưng dry run không phản ánh hết |
| Dùng chung | partition theo ngày + cluster theo cột lọc là mẫu phổ biến nhất |
Các lệnh bq hay dùng |
Việc |
|---|---|
bq query --dry-run |
ước tính dữ liệu quét |
bq query --maximum_bytes_billed=N |
đặt trần |
bq show <dataset>.<bang> |
xem lược đồ và kích thước |
bq ls |
liệt kê dataset và bảng |
bq load |
nạp dữ liệu |
--use_legacy_sql=false |
dùng SQL chuẩn — nên luôn khai |
Ba việc kiểm chứng: | Việc | Cách | |---|---| | Truy vấn quét bao nhiêu | bq query --dry-run | | Bảng có partition không | bq show <dataset>.<bang> | | Ai đang tốn nhiều nhất | INFORMATION_SCHEMA.JOBS — truy vấn được lịch sử job |
Và một cờ rất đáng đưa vào mọi script chạy truy vấn tự động: --maximum_bytes_billed. Nó biến một truy vấn viết sai — chẳng hạn quên mệnh đề lọc theo phân vùng — thành một lỗi rõ ràng ngay lập tức, thay vì một hoá đơn quét vài trăm terabyte mà bạn chỉ phát hiện vào cuối tháng.
A group of developers is creating a multi-tiered application. Each tier is in its own project. The developer would like to work with a common VPC network. What would you use to implement this?
- A Create a VPN between projects
- B Create a shared VPC
- C Create routes between subnets of each project
- D Create firewall rules to allow ingress and egress traffic between each project's subnets.
Xem giải thích
Đáp án
B — Tạo SHARED VPC.
Vì sao đúng
Đề mô tả đúng tình huống Shared VPC sinh ra để giải: nhiều project trong CÙNG một tổ chức, muốn dùng CHUNG một mạng VPC.
⚠ Điểm mấu chốt — Shared VPC tách quản trị mạng khỏi tải công việc:
HOST PROJECT
↓
Chứa mạng VPC, subnet, firewall rule,
Cloud Router, Cloud NAT
→ do đội hạ tầng quản lý
↓
SERVICE PROJECT (nhiều cái)
↓
Chứa VM, GKE, Cloud SQL… của từng tầng
→ do từng đội phát triển quản lý
↓
Tài nguyên trong service project
DÙNG TRỰC TIẾP subnet của host project
↓
→ cùng một dải IP RIÊNG
→ giao tiếp nội bộ, KHÔNG cần peering
→ chi phí và quyền vẫn tách theo project
⚠ Vì sao hợp với kiến trúc nhiều tầng của đề:
Mỗi tầng một project riêng
↓
→ hạn ngạch, hoá đơn, quyền IAM tách bạch
↓
Nhưng vẫn cùng một mạng
↓
→ tầng web gọi tầng ứng dụng bằng IP riêng
→ firewall rule quản tập trung ở host project
↓
Đúng yêu cầu "làm việc với một VPC chung"
⚠ Vai trò IAM cần biết:
roles/compute.xpnAdmin
↓
Gắn ở cấp TỔ CHỨC hoặc FOLDER
→ chỉ định host project, gắn service project
roles/compute.networkUser
↓
Gắn cho người dùng của SERVICE PROJECT
→ cho phép họ TẠO tài nguyên trong subnet
của host project
↓
Cấp được ở mức TOÀN BỘ host project
hoặc chỉ MỘT SUBNET cụ thể
Xem thêm câu #12470 (cùng lô): cũng về nối mạng giữa các đơn vị, nhưng ở đó là nhiều TỔ CHỨC khác nhau nên khoá là VPC Network Peering. Khoá khác nhau vì phạm vi khác nhau, không mâu thuẫn.
Vì sao các phương án khác sai
-
C (tạo route giữa các subnet của từng project) — đây là phương án gần nhất về ý tưởng kết nối, nhưng mỗi project có VPC riêng biệt hoàn toàn; không có route nào nối thẳng hai VPC mà không qua peering hoặc VPN. Và như vậy vẫn không phải "một VPC chung" như đề yêu cầu.
-
A (tạo VPN giữa các project) — chạy được nhưng rất thừa: thêm chi phí gateway, thêm độ trễ, thêm thứ phải vận hành — cho các project trong cùng một tổ chức.
-
D (tạo firewall rule cho phép lưu lượng giữa subnet các project) — firewall rule chỉ cho phép hoặc chặn, không tạo ra đường đi. Không có kết nối thì mở firewall cũng vô nghĩa.
Ghi nhớ
⚠ Ba cách nối mạng trong Google Cloud — bảng phải thuộc: | Cách | Dùng khi | |---|---| | Shared VPC | nhiều project CÙNG tổ chức dùng CHUNG một VPC | | VPC Network Peering | nối hai VPC riêng biệt — kể cả khác tổ chức | | Cloud VPN / Interconnect | nối GCP với mạng TẠI CHỖ hoặc với cloud khác | | Network Connectivity Center | trung tâm nối nhiều mạng |
Từ khoá nhận diện:
"nhiều project, một mạng chung, cùng tổ chức" → Shared VPC "nối hai VPC, khác tổ chức" → VPC Network Peering "nối với trung tâm dữ liệu" → Cloud VPN hoặc Interconnect "quản mạng tập trung, tải phân tán" → Shared VPC "gọi dịch vụ của bên khác qua IP riêng" → Private Service Connect
| Shared VPC — điều kiện và giới hạn | Nội dung |
|---|---|
| Phạm vi | chỉ trong MỘT tổ chức |
| Host project | một project được chỉ định làm host |
| Service project | gắn vào host — một project chỉ gắn được vào một host |
| Ai quản gì | host: mạng và firewall; service: VM và ứng dụng |
| Vai trò | compute.xpnAdmin và compute.networkUser |
| Hạn ngạch | subnet và IP tính vào host project |
| Shared VPC ↔ VPC Peering — bảng phân biệt | Nội dung |
|---|---|
| Shared VPC | MỘT VPC dùng chung — quản lý tập trung |
| Peering | HAI VPC riêng, nối lại — mỗi bên tự quản |
| Phạm vi tổ chức | Shared VPC cùng tổ chức; peering khác tổ chức cũng được |
| Firewall | Shared VPC tập trung; peering mỗi bên tự đặt |
| Bắc cầu | — |
| Trùng dải IP | — |
| Thiết kế Shared VPC điển hình | Nội dung |
|---|---|
| Host project | đội nền tảng — VPC, subnet, firewall, Cloud NAT, Cloud Router |
| Service project cho từng môi trường | prod, staging, dev |
| Service project cho từng tầng | web, app, data |
| Phân quyền subnet | cấp networkUser ở mức từng subnet cho từng đội |
| Lợi ích | một nơi kiểm soát mạng, nhiều nơi triển khai độc lập |
| Firewall rule trong GCP — khác AWS | Nội dung |
|---|---|
| Phạm vi | áp cho cả VPC, không phải cho từng máy |
| Nhắm mục tiêu bằng | network tag hoặc service account |
| Chiều | ingress và egress riêng |
| Ưu tiên | số nhỏ hơn thắng (0-65535) |
| Mặc định | chặn mọi ingress, cho phép mọi egress |
| Khuyến nghị | dùng service account thay vì tag — chặt chẽ hơn |
Ba việc kiểm chứng: | Việc | Cách | |---|---| | Project có phải host không | gcloud compute shared-vpc get-host-project <project> | | Service project nào đang gắn | gcloud compute shared-vpc list-associated-resources <host> | | Ai được dùng subnet | gcloud compute networks subnets get-iam-policy <subnet> |
Và một cách phân quyền nên áp dụng ngay từ đầu với Shared VPC: cấp compute.networkUser ở mức TỪNG SUBNET, không phải cả host project. Khi đó mỗi đội chỉ dựng được máy trong đúng subnet của họ — và bạn giữ được ranh giới mạng rõ ràng mà không phải dựng nhiều VPC.
A client has asked for your advice about building a data transformation pipeline. The pipeline will read data from Cloud Storage and Cloud Spanner, merge data from the two sources, and write the data to a BigQuery data set. The client does not want to manage servers or other infrastructure, if possible. What Google Cloud service would you recommend?
- A Compute Engine
- B Cloud Data Fusion
- C Cloud Dataprep
- D Cloud Build
Xem giải thích
Đáp án
B — Cloud Data Fusion.
Vì sao đúng
Đề cần một đường ống ETL đọc từ nhiều nguồn, biến đổi, ghi vào BigQuery — và không muốn quản máy chủ.
⚠ Điểm mấu chốt — Data Fusion là ETL được quản lý, có giao diện kéo thả:
Cloud Data Fusion
↓
Dịch vụ tích hợp dữ liệu ĐƯỢC QUẢN LÝ
(dựa trên CDAP mã nguồn mở)
↓
Giao diện KÉO THẢ để dựng pipeline
↓
Hơn 150 CONNECTOR có sẵn:
Cloud Storage, Cloud Spanner, BigQuery,
Cloud SQL, Pub/Sub, JDBC, SaaS…
↓
Bên dưới chạy trên DATAPROC do Google quản
↓
→ không phải dựng máy, không phải vá
→ đúng yêu cầu "không quản lý hạ tầng"
⚠ Đúng ba việc mà đề mô tả:
Đọc từ Cloud Storage và Cloud Spanner
↓
→ có connector sẵn cho cả hai
↓
Gộp dữ liệu hai nguồn
↓
→ có sẵn transform Joiner
↓
Ghi vào BigQuery
↓
→ có sink sẵn
↓
→ dựng được toàn bộ mà không viết mã
⚠ Nhưng nên biết lựa chọn thay thế:
Dataflow (Apache Beam)
↓
Cũng serverless, mạnh hơn về xử lý luồng
→ nhưng phải VIẾT MÃ (Java/Python)
→ phù hợp khi cần logic phức tạp
Data Fusion
↓
Kéo thả, ít mã
→ phù hợp khi cần dựng nhanh và
cho người không chuyên lập trình
↓
(Data Fusion có thể sinh ra job Dataflow
hoặc Dataproc bên dưới)
Vì sao các phương án khác sai
-
C (Cloud Dataprep) — đây là phương án gần nhất và cũng là công cụ dữ liệu không cần mã, nhưng Dataprep hướng tới KHÁM PHÁ VÀ LÀM SẠCH dữ liệu một cách trực quan cho nhà phân tích, không phải dựng đường ống sản xuất đọc từ nhiều nguồn hệ thống. (Và nó là sản phẩm của đối tác Trifacta, không phải dịch vụ Google thuần.)
-
A (Compute Engine) — đòi tự quản máy chủ, trái thẳng yêu cầu của khách hàng.
-
D (Cloud Build) — dịch vụ CI/CD để build và triển khai phần mềm, không phải công cụ xử lý dữ liệu.
Ghi nhớ
⚠ Các dịch vụ dữ liệu của Google Cloud — bảng phải thuộc: | Dịch vụ | Việc | |---|---| | Cloud Data Fusion | ETL KÉO THẢ, được quản lý, hơn 150 connector | | Dataflow | xử lý luồng và lô, Apache Beam — PHẢI VIẾT MÃ | | Dataproc | Hadoop và Spark được quản lý | | Dataprep | làm sạch và khám phá dữ liệu trực quan | | BigQuery | kho dữ liệu, serverless, SQL | | Pub/Sub | hàng đợi tin nhắn, nhận dữ liệu theo luồng | | Composer | điều phối luồng công việc (Apache Airflow) |
Từ khoá nhận diện:
"ETL không cần viết mã, không quản server" → Cloud Data Fusion "xử lý luồng, cần logic phức tạp" → Dataflow "đã có job Spark/Hadoop" → Dataproc "làm sạch dữ liệu bằng giao diện" → Dataprep "điều phối nhiều bước theo lịch" → Cloud Composer
| Dataflow ↔ Data Fusion ↔ Dataproc | Chọn cái nào |
|---|---|
| Dataflow | serverless, viết bằng Beam — luồng và lô, mở rộng tự động |
| Data Fusion | kéo thả, ít mã — dựng nhanh, dễ bàn giao |
| Dataproc | có sẵn mã Spark/Hadoop, muốn chuyển lên cloud |
| Chi phí | Data Fusion có phí instance theo giờ — khá cao cho tải nhỏ |
| Serverless nhất | Dataflow |
| Kiến trúc nạp dữ liệu vào BigQuery | Nguồn |
|---|---|
| Tệp trong Cloud Storage | bq load, hoặc BigQuery Data Transfer Service |
| Luồng thời gian thực | Pub/Sub → Dataflow → BigQuery |
| CSDL quan hệ | Datastream (CDC), hoặc Data Fusion |
| Nhiều nguồn cần gộp | Data Fusion hoặc Dataflow |
| SaaS (Salesforce, Google Ads…) | BigQuery Data Transfer Service |
| Truy vấn tại chỗ | BigLake / external table — không cần nạp |
| Cloud Data Fusion — cần biết | Nội dung |
|---|---|
| Ba phiên bản | Developer / Basic / Enterprise |
| Tính tiền | theo GIỜ của instance Data Fusion, cộng chi phí Dataproc chạy pipeline |
| Lưu ý chi phí | instance chạy liên tục — cân nhắc tắt khi không dùng |
| Bảo mật | chạy được trong VPC riêng tư |
| Phù hợp | đội có nhiều pipeline và muốn giao diện chung |
| Điều phối nhiều bước | Công cụ |
|---|---|
| Cloud Composer | Airflow được quản lý — DAG phức tạp, phụ thuộc nhiều bước |
| Workflows | serverless, nhẹ hơn, nối các lời gọi API |
| Cloud Scheduler | cron được quản lý — kích hoạt theo lịch |
| Kết hợp | Scheduler kích hoạt → Workflows điều phối → Dataflow xử lý |
Ba việc kiểm chứng: | Việc | Cách | |---|---| | Pipeline chạy thế nào | giao diện Data Fusion → tab Runs | | Có lỗi ở bước nào | log của pipeline, và Cloud Logging | | Chi phí bao nhiêu | Cloud Billing, lọc theo Data Fusion và Dataproc |
Và một điểm về chi phí rất đáng cân nhắc trước khi chọn Data Fusion: instance của nó tính tiền theo giờ kể cả khi không có pipeline nào chạy. Với một đội chỉ có vài đường ống chạy hằng đêm, Dataflow thường rẻ hơn nhiều vì chỉ tính tiền lúc job thực sự thực thi — nên hãy so sánh cả hai theo khối lượng công việc thật trước khi chốt.
A group of data scientists needs access to data stored in Cloud Bigtable. You want to follow Google's recommended best practices for security. What role would you assign to the data scientist to allow them to read data from Bigtable?
- A roles/bigtable.admin
- B roles/bigtable.reader
- C roles/bigtable.user
- D roles/bigtable.owner
Xem giải thích
Đáp án
B — roles/bigtable.reader
Vì sao đúng
Đề nói rõ hai điều: nhóm này chỉ cần ĐỌC dữ liệu, và phải theo thực hành tốt về bảo mật — tức là quyền tối thiểu.
⚠ Điểm mấu chốt — chọn vai trò hẹp nhất đủ dùng:
Nhu cầu: ĐỌC dữ liệu từ Bigtable
↓
roles/bigtable.reader
↓
→ chỉ đọc dữ liệu trong bảng
→ KHÔNG ghi, KHÔNG sửa lược đồ,
KHÔNG quản lý instance
↓
→ đúng nguyên tắc quyền tối thiểu
⚠ Bốn vai trò Bigtable — thang từ hẹp tới rộng:
roles/bigtable.reader
↓
ĐỌC dữ liệu ← đề này
roles/bigtable.user
↓
ĐỌC và GHI dữ liệu
→ nhưng không sửa lược đồ, không quản instance
roles/bigtable.admin
↓
Quản lý instance, cluster, bảng, lược đồ
→ và đọc ghi dữ liệu
roles/bigtable.owner
↓
Toàn quyền, kể cả xoá instance
⚠ Ba loại vai trò IAM của Google Cloud:
BASIC (cũ, rất rộng — TRÁNH DÙNG)
↓
roles/viewer, roles/editor, roles/owner
→ áp cho MỌI dịch vụ trong project
→ quá rộng, không dùng cho production
PREDEFINED (nên dùng)
↓
roles/bigtable.reader, roles/storage.objectViewer…
→ do Google định nghĩa và bảo trì cho từng dịch vụ
CUSTOM (khi predefined vẫn quá rộng)
↓
Tự chọn từng permission
→ bạn phải tự bảo trì khi Google thêm quyền mới
Vì sao các phương án khác sai
-
C (
roles/bigtable.user) — đây là phương án gần nhất và cũng cho đọc được, nhưng nó cấp thêm quyền GHI — thừa so với nhu cầu, và vi phạm quyền tối thiểu. -
A (
roles/bigtable.admin) — cho quản lý instance, cluster và lược đồ. Rộng hơn nhiều so với việc chỉ đọc dữ liệu. -
D (
roles/bigtable.owner) — rộng nhất, kể cả xoá instance. Cấp cho nhà khoa học dữ liệu là rủi ro rất lớn.
Ghi nhớ
⚠ Ba loại vai trò IAM — bảng phải thuộc: | Loại | Đặc điểm | |---|---| | Basic | viewer / editor / owner — quá rộng, tránh dùng | | Predefined | theo từng dịch vụ, Google bảo trì — NÊN DÙNG | | Custom | tự chọn permission — bạn phải tự bảo trì | | Nguyên tắc | luôn bắt đầu từ predefined hẹp nhất đủ dùng |
Từ khoá nhận diện:
"chỉ cần đọc" → vai trò có chữ
readerhoặcviewer"đọc và ghi dữ liệu" →user(với Bigtable),editorcấp dịch vụ "quản lý tài nguyên" →admin"thực hành tốt về bảo mật" → quyền tối thiểu, predefined role "predefined vẫn quá rộng" → custom role
| Mẫu đặt tên vai trò của Google Cloud | Nội dung |
|---|---|
roles/<dichvu>.viewer |
xem cấu hình và siêu dữ liệu |
roles/<dichvu>.reader |
đọc DỮ LIỆU |
roles/<dichvu>.user |
dùng dịch vụ, thường có ghi |
roles/<dichvu>.admin |
quản lý tài nguyên của dịch vụ |
| Ví dụ S3-tương-đương | roles/storage.objectViewer ↔ objectAdmin ↔ admin |
| Lưu ý | viewer và reader không giống nhau ở mọi dịch vụ — đọc kỹ mô tả |
| Gán vai trò ở cấp nào | Nội dung |
|---|---|
| Organization | áp cho mọi folder và project |
| Folder | áp cho mọi project bên dưới |
| Project | phổ biến nhất |
| Tài nguyên | hẹp nhất — ví dụ một bảng Bigtable, một bucket |
| Nguyên tắc | kế thừa từ trên xuống, gán ở mức HẸP NHẤT có thể |
| Lưu ý | GCP không có Deny kế thừa như SCP — nhưng có IAM Deny policy |
| Công cụ kiểm soát quyền của GCP | Việc |
|---|---|
| IAM Recommender | gợi ý thu hẹp vai trò dựa trên việc dùng thật 90 ngày |
| Policy Analyzer | ai có quyền gì trên tài nguyên nào |
| IAM Deny policy | từ chối tường minh, thắng mọi Allow |
| Organization Policy | ràng buộc cấu hình (ví dụ cấm IP công cộng) |
| VPC Service Controls | vành đai chống rò rỉ dữ liệu |
| Bigtable — vài điểm nên biết | Nội dung |
|---|---|
| Loại CSDL | NoSQL dạng cột rộng, độ trễ thấp, thông lượng rất cao |
| Phù hợp | chuỗi thời gian, IoT, dữ liệu tài chính, cá nhân hoá |
| Khoá | chỉ có ROW KEY — thiết kế row key quyết định hiệu năng |
| Không có | giao dịch nhiều dòng, chỉ mục phụ, SQL đầy đủ |
| So sánh | Spanner khi cần SQL và giao dịch; Firestore cho ứng dụng di động |
Ba việc kiểm chứng: | Việc | Cách | |---|---| | Ai có quyền gì | gcloud projects get-iam-policy <project> | | Vai trò gồm những permission nào | gcloud iam roles describe roles/bigtable.reader | | Có quyền nào thừa không | IAM Recommender trong console |
Và một công cụ rất đáng dùng định kỳ: IAM Recommender. Nó phân tích 90 ngày sử dụng thật rồi gợi ý thay một vai trò rộng bằng vai trò hẹp hơn — cách nhanh nhất để siết quyền mà không phải đoán xem ai còn cần gì, và cũng là bằng chứng tốt khi cần giải trình với bộ phận kiểm toán.
A large enterprise has created multiple organizations in Google Cloud. They would like to connect the VPC networks across organizations. What should they do?
- A Define firewall rules to allow egress traffic to other VPC networks
- B Implement VPC Network Peering between VPCs
- C Implement a Shared VPC
- D Implement a VPN between VPCs
Xem giải thích
Đáp án
B — Triển khai VPC NETWORK PEERING giữa các VPC.
Vì sao đúng
Chi tiết quyết định nằm ở một từ: NHIỀU TỔ CHỨC (multiple organizations). Shared VPC không vượt qua ranh giới tổ chức, còn peering thì có.
⚠ Điểm mấu chốt — peering nối được cả qua ranh giới tổ chức:
VPC Network Peering
↓
Nối HAI mạng VPC riêng biệt
↓
Hoạt động được khi hai VPC ở:
- cùng project
- khác project
- KHÁC TỔ CHỨC ← trường hợp của đề
↓
Lưu lượng đi trên MẠNG NỘI BỘ của Google
→ không qua internet công cộng
→ độ trễ thấp, không tốn phí gateway
⚠ Vì sao Shared VPC không dùng được ở đây:
Shared VPC
↓
Host project và service project
PHẢI CÙNG MỘT TỔ CHỨC
↓
Đề nói rõ: "multiple organizations"
↓
→ loại Shared VPC ngay
⚠ Ba ràng buộc của peering phải nhớ:
1. KHÔNG BẮC CẦU
↓
A ↔ B và B ↔ C
→ KHÔNG cho A ↔ C
→ phải peer A ↔ C riêng
↓
Nhiều VPC → dùng Network Connectivity Center
2. CIDR KHÔNG ĐƯỢC CHỒNG LẤN
↓
Hai VPC trùng dải IP → không peer được
→ phải quy hoạch IP từ đầu
3. PHẢI TẠO Ở CẢ HAI PHÍA
↓
Mỗi bên tạo một peering trỏ sang bên kia
→ chỉ một bên tạo thì trạng thái là INACTIVE
Xem thêm câu #12467 (cùng lô): cùng chủ đề nối mạng, nhưng ở đó là nhiều project CÙNG một tổ chức nên khoá là Shared VPC. Khoá khác nhau vì phạm vi khác nhau, không mâu thuẫn.
Vì sao các phương án khác sai
-
C (triển khai Shared VPC) — đây là phương án gần nhất và là câu trả lời đúng cho một đề rất giống, nhưng Shared VPC chỉ hoạt động TRONG MỘT tổ chức. Đề nói rõ là nhiều tổ chức.
-
D (triển khai VPN giữa các VPC) — chạy được, nhưng thua peering ở mọi mặt khi cả hai đầu đều nằm trong Google Cloud: VPN có phí gateway, giới hạn băng thông mỗi đường hầm, và thêm độ trễ mã hoá. Peering đi thẳng trên mạng nội bộ của Google.
-
A (đặt firewall rule cho phép lưu lượng ra tới VPC khác) — firewall chỉ cho phép hoặc chặn, không tạo ra đường đi. Không có kết nối thì mở firewall vô nghĩa.
Ghi nhớ
⚠ Bốn cách nối mạng trong Google Cloud — bảng phải thuộc: | Cách | Phạm vi | Đặc điểm | |---|---|---| | Shared VPC | CHỈ trong một tổ chức | một VPC dùng chung, quản tập trung | | VPC Peering | cùng hoặc KHÁC tổ chức | hai VPC riêng, nối lại, không bắc cầu | | Cloud VPN | tới mạng ngoài | có mã hoá, có phí gateway | | Cloud Interconnect | tới trung tâm dữ liệu | băng thông lớn, độ trễ thấp | | Network Connectivity Center | nhiều mạng | trung tâm nối, giải bài toán không bắc cầu |
Từ khoá nhận diện:
"nhiều TỔ CHỨC" → VPC Peering "nhiều project CÙNG tổ chức, một mạng chung" → Shared VPC "nối với trung tâm dữ liệu" → Cloud VPN hoặc Interconnect "nhiều VPC nối chằng chịt" → Network Connectivity Center "gọi dịch vụ của bên khác qua IP riêng" → Private Service Connect
| Ba ràng buộc của VPC Peering — nhắc lại | Nội dung |
|---|---|
| KHÔNG bắc cầu | A↔B và B↔C không cho A↔C |
| CIDR không chồng lấn | kể cả subnet thêm về sau |
| Phải tạo ở CẢ HAI phía | thiếu một bên → trạng thái INACTIVE |
| Firewall | mỗi VPC tự đặt luật của mình |
| Route | subnet route được trao đổi tự động |
| Custom route | phải bật tuỳ chọn import/export mới trao đổi |
| Shared VPC ↔ Peering — bảng phân biệt | Nội dung |
|---|---|
| Số VPC | Shared: MỘT ↔ Peering: HAI trở lên |
| Tổ chức | Shared: một ↔ Peering: nhiều cũng được |
| Quản trị | Shared: tập trung ở host ↔ Peering: mỗi bên tự quản |
| Firewall | Shared: một bộ ↔ Peering: mỗi VPC một bộ |
| Dùng chung được | có — Shared VPC vẫn peer được với VPC khác |
| Private Service Connect — lựa chọn hiện đại | Nội dung |
|---|---|
| Việc | gọi dịch vụ của bên khác qua IP RIÊNG trong VPC của mình |
| Ưu điểm | không cần peering, không lo CIDR chồng lấn |
| Ưu điểm | KHÔNG có vấn đề bắc cầu |
| Dùng cho | dịch vụ Google, dịch vụ của bên thứ ba, dịch vụ nội bộ |
| Xu hướng | Google khuyến nghị cho mô hình nhà cung cấp – người dùng |
| Quy hoạch IP để không vướng về sau | Nội dung |
|---|---|
| Chia dải riêng cho từng tổ chức/đơn vị | tránh chồng lấn ngay từ đầu |
| Chừa dư chỗ | subnet mở rộng được nhưng không thu nhỏ |
| Ghi lại sơ đồ IP | dùng một nguồn sự thật duy nhất |
| Nếu đã trùng | phải đánh số lại một bên, hoặc dùng Private Service Connect |
Ba việc kiểm chứng: | Việc | Cách | |---|---| | Peering đã hoạt động chưa | gcloud compute networks peerings list → trạng thái phải là ACTIVE | | Route đã trao đổi chưa | gcloud compute routes list --filter="peering" | | Máy có gọi được nhau không | ping hoặc nc giữa hai VM bằng IP riêng |
Và một điều nên xác nhận sớm trước khi hứa hẹn tiến độ với các bên: hai VPC có dải IP chồng lấn hay không. Peering từ chối thẳng nếu CIDR trùng nhau, và cách sửa duy nhất là đánh số lại toàn bộ một bên — một công việc rất tốn kém mà lẽ ra chỉ cần vài phút quy hoạch ở giai đoạn thiết kế.
You are creating a set of virtual machines in Compute Engine. Google Cloud will automatically assign an IP address to each. What type of IP address will be assigned?
- A Regional internal address
- B Global internal address
- C Regional external address
- D Global external address
Xem giải thích
Đáp án
A — Địa chỉ NỘI BỘ theo REGION (regional internal address).
Vì sao đúng
Mỗi VM trong Compute Engine luôn được cấp một IP nội bộ thuộc dải của subnet, và subnet là tài nguyên theo Region.
⚠ Điểm mấu chốt — subnet của GCP có phạm vi REGION:
VPC của Google Cloud là TOÀN CẦU
↓
Nhưng SUBNET thuộc về MỘT REGION
↓
VM khởi chạy vào một subnet
↓
→ nhận IP nội bộ từ dải CIDR của subnet đó
→ nên IP nội bộ là REGIONAL
↓
(Điểm khác biệt lớn với AWS:
ở AWS subnet thuộc một AZ,
ở GCP subnet trải cả Region)
⚠ IP nội bộ được cấp TỰ ĐỘNG, IP ngoài thì KHÔNG:
IP nội bộ (internal)
↓
LUÔN được cấp tự động
→ VM nào cũng có
↓
IP ngoài (external)
↓
CHỈ có nếu bạn yêu cầu
→ mặc định VM KHÔNG có IP công cộng
↓
→ đề nói "Google Cloud tự động gán"
→ đang nói tới IP NỘI BỘ
⚠ Bảng phân loại địa chỉ IP của GCP:
REGIONAL GLOBAL
INTERNAL IP của VM (dải cấp cho
(từ subnet) Private Service
Access)
EXTERNAL IP của VM, IP của Global
Regional LB HTTP(S) LB
(anycast)
Vì sao các phương án khác sai
-
C (regional external address) — đây là phương án gần nhất vì đúng phạm vi Region, nhưng IP ngoài KHÔNG được cấp tự động: mặc định VM của Compute Engine không có địa chỉ công cộng trừ khi bạn yêu cầu.
-
B (global internal address) — IP nội bộ của VM luôn là regional. Địa chỉ nội bộ toàn cầu tồn tại nhưng dùng cho mục đích khác (ví dụ dải cấp cho Private Service Access).
-
D (global external address) — dành cho Global HTTP(S) Load Balancer với IP anycast, không phải cho VM.
Ghi nhớ
⚠ Bốn loại địa chỉ IP của GCP — bảng phải thuộc: | | Internal | External | |---|---|---| | Regional | IP của VM — cấp TỰ ĐỘNG từ subnet | IP công cộng của VM, Regional LB | | Global | dải cho Private Service Access | IP anycast của Global HTTP(S) LB | | Tĩnh hay tạm | cả hai đều có ephemeral và static | | | Chi phí | nội bộ miễn phí | IP tĩnh KHÔNG dùng thì BỊ TÍNH TIỀN |
Từ khoá nhận diện:
"IP tự động gán cho VM" → regional internal "IP cố định cho VM" → static external (hoặc static internal) "IP toàn cầu cho load balancer" → global external, anycast "VM không có IP công cộng mà cần ra internet" → Cloud NAT "VM ở subnet nào" → subnet là REGIONAL trong GCP
⚠ Khác biệt lớn giữa GCP và AWS về mạng: | | Google Cloud | AWS | |---|---|---| | VPC | TOÀN CẦU | theo Region | | Subnet | theo REGION | theo Availability Zone | | Firewall | áp cho cả VPC, nhắm bằng tag hoặc service account | security group gắn vào ENI | | Route | theo VPC, có ưu tiên | theo route table của từng subnet | | Mở rộng subnet | mở rộng được dải IP | không đổi CIDR được |
| Cloud NAT — cho VM không có IP công cộng | Nội dung |
|---|---|
| Việc | cho VM ở subnet riêng tư đi RA internet |
| Đặc điểm | được quản lý hoàn toàn, không phải dựng máy NAT |
| Phạm vi | theo REGION, gắn với Cloud Router |
| Chiều vào | KHÔNG cho phép — chỉ một chiều ra |
| IP nguồn bên ngoài thấy | IP của Cloud NAT — dùng cho danh sách cho phép |
| IP tĩnh — lưu ý chi phí | Nội dung |
|---|---|
| Đang gắn vào VM đang chạy | miễn phí (external ephemeral cũng tính phí nhẹ) |
| Đã cấp phát mà KHÔNG dùng | BỊ TÍNH TIỀN |
| Cấp phát | gcloud compute addresses create |
| Kiểm tra | gcloud compute addresses list --filter="status=RESERVED" |
| Dọn dẹp | xoá IP tĩnh không dùng — nguồn lãng phí âm thầm rất phổ biến |
| Private Google Access — nên biết | Nội dung |
|---|---|
| Việc | VM không có IP công cộng vẫn gọi được API của Google |
| Bật ở đâu | trên SUBNET |
| Khác Cloud NAT | chỉ tới dịch vụ Google, không ra internet chung |
| Kết hợp | thường bật cùng lúc với Cloud NAT |
| Tương đương AWS | VPC endpoint |
Ba việc kiểm chứng: | Việc | Cách | |---|---| | VM có IP gì | gcloud compute instances describe <ten> — xem networkInterfaces | | Có IP tĩnh nào bỏ không | gcloud compute addresses list --filter="status=RESERVED" | | Subnet dải nào | gcloud compute networks subnets describe <subnet> --region=<region> |
Và một khác biệt rất đáng nhớ khi chuyển từ AWS sang GCP: subnet của Google Cloud trải cả một Region, không phải một zone. Nghĩa là một subnet duy nhất đã phục vụ được VM ở mọi zone trong Region đó — đơn giản hơn nhiều so với việc phải tạo một subnet cho mỗi AZ như bên AWS.