Quản lý nâng cấp AWS Lambda runtime

bởi Julian Wood | ngày 15 tháng 11 2023 | in Amazon Athena, Amazon CloudWatch, Amazon QuickSight, AWS CloudFormation, AWS Config, AWS Cost and Usage Report, AWS Lambda, AWS Personal Health Dashboard, AWS Trusted Advisor, Serverless | Permalink |  Share

Bài viết này được viết bởi Julian Wood, Principal Developer Advocate, vàDan Fox, Principal Specialist Serverless Solutions Architect.

AWS Lambda hỗ trợ nhiều ngôn ngữ lập trình thông qua việc sử dụng runtime. Một Lambda runtime cung cấp một môi trường thực thi ngôn ngữ cụ thể, cung cấp gồm OS, hỗ trợ ngôn ngữ, và các cài đặt thêm, ví dụ như các biến môi trường và các chứng chỉ để bạn có thể truy cập từ function code.

Bạn có thể sử dụng các runtime được quản lý mà Lambda cung cấp hoặc xây dựng riêng cho bạn. Mỗi phát hành ngôn ngữ lập trình chính có một runtime được quản lý cụ thể, với một định danh duy nhất, ví dụ python3.11 hoặc nodejs20.x.

Lambda tự động áp dụng các bản vá và các cập nhật bảo mật cho toàn bộ các runtime được quản lý và các container base image tương ứng. Tự động vá các runtime là một trong những tính năng các khách hàng thích nhất về Lambda. Khi các vá lỗi này không còn sẵn nữa, Lambda kết thúc hỗ cho runtime. Qua vài tháng tiếp theo, Lambda đang ngừng sử dụng

 một số runtime nổi tiếng, phát bởi kết thúc vòng đời của các phiên bản ngôn ngữ đang chạy và của Amazon Linux 1.

RuntimeDeprecation
Node.js 14Nov 27, 2023
Node.js 16Mar 11, 2024
Python 3.7Nov 27, 2023
Java 8 (Amazon Linux 1)Dec 31, 2023
Go 1.xDec 31, 2023
Ruby 2.7Dec 07, 2023
Custom Runtime (provided)Dec 31, 2023

Runtime ngừng sử dụng không phải duy nhất với Lambda. Bạn phải nâng cấp code dùng Python 3.7 hoặc Node.js 14 khi các phiên bản ngôn ngữ ngày đến hết vòng đời, bất kể dịch vụ tính toán nào mà code của bạn đang chạy. Lambda có thể giúp việc này dễ dàng hơn bằng cách theo dõi các runtime bạn đang dùng và cung cấp thông báo ngừng hoạt động.

Bài viết này chứa các cân nhắc và best practices cho việc quản lý các runtime ngừng hoạt động và nâng cấp khi sử dụng Lambda. Đáp ứng các kĩ thuật này giúp quản lý nâng cấp runtime dễ hơn, đặc biệt khi làm việc với số lượng lớn các function.

Xác định Lambda runtime

Khi bạn triển khai function dưới dạng .zip file lưu trữ, bạn chọn một runtime khi bạn tạo function. Để thay đổi runtime, bạn có thể thay đổi cấu hình function của bạn.

Lambda giữ các runtime được quản lý cập nhật bằng cách đảm nhận trách nhiệm vận hành vá lỗi runtime bằng các bản cập nhật bảo mật, sử lỗi, tính năng mới, tăng cường hiệu năng, và hỗ trợ các phát hành phiên bản thứ yếu. Các cập nhật runtime được công bố thành các phiên bản runtime. Lambda áp dụng cập nhật runtime cho function bằng chuyển các function từ phiên bản runtime sớm hơn đến phiên bản mới nhất.

Bạn có thể điều khiển cách các function nhận các cập nhật này sử dụng các điều khiển quản lý runtime. Các phiên bản runtime và cập nhật runtime áp dụng các cập nhật bản vá cho một Lambda runtime được cho. Lambda không tự động nâng cấp function giữa các phiên bản runtime chính, ví dụ từ nodejs14.x thành nodejs18.x.

Với một function được xác định dạng một container image, bạn chọn một runtime và bản phân phối Linux khi ban jtaoj container image. Hầu hết các người dùng bắt đầu với một trong các Lambda base container image, mặc dù bạn có thể xây dựng riêng image riêng từ đầu. Để thay đổi runtime, bạn tạo một container image mới từ một base container image khác.

Tại sao Lambda ngừng hoạt động các runtime?

Lambda ngừng hoạt động một runtime khi các người bảo trì ngôn ngữ runtime đánh dấu ngôn ngữ end-of-life hoặc các cập nhật bảo mật không còn sẵn nữa.

Trong hầu hết trường hợp, ngày kết thúc của một phiên bản ngôn ngữ hoặc hệ điều hành được công bố trước rất tốt. Chính sách ngừng hoạt động runtime Lambda cho end-of-life các lịch trình cho mỗi ngôn ngữ mà Lambda hỗ trợ. Lambda thông bán cho bạn bằng email hoặc thông qua Personal Health Dashboard nếu bạn đang dùng một runtime được lên kế hoạch cho ngừng hoạt động.

