Giới thiệu về các điều khiển quản lý runtime của AWS Lambda

Bài đăng này được viết bởi Jonathan Tuliani, Quản lý sản phẩm chính.

Hôm nay, AWS Lambda thông báo về các điều khiển quản lý thời gian chạy (runtime management controls) cung cấp nhiều khả năng quan sát và kiểm soát hơn khi Lambda áp dụng cập nhật thời gian chạy cho các chức năng của bạn. Lambda cũng thay đổi cách triển khai cập nhật thời gian chạy tự động đến các chức năng của bạn. Hai thay đổi này cùng cung cấp thêm tính linh hoạt trong cách bạn tận dụng các tính năng thời gian chạy mới nhất, cải tiến hiệu suất và cập nhật bảo mật.

Theo mặc định, tất cả các chức năng sẽ tiếp tục nhận cập nhật thời gian chạy tự động. Bạn không cần phải thay đổi cách sử dụng Lambda để tiếp tục được hưởng lợi từ tính bảo mật và đơn giản hóa hoạt động của các thời gian chạy được quản lý mà Lambda cung cấp. Các điều khiển thời gian chạy là khả năng tùy chọn dành cho khách hàng nâng cao yêu cầu kiểm soát hơn về các thay đổi thời gian chạy.

Bài đăng này giải thích những điều khiển quản lý thời gian chạy mới nào có sẵn và cách bạn có thể tận dụng tính năng mới này.

Tổng quan

Đối với mỗi runtime, Lambda cung cấp một môi trường thực thi quản lý. Điều này bao gồm hệ điều hành Amazon Linux cơ bản, runtime ngôn ngữ lập trình và SDK AWS. Lambda đảm nhận gánh nặng vận hành của việc áp dụng các bản vá và cập nhật bảo mật cho tất cả các thành phần này. Khách hàng cho biết họ rất đánh giá cao việc triển khai một hàm và để nó chạy trong nhiều năm mà không cần áp dụng bản vá. Với Lambda, việc vá lỗ hổng “chỉ hoạt động” tự động.

Lambda cố gắng cung cấp các cập nhật tương thích ngược với các hàm hiện có. Tuy nhiên, giống như tất cả các phần mềm khác, có trường hợp hiếm khi một bản vá có thể tiết lộ một vấn đề cơ bản với một chức năng hiện có phụ thuộc vào hành vi trước đó. Ví dụ, xem xét một lỗi trong một trong các gói OS runtime. Áp dụng một bản vá để sửa lỗi là sự lựa chọn đúng đắn cho đa số khách hàng và chức năng. Tuy nhiên, trong trường hợp hiếm khi, một chức năng có thể phụ thuộc vào hành vi trước đó (không chính xác). Khách hàng với các khối lượng công việc quan trọng đang chạy trong Lambda cho chúng tôi biết họ muốn có một cách để giảm thiểu ngay cả rủi ro nhỏ nhất của sự gián đoạn này.


Với việc ra mắt các điều khiển quản lý runtime, Lambda hiện cung cấp ba khả năng mới. Thứ nhất, Lambda cung cấp khả năng xem phiên bản patch nào của runtime mà chức năng của bạn đang sử dụng và khi nào các cập nhật runtime được áp dụng. Thứ hai, bạn có thể đồng bộ hóa các cập nhật runtime với việc triển khai chức năng. Điều này cung cấp cho bạn quyền kiểm soát khi Lambda áp dụng các cập nhật runtime và cho phép phát hiện sớm các không tương thích của cập nhật runtime hiếm gặp. Thứ ba, trong trường hợp hiếm gặp xảy ra không tương thích của cập nhật runtime, bạn có thể quay lại phiên bản runtime trước đó của chức năng của mình. Điều này giúp chức năng của bạn tiếp tục hoạt động và giảm thiểu sự gián đoạn, cung cấp thời gian để khắc phục không tương thích trước khi trở lại phiên bản runtime mới nhất.

Runtime identifiers and runtime versions

Các runtime của Lambda xác định các thành phần của môi trường thực thi trong đó mã chức năng của bạn chạy. Điều này bao gồm hệ điều hành (OS), runtime ngôn ngữ lập trình, biến môi trường và chứng chỉ. Đối với Python, Node.js và Ruby, runtime cũng bao gồm AWS SDK. Mỗi runtime của Lambda có một định danh runtime duy nhất, ví dụ như nodejs18.x hoặc python3.9. Mỗi định danh runtime đại diện cho một phiên bản chính khác nhau của ngôn ngữ lập trình.

