Hướng dẫn can i run php on lambda? - tôi có thể chạy php trên lambda không?

Tại Re: Invent 2020, AWS đã thông báo rằng bạn có thể đóng gói và triển khai các hàm AWS Lambda dưới dạng hình ảnh container. Bao bì AWS Lambda Chức năng dưới dạng hình ảnh container mang lại một số lợi ích đáng chú ý cho các nhà phát triển chạy Runtimes tùy chỉnh, chẳng hạn như PHP. Bài đăng trên blog này giải thích những lợi ích đó và cho thấy cách sử dụng hỗ trợ hình ảnh container mới cho các chức năng Lambda để xây dựng các ứng dụng PHP không có máy chủ.

Tổng quan

Nhiều nhà phát triển PHP quen thuộc với các ứng dụng xây dựng như các container để tạo ra một tạo tác di động để triển khai dễ dàng hơn. Các ứng dụng đóng gói dưới dạng container giúp duy trì các phiên bản PHP nhất quán, phiên bản gói và cài đặt cấu hình trên nhiều môi trường.

Hỗ trợ hình ảnh container mới cho Lambda cho phép bạn sử dụng công cụ container quen thuộc để xây dựng các ứng dụng của bạn. Nó cũng cho phép bạn chuyển các ứng dụng của mình sang mô hình điều khiển sự kiện không có máy chủ. Điều này mang lại lợi ích của việc không có cơ sở hạ tầng để quản lý, khả năng mở rộng tự động và thanh toán thanh toán cho mỗi lần sử dụng.

Những lợi thế của một mô hình hướng sự kiện cho các ứng dụng PHP được giải thích trên loạt blog của Blog The Serverless Lamp Stack. Nó khám phá các khái niệm, phương thức và lý do để tạo các ứng dụng không có máy chủ với PHP. Các mẫu kiến ​​trúc và giới hạn dịch vụ trong loạt blog này áp dụng cho các chức năng được đóng gói bằng cả định dạng lưu trữ hình ảnh container và zip, với một số ngoại lệ chính:

Lưu trữ zip Hình ảnh container
Kích thước gói tối đa 250 MB10 GB
Lambda Lớp Được hỗ trợBao gồm trong hình ảnh
Phần mở rộng Lambda Được hỗ trợBao gồm trong hình ảnh

Phần mở rộng Lambda

Thời gian chạy tùy chỉnh với hình ảnh container

Đối với các thời gian chạy tùy chỉnh như PHP, Lambda cung cấp hình ảnh cơ sở chứa hệ điều hành Amazon Linux hoặc Amazon Linux 2 cần thiết. Mở rộng điều này để bao gồm thời gian chạy của riêng bạn bằng cách triển khai API thời gian chạy Lambda trong tệp bootstrap.

  1. Trước khi hỗ trợ hình ảnh container cho Lambda, thời gian chạy tùy chỉnh được đóng gói bằng định dạng .zip. Điều này yêu cầu nhà phát triển phải:
  2. Thiết lập môi trường Amazon Linux tương thích với môi trường thực hiện Lambda.
  3. Cài đặt phụ thuộc biên dịch và biên dịch một phiên bản của PHP.
  4. Lưu nhị phân PHP được biên dịch cùng với tệp bootstrap và gói dưới dạng .zip.
  5. Xuất bản .zip dưới dạng lớp thời gian chạy.

Thêm lớp thời gian chạy vào hàm Lambda.

Bất kỳ chỉnh sửa nào cho thời gian chạy tùy chỉnh như các gói mới, phiên bản PHP, mô -đun hoặc phụ thuộc yêu cầu quá trình được lặp lại. Quá trình này có thể tốn thời gian và dễ bị lỗi.

Tạo thời gian chạy PHP tùy chỉnh bằng cách sử dụng hỗ trợ hình ảnh container mới cho Lambda có thể đơn giản hóa việc thay đổi môi trường thời gian chạy. Dockerfiles cho phép bạn có một quy trình xây dựng đầy đủ kịch bản, nhanh hơn và di động mà không cần thiết lập môi trường Amazon Linux.

  • Kho lưu trữ GitHub này chứa thời gian chạy PHP tùy chỉnh cho các hàm Lambda được đóng gói dưới dạng hình ảnh container. Dockerfile sau đây sử dụng hình ảnh cơ sở cho Amazon Linux do AWS cung cấp. Các hướng dẫn thực hiện như sau:
  • Cài đặt các gói Linux trên toàn hệ thống (zip, curl, tar).
  • Tải xuống và biên dịch PHP.
  • Tải xuống và cài đặt Trình quản lý phụ thuộc của nhà soạn nhạc và phụ thuộc.
  • Di chuyển các nhị phân PHP, bootstrap và phụ thuộc của nhà cung cấp vào một thư mục mà Lambda có thể đọc được.
