lambda_deployment 0.1.4 → 0.2.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: cee5ecd45081eeb25e952b786091cafb838701cd
4
- data.tar.gz: dac42999278efecc8551db272f7924afe654fa17
3
+ metadata.gz: 9d8840ac60400c3a61e7bd801c9f3d53160eb5c1
4
+ data.tar.gz: e8796fa101bf6d505400f4da0ae260c3bc167d21
5
5
  SHA512:
6
- metadata.gz: 729b2e012d79bb2d8b265d7d5f3c3f59794b48a925bf6761614e433f9e5e4db9a4cd015d540584b42b53e1ab44de420cf5b21b862c41bf22af35eacb6046a9b0
7
- data.tar.gz: 954f3352675605f323e7e3ff9739b9ae06a64a15005cc4930ecd5b4e7336a31c0e8a034f9f9de5c181f8b79361353e16efe3e346818c8f573f89838d18a34464
6
+ metadata.gz: e39da174345e0e56445d8111644ce055f3d93c67068c388e71e5c6feecb826ab1fbdc75c409310d65ac12a57c07c7041105e82ba8187b1d19e97c0f93cd0b083
7
+ data.tar.gz: c8eb26318070c5046495be0cfc0c96dec046bad9df9faa123f360fd4aa5c062d3541aff1abd5ec524b3904b28fe915378a21d26466a4f71e88cd320d93ee55ad
data/README.md CHANGED
@@ -66,6 +66,8 @@ project: my-dev-lambda-name # required: name of lambda function
66
66
  region: us-east-1 # optional: specify AWS region (will override $AWS_REGION)
67
67
  s3_bucket: my-test-bucket # optional: specify s3 bucket (will override $LAMBDA_S3_BUCKET)
68
68
  s3_sse: AES256 # optional: set server side encryption on s3 objects (will override $LAMBDA_S3_SSE)
69
+ environment:
70
+ FOO: bar # optional: set some env vars for your Lambda
69
71
  ```
70
72
 
71
73
  * *file_name* is a path relative to the configuration file
@@ -4,6 +4,10 @@ module LambdaDeployment
4
4
  @region = region
5
5
  end
6
6
 
7
+ def kms_client
8
+ @kms_client ||= Aws::KMS::Client.new(config)
9
+ end
10
+
7
11
  def lambda_client
8
12
  @lambda_client ||= Aws::Lambda::Client.new(config)
9
13
  end
@@ -1,6 +1,8 @@
1
+ require 'dotenv'
2
+
1
3
  module LambdaDeployment
2
4
  class Configuration
3
- attr_reader :file_path, :project, :region, :s3_bucket, :s3_key, :s3_sse
5
+ attr_reader :kms_key_arn, :file_path, :project, :region, :s3_bucket, :s3_key, :s3_sse
4
6
 
5
7
  def load_config(config_file)
6
8
  config = YAML.load_file(config_file)
@@ -12,6 +14,9 @@ module LambdaDeployment
12
14
  @s3_bucket = config.fetch('s3_bucket', ENV.fetch('LAMBDA_S3_BUCKET', nil))
13
15
  @s3_key = s3_key_name(config.fetch('file_name'))
14
16
  @s3_sse = config.fetch('s3_sse', ENV.fetch('LAMBDA_S3_SSE', nil))
17
+
18
+ @config_env = config.fetch('environment', {})
19
+ @kms_key_arn = config.fetch('kms_key_arn', ENV.fetch('LAMBDA_KMS_KEY_ARN', nil))
15
20
  end
16
21
 
17
22
  # lambda aliases must satisfy (?!^[0-9]+$)([a-zA-Z0-9-_]+)
@@ -22,6 +27,12 @@ module LambdaDeployment
22
27
  tag
23
28
  end
24
29
 
30
+ def environment
31
+ @environment_cache ||= Dir.glob('.env*').reduce({}) do |cache, filename|
32
+ cache.merge Dotenv::Environment.new(filename)
33
+ end.merge(@config_env)
34
+ end
35
+
25
36
  private
26
37
 
27
38
  def s3_key_name(file_name)
@@ -9,6 +9,7 @@ module LambdaDeployment
9
9
  def run
10
10
  upload_to_s3
11
11
  update_function_code
12
+ update_environment
12
13
  return unless @config.alias_name
13
14
  version = publish_version
14
15
  begin
@@ -37,6 +38,28 @@ module LambdaDeployment
37
38
  )
38
39
  end
39
40
 
41
+ def update_environment
42
+ environment = {}
43
+ @config.environment.map { |k, v| environment[k] = encrypt(v) }
44
+ @client.lambda_client.update_function_configuration(
45
+ function_name: @config.project,
46
+ kms_key_arn: @config.kms_key_arn,
47
+ environment: {
48
+ variables: environment
49
+ }
50
+ )
51
+ end
52
+
53
+ def encrypt(value)
54
+ return value unless @config.kms_key_arn
55
+ Base64.encode64(
56
+ @client.kms_client.encrypt(
57
+ key_id: @config.kms_key_arn,
58
+ plaintext: value
59
+ ).ciphertext_blob
60
+ )
61
+ end
62
+
40
63
  def publish_version
41
64
  @client.lambda_client.publish_version(
42
65
  function_name: @config.project
@@ -1,3 +1,3 @@
1
1
  module LambdaDeployment
2
- VERSION = '0.1.4'.freeze
2
+ VERSION = '0.2.0'.freeze
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: lambda_deployment
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.4
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Zendesk CloudOps
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-09-28 00:00:00.000000000 Z
11
+ date: 2017-11-22 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: aws-sdk-core
@@ -24,6 +24,20 @@ dependencies:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
26
  version: '2'
27
+ - !ruby/object:Gem::Dependency
28
+ name: dotenv
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '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'
27
41
  - !ruby/object:Gem::Dependency
28
42
  name: rspec
29
43
  requirement: !ruby/object:Gem::Requirement
@@ -66,6 +80,34 @@ dependencies:
66
80
  - - ">="
67
81
  - !ruby/object:Gem::Version
68
82
  version: '0'
83
+ - !ruby/object:Gem::Dependency
84
+ name: bump
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - ">="
88
+ - !ruby/object:Gem::Version
89
+ version: '0'
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - ">="
95
+ - !ruby/object:Gem::Version
96
+ version: '0'
97
+ - !ruby/object:Gem::Dependency
98
+ name: forking_test_runner
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - ">="
102
+ - !ruby/object:Gem::Version
103
+ version: '0'
104
+ type: :development
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - ">="
109
+ - !ruby/object:Gem::Version
110
+ version: '0'
69
111
  description:
70
112
  email:
71
113
  executables:
@@ -102,7 +144,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
102
144
  version: '0'
103
145
  requirements: []
104
146
  rubyforge_project:
105
- rubygems_version: 2.5.1
147
+ rubygems_version: 2.6.11
106
148
  signing_key:
107
149
  specification_version: 4
108
150
  summary: Lambda Deployment Library