Các runtime management controls giới thiệu khái niệm về phiên bản runtime của Lambda. Một phiên bản runtime là một phiên bản bất biến của một runtime cụ thể. Mỗi runtime của Lambda, chẳng hạn như Node.js 16 hoặc Python 3.9, bắt đầu với một phiên bản runtime ban đầu. Mỗi lần Lambda cập nhật runtime, nó thêm một phiên bản runtime mới vào runtime đó. Những cập nhật này bao gồm tất cả các thành phần của runtime (hệ điều hành, runtime ngôn ngữ, v.v.) và do đó sử dụng một hệ thống đánh số do Lambda xác định, độc lập với các số phiên bản được sử dụng bởi ngôn ngữ lập trình. Đối với mỗi phiên bản runtime, Lambda cũng công bố một hình ảnh cơ bản tương ứng cho các khách hàng đóng gói chức năng của mình dưới dạng hình ảnh container.

Các runtime identifier mới đại diện cho một phiên bản chính cho ngôn ngữ lập trình và đôi khi các thành phần runtime khác như hệ điều hành hoặc SDK. Lambda không thể đảm bảo tính tương thích giữa các runtime identifier, tuy nhiên đa phần bạn có thể nâng cấp các hàm của mình mà không cần sửa đổi nhiều. Bạn có thể kiểm soát khi nâng cấp các hàm của mình lên một runtime identifier mới. Ngược lại, các phiên bản runtime mới cho cùng một runtime identifier có mức độ tương thích ngược lại rất cao với các hàm hiện có. Theo mặc định, Lambda tự động áp dụng cập nhật runtime bằng cách chuyển các hàm từ phiên bản runtime trước đó sang một phiên bản runtime mới hơn.

Mỗi phiên bản runtime có một số phiên bản và một Amazon Resource Name (ARN). Bạn có thể xem phiên bản trong dòng nhật ký nền tảng mới, INIT_START. Lambda phát ra dòng nhật ký này mỗi khi tạo một môi trường thực thi mới trong quá trình khởi tạo khởi động lạnh.

INIT_START Runtime Version: python:3.9.v14 Runtime Version ARN: arn:aws:lambda:eu-south-1::runtime:7b620fc2e66107a1046b140b9d320295811af3ad5d4c6a011fad1fa65127e9e6I

INIT_START Runtime Version: python:3.9.v14 Runtime Version ARN: arn:aws:lambda:eu-south-1::runtime:7b620fc2e66107a1046b140b9d320295811af3ad5d4c6a011fad1fa65127e9e6I

Các phiên bản runtime cải thiện khả năng nhìn thấy các bản cập nhật quản lý runtime. Bạn có thể sử dụng dòng nhật ký INIT_START để xác định khi hàm chuyển từ một phiên bản runtime sang phiên bản runtime khác. Điều này giúp bạn điều tra xem bản cập nhật runtime có thể đã gây ra bất kỳ hành vi không mong muốn nào của hàm. Những thay đổi trong hành vi do các bản cập nhật runtime gây ra rất hiếm. Nếu hàm của bạn không hoạt động như mong đợi, nguyên nhân rất có thể là lỗi trong mã hàm hoặc cấu hình.

Runtime management modes

Với runtime management controls, bạn có thêm điều khiển hơn khi Lambda áp dụng các cập nhật runtime cho các hàm của mình. Bạn hiện có thể chỉ định một cấu hình quản lý runtime cho mỗi hàm. Bạn có thể đặt cấu hình quản lý runtime độc lập cho $LATEST và từng phiên bản hàm đã xuất bản.

Bạn có thể chỉ định một trong ba chế độ cập nhật runtime: auto, function update hoặc manual. Chế độ cập nhật runtime điều khiển thời điểm Lambda cập nhật phiên bản hàm cho một phiên bản runtime mới. Theo mặc định, tất cả các hàm đều nhận các cập nhật runtime tự động, các tùy chọn khác dành cho người dùng nâng cao trong các trường hợp cụ thể.

Chế độ tự động (Automatic)

Chế độ tự động là chế độ mặc định và là lựa chọn phù hợp nhất cho hầu hết khách hàng để đảm bảo rằng bạn tiếp tục được hưởng lợi từ các bản cập nhật phiên bản runtime. Chúng giúp giảm thiểu các chi phí hoạt động của bạn bằng cách cho phép Lambda chịu trách nhiệm về các cập nhật phiên bản runtime.

