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ố 8The full code of run time. php sẽ giống như bên dưới,
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';
0Mộ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ơ]