Aws lambda php laravel

Tôi muốn triển khai Serverless Microservices[PHP] bằng AWS Lambda cho một trong các dự án của mình. Qua nghiên cứu, tôi tìm thấy một số gói hiện có thể thực hiện nhiệm vụ này

Nội dung chính Hiển thị

Tôi tò mò về quy trình bên trong bộ chứa lambda. Vì vậy, tôi quyết định làm điều đó một mình

Vì vậy, hãy bắt đầu cuộc phiêu lưu lưu…

điều kiện tiên quyết

  • Tài khoản AWS
  • Kiến thức cơ bản về AWS lambda, CloudWatch và API gateway

Chúng tôi sẽ tạo một lớp thời gian chạy trong AWS lambda

  • nhị phân PHP
  • run time. php
  • khởi động

Và chúng tôi sẽ tham khảo nó trong hàm lambda

Run time PHP

Chúng tôi đang sử dụng guzzlehttp để xử lý các yêu cầu lambda đến

Bạn có thể cài đặt nó bằng cách sử dụng,

composer require guzzlehttp/guzzle

run time in. php, thêm phụ thuộc nhà cung cấp cho guzzlehttp

require __DIR__ . '/vendor/autoload.php';

Sau đó, tạo phương thức getNextRequest[] để ghi lại các yêu cầu lambda. Trong phương pháp này, chúng tôi sẽ khởi tạo ứng dụng khách guzzlehttp và gửi yêu cầu tới AWS lambda

function getNextRequest[]
{
$client = new \GuzzleHttp\Client[];
return $client->get['//' . $_ENV['AWS_LAMBDA_RUNTIME_API'] . '/2018-06-01/runtime/invocation/next'];
}

Sau này, thêm một phương thức để gửi phản hồi tới AWS lambda

function sendResponse[$invocationId, $response]
{
$client = new \GuzzleHttp\Client[];
$client->post[
'//' . $_ENV['AWS_LAMBDA_RUNTIME_API'] . '/2018-06-01/runtime/invocation/' . $invocationId . '/response',
['body' => json_encode[$response]]
];
}

AWS_LAMBDA_RUNTIME_API là biến môi trường mặc định của AWS lambda, chúng ta không cần thiết lập. Tôi sẽ giải thích sau, tại sao chúng ta nên gửi phản hồi JSON tới AWS Lambda

Cuối cùng, sử dụng vòng lặp do-while, vòng lặp này sẽ chạy cho đến khi môi trường của AWS Lambda tiếp tục hoạt động. Sau đó, call both two method on

do {      $request = getNextRequest[];      $invocationId = $request->getHeader['Lambda-Runtime-Aws-Request-Id'][0];      $payLoad =  json_decode[[string] $request->getBody[], true];      $data = [];      sendResponse[$invocationId, $data];}while[true]

Dữ liệu ở đây là một mảng trống, vì vậy hãy chuẩn bị dữ liệu để gửi phản hồi tới AWS Lambda

Create a directory. php file. Nó chứa một mã PHP đơn giản mà chúng tôi muốn chạy trong AWS lambda. Bạn có thể thêm mã của mình và chuyển kết quả dưới dạng $response vào thời gian chạy. php

Bây giờ chúng tôi sẽ đưa nó vào thời gian chạy. php as,

require_once $_ENV['LAMBDA_TASK_ROOT'].'/index.php';

Sau đó $data standard as after,

$headers['Content-type'] = "text/html; charset=UTF-8";
$statusCode = 200;
$content = $response;

Tôi đã chọn Loại nội dung là văn bản/html, vì tôi muốn chế độ xem HTML để phản hồi của mình. Bạn có thể lấy các loại nội dung theo yêu cầu của bạn

$data sẽ giống như thế này. Chúng tôi sẽ mã hóa nó bằng cách sử dụng json_encode của PHP trong sendResponse[] để nhận phản hồi JSON

________số 8

The full code of run time. php sẽ giống như bên dưới,

________số 8

To done time run. php trong môi trường Lambda, chúng ta cần phải có nhị phân PHP. Khi tôi cần giao diện UI, tôi sẽ sử dụng PHP_CGI. Chúng ta có thể sử dụng PHP nếu không yêu cầu giao diện

nhị phân PHP

Tôi đã xây dựng mã nhị phân PHP bằng amazonlinux. docker 2 hình ảnh. You can find Full Code of it in Dockerfile

Bootstrap

Nó chứa một lệnh để thực thi thời gian chạy. php

Các tệp của Lớp nằm trong thư mục /opt và các tệp của Hàm nằm trong thư mục /var/task

require __DIR__ . '/vendor/autoload.php';
0

Một lần nữa, LAMBDA_TASK_ROOT là biến env đã được xác định trước của Lambda, có giá trị là thư mục gốc của hàm lambda là /var/task

Bước cuối cùng

Tạo lớp Lambda và hàm lambda bằng AWS-CLI và khai thác mã PHP. Triển khai. sh bao gồm một kịch bản của nó

Tôi đã tạo một repo GitHub cho serverless-php, bao gồm ví dụ về hàm lambda

Sau khi triển khai cả lớp và chức năng, nó sẽ như bên dưới,

Lớp AWS Lambda

Hàm AWS Lambda

Hàm Lambda có một lớp thời gian chạy PHP như,

Tham chiếu các lớp trong hàm AWS Lambda

Bây giờ là lúc đang chạy hàm Lambda đã được khai thác

Hàm Lambda đã được mở và kiểm tra nó. Nếu mọi thứ đều ổn, nó sẽ hiển thị kết quả như sau,

Phản hồi hàm Lambda

Nếu chúng ta muốn sử dụng cổng API có chức năng Lambda, Như đã đề cập ở đây tại Phương thức phản hồi, phản hồi phải ở định dạng JSON

Bạn có thể định cấu hình CloudWatch để theo dõi nhật ký của các ứng dụng PHP

Thời gian chạy tùy chỉnh PHP của chúng tôi cũng cho phép phát triển khai thác các ứng dụng PHP Laravel và CodeIgniter bằng cách thực hiện một số cấu hình nhỏ như thay đổi trình điều khiển Phiên bản, Bộ nhớ cache và Nhật ký

AWS Lambda có thể sử dụng PHP không?

Trước đây, chúng tôi đã biết cách sử dụng AWS Lambda làm dịch vụ 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 hàm PHP hướng sự kiện trên AWS Lambda . Chức năng viết 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.

Làm cách nào để gọi hàm AWS Lambda từ PHP?

Cách dễ nhất để thiết lập và chạy nhanh chóng là sử dụng Aws\Lambda\LambdaClient. factory[] và cung cấp hồ sơ thông tin xác thực của bạn [thông qua tùy chọn hồ sơ]

Chủ Đề