Sha256: 78e0d3cbc642355ba2045e25c21fc7b3b4bf57b13f2d386ccd0f91a5dd554b3e

Contents?: true

Size: 1.43 KB

Versions: 1

Compression:

Stored size: 1.43 KB

Contents

require 'cloud_formation/bridge/resources/base'
require 'aws/sns'
require 'aws/sqs'

module CloudFormation
  module Bridge
    module Resources

      class SubscribeQueueToTopic < Base

        ARN = 'Arn'
        ENDPOINT = 'Endpoint'
        PROTOCOL = 'Protocol'

        TOPIC_ARN = 'TopicArn'
        QUEUE_NAME = 'QueueName'

        REQUIRED_FIELDS = [
          TOPIC_ARN,
          QUEUE_NAME,
        ]

        def create(request)
          require_fields(request, REQUIRED_FIELDS)

          queue = queues.named(request.resource_properties[QUEUE_NAME])
          topic = topics[request.resource_properties[TOPIC_ARN]]

          subscription = topic.subscribe(queue)

          {
            FIELDS::PHYSICAL_RESOURCE_ID => subscription.arn,
            FIELDS::DATA => {
              ARN => subscription.arn,
              ENDPOINT => subscription.endpoint,
              PROTOCOL => subscription.protocol,
            },
          }
        end

        def delete(request)
          subscription = subscriptions[request.physical_resource_id]
          subscription.unsubscribe if subscription && subscription.exists?
        end

        def topics
          @topics ||= sns.topics
        end

        def subscriptions
          @subscriptions ||= sns.subscriptions
        end

        def sns
          @sns ||= AWS::SNS.new
        end

        def queues
          @queues ||= AWS::SQS.new.queues
        end

      end

    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
cfn-bridge-0.0.1 lib/cloud_formation/bridge/resources/subscribe_queue_to_topic.rb