#Lambda base image Amazon Linux
FROM public.ecr.aws/lambda/provided as builder 
# Set desired PHP Version
ARG php_version="7.3.6"
RUN yum clean all && \
    yum install -y autoconf \
                bison \
                bzip2-devel \
                gcc \
                gcc-c++ \
                git \
                gzip \
                libcurl-devel \
                libxml2-devel \
                make \
                openssl-devel \
                tar \
                unzip \
                zip

# Download the PHP source, compile, and install both PHP and Composer
RUN curl -sL https://github.com/php/php-src/archive/php-${php_version}.tar.gz | tar -xvz && \
    cd php-src-php-${php_version} && \
    ./buildconf --force && \
    ./configure --prefix=/opt/php-7-bin/ --with-openssl --with-curl --with-zlib --without-pear --enable-bcmath --with-bz2 --enable-mbstring --with-mysqli && \
    make -j 5 && \
    make install && \
    /opt/php-7-bin/bin/php -v && \
    curl -sS https://getcomposer.org/installer | /opt/php-7-bin/bin/php -- --install-dir=/opt/php-7-bin/bin/ --filename=composer

# Prepare runtime files
# RUN mkdir -p /lambda-php-runtime/bin && \
    # cp /opt/php-7-bin/bin/php /lambda-php-runtime/bin/php
COPY runtime/bootstrap /lambda-php-runtime/
RUN chmod 0755 /lambda-php-runtime/bootstrap

# Install Guzzle, prepare vendor files
RUN mkdir /lambda-php-vendor && \
    cd /lambda-php-vendor && \
    /opt/php-7-bin/bin/php /opt/php-7-bin/bin/composer require guzzlehttp/guzzle

###### Create runtime image ######
FROM public.ecr.aws/lambda/provided as runtime
# Layer 1: PHP Binaries
COPY --from=builder /opt/php-7-bin /var/lang
# Layer 2: Runtime Interface Client
COPY --from=builder /lambda-php-runtime /var/runtime
# Layer 3: Vendor
COPY --from=builder /lambda-php-vendor/vendor /opt/vendor

COPY src/ /var/task/

CMD [ "index" ]

Đặt điểm vào container.

Để triển khai chức năng Lambda này, hãy làm theo các hướng dẫn trong kho Github.

Tất cả các hướng dẫn liên quan đến thời gian chạy được lưu trong Dockerfile, điều này làm cho thời gian chạy tùy chỉnh đơn giản hơn để quản lý, cập nhật và kiểm tra. Bạn có thể thêm các gói Linux bổ sung bằng cách nối vào lệnh yum install. Để cài đặt các phiên bản PHP thay thế, hãy thay đổi đối số php_version. Nhập các mô -đun PHP bổ sung bằng cách thêm vào lệnh biên dịch.

Xem ứng dụng hoàn chỉnh trong cây tệp sau:
┣ runtime/
┃ ┗ bootstrap
┣ src/
┃ ┗ index.php
┗ Dockerfile

dự án/ ┣ thời gian chạy/ ┃ bootstrap ┣ src/ ┃ index.php ┗ dockerfile

Mã chức năng Lambda được lưu trữ trong thư mục SRC trong một tệp có tên index.php. Điều này chứa hàm Lambda Handler chỉ số ().bootstrap file is in the ‘runtime’ directory. This uses the Lambda runtime API to communicate with the Lambda execution environment.

Một tệp bootstrap nằm trong thư mục ’thời gian chạy. Điều này sử dụng API thời gian chạy Lambda để liên lạc với môi trường thực hiện Lambda.shebang hash sequence at the beginning of the bootstrap script instructs Lambda to run the file with the PHP executable, set by the Dockerfile.

