Terraform cài đặt các phụ thuộc Python

Khi tôi lần đầu tiên nghe nói về AWS Lambda, tôi đã khá bối rối không biết nó là gì và đã cố gắng sử dụng nó để đào tạo một mô hình ML đơn giản nhưng gặp khó khăn với giới hạn thực thi trong 5 phút. Tua đi vài năm nữa, tôi tin rằng Lambda đã phát triển rất nhiều và mọi người cũng hiểu hơn về các hệ thống hướng sự kiện và điện toán không có máy chủ. Nó đã trở thành một phần của nhiều ứng dụng hiện đại và kiến ​​trúc dữ liệu

tại lại. Invent 2018, Lambda đã được nâng cấp mạnh mẽ với thời gian chạy tùy chỉnh và tăng giới hạn thời gian chạy thực thi lên 15 phút. Lambda Layers cũng được phát hành cho phép bạn chia sẻ các phần phụ thuộc phổ biến để giảm bớt quy mô triển khai và cập nhật lambda. Tuy nhiên, AWS vẫn chưa giải quyết được nhu cầu về các bước thân thiện để đưa vào các gói python không bản địa như Pandas

Các cách tiếp cận rắc rối để đưa vào các gói bên ngoài…

Hiện tại, bạn phải nén hàm Lambda và các phần phụ thuộc tương thích với Linux hoặc tải các phần phụ thuộc của bạn lên dưới dạng Lớp Lambda. Nếu bạn đã từng làm quen với Google Cloud Functions và Azure Functions trước đây thì bạn sẽ biết rằng có thể dễ dàng như viết một danh sách mong muốn trong requirements.txt

Để thêm độ phức tạp, một số gói Python cần biên dịch các phần mở rộng C hoặc C++ (các gói như Numpy và Pandas). Điều này có thể hơi rắc rối nếu bạn muốn sử dụng máy macOS hoặc Windows của mình để pip install -t . pandas, sau đó nén chúng cho Lambda Layers, một môi trường Amazon Linux

Có một số cách để đưa vào các phần phụ thuộc tương thích với Linux cho dù đó là thông qua Serverless hay sử dụng Phiên bản EC2. Bây giờ, nếu bạn đã đọc một số blog của tôi trước đây, thì tôi thực sự thích sử dụng Lambdas trong Hackathons và vì thời gian là điều cốt yếu nên tôi muốn chỉ cho bạn cách dễ nhất và nhanh nhất về cách tôi đưa các phần phụ thuộc của Python vào dưới dạng Lớp Lambda bằng cách sử dụng Docker

5 bước đơn giản

1. Xây dựng

Hy vọng rằng bạn đã thiết lập Docker nhưng nếu chưa thì hãy chắc chắn làm điều đó trước. Điều đầu tiên bạn sẽ làm là sử dụng Amazon Linux làm hình ảnh cơ sở và tạo một Dockerfile từ đó với một vài tiện ích, python3. 7 và Virtualenv

FROM amazonlinux:2.0.20191016.0RUN yum install -y python37 && \
yum install -y python3-pip && \
yum install -y zip && \
yum clean all
RUN python3.7 -m pip install --upgrade pip && \
python3.7 -m pip install virtualenv

Chạy các lệnh bên dưới để tạo Dockerfile của bạn bằng thẻ

usr> docker build -f "<filename>.Dockerfile" -t lambdalayer:latest .

2. Chạy

Bạn sẽ có thể nhìn thấy những hình ảnh bằng cách thực hiện docker images. Sau đó, bạn muốn bash vào container của bạn

usr> docker run -it --name lambdalayer lambdalayer:latest bash

3. Cài đặt

Tạo một môi trường ảo mới trong vùng chứa của bạn để cách ly môi trường python của bạn và sử dụng lại cùng một vùng chứa mà không phải lo lắng về việc phá vỡ cài đặt toàn cầu. Bạn có thể tạo vùng chứa cho mỗi phụ thuộc nhưng thời gian là điều cốt yếu ở đây…

bash> python3.7 -m venv pandas

Tôi đặt tên cho nó là gấu trúc, bạn có thể gọi nó là bất cứ thứ gì bạn muốn nhưng hãy nhớ kích hoạt nó, cài đặt (các) gói của bạn vào một thư mục cụ thể, sau đó hủy kích hoạt nó sau

bash> source pandas/bin/activate
(pandas) bash> pip install pandas -t ./python
(pandas) bash> deactivate

4. Bưu kiện

Các gói phải được cài đặt cùng với các phụ thuộc của chúng trong thư mục python (hoặc thư mục cụ thể của bạn). Bây giờ, bạn có thể nén thư mục đó dưới dạng python.zip và thoát khỏi vùng chứa. Bạn sẽ cần sao chép thư mục đã nén vào môi trường cục bộ của mình để có thể tải nó lên Lớp Lambda hoặc S3

bash> zip -r python.zip ./python/usr> docker cp lambdalayer:python.zip ./Desktop/

5. Tải lên

Nếu tệp nén của bạn lớn hơn 50mb thì bạn sẽ cần tải tệp đó lên S3 thay vì tải tệp nén trực tiếp lên trong Lớp Lambda. Đảm bảo ghi lại URL đối tượng S3

Vậy là xong, bây giờ bạn có Pandas (và Numpy) để sử dụng như một phần cho Python Lambda của bạn dưới dạng Lớp và Nếu bạn muốn tạo gói triển khai thì hãy đảm bảo bạn thêm mã hàm lambda của mình vào thư mục đã nén dưới dạng tệp

usr> docker build -f "<filename>.Dockerfile" -t lambdalayer:latest .
0

Hạn chế của các lớp Lambda

Có một vài hạn chế mà bạn cần lưu ý và điều này bao gồm

  1. Bạn chỉ có thể sử dụng tối đa 5 lớp cho mỗi Lambda
  2. Kích thước của tất cả các lớp của bạn được giải nén không thể vượt quá 250mb
  3. Các lớp được gắn vào thư mục /opt trong môi trường thực thi của chức năng, vì vậy hãy đảm bảo Xếp lớp các chức năng của bạn đúng cách nếu bạn sắp có nhiều hơn một lớp
Triển khai Lambda

Vui lòng xem bài viết của tôi về cách triển khai Lambda (với Pandas) lên AWS bằng Serverless hoặc AWS SAM

Về tôi

Tôi thích viết các bài báo trung bình và đóng góp cho cộng đồng chia sẻ kiến ​​thức. Ngoài việc thử các công thức nấu ăn mới, tôi còn giúp các doanh nghiệp xây dựng các giải pháp dữ liệu và đám mây. Hãy kết nối với tôi và nói xin chào