class CfnResponse::Sender

Public Instance Methods

call(response_data) click to toggle source
# File lib/cfn_response/sender.rb, line 6
def call(response_data)
  puts "Sending #{response_data["Status"]} Status to CloudFormation"
  url = @event['ResponseURL']
  http_request(url, response_data)
end
http_request(url, response_data) click to toggle source
# File lib/cfn_response/sender.rb, line 12
def http_request(url, response_data)
  uri = URI(url)
  http = Net::HTTP.new(uri.host, uri.port)
  http.use_ssl = uri.scheme == "https"
  http.max_retries = 1 # Default is already 1, just being explicit
  http.open_timeout = http.read_timeout = 20

  # must used url to include the AWSAccessKeyId and Signature
  req = Net::HTTP::Put.new(url) # url includes query string and uri.path does not

  body = JSON.dump(response_data)
  req.body = body
  req.content_length = body.bytesize
  # set headers
  req['content-type'] = ''
  req['content-length'] = body.bytesize

  res = http.request(req)
  puts "status code: #{res.code}"
  puts "headers: #{res.each_header.to_h.inspect}"
  puts "body: #{res.body}"
  res
end