Sha256: b4236eac6b5bdfd082f93de9bda1636ca0f6768895a5569bee1f5deffdb3cf03

Contents?: true

Size: 1.61 KB

Versions: 7

Compression:

Stored size: 1.61 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'
        RAW_MESSAGE_DELIVERY = 'RawMessageDelivery'

        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)

          if request.resource_properties[RAW_MESSAGE_DELIVERY]
            subscription.raw_message_delivery = true
          end

          {
            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

7 entries across 7 versions & 1 rubygems

Version Path
cfn-bridge-0.0.8 lib/cloud_formation/bridge/resources/subscribe_queue_to_topic.rb
cfn-bridge-0.0.7 lib/cloud_formation/bridge/resources/subscribe_queue_to_topic.rb
cfn-bridge-0.0.6 lib/cloud_formation/bridge/resources/subscribe_queue_to_topic.rb
cfn-bridge-0.0.5 lib/cloud_formation/bridge/resources/subscribe_queue_to_topic.rb
cfn-bridge-0.0.4 lib/cloud_formation/bridge/resources/subscribe_queue_to_topic.rb
cfn-bridge-0.0.3 lib/cloud_formation/bridge/resources/subscribe_queue_to_topic.rb
cfn-bridge-0.0.2 lib/cloud_formation/bridge/resources/subscribe_queue_to_topic.rb