首页 > 解决方案 > 如何在 aws lambda 中部署在 zend expressive 中创建的 API?

问题描述

我创建了一个 Zend 富有表现力的应用程序,它基本上公开了一些 API。我现在想将它部署到 AWS Lambda。快速轻松地重构代码(或有其他替代方案)以部署它的最佳方法是什么?我是 AWS 的新手。

标签: aws-lambdamezzio

解决方案


我假设您已经找到了答案,因为这个问题已经超过五个月了。但我将我在最近的研究中发现的内容以相同的标准发布。请注意,您至少需要对 AWS IAM、Lambda、API Gateway 的方式有所了解,才能按照我在下面描述的步骤进行操作。另请注意,在这项研究期间,我只部署了 liminas/mezzio 框架应用程序,您需要做更多的工作来部署真正的应用程序,因为它可能需要 AWS 环境中的数据库和存储支持,这可能需要相应地调整您的应用程序.

可以使用 AWS 中对自定义运行时的支持来执行 PHP 应用程序。您可以查看这篇AWS 博客文章,了解如何完成它,但它没有涵盖任何特定的 PHP 框架。

然后我发现了这个项目,它提供了在无服务器环境中运行 PHP 应用程序所需的所有工具。你可以通过他们的文档来了解事情是如何工作的。

为了让 liminas/mezzio(zend 表达项目的新名称)skeltopn 应用程序正常工作,我遵循了bref 文档中给出的laravel 教程。首先我安装了 bref 包使用

composer require bref/bref

然后我根据文档在项目的根文件夹中创建了 serverless.yml 文件,并对其进行了一些调整,如下所示。

service: myapp-serverless

provider:
     name: aws
     region: eu-west-1 # Change according to the AWS region you use
     runtime: provided

plugins:
     - ./vendor/bref/bref

package:
     exclude:
         - node_modules/**
         - data/**
         - test/**

functions:
     api:
          handler: public/index.php
          timeout: 28 # in seconds (API Gateway has a timeout of 29 seconds)
          memorySize: 512 # Memory size for the AWS lambda function. Default is 1024MB
          layers:
               - ${bref:layer.php-73-fpm}
          events:
               -   http: 'ANY /'
               -   http: 'ANY /{proxy+}'

然后我遵循了bref 文档中给出的部署指南,即使用无服务器框架来部署应用程序。您可以在此处查看如何在您的系统上安装无服务器框架,并在此处查看需要如何配置它。

要安装我用过的 servrelessnpm install -g serverless

配置我用过的工具serverless config credentials --provider aws --key <key> --secret <secret>。请注意,此处使用的此密钥需要管理员访问 AWS 环境。

然后serverless deploy命令会将您的应用程序部署到 AWS 环境。

上述命令的结果将为您提供一个 API 网关端点,您的应用程序/api 将使用该端点。这旨在作为 PHP 无服务器应用程序的起点,并且可能需要完成许多其他工作才能让真正的应用程序在那里工作。


推荐阅读