Tóm lại, PHP

Tôi muốn bắt đầu bằng cách giải thích rằng tôi sẽ cho rằng bạn đã quen thuộc với AWS và các chủ đề sau. Nếu không phải như vậy thì tôi khuyên bạn ít nhất hãy cố gắng hiểu những điều cơ bản của những chủ đề này trước khi cố gắng làm theo

  • Cổng API
  • CloudFront
  • EC2
  • ECR
  • Lambda
  • Đường 53
  • S3
  • không có máy chủ

Giới thiệu

Các trang web không có máy chủ trên AWS là một chủ đề phổ biến. Điều này được mong đợi vì việc lưu trữ một trang web không có máy chủ có thể mang lại nhiều lợi ích so với các giải pháp lưu trữ web truyền thống liên quan đến máy chủ ảo. Lợi ích như. khả năng mở rộng tốt hơn, chi phí thấp hơn và giảm độ trễ

https. //dashbird. io/blog/business-benefits-of-serverless/

Hầu hết các trang web không có máy chủ này đều dựa trên các công nghệ web tĩnh như JavaScript. Điều này cho phép giải pháp trang web không có máy chủ đơn giản nhất như hình bên dưới

Tóm lại, PHP

Vấn đề mà chúng tôi muốn giải quyết là kiến ​​trúc đơn giản này không hỗ trợ các công nghệ web động như ASP. NET, JSP hoặc PHP vẫn được sử dụng để xây dựng các trang web đáng kinh ngạc ngày nay. Các trang web như Etsy, Facebook và Slack

https. // bộ ba. dev/blog/công ty-sử dụng-php

Các trang web động có thể tận dụng AWS để có được dịch vụ lưu trữ không có máy chủ. Chỉ cần thêm một vài bước và một vài dịch vụ bổ sung. Hãy đi qua một giải pháp làm việc


Nói ngắn gọn

Trong kịch bản của PHP, có một dự án tuyệt vời tên là Bref, mà chúng ta có thể sử dụng để đơn giản hóa cấu hình của mình. Với Bref, chúng tôi có thể chạy các trang web PHP của mình trên Lambda thay vì dựa vào các dịch vụ như EC2

Để trích dẫn tài liệu của họ,

Bref là một dự án mã nguồn mở hỗ trợ đầy đủ PHP và các khung của nó cho AWS Lambda

Cách sử dụng

Cách triển khai đơn giản nhất là đóng gói trang web của chúng tôi dưới dạng hình ảnh vùng chứa và cuối cùng triển khai nó lên Lambda. Để tham chiếu một hình ảnh cho chức năng Lambda của chúng tôi, trước tiên chúng tôi cần tải hình ảnh của mình lên ECR. May mắn là AWS khiến việc tương tác với ECR trở nên vô cùng dễ dàng. Hãy đi qua các bước

  1. Tạo Dockerfile

    # reference bref as the base image
    FROM bref/php-74-fpm
    
    # install composer
    RUN curl -s https://getcomposer.org/installer | php
    
    # require bref
    RUN php composer.phar require bref/bref
    
    # copy contents into expected directory
    COPY . /var/task
    
    # set handler to our index
    CMD _HANDLER=index.php /opt/bootstrap
    

    https. // tài liệu. người đóng tàu. com/engine/reference/builder/
    https. //github. com/wheelers-websites/CloudGuruChallenge_20. 10/blob/master/php-api/Dockerfile

  2. Xác thực với ECR

    aws ecr get-login-password --region ${AWS_REGION} | docker login --username AWS --password-stdin "${AWS_ACCOUNT_ID}.dkr.ecr.${AWS_REGION}.amazonaws.com"
    

    https. //awscli. amazonaws. com/v2/tài liệu/api/mới nhất/tham chiếu/ecr/get-đăng nhập-mật khẩu. html
    https. // tài liệu. người đóng tàu. com/engine/reference/commandline/login/

  3. Xây dựng hình ảnh Docker của bạn

    docker build -t ${AWS_ECR_REPOSITORY} .
    

    https. // tài liệu. người đóng tàu. com/động cơ/tham chiếu/dòng lệnh/xây dựng/

  4. Gắn thẻ hình ảnh Docker của bạn

    docker tag "${AWS_ECR_REPOSITORY}:latest" "${AWS_ACCOUNT_ID}.dkr.ecr.${AWS_REGION}.amazonaws.com/${AWS_ECR_REPOSITORY}:latest"
    

    https. // tài liệu. người đóng tàu. com/động cơ/tham chiếu/dòng lệnh/thẻ/

  5. Đẩy hình ảnh Docker của bạn

    docker push "${AWS_ACCOUNT_ID}.dkr.ecr.${AWS_REGION}.amazonaws.com/${AWS_ECR_REPOSITORY}:latest"
    

    https. // tài liệu. người đóng tàu. com/engine/reference/commandline/push/

Tóm lại, PHP

