Ngân hàng đề — Microsoft Azure Developer
Tìm thấy 409 câu.
- A Every 5 minutes, every hour of the day
- B That's an invalid expression and the function will not run
- C Once every hour of the day, at 5 minutes after the hour
- D Once every day, at 5:00 AM
Xem giải thích
Đáp án
C — Mỗi giờ một lần, vào phút thứ 5 sau giờ tròn.
Vì sao đúng
⚠ Phân tích sáu trường:
⚠ {giây} {phút} {giờ} {ngày} {tháng} {thứ}
⚠ 0 5 * * * *
⚠ │ │ │
⚠ │ │ └── mọi giờ
⚠ │ └───────── phút thứ 5 (KHÔNG phải mỗi 5 phút)
⚠ └─────────────── giây 0
↓
⚠ 00:05, 01:05, 02:05, ... 23:05
⚠ → 24 lần mỗi ngày
| Điểm mấu chốt | Nội dung |
|---|---|
⚠ 5 là GIÁ TRỊ CỤ THỂ |
⚠ phút thứ 5 |
⚠ */5 mới là MỖI 5 PHÚT |
|
| ⚠ Khác biệt | ⚠ một dấu */ đổi hoàn toàn ý nghĩa |
Vì sao các phương án khác sai
-
A (mỗi 5 phút, mọi giờ) — ⚠ bẫy CHÍNH: ⚠ đó là ⚠
0 */5 * * * *, có dấu*/. -
D (mỗi ngày lúc 5 giờ sáng) — ⚠ đó là
0 0 5 * * *: ⚠ số 5 phải ở trường GIỜ. -
B (biểu thức không hợp lệ) — ⚠ SAI: ⚠ biểu thức hoàn toàn hợp lệ.
Ghi nhớ
⚠ Ghi nhớ về chất lượng câu hỏi: ⚠ đây là câu ⚠ thứ tư về NCRONTAB qua hai lô, ⚠ và là câu ⚠ tinh tế nhất.
| Câu | Biểu thức | Khoá |
|---|---|---|
| ⚠ #21408 | ⚠ 0 15,30,45 0 * * * |
⚠ ba lần lúc nửa đêm |
| ⚠ #21443 | ⚠ 0 0 0 1 1 * |
⚠ mỗi năm một lần |
| ⚠ #21468 | ⚠ 0 */5 * * * * |
⚠ mỗi 5 phút |
| ⚠ #21474 (câu này) | ⚠ 0 5 * * * * |
⚠ mỗi giờ vào phút thứ 5 |
| ⚠ Cặp quan trọng nhất | ⚠ #21468 và #21474 khác nhau ĐÚNG hai ký tự */ |
⚠ Bảng so sánh cực kỳ đáng nhớ: | Biểu thức | Nghĩa | Số lần mỗi ngày | |---|---|---| | ⚠ 0 5 * * * * | ⚠ phút thứ 5 mỗi giờ | ⚠ 24 | | ⚠ 0 */5 * * * * | ⚠ mỗi 5 phút | ⚠ 288 | | ⚠ 0 0 5 * * * | ⚠ 5 giờ sáng mỗi ngày | ⚠ 1 | | ⚠ 5 * * * * * | ⚠ giây thứ 5 mỗi phút | ⚠ 1.440 | | ⚠ Chênh lệch | ⚠ cùng con số 5 nhưng khác nhau tới hàng trăm lần chạy |
Từ khoá nhận diện:
"số trần" → ⚠ giá trị CỤ THỂ của trường đó "
*/n" → ⚠ mỗi n đơn vị "*" → ⚠ mọi giá trị "vị trí quyết định đơn vị" → ⚠ giây, phút, giờ...
| ⚠ Hậu quả thực tế của việc nhầm | Hậu quả |
|---|---|
| ⚠ Định viết mỗi giờ mà thành mỗi 5 phút | ⚠ chạy nhiều gấp 12 lần |
| ⚠ Tốn chi phí, tăng tải hệ thống đích | |
| ⚠ Có thể gây điều tiết ở dịch vụ phía sau | |
| ⚠ Kiểm tra | ⚠ Portal hiển thị lịch chạy KẾ TIẾP — luôn nhìn nó để xác nhận |
Ba việc kiểm chứng: | Việc | Cách | |---|---| | Có dấu */ hay không | ⚠ khác biệt then chốt | | Số nằm ở trường nào | | | Portal báo lần chạy kế tiếp là khi nào | ⚠ cách kiểm chứng nhanh nhất |
Và cặp biểu thức đáng ghi nhớ nhất trong toàn bộ chủ đề lịch chạy: 0 5 * * * * chạy 24 lần mỗi ngày, còn 0 */5 * * * * chạy 288 lần. Chúng khác nhau đúng hai ký tự.
- A Yes, each database can use a different API in one account
- B Yes, you can use any API to call a Cosmos DB database of any type
- C No, each account can only contain one type of data
Xem giải thích
Đáp án
C — Không, mỗi tài khoản chỉ chứa được MỘT loại dữ liệu (một API).
Vì sao đúng
⚠ API được chọn ở cấp TÀI KHOẢN và không đổi được:
⚠ Cosmos DB Account
⚠ API: Core (SQL) ← chọn lúc TẠO
↓
⚠ Mọi database và container bên trong
⚠ đều dùng API đó
↓
⚠ Cần Gremlin → phải tạo TÀI KHOẢN MỚI
Vì sao các phương án khác sai
-
A (mỗi database dùng API khác nhau) — ⚠ SAI: ⚠ API ở cấp ⚠ tài khoản.
-
B (dùng API nào cũng gọi được loại nào) — ⚠ SAI: ⚠ mỗi API có giao thức và mô hình riêng.
Ghi nhớ
⚠ Ghi nhớ về chất lượng câu hỏi: ⚠ câu này ⚠ TRÙNG với #19581 ở lô 166, thứ tự phương án ⚠ bị xáo.
| Câu | Chứng chỉ | Vị trí đáp án |
|---|---|---|
| ⚠ #19581 | ⚠ Data Fundamentals | ⚠ A — "Không" |
| ⚠ #21475 (câu này) | ⚠ Azure Developer | ⚠ C — "Không" |
| ⚠ Đề bài | ⚠ giống nhau từng chữ | |
| ⚠ Đây là câu trùng thứ TƯ | ⚠ trong năm câu trùng của lô này |
⚠ Ba quyết định vĩnh viễn của Cosmos DB: | Quyết định | Cấp | |---|---| | ⚠ API | ⚠ tài khoản — KHÔNG đổi | | ⚠ Partition key | ⚠ container — KHÔNG đổi | | ⚠ Vùng chính ban đầu | ⚠ đổi được nhưng phức tạp | | ⚠ Ý nghĩa | ⚠ giai đoạn thiết kế quan trọng hơn nhiều so với CSDL quan hệ |
Từ khoá nhận diện:
"đổi API sau khi tạo" → ⚠ KHÔNG được "nhiều API trong một tài khoản" → ⚠ KHÔNG được "nhiều database trong một tài khoản" → ⚠ ĐƯỢC, không giới hạn "đổi partition key" → ⚠ KHÔNG được
| ⚠ Hệ quả thiết kế | Hệ quả |
|---|---|
| ⚠ Cần cả tài liệu và đồ thị → HAI tài khoản | |
| ⚠ Mỗi tài khoản có chi phí và cấu hình riêng | |
| ⚠ Vùng, nhất quán, sao lưu đều riêng | |
| ⚠ Cân nhắc trước | ⚠ có thật sự cần đồ thị không, hay mô hình tài liệu là đủ |
| ⚠ Nếu lỡ chọn sai API | Cách xử lý |
|---|---|
| ⚠ Tạo tài khoản mới với API đúng | |
| ⚠ Dùng Data Migration Tool hoặc Data Factory chuyển dữ liệu | |
| ⚠ Cập nhật chuỗi kết nối | |
| ⚠ Chi phí | ⚠ thời gian và RU cho việc đọc ghi lại toàn bộ |
Ba việc kiểm chứng: | Việc | Cách | |---|---| | Mô hình dữ liệu đã chốt chưa | ⚠ trước khi tạo tài khoản | | Có phần dữ liệu nào cần mô hình khác không | | | Partition key đã theo mẫu truy vấn chưa | |
Và điểm khác biệt lớn nhất giữa thiết kế trên Cosmos DB và trên cơ sở dữ liệu quan hệ: những quyết định quan trọng nhất phải đúng ngay lần tạo đầu tiên — không có lệnh ALTER nào cho API hay partition key.
You are tasked with deploying a containerized application using Azure Container Apps. The application requires a scalable solution that can handle varying workloads. Which of the following features of Azure Container Apps allows you to automatically scale your application based on HTTP traffic?
-
A
Static scaling
-
B
KEDA (Kubernetes Event-driven Autoscaling)
-
C
Azure Load Balancer
-
D
Manual scaling
Xem giải thích
Đáp án
B — KEDA (Kubernetes Event-driven Autoscaling)
Vì sao đúng
Azure Container Apps dùng KEDA làm bộ máy co giãn, và điểm mạnh riêng của nó là co giãn theo sự kiện bên ngoài chứ không chỉ theo CPU: số thông điệp trong hàng đợi, số yêu cầu HTTP đang chờ, độ trễ của Kafka. Nhờ vậy ứng dụng co được về 0 khi không có việc, và bật lên ngay khi có thông điệp đầu tiên.
Vì sao các phương án khác sai
- A. Co giãn tĩnh và D. Co giãn thủ công — cố định số bản chạy, tức là không đáp ứng được tải biến động như đề yêu cầu.
- C. Azure Load Balancer — phân phối lưu lượng giữa các bản chạy đã có, nhưng không tạo thêm bản nào. Đây là cặp khái niệm hay bị lẫn: cân bằng tải chia việc, co giãn tạo năng lực.
- A Durable functions
- B Core Tools
- C Premium Tier Functions
- D Extension Bundles
Xem giải thích
Đáp án
A — Durable Functions.
Vì sao đúng
⚠ Durable Functions cho phép một hàm điều phối và gọi các hàm khác:
⚠ Orchestrator function
⚠ gọi Activity function 1
⚠ chờ kết quả
⚠ gọi Activity function 2
⚠ ...
↓
⚠ TRẠNG THÁI được lưu tự động
⚠ Chạy lại được sau khi tiến trình sập
| Ba loại hàm trong Durable | Vai trò |
|---|---|
| ⚠ Client function | ⚠ khởi động orchestration |
| ⚠ Orchestrator function | ⚠ điều phối, gọi các activity |
| ⚠ Activity function | ⚠ làm việc thật |
| ⚠ Entity function | ⚠ quản lý trạng thái nhỏ, kiểu actor |
Vì sao các phương án khác sai
-
D (Extension Bundles) — ⚠ là cách quản lý PHỤ THUỘC binding cho ngôn ngữ script, không liên quan.
-
B (Core Tools) — ⚠ công cụ dòng lệnh để phát triển cục bộ.
-
C (Premium Tier Functions) — ⚠ là GÓI LƯU TRỮ, giải quyết cold start và VNet.
Ghi nhớ
⚠ Ghi nhớ về chất lượng câu hỏi: ⚠ câu này ⚠ cùng chùm với #21422 và #21440 về tính năng của Functions.
| Câu | Hỏi gì | Khoá |
|---|---|---|
| ⚠ #21422 / #21440 | ⚠ ngôn ngữ không hỗ trợ sẵn | ⚠ Custom Handlers |
| ⚠ #21477 (câu này) | ⚠ hàm gọi hàm khác | ⚠ Durable Functions |
| ⚠ Điểm chung | ⚠ cả ba câu đều có phương án nhiễu là GÓI LƯU TRỮ | |
| ⚠ Phân biệt | ⚠ tính năng lập trình khác với gói hạ tầng |
⚠ Năm mẫu của Durable Functions: | Mẫu | Nội dung | |---|---| | ⚠ Function chaining | ⚠ chạy tuần tự A → B → C | | ⚠ Fan-out / fan-in | ⚠ chạy song song rồi gộp kết quả | | ⚠ Async HTTP API | ⚠ trả về ngay, client hỏi trạng thái sau | | ⚠ Monitor | ⚠ kiểm tra định kỳ tới khi điều kiện thoả | | ⚠ Human interaction | ⚠ chờ người phê duyệt, có timeout |
Từ khoá nhận diện:
"hàm gọi hàm, quy trình nhiều bước" → ⚠ Durable Functions "ngôn ngữ lạ" → ⚠ Custom Handlers "không muốn cold start" → ⚠ Premium plan "phát triển cục bộ" → ⚠ Core Tools
| ⚠ Ràng buộc quan trọng của orchestrator | Ràng buộc |
|---|---|
| ⚠ Mã phải TẤT ĐỊNH | ⚠ deterministic |
⚠ KHÔNG dùng DateTime.Now, Guid.NewGuid(), Random |
|
| ⚠ KHÔNG gọi API bên ngoài trực tiếp | |
| ⚠ Vì sao | ⚠ orchestrator được CHẠY LẠI nhiều lần để dựng lại trạng thái |
| ⚠ Thay bằng | ⚠ context.CurrentUtcDateTime, context.NewGuid() |
| ⚠ Vi phạm | ⚠ gây lỗi rất khó chẩn đoán |
| ⚠ Trạng thái lưu ở đâu | Nơi |
|---|---|
| ⚠ Trong Storage Account của function app | |
| ⚠ Bảng và hàng đợi do Durable tự tạo | |
| ⚠ Nghĩa là | ⚠ quy trình sống sót qua việc khởi động lại và mở rộng quy mô |
Ba việc kiểm chứng: | Việc | Cách | |---|---| | Orchestrator có mã bất định nào không | ⚠ lỗi khó chẩn đoán nhất | | Quy trình có cần chạy lâu hơn giới hạn hàm thường không | | | Có cần chờ người phê duyệt không | ⚠ mẫu human interaction |
Và ràng buộc quan trọng nhất khi viết orchestrator của Durable Functions, vi phạm là gây lỗi rất khó lần ra: mã phải tất định. Nó sẽ được chạy lại nhiều lần để dựng lại trạng thái, nên mọi giá trị ngẫu nhiên hay thời gian hiện tại đều phải lấy từ context.
You are developing an Azure Function that is triggered by an HTTP request. You want to ensure that the function processes requests only if the current time is between 8 AM and 5 PM (UTC). Which of the following approaches would you use to implement this requirement?
-
A
Use a Webhook Trigger that calls an external service to determine if the current time is within the allowed range before processing the request.
-
B
Configure the Azure Function to run on a schedule using a CRON expression that specifies the operating hours.
-
C
Use a Timer Trigger to run the function every hour, checking the current time within the function body.
-
D
Use an HTTP Trigger and check the current time within the function body, returning a 403 Forbidden status code if the request is made outside of the specified time range.
Xem giải thích
Đáp án
D — Dùng HTTP Trigger và kiểm tra giờ hiện tại ngay trong thân hàm
Vì sao đúng
Điểm mấu chốt là hàm được kích hoạt bởi yêu cầu HTTP — nghĩa là nó chỉ chạy khi có người gọi, và bạn không kiểm soát được lúc nào họ gọi. Vì vậy điều kiện thời gian phải kiểm bên trong hàm, rồi trả về mã lỗi phù hợp nếu ngoài khung giờ.
Đây là cách đơn giản nhất, không thêm dịch vụ nào, và dễ kiểm thử.
Vì sao các phương án khác sai
- B. Dùng biểu thức CRON để hàm chỉ chạy trong khung giờ — CRON dùng cho Timer Trigger; nó không áp được lên HTTP Trigger, vì HTTP Trigger phản ứng theo yêu cầu chứ không theo lịch.
- C. Dùng Timer Trigger chạy mỗi giờ — đổi hẳn mô hình kích hoạt, nên hàm không còn phản hồi được yêu cầu HTTP nữa.
- A. Gọi dịch vụ bên ngoài để hỏi giờ — thêm một phụ thuộc mạng và một điểm hỏng cho việc mà một dòng mã trong hàm làm được.
- A Moves to the next higher App Service Plan, such as going from S1 Standard plan to S2 Standard plan.
- B Adds additional running versions of your app to the same instance.
- C Increases the number of VM instances that run your app.
- D Deploys another instance of your app to a different region to ensure better performance for global customers.
Xem giải thích
Đáp án
C — Tăng SỐ LƯỢNG instance máy ảo chạy ứng dụng của bạn.
Vì sao đúng
⚠ Hai hướng mở rộng, đừng lẫn: | Hướng | Nội dung | |---|---| | ⚠ Scale UP (dọc) | ⚠ máy MẠNH hơn — S1 lên S2 | | ⚠ Scale OUT (ngang) | ⚠ NHIỀU máy hơn — 1 instance lên 5 |
⚠ Scale UP
⚠ [máy nhỏ] → [MÁY LỚN]
⚠ Scale OUT
⚠ [máy] → [máy][máy][máy][máy]
↓
⚠ Cần load balancer phân phối lưu lượng
⚠ App Service tự lo phần đó
Vì sao các phương án khác sai
-
A (chuyển lên gói cao hơn, S1 lên S2) — ⚠ đó là scale UP.
-
B (thêm bản chạy của app trên CÙNG instance) — ⚠ không phải cơ chế của App Service.
-
D (triển khai sang vùng khác) — ⚠ đó là mở rộng ĐỊA LÝ, cần Traffic Manager hoặc Front Door.
Ghi nhớ
⚠ Ghi nhớ về chất lượng câu hỏi: ⚠ câu này ⚠ bổ sung cho #21448 trong cùng lô và ⚠ #19527 ở lô trước.
| Câu | Hỏi gì | Khoá |
|---|---|---|
| ⚠ #19527 | ⚠ phân tán giao dịch CSDL qua nhiều máy | ⚠ manual sharding |
| ⚠ #21448 | ⚠ App Service Plan là gì | ⚠ tập tài nguyên tính toán |
| ⚠ #21479 (câu này) | ⚠ scale out làm gì | ⚠ tăng số instance |
| ⚠ Điểm chung | ⚠ phân biệt mở rộng DỌC và NGANG |
⚠ Điều kiện để scale out hoạt động: | Điều kiện | Nội dung | |---|---| | ⚠ Ứng dụng phải KHÔNG GIỮ TRẠNG THÁI | ⚠ stateless | | ⚠ Session lưu ra ngoài | ⚠ Redis, CSDL | | ⚠ Tệp tải lên lưu ở Blob, không lưu đĩa cục bộ | | | ⚠ Không phụ thuộc bộ nhớ cache trong tiến trình | | | ⚠ Không đáp ứng | ⚠ thêm instance sẽ gây lỗi khó hiểu cho người dùng |
Từ khoá nhận diện:
"tăng số instance" → ⚠ scale out "máy mạnh hơn, gói cao hơn" → ⚠ scale up "sang vùng khác" → ⚠ mở rộng địa lý "tự động theo tải" → ⚠ autoscale, từ bậc Standard
| ⚠ Autoscale — cấu hình đúng cách | Cấu hình |
|---|---|
| ⚠ Quy tắc TĂNG và quy tắc GIẢM | ⚠ phải có cả hai |
| ⚠ Ngưỡng giảm phải thấp hơn ngưỡng tăng đáng kể | ⚠ tránh dao động liên tục |
| ⚠ Thời gian làm nguội | ⚠ cooldown |
| ⚠ Số instance tối thiểu và tối đa | |
| ⚠ Chỉ có quy tắc tăng | ⚠ hệ thống mở rộng rồi không bao giờ thu lại — rất tốn tiền |
| ⚠ Scale up hay scale out — chọn thế nào | Chọn |
|---|---|
| ⚠ Ứng dụng stateless, tải biến động | ⚠ scale out |
| ⚠ Ứng dụng cần nhiều RAM cho một tiến trình | ⚠ scale up |
| ⚠ Cần tính sẵn sàng cao | ⚠ scale out, ít nhất hai instance |
| ⚠ Thực tế | ⚠ thường kết hợp cả hai |
Ba việc kiểm chứng: | Việc | Cách | |---|---| | Ứng dụng có stateless không | ⚠ điều kiện tiên quyết để scale out | | Autoscale có quy tắc GIẢM không | | | Số instance tối đa đặt bao nhiêu | ⚠ giới hạn chi phí |
Và cấu hình autoscale bị thiếu nhiều nhất, chỉ phát hiện qua hoá đơn cuối tháng: quy tắc thu nhỏ trở lại. Hệ thống mở rộng lúc cao điểm rồi giữ nguyên số instance đó mãi mãi.
- A The only way to modify a Shared Access Signature is to recreate it
- B Create the shared access signature using a stored access policy
- C You cannot modify the expiry date of a shared access signature in any way
- D You can edit the Shared Access Signature after it's been created in the SAS blade of the Storage Account
Xem giải thích
Đáp án
B — Tạo SAS bằng cách gắn với một stored access policy.
Vì sao đúng
⚠ Stored access policy tách phần "quyền và thời hạn" ra khỏi chính token:
⚠ SAS thường
⚠ quyền và hạn NHÚNG THẲNG vào token
↓ ⚠ đã phát ra thì không sửa được
⚠ SAS gắn stored access policy
⚠ token chỉ TRỎ TỚI tên policy
⚠ quyền và hạn nằm trong POLICY
↓
⚠ Sửa policy = mọi SAS gắn với nó ĐỔI THEO
⚠ Xoá policy = THU HỒI ngay lập tức
| Stored access policy cho phép | Nội dung |
|---|---|
| ⚠ Đổi thời hạn sau khi phát | |
| ⚠ Đổi quyền sau khi phát | |
| ⚠ THU HỒI mà không cần đổi khoá tài khoản | ⚠ giá trị lớn nhất |
| ⚠ Giới hạn | ⚠ tối đa 5 policy trên mỗi container |
Vì sao các phương án khác sai
-
A (cách duy nhất là tạo lại) — ⚠ đúng với SAS THƯỜNG, ⚠ nhưng sai khi có stored access policy.
-
C (không sửa được bằng bất kỳ cách nào) — ⚠ SAI.
-
D (sửa trong màn hình SAS của Storage Account) — ⚠ màn hình đó chỉ TẠO SAS mới, không sửa được token đã phát.
Ghi nhớ
⚠ Ghi nhớ về chất lượng câu hỏi: ⚠ câu này ⚠ là câu tiếp nối trực tiếp của #21407 ở lô trước.
| Câu | Hỏi gì | Khoá |
|---|---|---|
| ⚠ #21407 | ⚠ cấp quyền một container không đưa khoá | ⚠ SAS |
| ⚠ #21480 (câu này) | ⚠ sửa hạn của SAS đã phát | ⚠ stored access policy |
| ⚠ Quan hệ | ⚠ câu này giải quyết ĐIỂM YẾU của giải pháp ở câu kia |
⚠ Ba loại SAS — nhắc lại: | Loại | Thu hồi thế nào | |---|---| | ⚠ Service SAS thường | ⚠ phải đổi khoá tài khoản | | ⚠ Service SAS + stored access policy | ⚠ sửa hoặc xoá policy | | ⚠ User delegation SAS | ⚠ thu hồi quyền của danh tính Entra ID | | ⚠ Khuyến nghị hiện nay | ⚠ user delegation SAS |
Từ khoá nhận diện:
"sửa hạn sau khi phát" → ⚠ stored access policy "thu hồi mà không đổi khoá" → ⚠ stored access policy hoặc user delegation SAS "ký bằng Entra ID" → ⚠ user delegation SAS "đổi khoá tài khoản" → ⚠ thu hồi mọi SAS thường cùng lúc
| ⚠ Vì sao đổi khoá là cách thu hồi tệ | Lý do |
|---|---|
| ⚠ Vô hiệu hoá MỌI SAS đã phát | ⚠ không chỉ cái cần thu hồi |
| ⚠ Mọi ứng dụng dùng khoá đó cũng hỏng | |
| ⚠ Gây gián đoạn diện rộng | |
| ⚠ Stored access policy | ⚠ cho phép thu hồi CÓ CHỌN LỌC |
| ⚠ Thực hành tốt tổng hợp về SAS | Thực hành |
|---|---|
| ⚠ Hạn NGẮN nhất có thể | |
| ⚠ Quyền TỐI THIỂU | |
| ⚠ Giới hạn IP nếu biết trước | |
| ⚠ Chỉ HTTPS | |
| ⚠ Gắn stored access policy nếu cần thu hồi | |
| ⚠ Ưu tiên user delegation SAS |
Ba việc kiểm chứng: | Việc | Cách | |---|---| | Có SAS nào hạn quá dài đang lưu hành không | | | Có cách thu hồi từng SAS riêng lẻ chưa | | | Có thể chuyển sang user delegation SAS không | |
Và điểm yếu cố hữu của SAS mà stored access policy sinh ra để khắc phục: một token đã phát đi thì không gọi lại được. Gắn nó vào một chính sách sửa được là cách duy nhất giữ lại quyền thu hồi.
- A az webapp log tail
- B az webapp download
- C Get-AzAppServiceLog
- D az webapp log -all
Xem giải thích
Đáp án
A — az webapp log tail
Vì sao đúng
⚠ tail là lệnh xem log TRỰC TIẾP theo dòng chảy:
⚠ az webapp log tail --name myapp --resource-group myrg
↓
⚠ Log hiện ra ngay trên terminal
⚠ Cập nhật liên tục khi có dòng mới
⚠ Ctrl+C để dừng
| Tuỳ chọn hữu ích | Nội dung |
|---|---|
⚠ --provider application |
⚠ chỉ log ứng dụng |
⚠ --provider http |
⚠ chỉ log web server |
⚠ --filter |
⚠ lọc theo chuỗi |
Vì sao các phương án khác sai
-
B (
az webapp download) — ⚠ không có lệnh này; ⚠ đúng phải làaz webapp log download, ⚠ và nó ⚠ tải về chứ không xem trực tiếp. -
C (
Get-AzAppServiceLog) — ⚠ không phải cmdlet chuẩn. -
D (
az webapp log -all) — ⚠ cú pháp không hợp lệ.
Ghi nhớ
⚠ Ghi nhớ về chất lượng câu hỏi: ⚠ câu này ⚠ là cặp đối xứng với #21426 trong cùng lô.
| Câu | Hỏi gì | Khoá |
|---|---|---|
| ⚠ #21426 | ⚠ TẢI log về đĩa | ⚠ az webapp log download |
| ⚠ #21481 (câu này) | ⚠ xem log TRỰC TIẾP | ⚠ az webapp log tail |
| ⚠ Cặp đối xứng | ⚠ hai lệnh con của cùng một nhóm | |
| ⚠ Mẹo | ⚠ thuộc bốn lệnh con của az webapp log là ăn cả hai câu |
⚠ Bốn lệnh con của az webapp log: | Lệnh | Việc | |---|---| | ⚠ config | ⚠ bật tắt và đặt mức log | | ⚠ show | ⚠ xem cấu hình hiện tại | | ⚠ tail | ⚠ xem trực tiếp | | ⚠ download | ⚠ tải về dạng ZIP |
Từ khoá nhận diện:
"trực tiếp, theo dòng, live stream" → ⚠ tail "tải về đĩa" → ⚠ download "bật ghi log" → ⚠ config "truy vấn log lịch sử" → ⚠ Application Insights
⚠ Điều kiện để tail có gì để xem |
Điều kiện |
|---|---|
| ⚠ Ghi log phải được BẬT trước | ⚠ az webapp log config |
| ⚠ Log ghi ra FILE SYSTEM | ⚠ tail không đọc từ blob |
| ⚠ Mức log phải đủ thấp để có dòng | |
| ⚠ Triệu chứng | ⚠ chạy tail mà màn hình im lặng — thường vì chưa bật log |
| ⚠ Khi nào dùng gì | Khi nào |
|---|---|
| ⚠ Đang gỡ lỗi ngay bây giờ | ⚠ tail |
| ⚠ Phân tích sau hoặc gửi cho người khác | ⚠ download |
| ⚠ Điều tra sự cố đã qua | ⚠ Application Insights |
| ⚠ Cảnh báo tự động | ⚠ Azure Monitor |
Ba việc kiểm chứng: | Việc | Cách | |---|---| | Ghi log đã bật chưa | ⚠ mặc định tắt | | Log ghi ra file system hay blob | ⚠ tail chỉ đọc file system | | Có Application Insights cho điều tra sau không | |
Và lý do phổ biến nhất khiến lệnh xem log trực tiếp không hiện gì cả: ghi log chưa được bật, hoặc đã tự tắt sau mười hai giờ. Kiểm tra cấu hình trước khi nghi ngờ ứng dụng.
- A Enable Always On setting on the General Settings page.
- B Upgrade to Standard Service Plan
- C Set the Managed Pipeline version to Integrated
- D Upgrade to Premium Service Plan
Xem giải thích
Đáp án
A — Bật thiết lập "Always On" trong trang General Settings.
Vì sao đúng
⚠ Mặc định App Service DỠ TẢI ứng dụng khi không có lưu lượng:
⚠ Không có request trong 20 phút
↓
⚠ App Service dỡ tải ứng dụng khỏi bộ nhớ
↓
⚠ WebJob chạy liên tục cũng BỊ DỪNG
⚠ Timer trigger có thể không chạy
↓ ⚠ bật Always On
⚠ App Service tự gửi request giữ ứng dụng luôn chạy
| Always On cần cho | Nội dung |
|---|---|
| ⚠ WebJob chạy liên tục | ⚠ đề này |
| ⚠ Function App trên App Service Plan | |
| ⚠ Ứng dụng cần khởi động nhanh | ⚠ tránh cold start |
| ⚠ Tác vụ nền dài |
Vì sao các phương án khác sai
-
B (nâng lên gói Standard) và D (nâng lên Premium) — ⚠ bẫy hợp lý: ⚠ Always On ⚠ CÓ yêu cầu từ gói Basic trở lên, ⚠ nhưng nâng gói ⚠ không tự bật nó; ⚠ vẫn phải bật thủ công.
-
C (đặt Managed Pipeline version thành Integrated) — ⚠ liên quan tới cách IIS xử lý request, không giữ ứng dụng chạy.
Ghi nhớ
⚠ Ghi nhớ về chất lượng câu hỏi: ⚠ câu này ⚠ bổ sung cho #21448 và #21484 về App Service.
| Câu | Hỏi gì | Khoá |
|---|---|---|
| ⚠ #21448 | ⚠ App Service Plan là gì | ⚠ tập tài nguyên tính toán |
| ⚠ #21482 (câu này) | ⚠ giữ app không bị dỡ tải | ⚠ Always On |
| ⚠ #21484 | ⚠ ARR Affinity làm gì | ⚠ giữ client ở cùng instance |
| ⚠ Ba câu | ⚠ cùng ở trang General Settings của App Service |
⚠ Các thiết lập quan trọng ở General Settings: | Thiết lập | Việc | |---|---| | ⚠ Always On | ⚠ không dỡ tải ứng dụng | | ⚠ ARR Affinity | ⚠ giữ phiên ở cùng instance | | ⚠ HTTPS Only | ⚠ ép HTTPS | | ⚠ Minimum TLS Version | ⚠ nên đặt 1.2 trở lên | | ⚠ WebSockets | ⚠ bật nếu ứng dụng cần | | ⚠ FTP State | ⚠ nên tắt hoặc chỉ FTPS |
Từ khoá nhận diện:
"app bị dỡ tải khi vắng khách" → ⚠ Always On "phiên bị mất khi có nhiều instance" → ⚠ ARR Affinity "request đầu tiên rất chậm" → ⚠ cold start, bật Always On "WebJob dừng bất thường" → ⚠ Always On
| ⚠ Điều kiện của Always On | Điều kiện |
|---|---|
| ⚠ KHÔNG có ở gói Free và Shared | |
| ⚠ Có từ gói Basic trở lên | |
| ⚠ Mặc định TẮT | ⚠ kể cả khi gói hỗ trợ |
| ⚠ Hệ quả | ⚠ phải bật thủ công sau khi nâng gói |
| ⚠ Với Azure Functions | Lưu ý |
|---|---|
| ⚠ Gói Consumption: KHÔNG có Always On | ⚠ và không cần — nền tảng tự lo timer |
| ⚠ Gói App Service: PHẢI bật Always On | ⚠ nếu không timer trigger sẽ không đáng tin |
| ⚠ Đây là | ⚠ sự cố kinh điển với Function trên App Service Plan |
Ba việc kiểm chứng: | Việc | Cách | |---|---| | Always On đã bật chưa | ⚠ mặc định tắt | | Gói hiện tại có hỗ trợ Always On không | | | Có WebJob hoặc timer trigger nào không chạy đúng lịch không | |
Và nguyên nhân số một khiến tác vụ nền trên App Service dừng một cách bí ẩn: Always On chưa được bật. Ứng dụng bị dỡ tải khi vắng khách, và mọi thứ đang chạy ngầm dừng theo.
You are developing an application that uses Azure Cosmos DB and you want to implement change feed notifications to capture and process changes to items in a container. Which of the following methods would you use to read the change feed from Azure Cosmos DB?
-
A
Azure Data Factory
-
B
Azure Logic Apps
-
C
Azure Functions with a Cosmos DB trigger
-
D
Azure Event Grid
Xem giải thích
Đáp án
C — Azure Functions với Cosmos DB trigger
Vì sao đúng
Cosmos DB trigger được xây dựng trên chính change feed, nên nó là cách gọn nhất để phản ứng với thay đổi: hàm tự được gọi mỗi khi có item được thêm hoặc sửa, và runtime lo sẵn phần khó nhất — lưu vị trí đã đọc tới đâu (lease) và chia việc giữa nhiều bản chạy khi cần co giãn.
Không có nó thì bạn phải tự viết vòng lặp đọc change feed và tự quản lý con trỏ.
Vì sao các phương án khác sai
- D. Event Grid — Cosmos DB không phát sự kiện trực tiếp cho Event Grid theo cách dùng được ở đây; change feed là cơ chế riêng.
- A. Data Factory — điều phối dữ liệu theo lô, không phản ứng theo sự kiện.
- B. Logic Apps — có connector cho Cosmos DB nhưng thiên về hỏi vòng, kém hiệu quả hơn hẳn trigger dựa trên change feed.