Trong khi Lambda luôn cung cấp các cập nhật phiên bản runtime tự động, bản phát hành này bao gồm một thay đổi về cách triển khai các cập nhật phiên bản runtime tự động. Trước đó, Lambda đã áp dụng các cập nhật phiên bản runtime cho tất cả các hàm trong mỗi khu vực, theo một trình tự triển khai khu vực theo khu vực. Với bản phát hành này, các hàm được cấu hình để sử dụng chế độ cập nhật runtime tự động bây giờ nhận các cập nhật runtime theo hai giai đoạn. Ban đầu, Lambda chỉ áp dụng phiên bản runtime mới cho các hàm được tạo mới hoặc được cập nhật. Sau khi giai đoạn ban đầu hoàn tất, Lambda sau đó áp dụng cập nhật runtime cho bất kỳ hàm còn lại được cấu hình để sử dụng chế độ cập nhật runtime tự động.

Việc triển khai hai giai đoạn này đồng bộ hóa các cập nhật phiên bản runtime với các cập nhật hàm cho khách hàng đang phát triển các hàm của họ. Điều này làm cho việc phát hiện và phản ứng với bất kỳ thay đổi không mong đợi nào trở nên dễ dàng hơn. Đối với các hàm không đang phát triển, chế độ tự động vẫn cung cấp các lợi ích hoạt động của các cập nhật runtime hoàn toàn tự động.

Function update

Ở chế độ cập nhật chức năng (function update), Lambda sẽ cập nhật phiên bản runtime mới nhất khi bạn thay đổi mã chức năng hoặc cấu hình. Điều này tương tự như giai đoạn đầu của chế độ tự động (auto mode). Sự khác biệt là, trong chế độ tự động, có giai đoạn thứ hai khi Lambda áp dụng cập nhật runtime cho các chức năng chưa được thay đổi. Trong chế độ cập nhật chức năng, nếu bạn không thay đổi một chức năng, nó sẽ tiếp tục sử dụng phiên bản runtime hiện tại mãi mãi. Điều này có nghĩa là khi sử dụng chế độ cập nhật chức năng, bạn phải thường xuyên cập nhật các chức năng để giữ cho runtime của chúng được cập nhật. Nếu bạn không thường xuyên cập nhật một chức năng, bạn nên sử dụng chế độ tự động cập nhật runtime.

Đồng bộ hóa cập nhật runtime với triển khai chức năng cho phép bạn kiểm soát khi nào Lambda áp dụng cập nhật runtime. Ví dụ, bạn có thể tránh áp dụng cập nhật trong các sự kiện quan trọng cho doanh nghiệp, chẳng hạn như một lần ra mắt sản phẩm hoặc bán hàng lễ.

Khi sử dụng với các pipelines CI / CD, chế độ cập nhật chức năng cho phép phát hiện và giảm thiểu sớm trong trường hợp hiếm gặp có sự không tương thích cập nhật runtime. Điều này đặc biệt hiệu quả nếu bạn tạo một phiên bản chức năng được xuất bản mới với mỗi triển khai. Mỗi phiên bản chức năng đã xuất bản ghi lại một bản sao tĩnh của mã chức năng và cấu hình, để bạn có thể quay trở lại phiên bản chức năng đã xuất bản trước đó nếu cần thiết. Sử dụng chế độ cập nhật chức năng mở rộng phiên bản chức năng đã xuất bản để cũng ghi lại phiên bản runtime. Điều này cho phép bạn đồng bộ hóa triển khai và rollback của toàn bộ môi trường thực thi Lambda, bao gồm mã chức năng, cấu hình và phiên bản runtime.

Manual

Trong trường hợp hiếm gặp mà một cập nhật runtime không tương thích với một trong các hàm của bạn. Với điều khiển quản lý thời gian chạy, bạn có thể quay trở lại một phiên bản runtime trước đó. Điều này giúp cho hàm của bạn tiếp tục hoạt động và giảm thiểu sự gián đoạn, đồng thời cho bạn thời gian để khắc phục sự không tương thích trước khi quay trở lại phiên bản runtime mới nhất.

Có hai cách để thực hiện quay trở lại phiên bản runtime trước đó. Bạn có thể sử dụng chế độ cập nhật hàm với một phiên bản hàm đã xuất bản để đồng bộ hóa quay trở lại mã, cấu hình và phiên bản runtime. Hoặc, cho các hàm sử dụng chế độ cập nhật runtime tự động mặc định, bạn có thể quay trở lại phiên bản runtime bằng cách sử dụng chế độ thủ công.

