PHP gọi hàm lambda

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ó có thể thực hiện nhiệm vụ này

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…

đ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 chứa

  • nhị phân PHP
  • thời gian chạy. php
  • khởi động

Và chúng tôi sẽ tham chiếu nó trong hàm lambda

Thời gian chạy 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

trong thời gian chạy. 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 ngừng hoạt động. Sau đó, gọi cả hai phương pháp trên

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]

Ở đây dữ liệu 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

Tạo một chỉ mục. tập tin php. 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 như,

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

Sau đó chuẩn bị $data như sau,

$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 cho phản hồi của mình. Bạn có thể lấy loại nội dung theo yêu cầu của bạn

$data sẽ trô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

Mã đầy đủ của thời gian chạy. php sẽ giống như bên dưới,

Chủ Đề