bauble_core 0.1.0
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/CHANGELOG.md +5 -0
- data/CODE_OF_CONDUCT.md +84 -0
- data/LICENSE.txt +21 -0
- data/README.md +39 -0
- data/exe/bauble +5 -0
- data/lib/bauble/application.rb +96 -0
- data/lib/bauble/cli/bundle_command_builder.rb +41 -0
- data/lib/bauble/cli/cli.rb +69 -0
- data/lib/bauble/cli/code_bundler.rb +63 -0
- data/lib/bauble/cli/commands/destroy.rb +58 -0
- data/lib/bauble/cli/commands/preview.rb +59 -0
- data/lib/bauble/cli/commands/up.rb +61 -0
- data/lib/bauble/cli/config.rb +44 -0
- data/lib/bauble/cli/docker_command_builder.rb +56 -0
- data/lib/bauble/cli/logger.rb +57 -0
- data/lib/bauble/cli/pulumi.rb +123 -0
- data/lib/bauble/resources/api_gateway_v2.rb +121 -0
- data/lib/bauble/resources/event_bridge_rule.rb +97 -0
- data/lib/bauble/resources/gem_layer.rb +33 -0
- data/lib/bauble/resources/lambda_role.rb +86 -0
- data/lib/bauble/resources/postgres_layer.rb +42 -0
- data/lib/bauble/resources/resource.rb +24 -0
- data/lib/bauble/resources/ruby_function.rb +102 -0
- data/lib/bauble/resources/s3_bucket.rb +35 -0
- data/lib/bauble/resources/sqs_queue.rb +59 -0
- data/lib/bauble/stack.rb +13 -0
- data/lib/bauble/version.rb +5 -0
- data/lib/bauble.rb +16 -0
- data/sig/bauble.rbs +4 -0
- metadata +120 -0
@@ -0,0 +1,102 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'zip'
|
4
|
+
require_relative 'resource'
|
5
|
+
|
6
|
+
# Ruby function
|
7
|
+
module Bauble
|
8
|
+
module Resources
|
9
|
+
# a ruby lambda function
|
10
|
+
class RubyFunction < Resource
|
11
|
+
attr_accessor :handler, :name, :role, :code_dir, :function_url, :env_vars
|
12
|
+
|
13
|
+
def initialize(app, **kwargs)
|
14
|
+
super(app)
|
15
|
+
@name = kwargs[:name]
|
16
|
+
@handler = kwargs[:handler]
|
17
|
+
@code_dir = kwargs[:code_dir]
|
18
|
+
@role = kwargs[:role]
|
19
|
+
@function_url = kwargs.fetch(:function_url, false)
|
20
|
+
@env_vars = kwargs.fetch(:env_vars, {})
|
21
|
+
end
|
22
|
+
|
23
|
+
def bundle
|
24
|
+
return true unless @code_dir
|
25
|
+
|
26
|
+
# generate the asset directory path
|
27
|
+
assets_dir = File.join(@app.config.asset_dir, @app.bundle_hash)
|
28
|
+
FileUtils.mkdir_p(assets_dir)
|
29
|
+
|
30
|
+
# create the zipfile path
|
31
|
+
zipfile_name = File.join(assets_dir, "#{name}.zip")
|
32
|
+
FileUtils.rm_f(zipfile_name)
|
33
|
+
|
34
|
+
# create the zipfile
|
35
|
+
Zip::File.open(zipfile_name, Zip::File::CREATE) do |zipfile|
|
36
|
+
# add the code directory to the zipfile
|
37
|
+
Dir.glob(File.join(@code_dir, '**', '*')).each do |file|
|
38
|
+
zipfile_path = File.join(File.basename(@code_dir), file.sub("#{code_dir}/", ''))
|
39
|
+
zipfile.add(zipfile_path, file)
|
40
|
+
end
|
41
|
+
|
42
|
+
%w[Gemfile Gemfile.lock].each do |gemfile|
|
43
|
+
gemfile_path = File.join(@app.config.root_dir, gemfile)
|
44
|
+
zipfile.add(gemfile, gemfile_path) if File.exist?(gemfile_path)
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
def synthesize
|
50
|
+
template = base_template
|
51
|
+
template.merge!(function_url_template_addon) if @function_url
|
52
|
+
template
|
53
|
+
end
|
54
|
+
|
55
|
+
private
|
56
|
+
|
57
|
+
def base_template
|
58
|
+
{
|
59
|
+
@name => {
|
60
|
+
'type' => 'aws:lambda:Function',
|
61
|
+
'name' => @name,
|
62
|
+
'properties' => {
|
63
|
+
'handler' => @handler,
|
64
|
+
'runtime' => 'ruby3.2',
|
65
|
+
'code' => {
|
66
|
+
'fn::fileArchive' => code_archive
|
67
|
+
},
|
68
|
+
'role' => "${#{@role.role_name}.arn}",
|
69
|
+
'layers' => ['${gemLayer.arn}'],
|
70
|
+
'environment' => {
|
71
|
+
'variables' => @env_vars.merge(
|
72
|
+
{
|
73
|
+
'GEM_PATH' => '/opt/ruby/3.2.0'
|
74
|
+
}
|
75
|
+
)
|
76
|
+
}
|
77
|
+
}
|
78
|
+
}
|
79
|
+
}
|
80
|
+
end
|
81
|
+
|
82
|
+
def code_archive
|
83
|
+
return "#{@app.config.asset_dir}/#{@app.bundle_hash}/#{@name}.zip" if @code_dir
|
84
|
+
|
85
|
+
"#{@app.config.asset_dir}/#{@app.bundle_hash}/shared_app_code"
|
86
|
+
end
|
87
|
+
|
88
|
+
def function_url_template_addon
|
89
|
+
{
|
90
|
+
'function_url' => {
|
91
|
+
'type' => 'aws:lambda:FunctionUrl',
|
92
|
+
'name' => "#{@name}Url",
|
93
|
+
'properties' => {
|
94
|
+
'functionName' => "${#{@name}}",
|
95
|
+
'authorizationType' => 'NONE'
|
96
|
+
}
|
97
|
+
}
|
98
|
+
}
|
99
|
+
end
|
100
|
+
end
|
101
|
+
end
|
102
|
+
end
|
@@ -0,0 +1,35 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require_relative 'resource'
|
4
|
+
|
5
|
+
# bauble bucket to upload assets
|
6
|
+
module Bauble
|
7
|
+
module Resources
|
8
|
+
# S3 bucket
|
9
|
+
class S3Bucket < Resource
|
10
|
+
attr_accessor :bucket_name, :force_destroy
|
11
|
+
|
12
|
+
def initialize(app, bucket_name: 'bauble-bucket', force_destroy: false)
|
13
|
+
super(app)
|
14
|
+
@bucket_name = bucket_name
|
15
|
+
@force_destroy = force_destroy
|
16
|
+
end
|
17
|
+
|
18
|
+
def synthesize
|
19
|
+
{
|
20
|
+
@bucket_name => {
|
21
|
+
'type' => 'aws:s3:Bucket',
|
22
|
+
'properties' => {
|
23
|
+
'bucket' => @bucket_name,
|
24
|
+
'forceDestroy' => @force_destroy
|
25
|
+
}
|
26
|
+
}
|
27
|
+
}
|
28
|
+
end
|
29
|
+
|
30
|
+
def bundle
|
31
|
+
true
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
@@ -0,0 +1,59 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require_relative 'resource'
|
4
|
+
|
5
|
+
# bauble resources to manage infrastructure
|
6
|
+
module Bauble
|
7
|
+
module Resources
|
8
|
+
# SQS Queue
|
9
|
+
class SQSQueue < Resource
|
10
|
+
attr_accessor :name, :visibility_timeout, :lambda_targets
|
11
|
+
|
12
|
+
def initialize(app, name:, visibility_timeout: 30)
|
13
|
+
super(app)
|
14
|
+
@name = name
|
15
|
+
@visibility_timeout = visibility_timeout
|
16
|
+
@lambda_targets = []
|
17
|
+
end
|
18
|
+
|
19
|
+
def synthesize
|
20
|
+
base_template = {
|
21
|
+
@name => {
|
22
|
+
'type' => 'aws:sqs:Queue',
|
23
|
+
'properties' => {
|
24
|
+
'name' => @name,
|
25
|
+
'visibilityTimeoutSeconds' => @visibility_timeout
|
26
|
+
}
|
27
|
+
}
|
28
|
+
}
|
29
|
+
|
30
|
+
@lambda_targets.each { |target| base_template.merge!(target) }
|
31
|
+
|
32
|
+
base_template
|
33
|
+
end
|
34
|
+
|
35
|
+
def bundle
|
36
|
+
true
|
37
|
+
end
|
38
|
+
|
39
|
+
# Function to add a Lambda function as a target to the SQS Queue
|
40
|
+
def add_target(function)
|
41
|
+
@lambda_targets << {
|
42
|
+
"#{@name}_to_#{function.name}" => {
|
43
|
+
'type' => 'aws:lambda:EventSourceMapping',
|
44
|
+
'properties' => {
|
45
|
+
'eventSourceArn' => "${#{name}.arn}",
|
46
|
+
'functionName' => "${#{function.name}.name}",
|
47
|
+
'batchSize' => 10
|
48
|
+
}
|
49
|
+
}
|
50
|
+
}
|
51
|
+
function.role.add_policy_statement(
|
52
|
+
effect: 'Allow',
|
53
|
+
actions: ['sqs:ReceiveMessage', 'sqs:DeleteMessage', 'sqs:GetQueueAttributes'],
|
54
|
+
resources: ["${#{name}.arn}"]
|
55
|
+
)
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
data/lib/bauble/stack.rb
ADDED
data/lib/bauble.rb
ADDED
@@ -0,0 +1,16 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require_relative 'bauble/version'
|
4
|
+
require_relative 'bauble/application'
|
5
|
+
require_relative 'bauble/resources/lambda_role'
|
6
|
+
require_relative 'bauble/resources/s3_bucket'
|
7
|
+
require_relative 'bauble/resources/ruby_function'
|
8
|
+
require_relative 'bauble/resources/gem_layer'
|
9
|
+
require_relative 'bauble/resources/event_bridge_rule'
|
10
|
+
require_relative 'bauble/resources/sqs_queue'
|
11
|
+
require_relative 'bauble/resources/api_gateway_v2'
|
12
|
+
require_relative 'bauble/stack'
|
13
|
+
|
14
|
+
module Bauble
|
15
|
+
class Error < StandardError; end
|
16
|
+
end
|
data/sig/bauble.rbs
ADDED
metadata
ADDED
@@ -0,0 +1,120 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: bauble_core
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- James Hoegerl
|
8
|
+
autorequire:
|
9
|
+
bindir: exe
|
10
|
+
cert_chain: []
|
11
|
+
date: 2024-10-11 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: colorize
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: 1.1.0
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: 1.1.0
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: rubyzip
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - "~>"
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: 2.3.2
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - "~>"
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: 2.3.2
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: thor
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - "~>"
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: 1.3.2
|
48
|
+
type: :runtime
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - "~>"
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: 1.3.2
|
55
|
+
description: |-
|
56
|
+
Bauble is a gem designed to simplify the deployment of your Ruby-based AWS Lambda functions. It
|
57
|
+
provides a streamlined and efficient process, ensuring that your functions are deployed quickly and correctly.
|
58
|
+
email:
|
59
|
+
- james-hoegerl@pluralsight.com
|
60
|
+
executables:
|
61
|
+
- bauble
|
62
|
+
extensions: []
|
63
|
+
extra_rdoc_files: []
|
64
|
+
files:
|
65
|
+
- CHANGELOG.md
|
66
|
+
- CODE_OF_CONDUCT.md
|
67
|
+
- LICENSE.txt
|
68
|
+
- README.md
|
69
|
+
- exe/bauble
|
70
|
+
- lib/bauble.rb
|
71
|
+
- lib/bauble/application.rb
|
72
|
+
- lib/bauble/cli/bundle_command_builder.rb
|
73
|
+
- lib/bauble/cli/cli.rb
|
74
|
+
- lib/bauble/cli/code_bundler.rb
|
75
|
+
- lib/bauble/cli/commands/destroy.rb
|
76
|
+
- lib/bauble/cli/commands/preview.rb
|
77
|
+
- lib/bauble/cli/commands/up.rb
|
78
|
+
- lib/bauble/cli/config.rb
|
79
|
+
- lib/bauble/cli/docker_command_builder.rb
|
80
|
+
- lib/bauble/cli/logger.rb
|
81
|
+
- lib/bauble/cli/pulumi.rb
|
82
|
+
- lib/bauble/resources/api_gateway_v2.rb
|
83
|
+
- lib/bauble/resources/event_bridge_rule.rb
|
84
|
+
- lib/bauble/resources/gem_layer.rb
|
85
|
+
- lib/bauble/resources/lambda_role.rb
|
86
|
+
- lib/bauble/resources/postgres_layer.rb
|
87
|
+
- lib/bauble/resources/resource.rb
|
88
|
+
- lib/bauble/resources/ruby_function.rb
|
89
|
+
- lib/bauble/resources/s3_bucket.rb
|
90
|
+
- lib/bauble/resources/sqs_queue.rb
|
91
|
+
- lib/bauble/stack.rb
|
92
|
+
- lib/bauble/version.rb
|
93
|
+
- sig/bauble.rbs
|
94
|
+
homepage: https://github.com/la-jamesh/bauble
|
95
|
+
licenses:
|
96
|
+
- MIT
|
97
|
+
metadata:
|
98
|
+
homepage_uri: https://github.com/la-jamesh/bauble
|
99
|
+
source_code_uri: https://github.com/la-jamesh/bauble
|
100
|
+
changelog_uri: https://github.com/la-jamesh/bauble
|
101
|
+
post_install_message:
|
102
|
+
rdoc_options: []
|
103
|
+
require_paths:
|
104
|
+
- lib
|
105
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
106
|
+
requirements:
|
107
|
+
- - ">="
|
108
|
+
- !ruby/object:Gem::Version
|
109
|
+
version: 3.0.0
|
110
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
111
|
+
requirements:
|
112
|
+
- - ">="
|
113
|
+
- !ruby/object:Gem::Version
|
114
|
+
version: '0'
|
115
|
+
requirements: []
|
116
|
+
rubygems_version: 3.4.19
|
117
|
+
signing_key:
|
118
|
+
specification_version: 4
|
119
|
+
summary: Deploy Ruby-based AWS Lambda functions easily.
|
120
|
+
test_files: []
|