Class: Kybus::AWS::Queue

Inherits:
Resource show all
Defined in:
lib/kybus/aws/queue.rb

Instance Attribute Summary collapse

Attributes inherited from Resource

#region

Instance Method Summary collapse

Methods inherited from Resource

#account_id, #with_retries

Constructor Details

#initialize(configs, name) ⇒ Queue

Returns a new instance of Queue.



8
9
10
11
12
# File 'lib/kybus/aws/queue.rb', line 8

def initialize(configs, name)
  require 'aws-sdk-sqs'
  super(configs)
  @name = name
end

Instance Attribute Details

#nameObject (readonly)

Returns the value of attribute name.



6
7
8
# File 'lib/kybus/aws/queue.rb', line 6

def name
  @name
end

#queue_urlObject (readonly)

Returns the value of attribute queue_url.



6
7
8
# File 'lib/kybus/aws/queue.rb', line 6

def queue_url
  @queue_url
end

Instance Method Details

#arnObject



48
49
50
# File 'lib/kybus/aws/queue.rb', line 48

def arn
  "arn:aws:sqs:#{region}:#{}:#{name}"
end

#create_or_update!Object



18
19
20
21
22
# File 'lib/kybus/aws/queue.rb', line 18

def create_or_update!
  create_queue!
  make_write_policy.create_or_update!
  make_processor_policy.create_or_update!
end

#create_queue!Object



24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
# File 'lib/kybus/aws/queue.rb', line 24

def create_queue!
  response = sqs_client.create_queue({
                                       queue_name: name,
                                       attributes: {
                                         'DelaySeconds' => '0',
                                         'MessageRetentionPeriod' => '86400'
                                       }
                                     })
  @queue_url = response.queue_url
  puts "Queue '#{name}' created with URL #{@queue_url}"
  @queue_url
rescue Aws::SQS::Errors::QueueNameExists
  @queue_url = sqs_client.get_queue_url(name:).queue_url
  puts "Queue '#{name}' already exists with URL #{@queue_url}"
  @queue_url
end

#destroy!Object



41
42
43
44
45
46
# File 'lib/kybus/aws/queue.rb', line 41

def destroy!
  sqs_client.delete_queue(queue_url: @queue_url)
  puts "Queue '#{name}' deleted."
rescue Aws::SQS::Errors::NonExistentQueue
  puts "Queue '#{name}' not found."
end

#make_processor_policyObject



92
93
94
95
# File 'lib/kybus/aws/queue.rb', line 92

def make_processor_policy
  policy_name = "#{name}_queue_processor"
  @make_processor_policy ||= Policy.new(@config, policy_name, queue_processor_policy_document)
end

#make_write_policyObject



87
88
89
90
# File 'lib/kybus/aws/queue.rb', line 87

def make_write_policy
  policy_name = "#{name}_queue_publisher"
  @make_write_policy ||= Policy.new(@config, policy_name, queue_write_policy_document)
end

#queue_processor_policy_documentObject



70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
# File 'lib/kybus/aws/queue.rb', line 70

def queue_processor_policy_document
  {
    Version: '2012-10-17',
    Statement: [{
      Effect: 'Allow',
      Action: [
        'sqs:ReceiveMessage',
        'sqs:SendMessage',
        'sqs:Get*',
        'sqs:DeleteMEssage',
        'sqs:ChangeMessageVisibility'
      ],
      Resource: [arn]
    }]
  }
end

#queue_write_policy_documentObject



52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
# File 'lib/kybus/aws/queue.rb', line 52

def queue_write_policy_document
  {
    Version: '2012-10-17',
    Statement: [
      {
        Effect: 'Allow',
        Action: [
          'sqs:Get*',
          'sqs:SendMessage'
        ],
        Resource: [
          arn
        ]
      }
    ]
  }
end

#sqs_clientObject



14
15
16
# File 'lib/kybus/aws/queue.rb', line 14

def sqs_client
  @sqs_client ||= Aws::SQS::Client.new(region: @region)
end