của Julian Wood | TRÊN 15 tháng 11 năm 2023| trong Amazon Athena , Amazon CloudWatch , Amazon QuickSight , AWS CloudFormation , AWS Config , Báo cáo chi phí và mức sử dụng AWS , AWS Lambda , AWS Personal Health Dashboard , AWS Trusted Advisor , Serverless | Liên kết cố định | Chia sẻ
Bài đăng này được viết bởi Julian Wood, Người ủng hộ nhà phát triển chính và Dan Fox, Kiến trúc sư giải pháp máy chủ chuyên gia chính.
AWS Lambda hỗ trợ nhiều ngôn ngữ lập trình thông qua việc sử dụng runtime. Lambda runtime cung cấp môi trường thực thi dành riêng cho ngôn ngữ, cung cấp hệ điều hành, hỗ trợ ngôn ngữ và các cài đặt bổ sung, chẳng hạn như biến môi trường và chứng chỉ mà bạn có thể truy cập từ mã chức năng của mình.
Bạn có thể sử dụng runtime được quản lý mà Lambda cung cấp hoặc xây dựng runtime của riêng bạn. Mỗi bản phát hành ngôn ngữ lập trình chính đều có runtime được quản lý riêng biệt, với mã định danh runtime duy nhất, chẳng hạn như python3.11 hoặc nodejs20.x.
Lambda tự động áp dụng các bản vá và bản cập nhật bảo mật cho tất cả runtime được quản lý và hình ảnh cơ sở vùng chứa tương ứng của chúng. Tự động vá runtime là một trong những tính năng mà khách hàng yêu thích nhất ở Lambda. Khi các bản vá này không còn nữa, Lambda sẽ ngừng hỗ trợ runtime. Trong vài tháng tới, Lambda sẽ ngừng sử dụng một số runtime phổ biến, do các phiên bản ngôn ngữ đang được sử dụng và Amazon Linux 1 đã hết tuổi thọ.
| runtime | Khấu hao |
| Node.js 14 | Ngày 27 tháng 11 năm 2023 |
| Node.js 16 | Ngày 11 tháng 3 năm 2024 |
| Python 3.7 | Ngày 27 tháng 11 năm 2023 |
| Java 8 (Amazon Linux 1) | Ngày 31 tháng 12 năm 2023 |
| Go 1.x | Ngày 31 tháng 12 năm 2023 |
| Ruby 2.7 | Ngày 07 tháng 12 năm 2023 |
| runtime tùy chỉnh (được cung cấp) | Ngày 31 tháng 12 năm 2023 |
Việc ngừng sử dụng runtime không chỉ xảy ra ở Lambda. Bạn phải nâng cấp mã bằng Python 3.7 hoặc Node.js 14 khi các phiên bản ngôn ngữ đó hết hạn sử dụng, bất kể mã của bạn đang chạy trên dịch vụ điện toán nào. Lambda có thể giúp thực hiện việc này dễ dàng hơn bằng cách theo dõi runtime bạn đang sử dụng và cung cấp thông báo ngừng sử dụng.
Bài đăng này chứa những điều cần cân nhắc và các phương pháp hay nhất để quản lý việc ngừng sử dụng và nâng cấp runtime khi sử dụng Lambda. Việc áp dụng các kỹ thuật này giúp việc quản lý nâng cấp runtime dễ dàng hơn, đặc biệt khi làm việc với số lượng lớn hàm.
Chỉ định Lambda runtime
Khi triển khai hàm của mình dưới dạng kho lưu trữ tệp .zip, bạn chọn runtime khi tạo hàm. Để thay đổi runtime, bạn có thể cập nhật cấu hình hàm của mình .
Lambda luôn cập nhật từng runtime được quản lý bằng cách đảm nhận trách nhiệm vận hành vá các runtime bằng các bản cập nhật bảo mật, sửa lỗi, tính năng mới, cải tiến hiệu suất và hỗ trợ cho các bản phát hành phiên bản nhỏ. Các bản cập nhật runtime này được xuất bản dưới dạng runtime versions . Lambda áp dụng các bản cập nhật runtime cho các hàm bằng cách di chuyển hàm từ phiên bản runtime cũ hơn sang phiên bản runtime mới.
Bạn có thể kiểm soát cách các hàm của mình nhận các bản cập nhật này bằng cách sử dụng trình điều khiển quản lý runtime . Các phiên bản runtime và bản cập nhật runtime áp dụng cho các bản cập nhật bản vá cho Lambda runtime nhất định. Lambda không tự động nâng cấp các chức năng giữa các phiên bản runtime ngôn ngữ chính, chẳng hạn như từ nodejs14.x lên nodejs18.x.
Đối với một hàm được xác định là hình ảnh vùng chứa, bạn chọn runtime và bản phân phối Linux khi tạo hình ảnh vùng chứa. Hầu hết khách hàng đều bắt đầu với một trong các hình ảnh vùng chứa cơ sở Lambda , mặc dù bạn cũng có thể xây dựng hình ảnh của riêng mình từ đầu. Để thay đổi runtime, bạn tạo hình ảnh vùng chứa mới từ hình ảnh vùng chứa cơ sở khác.
Tại sao Lambda không dùng runtime nữa?
Lambda không dùng runtime khi người bảo trì ngôn ngữ runtime đang được sử dụng đánh dấu ngôn ngữ của họ đã hết vòng đời hoặc các bản cập nhật bảo mật không còn khả dụng.
Trong hầu hết các trường hợp, ngày hết hạn sử dụng của phiên bản ngôn ngữ hoặc hệ điều hành đều được công bố trước. Chính sách ngừng sử dụng Lambda runtime đưa ra lịch trình hết vòng đời cho từng ngôn ngữ mà Lambda hỗ trợ. Lambda sẽ thông báo cho bạn qua email và qua Bảng điều khiển sức khỏe cá nhân nếu bạn đang sử dụng runtime đã được lên lịch ngừng sử dụng.
Việc ngừng sử dụng Lambda runtime diễn ra theo nhiều giai đoạn. Lambda trước tiên chặn việc tạo các hàm mới sử dụng runtime nhất định. Lambda sau đó cũng chặn việc cập nhật các hàm hiện có bằng cách sử dụng runtime không được hỗ trợ, ngoại trừ việc cập nhật lên runtime được hỗ trợ. Lambda không chặn lệnh gọi hàm sử dụng runtime không được dùng nữa. Việc gọi hàm tiếp tục vô thời hạn sau khi runtime kết thúc hỗ trợ.
Lambda sẽ kéo dài thời gian thông báo ngừng sử dụng từ 60 ngày trước khi ngừng sử dụng lên 180 ngày. Trước đây, việc chặn tạo chức năng mới xảy ra khi không dùng nữa và chặn cập nhật các chức năng hiện có 30 ngày sau đó. Việc chặn việc tạo các chức năng mới hiện diễn ra sau 30 ngày kể từ khi ngừng sử dụng và chặn các bản cập nhật cho các chức năng hiện có sau 60 ngày.
Lambda đôi khi trì hoãn việc ngừng sử dụng Lambda runtime trong một khoảng thời gian giới hạn sau ngày kết thúc hỗ trợ của phiên bản ngôn ngữ mà runtime hỗ trợ. Trong thời gian này, Lambda chỉ áp dụng các bản vá bảo mật cho hệ điều hành runtime. Lambda không áp dụng các bản vá bảo mật cho runtime ngôn ngữ lập trình sau khi chúng đến ngày kết thúc hỗ trợ.
Lambda có thể tự động nâng cấp runtime của tôi không?
Việc chuyển từ một phiên bản chính của runtime ngôn ngữ sang một phiên bản khác có nguy cơ trở thành một thay đổi đáng kể. Một số thư viện và phần phụ thuộc trong một ngôn ngữ có lịch trình không dùng nữa và không hỗ trợ các phiên bản của ngôn ngữ đã qua một thời điểm nhất định. Việc chuyển các chức năng sang runtime mới có thể tác động đến khối lượng công việc sản xuất quy mô lớn mà khách hàng phụ thuộc vào.
Vì Lambda không thể đảm bảo khả năng tương thích ngược giữa các phiên bản ngôn ngữ chính nên việc nâng cấp Lambda runtime mà một hàm sử dụng là hoạt động do khách hàng thực hiện.
Phiên bản hàm Lambda
Bạn có thể sử dụng các phiên bản chức năng để quản lý việc triển khai các chức năng của mình. Trong Lambda, bạn thực hiện các thay đổi về mã và cấu hình đối với phiên bản hàm mặc định, được gọi là $LATEST. Khi bạn xuất bản một phiên bản hàm, Lambda sẽ chụp nhanh mã, runtime và cấu hình hàm để duy trì trải nghiệm nhất quán cho người dùng phiên bản hàm đó. Khi bạn gọi một hàm, bạn có thể chỉ định phiên bản sẽ sử dụng hoặc gọi phiên $LATEST bản đó. Cần có phiên bản hàm Lambda khi sử dụng Tính đồng thời được cung cấp hoặc SnapStart .
Một số nhà phát triển sử dụng quy trình tạo phiên bản tự động bằng cách tạo phiên bản chức năng mới mỗi khi họ triển khai thay đổi. Điều này dẫn đến nhiều phiên bản của một chức năng, nhưng thực tế chỉ có một phiên bản duy nhất được sử dụng.
Mặc dù Lambda áp dụng các bản cập nhật runtime cho các phiên bản hàm đã xuất bản nhưng bạn không thể cập nhật phiên bản chính runtime cho phiên bản hàm đã xuất bản, chẳng hạn như từ Node.js 16 lên Node.js 20. Để cập nhật runtime cho một hàm, bạn phải cập nhật phiên bản $LATEST, sau đó tạo một phiên bản chức năng được xuất bản mới nếu cần thiết. Điều này có nghĩa là các phiên bản khác nhau của một hàm có thể sử dụng các runtime khác nhau. Phần sau đây cho thấy chức năng tương tự với phiên bản 1 sử dụng Node.js 14.x và phiên bản 2 sử dụng Node.js 18.x.
Phiên bản 1 sử dụng Node.js 14.x
Phiên bản 2 sử dụng Node.js 18.x
Đảm bảo bạn tạo quy trình bảo trì để xóa các phiên bản chức năng không sử dụng, điều này cũng ảnh hưởng đến hạn mức bộ nhớ Lambda của bạn .
Quản lý nâng cấp runtime chức năng
Quản lý các bản nâng cấp runtime chức năng phải là một phần trong vòng đời phân phối phần mềm của bạn, theo cách tương tự như cách bạn xử lý các phần phụ thuộc và bản cập nhật bảo mật. Bạn cần hiểu chức năng nào đang được sử dụng tích cực trong tổ chức của mình. Các tổ chức có thể tạo mức độ ưu tiên dựa trên hồ sơ bảo mật và/hoặc cách sử dụng chức năng. Bạn có thể sử dụng các cơ chế giao tiếp tương tự mà bạn có thể đang sử dụng để xử lý các lỗ hổng bảo mật.
Triển khai các biện pháp bảo vệ chủ động để đảm bảo rằng nhà phát triển chỉ có thể tạo các hàm bằng runtime được hỗ trợ. Việc sử dụng cơ sở hạ tầng làm mã, quy trình CI/CD và các phương pháp kiểm thử mạnh mẽ giúp việc cập nhật runtime dễ dàng hơn.
Xác định các chức năng bị ảnh hưởng
Có sẵn các công cụ để kiểm tra cấu hình Lambda runtime và xác định chức năng nào cũng như phiên bản chức năng đã xuất bản nào đang thực sự được sử dụng. Xóa một chức năng hoặc phiên bản chức năng không còn được sử dụng là cách đơn giản nhất để tránh bị ngừng hoạt động trong runtime.
Bạn có thể xác định các hàm sử dụng runtime không được dùng nữa hoặc sắp không được dùng nữa bằng cách sử dụng AWS Trusted Advisor . Sử dụng chức năng kiểm tra AWS Lambda Functions Sử dụng runtime không dùng nữa , trong danh mục Bảo mật có thông báo trước 120 ngày.
Chức năng Lambda Trusted Advisor của AWS sử dụng runtime không còn được dùng nữa
Trusted Advisor quét tất cả các phiên bản chức năng của bạn, bao gồm $LATEST cả các phiên bản đã xuất bản.
Giao diện dòng lệnh AWS (AWS CLI) có thể liệt kê tất cả các chức năng trong một Khu vực cụ thể đang sử dụng runtime cụ thể. Để tìm tất cả các chức năng trong tài khoản của bạn, hãy lặp lại lệnh sau cho từng Khu vực và tài khoản AWS. Thay thế các tham số <REGION> và <RUNTIME>bằng các giá trị của bạn. Tham số này –function-version ALL khiến tất cả các phiên bản chức năng được trả về; bỏ qua tham số này để chỉ trả về phiên bản $LATEST.
bash
aws lambda list-functions –function-version ALL –region <REGION> –output text —query “Functions[?Runtime=='<RUNTIME>’].FunctionArn”
Bạn có thể sử dụng AWS Config để tạo chế độ xem cấu hình tài nguyên trong tài khoản của mình và cũng có thể lưu trữ dữ liệu ảnh chụp nhanh cấu hình trong Amazon S3 . Truy vấn AWS Config không hỗ trợ các phiên bản chức năng đã xuất bản, chúng chỉ có thể truy vấn phiên $LATESTbản.
Sau đó, bạn có thể sử dụng Amazon Athena và Amazon QuickSight để tạo bảng thông tin trực quan hóa dữ liệu AWS Config. Để biết thêm thông tin, hãy xem hướng dẫn tìm hiểu Triển khai quản trị chuyên sâu cho các ứng dụng không có máy chủ .
Bảng điều khiển hiển thị dữ liệu AWS Config
Có một số cách để bạn có thể theo dõi việc sử dụng hàm Lambda.
Bạn có thể sử dụng trình khám phá số liệu của Amazon CloudWatch để xem Lambda theo runtime và theo dõi số liệu Lệnh gọi trong khoảng thời gian lưu giữ số liệu CloudWatch mặc định là 15 tháng.
Theo dõi các lệnh gọi trong số liệu của Amazon CloudWatch
Bạn có thể bật ghi nhật ký sự kiện dữ liệu AWS CloudTrail để ghi nhật ký sự kiện mỗi khi gọi hàm Lambda . Điều này giúp bạn hiểu danh tính nào đang gọi hàm và tần suất gọi chúng.
Báo cáo chi phí và mức sử dụng AWS có thể cho biết chức năng nào đang phát sinh chi phí và đang được sử dụng.
Hạn chế việc sử dụng runtime
AWS CloudFormation Guard là một công cụ đánh giá nguồn mở để xác thực cơ sở hạ tầng dưới dạng mẫu mã. Tạo các quy tắc chính sách để đảm bảo rằng nhà phát triển chỉ chọn runtime đã được phê duyệt. Để biết thêm thông tin, hãy xem Kiểm soát chủ động với AWS CloudFormation Guard .
Quy tắc AWS Config cho phép bạn kiểm tra xem cài đặt hàm Lambda cho runtime có khớp với các giá trị mong đợi hay không. Để biết thêm thông tin về cách chạy các quy tắc này trước khi triển khai, hãy xem Kiểm soát chủ động với AWS Config . Bạn cũng có thể phản ứng gắn cờ các chức năng là không tuân thủ khi chính sách quản trị của bạn phát triển. Để biết thêm thông tin, hãy xem Kiểm soát thám tử với AWS Config.
Lambda hiện không có chính sách kiểm soát dịch vụ (SCP) để chặn việc tạo chức năng dựa trên runtime
Nâng cấp các phương pháp hay nhất
Sử dụng cơ sở hạ tầng làm công cụ mã để xây dựng và quản lý các hàm Lambda của bạn, điều này có thể giúp quản lý các bản nâng cấp dễ dàng hơn.
Đảm bảo bạn chạy thử nghiệm các chức năng của mình khi phát triển cục bộ. Bao gồm các thử nghiệm tự động như một phần của quy trình CI/CD để mang lại sự tin cậy cho việc nâng cấp runtime của bạn. Khi triển khai nâng cấp chức năng, bạn có thể sử dụng bí danh có trọng số để chuyển lưu lượng truy cập giữa hai phiên bản chức năng khi bạn giám sát lỗi và lỗi.
Sử dụng runtime sau khi ngừng sử dụng
AWS đặc biệt khuyên bạn nên nâng cấp các chức năng của mình lên runtime được hỗ trợ trước khi ngừng sử dụng để tiếp tục hưởng lợi từ các bản vá bảo mật, bản sửa lỗi và tính năng runtime mới nhất. Mặc dù việc ngừng sử dụng không ảnh hưởng đến lệnh gọi hàm nhưng bạn sẽ sử dụng runtime không được hỗ trợ và có thể có các lỗ hổng bảo mật chưa được vá. Chức năng của bạn cuối cùng có thể ngừng hoạt động, chẳng hạn như do chứng chỉ hết hạn.
Lambda chặn việc tạo và cập nhật hàm cho các hàm sử dụng runtime không được dùng nữa. Để tạo hoặc cập nhật các chức năng sau khi các thao tác này bị chặn, hãy liên hệ với bộ phận Hỗ trợ AWS.
Phần kết luận
Lambda sẽ ngừng sử dụng một số runtime phổ biến trong vài tháng tới, phản ánh sự ngừng hoạt động của các phiên bản ngôn ngữ đang được sử dụng và Amazon Linux 1. Bài đăng này đề cập đến những điều cần cân nhắc khi quản lý nâng cấp runtime hàm Lambda.
Để biết thêm tài nguyên học tập phi máy chủ, hãy truy cập Serverless Land .