Skip to main content

AWS Ruby SDK Example

The following example shows how AWS Ruby SDK can be used to interact with Telnyx Cloud Storage.

require "aws-sdk-s3"
require "net/http"

# Create a new S3 resource

telnyx_api_key = ENV["TELNYX_API_KEY"]

resource = Aws::S3::Resource.new(
region: "us-central-1",
endpoint: "https://us-central-1.telnyxstorage.com",
access_key_id: telnyx_api_key,
secret_access_key: "doesn't matter"
)

bucket_name = "example-#{SecureRandom.hex(24)}"

# Creating a bucket
bucket = resource.create_bucket(bucket: bucket_name)

puts "*" * 50
puts("Created bucket named #{bucket.name}.")
puts "*" * 50

# Listing buckets

puts "Listing buckets"
puts "*" * 50

resource.buckets.each do |b|
puts " - #{b.name}"
end

puts "*" * 50

# Upload a file

File.open("document.txt", "w+") { |f| f.write("This is a text document.\n") }

bucket = resource.bucket(bucket_name)
the_object = bucket.object("document.txt")
the_object.upload_file("document.txt")

puts("Uploaded file document.txt into bucket #{bucket.name} with key #{the_object.key}.")
puts "*" * 50

# Download an object from the bucket
puts "Downloading object from bucket #{bucket.name}"
file_name = "a-local-file.txt"
the_object.download_file(file_name)
puts("Object #{the_object.key} successfully downloaded to #{file_name}.")
puts("Contents of #{file_name}: #{File.read(file_name).inspect}")
puts "*" * 50

# Creating a presigned URL to upload a file
object_key = "important-document.txt"
uri = URI("https://api.telnyx.com/v2/storage/buckets/#{bucket_name}/#{object_key}/presigned_url")

response = Net::HTTP.post(
uri,
{ ttl: 30 }.to_json,
"Authorization" => "Bearer #{telnyx_api_key}"
)

raise "Bad response creating presigned URL" unless response.code == "200"

parsed_response = JSON.parse(response.body)
presigned_url = parsed_response["data"]["presigned_url"]
puts "Created presigned upload URL:"
puts "*" * 50
puts presigned_url
puts "*" * 50

# Upload a file using the Telnyx presigned URL
uri = URI(presigned_url)
request = Net::HTTP.new(uri.host)
response = request.put(uri, "This is an important text document.\n")

raise "Couldn't upload file using presigned URL: #{response.inspect}" unless response.code == "200"

puts "Uploaded file using presigned URL: #{response.inspect}"

# Listing objects in the bucket

puts "Listing objects in bucket #{bucket.name}"
puts "*" * 50

bucket.objects.each do |o|
puts " * #{o.key}"
end

puts "*" * 50

# Creating a presigned URL to download the file
uri = URI("https://api.telnyx.com/v2/storage/buckets/#{bucket_name}/#{object_key}/presigned_url")

response = Net::HTTP.post(
uri,
{ ttl: 30 }.to_json,
"Authorization" => "Bearer #{telnyx_api_key}"
)

raise "Bad response creating presigned URL" unless response.code == "200"

parsed_response = JSON.parse(response.body)
presigned_url = parsed_response["data"]["presigned_url"]
puts "Created presigned download URL:"
puts "*" * 50
puts presigned_url
puts "*" * 50

# Download the object using the presigned URL

uri = URI(presigned_url)
response = Net::HTTP.get(uri)
puts("Downloaded object contents from presigned URL: #{response.inspect}")
puts "*" * 50

# Cleaning up

File.delete("document.txt")
File.delete("a-local-file.txt")

# Deleting the objects

the_object.delete
puts("Deleted object #{the_object.key}.")
important_object = bucket.object(object_key)
important_object.delete
puts("Deleted object #{important_object.key}.")

# Deleting the bucket

bucket.delete
puts("Deleted bucket #{bucket.name}.")
puts("Done.")