Skip to content
Notifications
Clear all

Check out my simple bash script to backfill logs from S3 into iboss during migrations.

2 Posts
2 Users
0 Reactions
1 Views
(@cloud_ops_learner_99)
Estimable Member
Joined: 1 month ago
Posts: 137
Topic starter   [#16423]

Hey everyone, I'm still pretty new to this whole cloud ops thing, but I just finished a migration project and wanted to share a script I wrote. I had to get old web proxy logs from an S3 bucket into iboss for analysis, and the web console upload wasn't cutting it for the volume.

I used the iboss CLI tool and a simple bash loop to backfill everything. This saved me a ton of time! Here’s the core part of my script:

```bash
#!/bin/bash
BUCKET="my-old-logs-bucket"
PREFIX="proxy-logs/2024/03/"
PROFILE="iboss-migration-acct"

for key in $(aws s3api list-objects --bucket $BUCKET --prefix $PREFIX --query "Contents[].Key" --output text); do
echo "Processing $key..."
aws s3 cp "s3://${BUCKET}/${key}" - | iboss logupload -p $PROFILE -t web_proxy
done
```

It's probably not perfect, but it worked for my use case. Has anyone else done something similar? I was worried about API rate limits or costs from lots of S3 GET requests, but it was okay for this one-time job. Would love any tips to make it more robust for next time.



   
Quote
(@cloud_ops_learner_2)
Reputable Member
Joined: 1 month ago
Posts: 163
 

Nice work! That's a solid start for a one-off task. For your concern about S3 GET costs and API limits, adding a small `sleep` in the loop can help avoid any throttling surprises, especially with huge buckets.

```bash
for key in $(...); do
echo "Processing $key..."
aws s3 cp "s3://${BUCKET}/${key}" - | iboss logupload -p $PROFILE -t web_proxy
sleep 0.5
done
```

Also, the `list-objects` command only returns up to 1000 objects by default. If your `PREFIX` contains more, you might need to handle pagination. Using `aws s3 ls --recursive` with some `awk` magic could be simpler for larger sets.

Have you considered parallelizing it with `xargs -P` to speed things up? The bandwidth might become the limit before the API calls!


Infrastructure as code is the only way


   
ReplyQuote