This project demonstrates a proof-of-concept serverless full-text search solution built with Apache Lucene and Quarkus framework.
✔️ No servers
✔️ No fixed costs
✔️ Low (250-300ms) cold starts
ℹ️ Cost can be controlled via several factors:
- EFS' Elastic throughput mode cost more $$, but scales better up and down
- Lambda's Provisioned Concurrency provides faster, more consistent first request times but costs more $$
- Lambda memory is kept ~256mb, tune based on index size and observed speeds. Note: vCPU is allocated proportional to memory.
Please note that the project is not ready for production since I haven't tested it under a prolonged load and to be honest interfaces need to be nicer.
Read the blog post about it here
- Serverless framework >= 1.56.1
- AWS account
-
Replace region, vpc id and subnets in the
serverless.yml
file -
Deploy the stack
sls deploy
-
Don't forget to remove it if you're not planning to use it
sls remove
URL: https://<api-id>.execute-api.<region>.amazonaws.com/dev/index
HTTP method: POST
Example request body:
{
"indexName": "books",
"documents": [
{
"name": "The Foundation",
"author": "Isaac Asimov"
}
]
}
URL: https://<api-id>.execute-api.<region>.amazonaws.com/dev/query
HTTP method: POST
Example request body:
{
"indexName": "books",
"query": "author:isaac"
}
Example response body:
{
"totalDocuments": "1",
"documents": [
{
"author": "Isaac Asimov",
"name": "The Foundation"
}
]
}
./mvnw clean package