Trình tự băm Shebang ở đầu tập lệnh Bootstrap hướng dẫn Lambda chạy tệp với thực thi PHP, do Dockerfile đặt ra.environment variables used in the bootstrap are set by the Lambda execution environment when running in the AWS Cloud. When running locally, the Lambda Runtime Interface Emulator (RIE) sets these values.

#!/var/lang/bin/php

Tất cả các môi trường được sử dụng trong bootstrap được đặt bởi môi trường thực thi Lambda khi chạy trong đám mây AWS. Khi chạy cục bộ, Trình giả lập giao diện Lambda RunTime (RIE) đặt các giá trị này.

Thử nghiệm cục bộ với Lambda Rie

Đây là một proxy cho API thời gian chạy và mở rộng của Lambda. Nó hoạt động như một máy chủ web nhẹ, chuyển đổi các yêu cầu HTTP thành các sự kiện JSON và duy trì tính tương đương chức năng với API thời gian chạy Lambda trong đám mây AWS. Điều này cho phép các nhà phát triển kiểm tra các chức năng cục bộ bằng các công cụ quen thuộc như Curl và Docker CLI.

  1. Xây dựng hình ảnh thời gian chạy tùy chỉnh trước đó bằng lệnh xây dựng Docker: docker build -t phpmyfuntion .
    docker build -t phpmyfuntion .
  2. Chạy chức năng cục bộ bằng lệnh docker chạy, liên kết với cổng 9000: docker run -p 9000:8080 phpmyfuntion:latest
    docker run -p 9000:8080 phpmyfuntion:latest
  3. Lệnh này bắt đầu một điểm cuối cục bộ tại: localhost:9000/2015-03-31/functions/function/invocations
    localhost:9000/2015-03-31/functions/function/invocations
  4. Đăng một sự kiện lên điểm cuối này bằng lệnh Curl. Tải trọng chức năng Lambda được cung cấp bằng cách sử dụng cờ -D. Đây là đối tượng JSON hợp lệ theo yêu cầu của Trình giả lập giao diện thời gian chạy: curl "http://localhost:9000/2015-03-31/functions/function/invocations" -d '{"queryStringParameters": {"name":"Ben"}}'
    curl "http://localhost:9000/2015-03-31/functions/function/invocations" -d '{"queryStringParameters": {"name":"Ben"}}'
  5. Một phản hồi trạng thái 200 được trả về:
    Hướng dẫn can i run php on lambda? - tôi có thể chạy php trên lambda không?

Xây dựng các ứng dụng web với hình ảnh container bref

BREF là lớp Lambda thời gian chạy nguồn mở cho PHP. Sử dụng lớp BREF-FPM, bạn có thể xây dựng các ứng dụng với các khung PHP truyền thống như Symfony và Laravel. Việc triển khai BREF của giao thức FASTCGI trả về phản hồi HTTP thay vì phản hồi JSON. Khi sử dụng định dạng lưu trữ ZIP để gói các chức năng Lambda, thời gian chạy tùy chỉnh của Bref, được cung cấp cho chức năng như một lớp lambda. Các chức năng được đóng gói dưới dạng hình ảnh container không hỗ trợ thêm các lớp lambda vào cấu hình chức năng. Ngoài các lớp thời gian chạy, Bref còn cung cấp một số hình ảnh docker. Những hình ảnh này sử dụng API thời gian chạy Lambda để tạo thành máy khách giao diện thời gian chạy giao tiếp với môi trường thực hiện Lambda.

Ví dụ sau đây cho thấy cách soạn một Dockerfile sử dụng hình ảnh container BREF PHP-74-FPM:

# Uses PHP 74-fpm.0, as the base image
FROM bref/php-74-fpm
# download composer for dependency management
RUN curl -s https://getcomposer.org/installer | php
# install bref using composer
RUN php composer.phar require bref/bref
# copy the project files into a Location that the Lambda service can read from
COPY . /var/task
#set the function handler entry point
CMD _HANDLER=index.php /opt/bootstrap
  1. Dòng đầu tiên đặt hình ảnh cơ sở để sử dụng BREF/PHP-74-FPM.
  2. Nhà soạn nhạc, Trình quản lý phụ thuộc cho PHP được cài đặt.
  3. Trình soạn thảo Lệnh yêu cầu được sử dụng để thêm gói BREF vào tệp Composer.json.
  4. Các tệp dự án sau đó được sao chép vào thư mục /var /nhiệm vụ, trong đó mã chức năng chạy từ đó.
  5. Trình xử lý chức năng được đặt cùng với tệp bootstrap Bref.

