srill

Crates.iosrill
lib.rssrill
version1.0.0
created_at2025-06-02 08:07:10.265186+00
updated_at2025-09-06 08:18:28.508333+00
descriptionSubscribe Redis and Invoke Lambda with cargo lambda, for Local development.
homepage
repository
max_upload_size
id1697775
size49,233
r-sekishita (blue-orange-yellow)

documentation

README

srill

Subscribe Redis and Invoke Lambda with cargo lambda, for Local development.

Features

  • Subscribe to multiple Redis channels simultaneously
  • Invoke different Lambda functions for each channel
  • Support for configuration files (TOML format)

Usage

First, run cargo lambda watch:

cargo lambda watch

Multiple Channels

Start srill with multiple channel-lambda pairs:

srill --channels channel1=lambda-function1,channel2=lambda-function2,channel3=lambda-function3

Configuration File

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

Single Channel Mode

Start srill:

srill <channel name> <lambda binary name>

Publishing Messages

Publishing SQS Events

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(())
}

Message Format

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"
                }
            }
        }
    ]
}

Options

  • --redis-url: Redis URL (default: redis://localhost:6379)
  • --channels: Channel-Lambda pairs in format channel1=lambda1,channel2=lambda2
  • --config: Path to TOML configuration file

Examples

# 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

License

MIT

Commit count: 0

cargo fmt