Lambda runtime ngừng hoạt động xảy ra trong một vài giai đoạn. Lambda đầu tiên chặn việc tạo mới các function dùng runtime được cho. Lambda sau đó cũng chặn cập nhật các function đang có sử dụng runtime không hỗ trợ, ngoài từ cập nhật một runtime được hỗ trợ. Lambda không chặn việc thực thi của function sử dụng các runtime đã ngừng hoạt động. Các thực thi function sử tiếp tục vô thời hạn sau khi runtime đạt đến kết thúc hỗ trợ.

Lambda đang mở rộng chu kỳ các thông báo ngừng hoạt động từ 60 ngày sau khi ngừng hoạt động lên 180 ngày. Trước đó, chặn các khởi tạo function mới được diễn ra khi ngừng hoạt động và chặn các thay đổi đến các function đang có sau 30 ngày. Chặn khởi tạo function mới đang diễn ra 30 ngày sau khi ngừng hoạt động, và chặn các thay đổi đến function đang có 60 ngày sau.

Lambda thỉnh thoảng làm chậm việc ngừng hoạt động của một Lambda runtime cho một chu kỳ giới hạn bên ngoài ngày kết thúc hỗ trợ  của phiên bản ngôn ngữ mà runtime hỗ trợ. Trong chu kỳ này, Lambda chỉ áp dụng các bản vá bảo mật đến runtime OS. Lambda không áp dụng vá bảo mật cho ngôn ngữ lập trình runtime sau khi chúng đến ngày ngừng hỗ trợ.

Lambda có thể tự động nâng cấp runtime của tôi?

Chuyển từ một phiên bản chính sang một phiên bản khác có nguy cơ trở thành một thay đổi đáng kể. Một vài thư viện và các phụ thuộc trong một ngôn ngữ có các kế hoạch ngừng hoạt động và không hỗ trợ các phiên bản của ngôn ngữ một thời điểm nào trong quá khứ. Chuyển các function sang runtime mới có thể ảnh hưởng tiềm tàng các production workload mở rộng lớn mà khách hàng phụ thuộc.

Vì Lambda không thể đảm bảo tương thích giữa các phiên bản ngôn ngữ chính, nâng cấp Lambda runtime được dùng bởi một function là một hoạt động khách hàng điều khiển.

Các phiên bản Lambda function

Bạn có thể dùng các phiên bản function để quản lý triển khai function của bạn. Trong Lambda, bạn tạo code và các thay đổi cấu hình cho phiên bản function mặc định được gọi là $LATEST. Khi bạn công bố phiên bản function, Lambda tạo một bản lưu của code, runtime, và cấu hình function để bảo trì trải nghiệm nhất quản cho các người dùng của phiên bản function. Khi bạn gọi một function, bạn có thể xác định phiên bản sử dụng hoặc gọi phiên bản $LATEST. Các phiên bản Lambda function được yêu cầu khi sử dụng Provisioned Concurrency or SnapStart.

Một vài nhà phát triển sử dụng một quá trình tự động đánh phiên bản bằng việc tạo một phiên bản function mỗi lần họ triển khai một thay đổi. Kết quả là trong nhiều phiên bản của function, chỉ có một phiên bản thực chất được sử dụng.

Trong khi Lambda áp dụng các thay đổi runtime đến các phiên bản đã phát hành, bạn không thể thay đổi phiên bản runtime chính cho một phiên bản đã được công bố, ví dụ từ Node.js 16 lên Node.js 20. Để thay đổi runtime cho function, bạn phải thay đổi phiên bản $LATEST, sau đó tạo một phiên bản function được công bố mới nếu cần. Nó nghĩa là các phiên bản khác nhau của một function có thể sử dụng các runtime khác nhau. Hình sau cho thấy cùng một function với phiên bản 1 sử dụng Node.js 14.x và phiên bản 2 dùng Node.js 18.x.

Đảm bảo bạn tạo một quy trình bảo trì cho việc xóa các phiên bản function không dùng tới mà, nó cũng ảnh hưởng tới hạn ngạch vùng lưu trữ Lambda.

Quản lý nâng cấp function runtime

Quản lý các nâng cáp function runtime nên là một phần của vòng đời phân phối phần mềm của bạn, theo cách tương tự bạn làm với các cập nhật phụ thuộc và bảo mật. Bạn cần hiểu function nào được chủ động dùng trong tổ chức. Các tổ chức có thể tạo các ưu tiên dựa trên hồ sơ bảo mật và/hoặc mức sử dụng function. Bạn có thể sử dụng các cơ chế giao tiếp giống nhau mà bạn đã dùng để xử lý các lỗ hổng bảo mật.

Xác định các function bị ảnh hưởng

Có nhiều công cụ có sẵn để kiểm tra cấu hình Lambda runtime và xác định function nào và các phiên bản đã được công bố đang được dùng. Xóa một function hoặc phiên bản function không sử dụng nữa là cách đơn giản nhất để tránh runtime ngừng hoạt động.

