aws-lambda - 如何在 aws lambda 中部署在 zend expressive 中创建的 API?
问题描述
我创建了一个 Zend 富有表现力的应用程序,它基本上公开了一些 API。我现在想将它部署到 AWS Lambda。快速轻松地重构代码(或有其他替代方案)以部署它的最佳方法是什么?我是 AWS 的新手。
解决方案
我假设您已经找到了答案,因为这个问题已经超过五个月了。但我将我在最近的研究中发现的内容以相同的标准发布。请注意,您至少需要对 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 无服务器应用程序的起点,并且可能需要完成许多其他工作才能让真正的应用程序在那里工作。
推荐阅读
- javascript - 我试图将数字放入数组而不放入重复项
- jquery - 在规则中使用 php 会话值进行自定义 jquery 验证
- html - HTML导航栏空白问题
- kubernetes - minio direct-csi 与版本“storage.k8s.io/v1”中的种类“CSIDriver”不匹配
- file-upload - 允许在 Media-Wiki 中上传任何文件类型?
- javascript - 如何在不同文件的函数中使用来自文件的函数中的变量
- jquery - 如何使用jQuery在发票中使用计数总行实现计数总折扣值和总gst值
- java - Java 数据库连接失败,预期响应
- python - 如何向 DateEntry 添加其他值?
- ruby-on-rails - Rails 设计-jwt 会话存储