aws-broker 0.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/README.md +22 -0
- data/lib/aws-broker.rb +7 -0
- data/lib/aws/broker.rb +27 -0
- data/lib/aws/broker/base.rb +29 -0
- data/lib/aws/broker/config.rb +17 -0
- data/lib/aws/broker/constants.rb +7 -0
- data/lib/aws/broker/publisher.rb +23 -0
- data/lib/aws/broker/subscriber.rb +82 -0
- metadata +79 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: c78e1a8326e34ac698ddf33e647d8d263c101256
|
4
|
+
data.tar.gz: 8d4a5395d3a052901010f33758b112c54f46d478
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 8dd6ecdeeeed53fa28f319acd16a3cbdbfcd471807869868db89e6a8156a7a09c03208f2fa094101e7f081f08359700591e0a72186aa5296d6d9d5b7afb736aa
|
7
|
+
data.tar.gz: 21f4532b4ec60c021ae997e197d0e343a719cc6e8188538fee0f0e1d8a7f2beef07c9b4aee2214787bfc84b6ceb13f88da5a47ca8663386361fb5a95584c5bda
|
data/README.md
ADDED
@@ -0,0 +1,22 @@
|
|
1
|
+
# AWS Broker
|
2
|
+
|
3
|
+
:incoming_envelope: Ruby pub-sub on AWS
|
4
|
+
|
5
|
+
* * *
|
6
|
+
|
7
|
+
### Background
|
8
|
+
|
9
|
+
This lightweight abstraction simplifies pub-sub on AWS's SNS and SQS services.
|
10
|
+
Message processing is not part of this gem - we recommend using
|
11
|
+
[Shoryuken](https://github.com/phstc/shoryuken) in addition to this gem.
|
12
|
+
|
13
|
+
### Usage
|
14
|
+
|
15
|
+
Usage:
|
16
|
+
|
17
|
+
Broker = Aws::Broker
|
18
|
+
topic = 'topic'
|
19
|
+
queue = 'queue'
|
20
|
+
message = { id: 0 }
|
21
|
+
Broker.subscribe(topic, queue)
|
22
|
+
Broker.publish(topic, message)
|
data/lib/aws-broker.rb
ADDED
data/lib/aws/broker.rb
ADDED
@@ -0,0 +1,27 @@
|
|
1
|
+
require 'aws/broker/config'
|
2
|
+
require 'aws/broker/publisher'
|
3
|
+
require 'aws/broker/subscriber'
|
4
|
+
|
5
|
+
module Aws
|
6
|
+
class Broker
|
7
|
+
class << self
|
8
|
+
|
9
|
+
def publish(*params)
|
10
|
+
Publisher.new(*params).publish
|
11
|
+
end
|
12
|
+
|
13
|
+
def subscribe(*params)
|
14
|
+
Subscriber.new(*params).subscribe
|
15
|
+
end
|
16
|
+
|
17
|
+
def config
|
18
|
+
@config ||= Broker::Config.new
|
19
|
+
end
|
20
|
+
|
21
|
+
def configure
|
22
|
+
yield(config)
|
23
|
+
end
|
24
|
+
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
module Aws
|
2
|
+
class Broker
|
3
|
+
class Base
|
4
|
+
|
5
|
+
private
|
6
|
+
|
7
|
+
def enabled?
|
8
|
+
Broker.config.enabled?
|
9
|
+
end
|
10
|
+
|
11
|
+
def create_topic
|
12
|
+
@topic_arn = sns.create_topic(name: @topic).topic_arn
|
13
|
+
end
|
14
|
+
|
15
|
+
def sns
|
16
|
+
@sns ||= Aws::SNS::Client.new(credentials)
|
17
|
+
end
|
18
|
+
|
19
|
+
def credentials
|
20
|
+
{
|
21
|
+
access_key_id: ENV['AWS_ACCESS_KEY'],
|
22
|
+
secret_access_key: ENV['AWS_SECRET_KEY'],
|
23
|
+
region: ENV['AWS_REGION']
|
24
|
+
}
|
25
|
+
end
|
26
|
+
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
require 'aws/broker/base'
|
2
|
+
|
3
|
+
module Aws
|
4
|
+
class Broker
|
5
|
+
class Publisher < Base
|
6
|
+
|
7
|
+
def initialize(topic, message)
|
8
|
+
@topic = topic
|
9
|
+
@message = message
|
10
|
+
end
|
11
|
+
|
12
|
+
def publish
|
13
|
+
return unless enabled?
|
14
|
+
create_topic
|
15
|
+
sns.publish(
|
16
|
+
topic_arn: @topic_arn,
|
17
|
+
message: @message.to_json
|
18
|
+
)
|
19
|
+
end
|
20
|
+
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
@@ -0,0 +1,82 @@
|
|
1
|
+
require 'aws/broker/base'
|
2
|
+
|
3
|
+
module Aws
|
4
|
+
class Broker
|
5
|
+
class Subscriber < Base
|
6
|
+
|
7
|
+
def initialize(topic, queue=nil)
|
8
|
+
@topic = topic
|
9
|
+
@queue = queue || queue_name
|
10
|
+
end
|
11
|
+
|
12
|
+
def subscribe
|
13
|
+
return unless enabled?
|
14
|
+
create_queue
|
15
|
+
create_topic
|
16
|
+
sns.subscribe(
|
17
|
+
topic_arn: @topic_arn,
|
18
|
+
protocol: 'sqs',
|
19
|
+
endpoint: @queue_arn
|
20
|
+
)
|
21
|
+
set_queue_policy
|
22
|
+
end
|
23
|
+
|
24
|
+
private
|
25
|
+
|
26
|
+
def queue_name
|
27
|
+
if Broker.config.queue_prefix
|
28
|
+
"#{Broker.config.queue_prefix}-#{@topic}"
|
29
|
+
else
|
30
|
+
@topic
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
def create_queue
|
35
|
+
@queue_url = sqs.create_queue(
|
36
|
+
queue_name: @queue
|
37
|
+
).queue_url
|
38
|
+
@queue_arn = sqs.get_queue_attributes(
|
39
|
+
queue_url: @queue_url,
|
40
|
+
attribute_names: ['QueueArn']
|
41
|
+
).attributes['QueueArn']
|
42
|
+
end
|
43
|
+
|
44
|
+
def set_queue_policy
|
45
|
+
sqs.set_queue_attributes(
|
46
|
+
queue_url: @queue_url,
|
47
|
+
attributes: { 'Policy': policy }
|
48
|
+
)
|
49
|
+
end
|
50
|
+
|
51
|
+
def policy
|
52
|
+
<<-POLICY
|
53
|
+
{
|
54
|
+
"Version": "2008-10-17",
|
55
|
+
"Id": "#{@queue_arn}/SQSDefaultPolicy",
|
56
|
+
"Statement": [
|
57
|
+
{
|
58
|
+
"Sid": "#{@queue_arn}-Sid",
|
59
|
+
"Effect": "Allow",
|
60
|
+
"Principal": {
|
61
|
+
"AWS": "*"
|
62
|
+
},
|
63
|
+
"Action": "SQS:*",
|
64
|
+
"Resource": "#{@queue_arn}",
|
65
|
+
"Condition": {
|
66
|
+
"StringEquals": {
|
67
|
+
"aws:SourceArn": "#{@topic_arn}"
|
68
|
+
}
|
69
|
+
}
|
70
|
+
}
|
71
|
+
]
|
72
|
+
}
|
73
|
+
POLICY
|
74
|
+
end
|
75
|
+
|
76
|
+
def sqs
|
77
|
+
@sqs ||= Aws::SQS::Client.new(credentials)
|
78
|
+
end
|
79
|
+
|
80
|
+
end
|
81
|
+
end
|
82
|
+
end
|
metadata
ADDED
@@ -0,0 +1,79 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: aws-broker
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.2
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Eng @ Thanx
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2017-11-16 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: aws-sdk-sns
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ">="
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '0'
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ">="
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '0'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: aws-sdk-sqs
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ">="
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '0'
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - ">="
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '0'
|
41
|
+
description: Lightweight Ruby pub-sub abstraction on AWS
|
42
|
+
email: eng@thanx.com
|
43
|
+
executables: []
|
44
|
+
extensions: []
|
45
|
+
extra_rdoc_files: []
|
46
|
+
files:
|
47
|
+
- README.md
|
48
|
+
- lib/aws-broker.rb
|
49
|
+
- lib/aws/broker.rb
|
50
|
+
- lib/aws/broker/base.rb
|
51
|
+
- lib/aws/broker/config.rb
|
52
|
+
- lib/aws/broker/constants.rb
|
53
|
+
- lib/aws/broker/publisher.rb
|
54
|
+
- lib/aws/broker/subscriber.rb
|
55
|
+
homepage: https://github.com/thanx/aws-broker
|
56
|
+
licenses:
|
57
|
+
- MIT
|
58
|
+
metadata: {}
|
59
|
+
post_install_message:
|
60
|
+
rdoc_options: []
|
61
|
+
require_paths:
|
62
|
+
- lib
|
63
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
64
|
+
requirements:
|
65
|
+
- - ">="
|
66
|
+
- !ruby/object:Gem::Version
|
67
|
+
version: '0'
|
68
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
69
|
+
requirements:
|
70
|
+
- - ">="
|
71
|
+
- !ruby/object:Gem::Version
|
72
|
+
version: '0'
|
73
|
+
requirements: []
|
74
|
+
rubyforge_project:
|
75
|
+
rubygems_version: 2.6.11
|
76
|
+
signing_key:
|
77
|
+
specification_version: 4
|
78
|
+
summary: AWS Broker
|
79
|
+
test_files: []
|