Amazon CloudWatch Synthetics canaries là các tập lệnh giám sát endpoints và API của bạn bằng cách mô phỏng hành động của người dùng. Những canaries này chạy theo lịch trình, kiểm tra tính khả dụng và độ trễ của ứng dụng của bạn, đồng thời cảnh báo cho bạn khi có sự cố. Các tập lệnh Canary được viết bằng Node.js và Python, đồng thời chúng chạy bên trong AWS Lambda function. Quá trình phát triển của canaries phản ánh chặt chẽ quá trình phát triển của ứng dụng, bao gồm các nhiệm vụ như coding, testing, debugging và deployment. Tuy nhiên, không giống như phát triển ứng dụng truyền thống, không có môi trường testing và debugging cục bộ để code, test và lặp lại nhanh chóng một cách liền mạch. Do không có môi trường testing, bạn có thể dựa vào các phương pháp kém hiệu quả hơn, dẫn đến thời gian phát triển canary kéo dài. Điều này lại làm tăng tải hoạt động cho bạn trong việc duy trì canary vì bạn sẽ mất thêm thời gian để test canary code. Trong bài blog này, bạn sẽ thiết lập một môi trường testing cục bộ để test và debug cục bộ các Synthetics canaries bằng cách sử dụng Visual Studio Code IDE.
Tổng quan về giải pháp
Bằng cách sử dụng AWS Serverless Application Model (SAM) và Visual Studio Code, bạn sẽ thiết lập môi trường phát triển cục bộ cho Synthetics canary. Lambda function được xác định trong SAM template sẽ mô phỏng hành vi canary cục bộ. Bằng cách sử dụng các debug breakpoints trong Visual Studio Code, bạn sẽ debug một canary mẫu.
Hướng dẫn
Bài blog này cung cấp quy trình từng bước để thiết lập môi trường testing cục bộ nhằm kiểm tra và debug các Synthetics canaries. Làm theo các bước này, bạn sẽ có thể modify code, test và debug NodeJS Canaries trực tiếp trong Visual Studio Code. Môi trường testing cục bộ sử dụng Serverless Application Model (SAM) container để mô phỏng AWS Lambda function nhằm mô phỏng hành vi của Synthetics canaries. Đến cuối bài hướng dẫn này, bạn sẽ học được những điều sau:
- Thiết lập môi trường testing cục bộ trong vài bước đơn giản
- Debug một Synthetics canary tổng hợp cục bộ và lặp lại nhanh chóng
- Tích hợp các 3rd party dependencies với canary code
- Tích hợp debug cục bộ vào gói nguồn canary hiện có
Chuẩn bị
Trong bài workshop này, bạn nên chuẩn bị những điều kiện này:
- Chọn hoặc tạo một Amazon S3 bucket cho canary artifacts.
Lưu ý: Bạn có thể bỏ qua bước này nếu muốn. Canary vẫn có thể chạy cục bộ nhưng sẽ không thể tải các artifacts lên S3 bucket. Canary logs sẽ chứa các lỗi liên quan đến vấn đề này nhưng bạn có thể yên tâm bỏ qua chúng. Nếu bạn sử dụng Amazon S3 bucket, chúng tôi khuyên bạn nên đặt lifecycle cho bucket để xóa các objects sau một vài ngày. Để biết thêm thông tin, hãy xem Quản lý vòng đời lưu trữ của bạn.
- Thiết lập AWS profile mặc định cho tài khoản AWS của bạn.
- Đặt region mặc định thành AWS region mong muốn của bạn (ví dụ: us-west-2).
- Cài đặt phiên bản mới nhất của AWS Serverless Application Model (SAM) CLI.
- Cài đặt Visual Studio Code IDE. Bạn có thể chọn các IDE khác nhưng hướng dẫn này chỉ cung cấp hướng dẫn để làm việc với Visual Studio Code.
- Cài đặt Docker và khởi động daemon.
- AWS Toolkit dành cho VS Code extension.
Thiết lập môi trường local testing cho NodeJS canary
- Clone aws-samples/synthetics-canary-local-debugging-sample repository bằng câu lệnh:
- Đi đến thư mục NodeJS canary
- Chạy câu lệnh npm install để tải các canary dependencies
Launch configuration
Launch configuration file chạy có tại .vscode/launch.json. Nó chứa cấu hình để cho phép Visual Studio Code khám phá template file. Nó xác định Lambda payload với các tham số bắt buộc để invoke canary thành công. Đây là launch configuration cho NodeJS canary:
Chú ý:
- Đảm bảo bạn sửa đổu payload JSON bằng S3 bucket của riêng bạn (s3Bucket) cho các canary artifacts. Bạn có thể cung cấp bất kỳ tên nào cho canary (canaryName).
- Các fields tùy chọn khác mà bạn có thể cung cấp trong payload JSON:
Debugging canary
Thêm breakpoints trong canary code nơi bạn muốn tạm dừng thực thi bằng cách nhấp vào editor margin, sau đó chuyển sang chế độ Run and Debug. Thực hiện canary bằng cách nhấp vào nút Play. Khi canary thực thi, logs sẽ được đưa vào debug console. Nếu bạn đã thêm breakpoints, quá trình thực thi canary sẽ tạm dừng tại mỗi breakpoints, cho phép bạn duyệt qua code và kiểm tra các variable values, instance methods, object attributes, function call stack, v.v.
Sau khi quá trình thực thi canary hoàn tất, các artifacts (logs, screenshots, HAR và reports) sẽ được tải lên Amazon S3 bucket được chỉ định trong lambda payload trong launch configuration. Bạn có thể xem các artifacts trong Amazon S3 console hoặc trực tiếp trong editor trong AWS Toolkit window. Hãy lưu ý rằng các artifacts, ngoại trừ logs, sẽ bị ghi đè khi bạn chạy canary vào lần tiếp theo vì tên file screenshots và tên file reports không thay đổi, ngoại trừ tên file logs. Nếu bạn muốn giữ lại các artifacts, hãy đảm bảo cung cấp một khóa Amazon S3 khác trong payload JSON để các artifacts đó sẽ được lưu vào một khóa Amazon S3 khác. Ngoài ra, các canary metrics, bao gồm SuccessPercent, Duration, Step và HTTP status code metrics, cũng sẽ được publish để chạy trong CloudWatchSynthetics namespace dành cho canary (ví dụ: LocalSyntheticsCanary), có thể được xem trong CloudWatch Metrics console.
Không phát sinh chi phí khi chạy và debug canary cục bộ ngoại trừ các artifacts được lưu trữ trong bộ chứa Amazon S3 và các Synthetics canary metrics được tạo bởi mỗi lần chạy cục bộ.
Lưu ý
Việc debug các visual monitoring canaries đặt ra một thách thức do phải phụ thuộc vào base screenshots được chụp trong lần chạy đầu tiên để so sánh tiếp theo. Trong môi trường development cục bộ, các lần chạy không được lưu trữ hay theo dõi, coi mỗi lần lặp là một lần chạy độc lập. Do đó, việc không có lịch sử chạy khiến việc thực hiện debug visual monitoring canaries là không thực tế.
Tích hợp môi trường testing cục bộ vào canary package của bạn
Bạn có thể dễ dàng tích hợp môi trường testing canary cục bộ vào canary package hiện có của mình bằng cách sao chép ba file:
- Đặt file template.yml vào package root. Đảm bảo sửa đổi đường dẫn để CodeUri trỏ đến thư mục chứa mã canary của bạn.
- Đặt fil cw-synthetics.js vào thư mục canary. Lưu ý: Đảm bảo rằng bạn truy xuất phiên bản mới nhất của file từ GitHub repository, vì các phiên bản cũ hơn có thể không tương thích với runtimes mới hoặc có thể không replicate chính xác hành vi thực tế của canary.
- Đặt file launch configuration (.vscode/launch.json) trong package root. Hãy đặt nó trong thư mục .vscode; tạo nó nếu nó chưa tồn tại.
Dọn dẹp tài nguyên
Vì canary được thực thi cục bộ nên việc dọn dẹp duy nhất cần có là xóa mọi canary artifacts đã được tải lên Amazon S3 bucket. Bạn nên xóa những objects đó khỏi S3 bucket.
Kết luận
Kiểm tra Synthetics canaries cung cấp cho các developers một phương tiện mạnh mẽ và hiệu quả để xác định và giải quyết các vấn đề một cách nhanh chóng, đồng thời cung cấp quy trình làm việc và các công cụ tương tự như phát triển ứng dụng mà bạn đã quen thuộc. Điều quan trọng cần lưu ý là mặc dù debug cục bộ là một công cụ có giá trị nhưng nó không thể replicate hoàn toàn môi trường production. Các yếu tố như network latency, caching, transient website issues, database I/O latency và các yếu tố bên ngoài khác dành riêng cho môi trường thực tế có thể không được sao chép chính xác trong thiết lập cục bộ. Do đó, điều cần thiết là phải tiến hành testing kỹ lưỡng trong môi trường production thực tế để tính đến các variables bên ngoài này và đảm canaries hoạt động tối ưu trong điều kiện thực tế.
Debug Synthetics Python canary tuân theo quy trình tương tự như được thảo luận trong bài blog. Bạn có thể tìm thấy các code samples cho Python canaries trong thư mục python-canary của sample repository. Để biết thêm thông tin về cách debug Python canaries, debug trong JetBrains IDE, v.v., hãy tham khảo CloudWatch Synthetics documentation.