java - LocalStackContainer 集成测试 lambda
问题描述
有没有一种方法可以(集成)使用 testcontainers 和以下 LocalStackContainer 为 AWS 测试 Lambda:
new LocalStackContainer(DockerImageName.parse('localstack/localstack:0.11.6'))
.withServices(LocalStackContainer.Service.LAMBDA)
具体来说,我如何将 Lambda“上传”到本地运行的服务,以便我可以触发和测试它?
解决方案
一旦LocalStackContainer
启动,您可以在容器内执行命令来设置您的基础设施。LocalStack 提供awslocal
二进制文件来创建任何 AWS 资源。
在您的测试中,您可以有一个@BeforeAll
步骤来使用您的容器引用并创建所有内容。
以下示例针对 S3 和 SQS 执行此操作(来自此博客文章的参考):
@Testcontainers
@SpringBootTest
public class YourLocalStackIT {
@Container
static LocalStackContainer localStack = new LocalStackContainer("0.11.6")
.withServices(S3, SQS)
.withEnv("DEFAULT_REGION", "eu-central-1");
@BeforeAll
static void beforeAll() throws IOException, InterruptedException {
localStack.execInContainer("awslocal", "sqs", "create-queue", "--queue-name", QUEUE_NAME);
localStack.execInContainer("awslocal", "s3", "mb", "s3://" + BUCKET_NAME);
}
private static final String QUEUE_NAME = "order-event-test-queue";
private static final String BUCKET_NAME = "order-event-test-bucket";
// ... actual test
}
您现在可以将其用作模板来准备您的 AWS Lambda 函数。
.zip
关于源代码上传,我想将您的 Lambda 版本也挂载或复制到您的容器中然后在内部访问它是有意义的。
可以像下面这样创建 NodeJS lambda:
awslocal lambda create-function \
--region eu-central1 \
--function-name your-api \
--runtime nodejs8.10 \
--handler lambda.apiHandler \
--memory-size 128 \
--zip-file fileb://api-handler.zip
推荐阅读
- multithreading - 访问文件的进程/线程信息
- three.js - bufferedGeometry 上的三个 js 滚动网格颜色和 Z 位置
- python - 根据不同的列创建带有标记颜色的线图
- python - pyspark - 从日期列创建一个季度作为季度的列
- python - 输出与输出不同。我究竟做错了什么?
- jquery - DataTables - 从模态表单中获取值
- c# - 注册事件处理程序的简写
- php - 为什么我的关系船在 PHP Phalcon 中总是返回 null?
- networking - 检查SSH隧道是否打开并从其他终端关闭它
- java - Eclipse 控制台不显示最终结果