Các bước để xây dựng và triển khai hình ảnh này đến Cơ quan đăng ký container đàn hồi Amazon là giống nhau cho bất kỳ thời gian chạy nào và được giải thích trong bài đăng trên blog thông báo này.

Sự kết luận

Hỗ trợ hình ảnh container mới cho các chức năng Lambda cho phép các nhà phát triển đóng gói các chức năng Lambda của & NBSP; 10 GB & NBSP; có kích thước. Sử dụng định dạng hình ảnh container và Dockerfile có thể giúp xây dựng và cập nhật các chức năng dễ dàng hơn với thời gian chạy tùy chỉnh như PHP.

Các nhà phát triển có thể bao gồm các phiên bản ngôn ngữ cụ thể, mô -đun và phụ thuộc gói. Hình ảnh cơ sở của Amazon Linux và Amazon Linux 2 cung cấp cho các nhà phát triển một điểm khởi đầu để tùy chỉnh thời gian chạy. Với trình giả lập giao diện Lambda RunTime, nó đơn giản hơn cho các nhà phát triển kiểm tra các chức năng Lambda cục bộ. Các nhà phát triển PHP có thể sử dụng các hình ảnh của bên thứ ba hiện có, chẳng hạn như BREF-FPM, để tạo các ứng dụng web trong một chức năng Lambda duy nhất.

Truy cập serverlessland.com để biết thêm thông tin về việc xây dựng các ứng dụng PHP không có máy chủ.

Tôi có thể chạy PHP trên AWS Lambda không?

Trước đây, chúng tôi đã thấy cách sử dụng AWS Lambda làm lưu trữ web cho các ứng dụng web hoàn chỉnh. Nhưng chúng ta cũng có thể chạy các chức năng PHP theo hướng sự kiện trên AWS Lambda. Viết chức năng rất hữu ích để xử lý các sự kiện và dữ liệu từ các dịch vụ AWS khác.we can also run event-driven PHP functions on AWS Lambda. Writing functions is very useful to process events and data from other AWS services.

Bạn có thể chạy một trang web trên Lambda không?

Họ có thể phục vụ blog của bạn, hoặc một trang đích, hoặc một trang web của công ty đơn giản với một vài trang và một vài hình thức để tạo khách hàng tiềm năng.Bất kỳ loại HTML/CSS/JS nào cũng có thể được phục vụ bởi AWS Lambda hoặc các triển khai tương tự của các chức năng không có máy chủ.Lambda cũng có thể phục vụ phía bên kia của một trang web: API.Any sort of HTML/CSS/JS can be served by AWS Lambda or similar implementations of serverless functions. Lambda can also serve the other side of a website: the API.

Lambda có thể sử dụng ngôn ngữ nào?

AWS Lambda tự nhiên hỗ trợ Java, Go, PowerShell, Node.js, C#, Python và Ruby Code và cung cấp API thời gian chạy cho phép bạn sử dụng bất kỳ ngôn ngữ lập trình bổ sung nào cho các chức năng của bạn.Vui lòng đọc tài liệu của chúng tôi về sử dụng nút.JS, Python, Java, Ruby, C#, Go và PowerShell.Java, Go, PowerShell, Node. js, C#, Python, and Ruby code, and provides a Runtime API which allows you to use any additional programming languages to author your functions. Please read our documentation on using Node. js, Python, Java, Ruby, C#, Go, and PowerShell.

Hàm Lambda trong PHP là gì?

Hàm ẩn danh là một hàm mà không có bất kỳ tên do người dùng xác định.Một chức năng như vậy cũng được gọi là chức năng đóng hoặc lambda.Đôi khi, bạn có thể muốn một chức năng sử dụng một lần.Đóng cửa là một chức năng ẩn danh đóng cửa môi trường được xác định.Bạn cần chỉ định sử dụng từ khóa trong đó.a function without any user defined name. Such a function is also called closure or lambda function. Sometimes, you may want a function for one time use. Closure is an anonymous function which closes over the environment in which it is defined. You need to specify use keyword in it.