# README
RabbitMQ -> Amazon forwarder
Application to forward messages from RabbitMQ to different Amazon services.
Key features:
- forwarding RabbitMQ message to AWS SNS topic
- forwarding RabbitMQ message to AWS SNS queue
- triggering AWS lambda function directly from RabbitMQ message
- automatic RabbitMQ reconnect
- message delivery assurance based on RabbitMQ persistency and AWS error handling
- dedicated dead-letter exchange and queue creation
- http health checks and restart functionality
Architecture
Configuration
The list of RabbitMQ sources and corresponding AWS target resources are stored in mapping file.
Mapping file
Sample of RabbitMQ -> SNS mapping file. All fields are required. Samples are located in examples directory.
[
{
"source" : {
"type" : "RabbitMQ",
"name" : "test-rabbit",
"connection" : "amqp://guest:guest@localhost:5672/",
"topic" : "amq.topic",
"queue" : "test-queue",
"routingKeys" : ["#"]
},
"destination" : {
"type" : "SNS",
"name" : "test-sns",
"target" : "arn:aws:sns:eu-west-1:XXXXXXXX:test-forwarder"
}
}
]
Environment variables
Forwarder uses the following environment variables:
export MAPPING_FILE=/config/mapping.json
export AWS_REGION=region
export AWS_ACCESS_KEY_ID=access_key
export AWS_SECRET_ACCESS_KEY=secret_key
Using TLS with rabbit
Specify amqps for the rabbit connection ub the mapping file:
"connection" : "amqps://guest:guest@localhost:5671/",
Additional environment variables for working with TLS and rabbit:
export CA_CERT=/certs/ca_certificate.pem
export CERT_FILE=/certs/client_certificate.pem
export KEY_FILE=/certs/client_key.pem
Amazon configuration
When making subscription to SNS -> SQS/HTTP/HTTPS set Raw message delivery
to ensure that json messages are not escaped.
Build docker image
make build
Run
Using docker:
docker run \
-e AWS_REGION=$AWS_REGION \
-e AWS_ACCESS_KEY_ID=$AWS_ACCESS_KEY_ID \
-e AWS_SECRET_ACCESS_KEY=$AWS_SECRET_ACCESS_KEY \
-e MAPPING_FILE=/config/mapping.json \
-v $MAPPING_FILE:/config/mapping.json \
-p 8080:8080 \
airhelp/rabbit-amazon-forwarder
Using docker-compose:
docker-compose up
Test
docker-compose build --pull
docker-compose run --rm tests
Release
make push
docker tag airhelp/rabbit-amazon-forwarder airhelp/rabbit-amazon-forwarder:$VERSION
docker push airhelp/rabbit-amazon-forwarder:$VERSION
Supervisor
Supervisor is a module which starts the consumer->forwarder pairs. Exposed endpoints:
APP_URL/health
- returns status if all consumers are runningAPP_URL/restart
- restarts all consumer->forwarder pairs
# Packages
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
# Constants
No description provided by the author