Tìm các lệnh đẩy này được tùy chỉnh cho tài khoản của bạn trong bảng điều khiển ECR


Ngành kiến ​​​​trúc

Giờ đây, khi hình ảnh bộ chứa của chúng ta nằm trong ECR, chúng ta có thể tạo một hàm Lambda để tham chiếu nó

Tóm lại, PHP
Tóm lại, PHP

Sau khi hoàn thành, chúng ta cần sử dụng API Gateway để cung cấp điểm cuối cho chức năng của mình

Tóm lại, PHP

Sau đó, chúng tôi có thể tham chiếu điểm cuối đó dưới dạng nguồn gốc CloudFront để phục vụ trang web của chúng tôi

Tóm lại, PHP
Tóm lại, PHP

Cuối cùng, chúng tôi có thể tối ưu hóa kiến ​​trúc này bằng cách tải nội dung tĩnh của chúng tôi lên S3 và cung cấp nội dung đó với nguồn gốc riêng biệt

Tóm lại, PHP


CI/CD

Như chúng ta đều biết rằng các trang web thay đổi thường xuyên, tôi muốn đề cập ngắn gọn về Tích hợp liên tục và Triển khai liên tục. Tôi sẽ triển khai một quy trình để xây dựng và cập nhật hình ảnh vùng chứa trong ECR và trên Lambda khi các thay đổi về mã được đẩy vào kho lưu trữ Git. Điều này rất quan trọng để giữ cho môi trường của bạn hiện tại với kho lưu trữ Git của bạn đồng thời tránh triển khai thủ công. Triển khai thủ công dễ xảy ra lỗi và hoàn toàn có thể tránh được. Việc tạo hình ảnh và cập nhật ECR có thể dễ dàng được thực hiện bằng cách lặp lại các bước được nêu ở trên khi nguồn thay đổi trong tập lệnh. Làm theo các bước đó với một bước khác như bên dưới, chúng ta có thể tự động cập nhật chức năng Lambda

aws lambda update-function-code \
--function-name ${AWS_LAMBDA_FUNCTION} \
--image-uri "${AWS_ACCOUNT_ID}.dkr.ecr.${AWS_REGION}.amazonaws.com/${AWS_ECR_REPOSITORY}:latest" \
--region ${AWS_REGION}

Vào chế độ toàn màn hình Thoát chế độ toàn màn hình

https. //awscli. amazonaws. com/v2/tài liệu/api/mới nhất/tham chiếu/lambda/update-function-code. html

Nếu bạn chưa quen với CI/CD thì tôi khuyên bạn nên bắt đầu với những tài nguyên tuyệt vời này

  • Đường ống dẫn mã AWS
  • Hành động GitHub

Phần kết luận

Chúng tôi bắt đầu bằng cách thảo luận về vấn đề lưu trữ các trang web động bằng công nghệ không có máy chủ. Sau đó, chúng tôi đã thảo luận về Bref và Docker, cả hai đều giúp lưu trữ phiên bản PHP không có máy chủ. Sau đó, chúng tôi đi qua kiến ​​trúc cần thiết. Chúng tôi đã đẩy hình ảnh bộ chứa của mình sang ECR và triển khai mã PHP dưới dạng hàm Lambda. Sau đó, chúng tôi đã tạo một điểm cuối API Gateway để gọi hàm Lambda của mình qua HTTP. Cuối cùng, chúng tôi đã tải nội dung tĩnh của mình lên S3 và đặt cả hai nguồn gốc sau bản phân phối CloudFront. Để kết luận, tôi muốn nhắc lại rằng các trang web động có thể tận hưởng những lợi ích của serverless và tôi hoàn toàn tin rằng nó đáng để nỗ lực

SƠ LƯỢC PHP là gì?

Bref (có nghĩa là "ngắn gọn" trong tiếng Pháp) là gói Trình soạn thảo mã nguồn mở và giúp bạn triển khai các ứng dụng PHP lên AWS và chạy chúng trên AWS Lambda. Bref provides: documentation. PHP runtimes for AWS Lambda. deployment tooling.

AWS Lambda có thể chạy PHP không?

Trước đây, chúng ta đã 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 . Các 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.

Cách gọi hàm Lambda trong PHP?

Trong ví dụ trên, chúng tôi đã xác định hàm print_addition() và sau đó chuyển biến $add (hàm lambda) làm tham số. .
Gán hàm Lambda/Ẩn danh cho một Mảng
Truyền hàm đóng/hàm ẩn danh làm tham số – cách 1
Truyền hàm đóng/hàm ẩn danh làm tham số – cách 2

Các lớp AWS Lambda là gì?

Lớp Lambda là một kho lưu trữ chứa mã bổ sung, chẳng hạn như thư viện, phần phụ thuộc hoặc thậm chí là thời gian chạy tùy chỉnh . Khi bạn bao gồm một lớp trong một hàm, nội dung được trích xuất vào thư mục /opt trong môi trường thực thi.