Skip to content

Instantly share code, notes, and snippets.

View trevorrowe's full-sized avatar

Trevor Rowe trevorrowe

  • Amazon.com
  • Seattle, WA
View GitHub Profile
@trevorrowe
trevorrowe / gist:7a36332bed24791a1196
Last active August 29, 2015 14:15
Uploading files to Amazon S3 using the AWS SDK for Ruby v2
# You can pass client options directly to the Resource constructor,
# no need to construct a client yourself
s3 = Aws::S3::Resource.new(
credentials: Aws::Credentials.new('akid', 'secret'),
region: 'eu-west-1'
)
s3.bucket('backup').object('dir/subdir/filename.txt').upload_file(local_file)
shape = sqs.config.api.operation(:receive_message).output
shape = Seahorse::Model::Shapes::Structure.new({
'members' => {
shape.metadata('resultWrapper') => shape.definition,
'ResponseMetadata' => {
'type' => 'structure',
'members' => {
'RequestId' => { 'type' => 'string' }
}
}
@trevorrowe
trevorrowe / gist:e03c727941728320f15b
Created March 14, 2015 06:33
Configuring an Amazon S3 Encryption Client
client = Aws::S3::Client.new(credentials: Aws::Credentials.new('akid', 'secret'))
encryption_client = Aws::S3::Encryption::Client.new(client: client)
@trevorrowe
trevorrowe / gist:49bfb9d59f83ad450a9e
Created March 28, 2015 03:11
Demonstration of using pre-signed GET url to download a server-side-encrypted with customer key from Amazon S3
require 'aws-sdk'
require 'openssl'
bucket_name = 'bucket-name'
object_key = 'object-key'
# patch for `aws-sdk` v2 gem (needed for versions <= v2.0.33, patch will be applied shortly to master)
class Aws::Signers::V4
def presigned_url(request, options = {})
now = Time.now.utc.strftime("%Y%m%dT%H%M%SZ")
pattern = "[aws] [:client_class] operation=:operation duration=:time retries=:retries error=:error_class\n"
Aws.config[:log_formatter] = Seahorse::Client::Logging::Formatter.new(pattern)
# success
[aws] [Aws::S3::Client] operation=list_buckets duration=0.602057 retries=0 error=
# error
[aws] [Aws::S3::Client] operation=head_bucket duration=1.100552 retries=0 error=Aws::S3::Errors::Forbidden
class ProgressIO
def initialize(io)
@io = io
end
def read(bytes = nil, output_buffer = nil)
puts bytes
@io.read(bytes, output_buffer)
end
@trevorrowe
trevorrowe / gist:8162733833c90491a9b3
Last active August 29, 2015 14:23
Plugin that conditionally raises response errors
class ConditionalRaisePlugin < Seahorse::Client::Plugin
class Handler < Seahorse::Client::Handler
def call(context)
response = @handler.call(context)
conditional_raise(response.error, context.config.errors_to_ignore)
response
end
@trevorrowe
trevorrowe / gist:de95d25baa0d472d71da
Created June 29, 2015 20:59
Expect-100 continue PUT bug - client
# This example server accepts a simple PUT request with the 'Excpect: 100-continue'
# header. It alternates between the following two responses:
#
# * 100 Continue, accepting the body, then 200 OK
# * 403 Forbidden, not accepting the body
#
require 'socket'
server = TCPServer.new('localhost', 3000)
@trevorrowe
trevorrowe / gist:bb041b0d7b57df239d43
Created June 29, 2015 20:59
Expect-100 continue PUT bug - sever
require 'net/http'
require 'logger'
req = Net::HTTP::Put.new('/', { 'expect' => '100-continue' })
req.body = 'data'
http = Net::HTTP.new('localhost', 3000)
http.continue_timeout = 1
http.set_debug_output(Logger.new($stdout))
http.request(req)
@trevorrowe
trevorrowe / client.rb
Created June 29, 2015 21:03
Ruby Net::HTTP Expect-100 continue PUT bug
require 'net/http'
require 'logger'
req = Net::HTTP::Put.new('/', { 'expect' => '100-continue' })
req.body = 'data'
http = Net::HTTP.new('localhost', 3000)
http.continue_timeout = 1
http.set_debug_output(Logger.new($stdout))
http.request(req)