I have an AWS VM that runs a daily task and generates several files. I want my Rails app to download these files and place them in a folder within the app. Is there a gem or method in Ruby that can do this?
I know how to do it in bash with s3cmd and I guess I could create a script to get them this way, but looking for a more native rails way.
I am using the data in these files for the app, but I don't want the users to be able to download them.
The aws-sdk
v2 gem provides a simple interface for downloading objects from Amazon S3.
require 'aws-sdk'
s3 = Aws::S3::Resource.new(
region: 'us-east-1',
access_key_id: '...',
secret_access_key: '...'
)
s3.bucket('bucket-name').object('key').get(response_target: '/path/to/file')
There is official Amazon AWS Ruby SDK: http://aws.amazon.com/sdk-for-ruby/
There is also an open source gem called Fog, that may be easier to use for simpler projects: http://fog.io/
In the v1 aws-sdk
, the code to download from s3 is...
File.open(local_file_path, "wb") do |file|
s3_object(s3_key).read do |chunk|
file.write(chunk)
end
end