Serverless app to stream an CSV file from S3 bucket to SQS queue.
- Docker and Docker compose needs to be installed to run locally.
- AWS account with aws client working properly.
- Node Serverless framework client installed.
Clone repository and install node dependencies.
git clone git@github.com:augustoscher/csv-streaming.git
cd csv-streaming
npm iYou can run it locally throw docker container or in AWS cloud. Just follow the steps below.
make run-logsNow you should see localstack resources on localhost:8080.
In another terminal, run:
make setupHere we're creating S3 bucket and SQS queue on localstack. Now you should see resources by refreshing localstack page.
And the last thing to do is run app locally. To do that, type:
make startNow It's time to send csv to our local s3 bucket and see if it's streaming, converting and sending to sqs queue.
Open a new terminal window and run:
make test-s3Ps: Here we're uploading an csv file to local s3 bucket and manually calling s3listener because localstack triggers is not setup.
Now we'll se if SQS queue receive objetcs, by getting All attributes:
make test-sqsYou should see get-queue-attributes output:
{
"Attributes": {
"VisibilityTimeout": "30",
"DelaySeconds": "0",
"ReceiveMessageWaitTimeSeconds": "0",
"ApproximateNumberOfMessages": "400",
"ApproximateNumberOfMessagesNotVisible": "0",
"ApproximateNumberOfMessagesDelayed": "0",
"CreatedTimestamp": "1596490739",
"LastModifiedTimestamp": "1596490739",
"QueueArn": "arn:aws:sqs:us-east-1:000000000000:csv-streaming"
}
}Let's deploy and run it on AWS cloud.
You obviously need to deploy it on AWS. We're using serverless-framework:
sls deployAll resources (lambdas, bucket and sqs) will be created automatically.
aws sqs list-queues
aws s3 ls | grep csv-streamingRun each command in diferent terminal:
- Sending csv file to ou s3 bucket:
aws s3 cp \
testing/file.csv \
s3://csv-streaming- Run logs on s3 bucket in AWS cloud:
npx sls logs -f s3listener -t- Run logs on sqs queue in AWS cloud:
npx sls logs -f sqslistener -tOptionally: Upload huge csv
aws s3 cp testing/survey_results_public.csv s3://csv-streamingFinal step: Remove all resources, including s3 bucket and sqs queue:
sls remove