I initially addressed the same issue in my S3 buckets I wanted to back up by doing the following:
- create a second "mirror" bucket for each S3 bucket I want to backup to Glacier
- launch a micro Ubuntu server instance for running cron jobs
- install s3cmd on the server
- write a shell script to sync all objects from each bucket to the mirror bucket
- enable Lifecycle rules on the mirror bucket to change the status of each object to "Glacier"
This works just fine, but I decided for my purposes that it was easier to just enable Versioning on my bucket. This ensures that if an object is accidentally deleted or updated, it can be recovered. The drawback to this approach is that the process of restoring an entire branch or sub-tree might be time consuming. But it is easier, more cost effective, and adequate for protecting the contents of the bucket from permanent destruction.
Hope that helps someone down the road.