Funqy AWS Lambda Binding
指南中将对快速入门代码进行介绍,向您展示如何将 Funqy 函数部署到 AWS Lambda。 可以使用 AWS Lambda Java 运行时部署 Funqy 函数,或者在需要更小的内存占用和更快的冷启动时间时,您可以构建原生可执行文件并使用 Lambda 自定运行时。 :iokays-category: quarkus :iokays-path: modules/ROOT/pages/_includes/extension-status.adoc :keywords: Quarkus, 中文文档, 编程技术
该技术被认为是 {extension-status}。 有关可能状态的完整列表,请查看我们的 FAQ entry. |
- Prerequisites
- Installing AWS bits
- The Quickstart
- The Code
- Choose Your Function
- Deploy to AWS Lambda Java Runtime
- Build and Deploy
- Create an Execution Role
- Extra Build Generated Files
- Create the function
- Invoke the function
- Update the function
- Deploy to AWS Lambda Custom (native) Runtime
- Examine the POM
- Integration Testing
- Testing with the SAM CLI
- Modifying
function.zip
- Custom
bootstrap
script
Prerequisites
include::./_includes/prerequisites.adoc[]* 阅读有关 Funqy Basics 的部分。这部分内容篇幅很短!* An Amazon AWS account* AWS CLI* AWS SAM CLI,用于本地测试
Funqy AWS Lambdas 构建于我们的 Quarkus AWS Lambda support 之上。 |
The Quickstart
克隆 Git 存储库: git clone $${quickstarts-base-url}.git
,或下载 $${quickstarts-base-url}/archive/main.zip[存档]。
解决方案位于 funqy-amazon-lambda-quickstart
directory 中。
The Code
代码没什么特别的,更重要的是没有什么内容是特定于 AWS 的。Funqy 函数可以部署到许多环境,而 AWS Lambda 就是其中之一。Java 代码实际上与 funqy-http-quickstart 的代码完全相同。
Choose Your Function
每个 AWS Lambda 部署只能导出一个 Funqy 函数。如果您在项目中定义了多个函数,那么您需要选择 Quarkus application.properties
中的函数:
quarkus.funqy.export=greet
您可以看到快速入门是如何在自己的 application.properties 中完成的。
或者,您可以在使用 aws
cli 创建 AWS Lambda 时设置 QUARKUS_FUNQY_EXPORT
环境变量。
Deploy to AWS Lambda Java Runtime
要想在 AWS Lambda 上运行您的 Funqy 函数,有一些步骤。快速入门 maven 项目会生成一个有用的脚本,用于创建、更新、删除和调用纯 Java 函数和原生部署。此脚本在构建时生成。
Build and Deploy
使用 Maven 构建项目:
quarkus build
./mvnw install
./gradlew build
这将编译和打包你的代码。
Create an Execution Role
查看 Getting Started Guide 以使用 AWS CLI 部署 Lambda。具体来说,请确保你已经创建了一个 Execution Role
。你将需要在你的个人资料或控制台窗口中定义一个 LAMBDA_ROLE_ARN
环境变量,或者,你可以在构建生成的 manage.sh
脚本中编辑并将角色值直接放在其中:
LAMBDA_ROLE_ARN="arn:aws:iam::1234567890:role/lambda-role"
Extra Build Generated Files
在你运行构建后,quarkus-funqy-amazon-lambda
扩展会生成一些额外的文件。这些文件在构建目录中:target/
用于 Maven,build/
用于 Gradle。
-
function.zip
- lambda 部署文件 -
manage.sh
——aws lambda cli 调用的包装器 -
bootstrap-example.sh
——原生部署示例引导脚本 -
sam.jvm.yaml
——(可选的)用于 sam cli 和本地测试 -
sam.native.yaml
——(可选的)用于 sam cli 和原生本地测试
Create the function
target/manage.sh
脚本用于使用 AWS Lambda Java 运行时管理你的 Funqy 函数。该脚本仅为你的方便提供。如果你想要了解用于创建、删除和更新你的函数的 aws 命令,请检查 manage.sh
脚本的输出。
manage.sh
支持四种操作:create
、delete
、update`和 `invoke
。
为了验证你的设置,你已经安装了 AWS CLI,执行了 AWS 访问密钥的 aws configure,并且设置了 |
以下载 usage
陈述,以及验证 AWS 配置:
sh target/manage.sh
你可以使用以下命令 create
你的函数:
sh target/manage.sh create
或者,如果你尚未在这个 shell 中定义 LAMBDA_ROLE_ARN
:
LAMBDA_ROLE_ARN="arn:aws:iam::1234567890:role/lambda-role" sh target/manage.sh create
不要更改处理程序开关。这必须硬编码为 io.quarkus.funqy.lambda.FunqyStreamHandler::handleRequest
。这个特殊的处理程序是 Funqy 与 AWS Lambda 的集成点。
如果有任何问题在创建函数时发生,你需要使用 delete
删除它,然后重新运行 create
命令。
sh target/manage.sh delete
命令也可以被叠加:
sh target/manage.sh delete create
Invoke the function
使用 invoke
命令来调用你的函数。
sh target/manage.sh invoke
示例函数使用通过 --payload
开关传递的输入,该开关指向项目根目录中的一个 JSON 文件。
使用 SAM CLI 还可以像这样本地调用函数:
sam local invoke --template target/sam.jvm.yaml --event payload.json
如果使用的是本机映像构建,则只需将模板名称替换为本机版本:
sam local invoke --template target/sam.native.yaml --event payload.json
Deploy to AWS Lambda Custom (native) Runtime
如果您想要 Funqy 函数更低的内存占用和更快的初始化时间,可以将 Java 代码编译为本机可执行文件。请确保使用 -Dnative
开关重建项目。
对于 Linux 主机,执行以下操作:
quarkus build --native
./mvnw install -Dnative
./gradlew build -Dquarkus.native.enabled=true
如果您在非 Linux 系统上进行构建,还需要传入一个属性,指示 Quarkus 使用 Docker 来构建,因为 AmazonLambda 需要 Linux 二进制文件。可以通过将此属性传入构建来实现: |
quarkus build --native --no-tests -Dquarkus.native.container-build=true
# The --no-tests flag is required only on Windows and macOS.
./mvnw install -Dnative -DskipTests -Dquarkus.native.container-build=true
./gradlew build -Dquarkus.native.enabled=true -Dquarkus.native.container-build=true
上述命令都将编译并创建一个本机可执行文件。它还生成一个 zip 文件 target/function.zip
。此 zip 文件包含重命名为 bootstrap
的本机可执行映像文件。这是 AWS LambdaCustom(提供)Runtime 的要求。
此处的说明与上面完全相同,只有一处更改:您需要将 native
添加为 manage.sh
脚本的第一个参数:
sh target/manage.sh native create
与上面一样,可以堆叠命令。唯一的要求是,如果您希望使用本机映像构建,则第一个参数必须是 native
。该脚本将负责管理本机映像函数部署所需的其余详细信息。
如果您想知道执行 aws 命令以创建、删除和更新函数,请检查 manage.sh
脚本的输出。
关于本机创建命令要注意的一件事是 aws lambda create-function
调用必须设置一个特定的环境变量:
--environment 'Variables={DISABLE_SIGNAL_HANDLERS=true}'
Integration Testing
Funqy AWS Lambda 支持利用 Quarkus AWS Lambda 测试框架,以便您可以对 Funqy 函数进行单元测试。这适用于 JVM 和本机模式。该测试框架提供与 SAM CLI 类似的功能,而无需 Docker 的开销。
如果您打开 FunqyTest.java,您会看到该测试复制了 AWS 执行环境。
package org.acme.funqy;
import io.quarkus.amazon.lambda.test.LambdaClient;
import io.quarkus.test.junit.QuarkusTest;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;
@QuarkusTest
public class FunqyTest {
@Test
public void testSimpleLambdaSuccess() throws Exception {
Friend friend = new Friend("Bill");
Greeting out = LambdaClient.invoke(Greeting.class, friend);
Assertions.assertEquals("Hello Bill", out.getMessage());
}
}
Testing with the SAM CLI
AWS SAM CLI 允许您在模拟的 Lambda 环境中在自己的笔记本电脑上本地运行函数。这需要安装 docker。这是一个可选途径,如果您选择使用,应予以考虑。否则,Quarkus JUnit 集成应该可以满足您的大部分需求。
已为 JVM 和本机执行模式生成了一个 starter 模板。
运行以下 SAM CLI 命令以在本地测试函数,传入适当的 SAM template
。 event
参数采用任何 JSON 文件,在本例中为示例 payload.json
。
sam local invoke --template target/sam.jvm.yaml --event payload.json
还可以使用 sam.native.yaml
模板在本地测试本机映像:
sam local invoke --template target/sam.native.yaml --event payload.json