Skip to content

Instantly share code, notes, and snippets.

@omribahumi
Created November 20, 2014 18:49
Show Gist options
  • Save omribahumi/5dd14b8522022b28c34e to your computer and use it in GitHub Desktop.
Save omribahumi/5dd14b8522022b28c34e to your computer and use it in GitHub Desktop.
Cloudformation metadata API Ruby code
require 'net/http'
require 'base64'
require 'json'
module Cfn
class << self
def instance_identity_document()
Net::HTTP.get(URI('http://169.254.169.254/latest/dynamic/instance-identity/document'))
end
def instance_identity_signature()
Net::HTTP.get(URI('http://169.254.169.254/latest/dynamic/instance-identity/signature'))
end
def cfn_authorization_header()
document = Base64.strict_encode64(instance_identity_document)
signature = instance_identity_signature.gsub("\n", '')
"CFN_V1 #{document}:#{signature}"
end
def cfn_metadata(stack_name, logical_resource_id, region='us-east-1')
http = Net::HTTP.start("cloudformation.#{region}.amazonaws.com", 443, use_ssl: true)
resp = http.get(
'/?' + URI.encode_www_form(
{
'Action' => 'DescribeStackResource',
'Version' => '2010-05-15',
'ContentType' => 'JSON',
'StackName' => stack_name,
'LogicalResourceId' => logical_resource_id
}
),
{
'Authorization' => cfn_authorization_header
}
)
body = JSON.parse(resp.body)
metadata = body['DescribeStackResourceResponse']['DescribeStackResourceResult']['StackResourceDetail']['Metadata']
if metadata.nil?
{}
else
JSON.parse(metadata)
end
end
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment