funktor 0.2.1 → 0.2.6
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.github/workflows/ruby.yml +35 -0
- data/.gitignore +2 -2
- data/Gemfile.lock +6 -6
- data/funktor.gemspec +1 -1
- data/lib/funktor.rb +0 -1
- data/lib/funktor/cli/bootstrap.rb +7 -7
- data/lib/funktor/cli/init.rb +135 -30
- data/lib/funktor/cli/templates/Gemfile +1 -3
- data/lib/funktor/cli/templates/{workers → app/workers}/hello_worker.rb +0 -0
- data/lib/funktor/cli/templates/config/boot.rb +16 -0
- data/lib/funktor/cli/templates/config/environment.yml +4 -2
- data/lib/funktor/cli/templates/{function_definitions → config/function_definitions}/incoming_job_handler.yml +1 -1
- data/lib/funktor/cli/templates/config/function_definitions/work_queue_handler.yml +11 -0
- data/lib/funktor/cli/templates/config/funktor.yml +27 -14
- data/lib/funktor/cli/templates/{iam_permissions → config/iam_permissions}/incoming_job_queue.yml +0 -0
- data/lib/funktor/cli/templates/{iam_permissions → config/iam_permissions}/ssm.yml +0 -0
- data/lib/funktor/cli/templates/{iam_permissions/active_job_queue.yml → config/iam_permissions/work_queue.yml} +1 -1
- data/lib/funktor/cli/templates/config/package.yml +4 -2
- data/lib/funktor/cli/templates/{resources → config/resources}/cloudwatch_dashboard.yml +268 -231
- data/lib/funktor/cli/templates/{resources → config/resources}/incoming_job_queue.yml +0 -0
- data/lib/funktor/cli/templates/{resources → config/resources}/incoming_job_queue_user.yml +0 -0
- data/lib/funktor/cli/templates/config/resources/work_queue.yml +22 -0
- data/lib/funktor/cli/templates/funktor_init.yml.tt +69 -0
- data/lib/funktor/cli/templates/{handlers → lambda_event_handlers}/incoming_job_handler.rb +1 -1
- data/lib/funktor/cli/templates/lambda_event_handlers/work_queue_handler.rb +8 -0
- data/lib/funktor/cli/templates/package.json +8 -1
- data/lib/funktor/cli/templates/serverless.yml +13 -12
- data/lib/funktor/incoming_job_handler.rb +11 -1
- data/lib/funktor/job.rb +4 -0
- data/lib/funktor/version.rb +1 -1
- data/lib/funktor/worker.rb +9 -0
- metadata +17 -18
- data/lib/funktor/cli/templates/function_definitions/active_job_handler.yml +0 -11
- data/lib/funktor/cli/templates/funktor.yml.tt +0 -51
- data/lib/funktor/cli/templates/handlers/active_job_handler.rb +0 -17
- data/lib/funktor/cli/templates/resources/active_job_queue.yml +0 -22
- data/lib/funktor/deploy/cli.rb +0 -42
- data/lib/funktor/deploy/serverless.rb +0 -60
- data/lib/funktor/deploy/serverless_templates/serverless.yml +0 -156
@@ -1,60 +0,0 @@
|
|
1
|
-
require 'yaml'
|
2
|
-
|
3
|
-
module Funktor
|
4
|
-
module Deploy
|
5
|
-
class Serverless
|
6
|
-
attr_accessor :file, :tmp_dir_prefix, :verbose, :stage
|
7
|
-
def initialize(file:, tmp_dir_prefix:, verbose:, stage:)
|
8
|
-
@file = file
|
9
|
-
@tmp_dir_prefix = tmp_dir_prefix
|
10
|
-
@verbose = verbose
|
11
|
-
@stage = stage
|
12
|
-
end
|
13
|
-
|
14
|
-
def call
|
15
|
-
#puts "deploying file #{file} via tmp_dir_prefix #{tmp_dir_prefix} for stage #{stage}"
|
16
|
-
make_tmp_dir
|
17
|
-
create_serverless_file
|
18
|
-
end
|
19
|
-
|
20
|
-
def funktor_data
|
21
|
-
@funktor_data ||= squash_hash(YAML.load_file(file))
|
22
|
-
end
|
23
|
-
|
24
|
-
def squash_hash(hsh, stack=[])
|
25
|
-
hsh.reduce({}) do |res, (key, val)|
|
26
|
-
next_stack = [ *stack, key ]
|
27
|
-
if val.is_a?(Hash)
|
28
|
-
next res.merge(squash_hash(val, next_stack))
|
29
|
-
end
|
30
|
-
res.merge(next_stack.join(".").to_sym => val)
|
31
|
-
end
|
32
|
-
end
|
33
|
-
|
34
|
-
def make_tmp_dir
|
35
|
-
FileUtils.mkdir_p tmp_dir
|
36
|
-
end
|
37
|
-
|
38
|
-
def tmp_dir
|
39
|
-
"#{tmp_dir_prefix}_#{stage}"
|
40
|
-
end
|
41
|
-
|
42
|
-
def create_serverless_file
|
43
|
-
#puts "funktor_data = "
|
44
|
-
#puts funktor_data
|
45
|
-
template_source = File.open(serverless_file_source).read
|
46
|
-
file_content = template_source % funktor_data
|
47
|
-
File.open(serverless_file_destination, 'w') { |file| file.write(file_content) }
|
48
|
-
end
|
49
|
-
|
50
|
-
def serverless_file_source
|
51
|
-
File.expand_path("../serverless_templates/serverless.yml", __FILE__)
|
52
|
-
end
|
53
|
-
|
54
|
-
def serverless_file_destination
|
55
|
-
File.join tmp_dir, 'serverless.yml'
|
56
|
-
end
|
57
|
-
end
|
58
|
-
end
|
59
|
-
end
|
60
|
-
|
@@ -1,156 +0,0 @@
|
|
1
|
-
# WARNING : You probably don't want to mess with this file directly.
|
2
|
-
service: %{stack_name}
|
3
|
-
# app and org for use with dashboard.serverless.com
|
4
|
-
#app: your-app-name
|
5
|
-
#org: your-org-name
|
6
|
-
|
7
|
-
frameworkVersion: '2'
|
8
|
-
|
9
|
-
provider:
|
10
|
-
name: aws
|
11
|
-
runtime: %{runtime}
|
12
|
-
lambdaHashingVersion: 20201221
|
13
|
-
ecr:
|
14
|
-
images:
|
15
|
-
funktorimage:
|
16
|
-
path: ./
|
17
|
-
# TODO : Expose buildArgs via funktor.yml?
|
18
|
-
buildArgs:
|
19
|
-
BUNDLE_GEM__FURY__IO: ${env:BUNDLE_GEM__FURY__IO}
|
20
|
-
# TODO : Expose environment to funktor.yml?
|
21
|
-
environment:
|
22
|
-
FUNKTOR_INCOMING_JOB_QUEUE:
|
23
|
-
Ref: IncomingJobQueue
|
24
|
-
FUNKTOR_ACTIVE_JOB_QUEUE:
|
25
|
-
Ref: ActiveJobQueue
|
26
|
-
FUNKTOR_DELAYED_JOB_TABLE:
|
27
|
-
Ref: DelayedJobTable
|
28
|
-
delayedJobTable:
|
29
|
-
Ref: DelayedJobTable
|
30
|
-
iamRoleStatements:
|
31
|
-
- Effect: Allow
|
32
|
-
Action:
|
33
|
-
- ssm:Get*
|
34
|
-
Resource:
|
35
|
-
- '*' # TODO : This should probably be more selective...
|
36
|
-
- Effect: Allow
|
37
|
-
Action:
|
38
|
-
- sqs:ReceiveMessage
|
39
|
-
- sqs:DeleteMessage
|
40
|
-
- sqs:SendMessage
|
41
|
-
- sqs:GetQueueAttributes
|
42
|
-
Resource:
|
43
|
-
- "Fn::GetAtt": [ ActiveJobQueue, Arn ]
|
44
|
-
- Effect: Allow
|
45
|
-
Action:
|
46
|
-
- sqs:ReceiveMessage
|
47
|
-
- sqs:DeleteMessage
|
48
|
-
- sqs:SendMessage
|
49
|
-
- sqs:GetQueueAttributes
|
50
|
-
Resource:
|
51
|
-
- "Fn::GetAtt": [ IncomingJobQueue, Arn ]
|
52
|
-
- Effect: Allow
|
53
|
-
Action:
|
54
|
-
- sqs:ReceiveMessage
|
55
|
-
- sqs:DeleteMessage
|
56
|
-
- sqs:SendMessage
|
57
|
-
- sqs:GetQueueAttributes
|
58
|
-
Resource:
|
59
|
-
- "Fn::GetAtt": [ ActivityQueue, Arn ]
|
60
|
-
- Effect: Allow
|
61
|
-
Action:
|
62
|
-
- dynamodb:PutItem
|
63
|
-
- dynamodb:DeleteItem
|
64
|
-
Resource:
|
65
|
-
- "Fn::GetAtt": [ DelayedJobTable, Arn ]
|
66
|
-
- Effect: Allow
|
67
|
-
Action:
|
68
|
-
- dynamodb:*
|
69
|
-
Resource:
|
70
|
-
- "Fn::GetAtt": [ StatsTable, Arn ]
|
71
|
-
- Effect: Allow
|
72
|
-
Action:
|
73
|
-
- dynamodb:Query
|
74
|
-
Resource:
|
75
|
-
Fn::Join:
|
76
|
-
- ""
|
77
|
-
- - "Fn::GetAtt": [ DelayedJobTable, Arn ]
|
78
|
-
- "/index/performAtIndex"
|
79
|
-
|
80
|
-
custom:
|
81
|
-
# Our stage is based on what is passed in when running serverless
|
82
|
-
# commands. Or fallsback to what we have set in the provider section.
|
83
|
-
stage: ${opt:stage, 'dev'}
|
84
|
-
incomingJobQueueName: ${self:service}-${self:custom.stage}-incoming-jobs
|
85
|
-
incomingJobQueueAccessPolicyName: ${self:service}-${self:custom.stage}-incoming-job-queue-access
|
86
|
-
incomingDeadJobQueueName: ${self:service}-${self:custom.stage}-incoming-dead-jobs
|
87
|
-
activeJobQueueName: ${self:service}-${self:custom.stage}-active-jobs
|
88
|
-
activityQueueName: ${self:service}-${self:custom.stage}-activity
|
89
|
-
activityDeadQueueName: ${self:service}-${self:custom.stage}-activity-dead
|
90
|
-
deadJobQueueName: ${self:service}-${self:custom.stage}-dead-jobs
|
91
|
-
delayedJobTableName: ${self:service}-${self:custom.stage}-delayed-jobs
|
92
|
-
statsTableName: ${self:service}-${self:custom.stage}-stats
|
93
|
-
dashboardName: ${self:service}-${self:custom.stage}-dashboard
|
94
|
-
|
95
|
-
# you can define service wide environment variables here
|
96
|
-
# environment:
|
97
|
-
# variable1: value1
|
98
|
-
|
99
|
-
functions:
|
100
|
-
# TODO - How could other functions be passed in from funktor.yml?
|
101
|
-
#random_job_generator:
|
102
|
-
##handler: lambda_handlers/random_job_generator.RandomJobGenerator.call
|
103
|
-
#image:
|
104
|
-
#name: funktorimage
|
105
|
-
#command:
|
106
|
-
#- lambda_handlers/random_job_generator.RandomJobGenerator.call
|
107
|
-
#timeout: 170
|
108
|
-
#reservedConcurrency: 0
|
109
|
-
#events:
|
110
|
-
#- schedule: rate(1 minute)
|
111
|
-
|
112
|
-
delayed_job_activator:
|
113
|
-
image:
|
114
|
-
name: funktorimage
|
115
|
-
command:
|
116
|
-
- lambda_handlers/delayed_job_activator.call
|
117
|
-
timeout: %{delayed_job_activator.timeout_in_seconds}
|
118
|
-
# TODO - handle memory and concurrency
|
119
|
-
#reservedConcurrency: 1
|
120
|
-
events:
|
121
|
-
- schedule: %{delayed_job_activator.execution_schedule}
|
122
|
-
|
123
|
-
incoming_job_handler:
|
124
|
-
image:
|
125
|
-
name: funktorimage
|
126
|
-
command:
|
127
|
-
- lambda_handlers/incoming_job_handler.call
|
128
|
-
timeout: %{incoming_job_handler.timeout_in_seconds}
|
129
|
-
events:
|
130
|
-
- sqs:
|
131
|
-
arn:
|
132
|
-
Fn::GetAtt:
|
133
|
-
- IncomingJobQueue
|
134
|
-
- Arn
|
135
|
-
|
136
|
-
# TODO - We need one of these per work queue
|
137
|
-
active_job_handler:
|
138
|
-
image:
|
139
|
-
name: funktorimage
|
140
|
-
command:
|
141
|
-
- lambda_handlers/active_job_handler.call
|
142
|
-
timeout: 300
|
143
|
-
events:
|
144
|
-
- sqs:
|
145
|
-
arn:
|
146
|
-
Fn::GetAtt:
|
147
|
-
- ActiveJobQueue
|
148
|
-
- Arn
|
149
|
-
|
150
|
-
# you can add CloudFormation resource templates here
|
151
|
-
resources:
|
152
|
-
- ${file(resources/sqs-queue.yml)}
|
153
|
-
- ${file(resources/sqs-incoming-user.yml)}
|
154
|
-
- ${file(resources/dynamodb-table.yml)}
|
155
|
-
- ${file(resources/cloudfront-dashboard.yml)}
|
156
|
-
|