Crates.io | srill |
lib.rs | srill |
version | 1.0.0 |
created_at | 2025-06-02 08:07:10.265186+00 |
updated_at | 2025-09-06 08:18:28.508333+00 |
description | Subscribe Redis and Invoke Lambda with cargo lambda, for Local development. |
homepage | |
repository | |
max_upload_size | |
id | 1697775 |
size | 49,233 |
Subscribe Redis and Invoke Lambda with cargo lambda, for Local development.
First, run cargo lambda watch:
cargo lambda watch
Start srill with multiple channel-lambda pairs:
srill --channels channel1=lambda-function1,channel2=lambda-function2,channel3=lambda-function3
Create a srill.toml
configuration file:
redis_url = "redis://localhost:6379"
[channels]
channel1 = "lambda-function1"
channel2 = "lambda-function2"
channel3 = "lambda-function3"
Then start srill:
srill --config srill.toml
Start srill:
srill <channel name> <lambda binary name>
Publishers should create and publish SQS event JSON:
use redis::Commands;
use srill::events::sqs::{SqsEvent, SqsMessage};
use serde_json;
fn publish_message(conn: &mut redis::Connection) -> Result<(), Box<dyn std::error::Error>> {
// Customize this event as you like.
let event = SqsEvent {
records: vec![SqsMessage {
body: Some("Test message.".to_string()),
..Default::default()
}],
};
let _: () = conn.publish("<channel_name>", &serde_json::to_string(&event)?)?;
Ok(())
}
The Lambda function receives the complete SQS event as published to Redis:
{
"Records": [
{
"messageId": "<uuid-v4>",
"receiptHandle": "<random string>",
"body": "Test message.",
"md5OfBody": "e62f489304eae26e9960977058872c3f",
"attributes": {
"ApproximateReceiveCount": "2",
"SentTimestamp": "1520621625029",
"SenderId": "sender",
"ApproximateFirstReceiveTimestamp": "1520621634884"
},
"eventSourceARN": "arn:aws:sqs:ap-northeast-1:123456789012:SQSQueue",
"eventSource": "aws:sqs",
"awsRegion": "ap-northeast-1",
"messageAttributes": {
"Attribute3": {
"binaryValue": "MTEwMA==",
"stringListValues": ["abc", "123"],
"binaryListValues": ["MA==", "MQ==", "MA=="],
"dataType": "Binary"
},
"Attribute2": {
"stringValue": "123",
"stringListValues": [],
"binaryListValues": ["MQ==", "MA=="],
"dataType": "Number"
},
"Attribute1": {
"stringValue": "AttributeValue1",
"stringListValues": [],
"binaryListValues": [],
"dataType": "String"
}
}
}
]
}
--redis-url
: Redis URL (default: redis://localhost:6379
)--channels
: Channel-Lambda pairs in format channel1=lambda1,channel2=lambda2
--config
: Path to TOML configuration file# Multiple channels via command line
srill --redis-url redis://localhost:6379 --channels user-events=user-lambda,order-events=order-lambda
# Using configuration file
srill --config ./config/srill.toml
# Single channel
srill my-channel my-lambda
MIT