Chế độ cập nhật runtime thủ công cung cấp cho bạn toàn quyền kiểm soát phiên bản runtime mà hàm của bạn sử dụng. Khi bật chế độ thủ công, bạn phải chỉ định ARN của phiên bản runtime để sử dụng, mà bạn có thể tìm thấy từ dòng nhật ký INIT_START.

Lambda không áp đặt giới hạn thời gian sử dụng bất kỳ phiên bản runtime cụ thể nào. Tuy nhiên, AWS khuyến nghị sử dụng chế độ thủ công chỉ cho việc khắc phục ngắn hạn các vấn đề không tương thích về mã. Hãy đưa hàm của bạn trở lại chế độ tự động ngay khi bạn giải quyết được vấn đề. Những hàm sử dụng cùng phiên bản runtime trong một khoảng thời gian dài có thể dừng hoạt động do ví dụ như hết hạn chứng chỉ.

Sử dụng runtime management controls

Bạn có thể cấu hình các điều khiển quản lý runtime thông qua AWS Management Console của Lambda và Command Line Interface (CLI) của AWS. Bạn cũng có thể sử dụng các công cụ mã nguồn mô tả cơ sở hạ tầng như AWS CloudFormationAWS Serverless Application Model (SAM) của AWS.

Bảng điều khiển

Từ bảng điều khiển Lambda, điều hướng đến một hàm cụ thể. Bạn có thể tìm thấy các điều khiển quản lý thời gian thực trên tab Code, trong bảng Runtime settings. Mở rộng Runtime management configuration để xem chế độ cập nhật thời gian thực hiện tại và ARN phiên bản thời gian thực.

Cài đặt thời gian chạy

Để thay đổi chế độ cập nhật thời gian thực, chọn Edit runtime management configuration. Bạn có thể chọn giữa các chế độ cập nhật thời gian thực tự động, cập nhật hàm và cập nhật thời gian thực bằng tay.

Edit runtime management configuration (Auto)

Chỉ ở chế độ bằng tay, bạn cũng phải chỉ định ARN phiên bản thời gian thực.

Edit runtime management configuration (Manual)

AWS SAM

AWS SAM là một framework mã nguồn mở để xây dựng các ứng dụng serverless. Bạn có thể chỉ định các thiết lập quản lý runtime sử dụng thuộc tính RuntimeManagementConfig.

YAML

Resources:

  HelloWorldFunction:

    Type: AWS::Serverless::Function

    Properties:

      Handler: lambda_function.handler

      Runtime: python3.9

      RuntimeManagementConfig:

        UpdateOn: Manual

        RuntimeVersionArn: arn:aws:lambda:eu-west-1::runtime:7b620fc2e66107a1046b140b9d320295811af3ad5d4c6a011fad1fa65127e9e6

AWS CLI

Bạn cũng có thể quản lý các thiết lập quản lý thời gian chạy bằng AWS CLI. Bạn cấu hình các điều khiển quản lý thời gian chạy thông qua một lệnh riêng biệt là aws lambda put-runtime-management-config, thay vì aws lambda update-function-configuration.

Bash
aws lambda put-runtime-management-config –function-name <function_arn> –update-runtime-on Manual –runtime-version-arn <runtime_version_arn>

Để xem cấu hình quản lý runtime hiện có, sử dụng lệnh aws lambda get-runtime-management-config

Bash
aws lambda get-runtime-management-config –function-name <function_arn>

ARN phiên bản runtime hiện tại cũng được trả về bởi aws lambda get-functionvà aws aws lambda get-function-configuration

Kết luận

Các điều khiển quản lý thời gian chạy cung cấp cho bạn khả năng quản lý rõ ràng và linh hoạt hơn về thời điểm và cách thức Lambda áp dụng các bản cập nhật thời gian chạy cho các chức năng của bạn. Bạn có thể chỉ định một trong ba chế độ cập nhật: tự động, cập nhật chức năng hoặc thủ công. Các chế độ này cho phép bạn tiếp tục tận dụng việc sửa lỗi tự động của Lambda, đồng bộ hóa cập nhật thời gian chạy với các triển khai của bạn và quay trở lại phiên bản thời gian chạy trước đó trong trường hợp hiếm gặp mà bản cập nhật thời gian chạy ảnh hưởng tiêu cực đến chức năng của bạn.

Để biết thêm thông tin về các điều khiển quản lý thời gian chạy, hãy xem trang tài liệu của chúng tôi.

Đối với các tài nguyên học tập về không máy chủ khác, hãy truy cập Serverless Land.