Bạn có thể xác định các function dùng các phiên bản đã ngừng hoặc sắp ngừng hoạt động bằng AWS Trusted Advisor. Sử dụng AWS Lambda Functions Using Deprecated Runtimes check, trong hạng mục Security cung cấp thông báo 120 ngày

Trusted Advisor quét tất cả phiên bản của các function của bạn, bao gồm $LATEST và các phiên bản đã công bố.

AWS Command Line Interface (AWS CLI) có thể liệt kê toàn bộ các function trong một Region cụ thể đang sử dụng một runtime cụ thể. Để tìm tất cả function trong tài khoản của bạn, lặp lại lệnh sau cho mỗi AWS Region và tài khoản. Thay các thông số <REGION> và <RUNTIME> với giá trị của bạn. Thông số –function-version ALL trả về toàn bộ các phiên bản function; loại bỏ thông số này để trả về mỗi phiên bản $LATEST.

aws lambda list-functions –function-version ALL –region <REGION> –output text –query “Functions[?Runtime=='<RUNTIME>’].FunctionArn”

Bạn có thể dùng AWS Config để tạo một cái nhìn về cấu hình của các tài nguyên trong tài khoản của bạn và cũng lưu bản sao dữ liệu cấu hình vào  Amazon S3. Các truy vấn AWS Config không hỗ trợ các phiên bản function đã công bố, chúng chỉ có thể truy vấn phiên bản  $LATEST.

Bạn có thể dùng Amazon AthenaAmazon QuickSight để tạo các bảng điều khiển để trực quan hóa dữ liệu AWS Config. Để tìm hiểu thêm, ghé hướng dẫn học tập  Implementing governance in depth for serverless applications.

Có một số cách bạn có thể theo dõi mức sử dụng Lambda function.

Bạn có thể dùng số liệu  Amazon CloudWatch khám phá để thấy Lambda by runtime và theo dõi số liệu Invocations trong chu kỳ mặc định 15 tháng lưu trữ số liệu CloudWatch.

Bạn có thể bật nhật ký dữ liệu sự kiện AWS CloudTrail để ghi nhật ký một sư kiện mỗi lần Lambda function được gọi. Nó giúp bạn hiểu các danh tính nào đang gọi function và mức độ thường xuyên của việc thực thi.

AWS Cost and Usage Reports có thể hiển thị function nào đang phát sinh chi phí và đang sử dụng.

Mức sử dụng giới hạn runtime

AWS CloudFormation Guard là một công cụ đánh giá mã nguồn mở để xác nhận các mẫu IaC. Tạo các chính sách luật để đảm bảo các nhà phát triển chỉ chọn runtime được chấp nhận. Xem thêm Proactive Controls with AWS CloudFormation Guard.

Các quy tắc AWS Config cho phép bạn kiểm tra các cài đặt của Lambda function về runtime thảo các giá trị mong muốn. Xem thêm thông tin các quy tắc này trước khi triển khai, Proactive Controls with AWS Config. Bạn có thể đánh cờ các function thành không tuân thủ khi các chính sách quản trị của bạn phát triển. Xem thêm Detective Controls with AWS Config.

Lambda hiện tại không có các service control policies (SCP) để chặn việc tạo function dựa trên runtime.

Các best practice nâng cấp

Sử dụng các công cụ IaC để xây dựng và quản lý các function Lambda của bạn có thể giúp dễ dàng quản lý các nâng cấp.

Đảm bảo bạn chạy kiểu trả các function khi phát triển ở local. Bao gồm tự động kiểm tra là một phần của các CI/CD pipeline để cung cấp tự tin trong các nâng cấp runtion. Khi phát hành các nâng cấp function, bạn có thể sử dụng weighted aliases để chuyển thông lượng giữa hai phiên bản function khi bạn giám sát các lỗi và thất bại.

Sử dụng runtime sau khi ngừng hoạt động

AWS khuyên một cách mạnh mẽ bạn nâng cấp các function lên một runtime đã hỗ trợ trước khi ngừng hoạt động để tiếp tục các lợi ích từ các tính năng vá lỗi bảo mật, sử lỗi, và các runtime mới nhất. Trong khi việc ngừng hoạt động không ảnh hưởng tới thực thi function, bạn sẽ dùng một runtime không được hỗ trợ, có thể không vá các lỗ hổng bảo mật. Function của bạn sau cùng có thể ngừng hoạt động, ví dụ do  chứng chỉ hết hạn.

Lambda chặn khởi tạo function và thay đổi function sử dụng runtime ngừng hoạt động. Để tạo hoặc cập nhật function sau khi các hoạt động này bị chặn, hãy liên hệ AWS Support

Kết luận

Lambda đang ngừng hoạt động một số runtime phổ biển sau một vài tháng kế tiếp, phản ánh sự kết thúc của các phiên bản ngôn ngữ đang hoạt động và Amazon LInux 1. Bài viết này cân nhắc để quản lý các nâng cấp  Lambda function runtime.

Để xem thêm các tài liệu học serverless, ghé Serverless Land.

Leave a comment