lambda_deployment 0.5.0 → 0.6.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 0d99b5fa506833a681c1e4742fa65570f9326aaf19a0934255405fffe01177af
4
- data.tar.gz: c82b496c5c79667dfefdf7ce202599ed13b46edfe4c52585f0bdb1b7986cdadd
3
+ metadata.gz: 37d0c90c14da9606fbaa83f992feccc843adb8cd202c9aa7578ccc825e37c0c5
4
+ data.tar.gz: 1c628ca0791ca7a218afdf09fea58448e12c4791819e3cc3ba8df15d2cfa00bf
5
5
  SHA512:
6
- metadata.gz: b3d9baa362c4e45acf108c14f6954630667a5bb4a234a09418f3250a57ef1c6d921f6b22c1db37d1ba74f8090311a2041e45ad50ee179cdf84885e39bb3ad598
7
- data.tar.gz: 35d6a51a48b9d6b8c893778a70db14303069a2dd7d8ca080756b22c41277a98a0c21fe089da9641e5db259729fcf0728144a8c7f75bf22e6f497c8572b4664df
6
+ metadata.gz: dcdac3890b938bf74568b268ee6ee1199426fa1e48d99047aa9e3922e3a2f60dbd97d86f714df51b296b021de5ee90caadb81de9477f23eb4cb663167bd571f5
7
+ data.tar.gz: cd09845e1ea8231fb79c271d9c5a53c81292fb1d193ee76f1e345b74755c9fa8d63f6c65a3e5a5cda4f003987da7ba12162a03491cd697f2930d694d61ff5e4f
data/README.md CHANGED
@@ -14,7 +14,8 @@ lambda_deploy [-c path/to/configuration.yml] deploy|release
14
14
  ```
15
15
 
16
16
  ### Deploy action
17
- The deploy action will upload the function to S3, and update the function to
17
+ The deploy action will upload the function to S3, unless the `SKIP_UPLOAD`
18
+ environment variable is set to `true`. It will then update the function to
18
19
  use the new code. If the environmental variable `TAG` is set it will also
19
20
  create a version and link that version to an alias named `TAG`.
20
21
 
@@ -71,7 +72,9 @@ environment:
71
72
  FOO: bar # optional: set some env vars for your Lambda
72
73
  ```
73
74
 
74
- * *file_name* is a path relative to the configuration file
75
+ * *file_name* is the file_name needs to be the path relative to the configuration file.
76
+ It is also used, together with the TAG to generate the S3 key, not that the path, if any will not
77
+ be part of the key. So 'dist/lambda.zip' will result in a S3 key such as 'lambda-v3.zip'.
75
78
  * *project* must match the function name in the AWS console (the last value in
76
79
  the following example):
77
80
  ```
@@ -2,19 +2,23 @@ require 'dotenv'
2
2
 
3
3
  module LambdaDeployment
4
4
  class Configuration
5
- attr_reader :concurrency, :kms_key_arn, :file_path, :project, :region, :s3_bucket, :s3_key, :s3_sse
5
+ attr_reader :concurrency, :kms_key_arn, :file_path, :project, :region, :s3_bucket, :s3_key, :s3_sse, :skip_upload
6
6
 
7
7
  def load_config(config_file)
8
8
  config = YAML.load_file(config_file)
9
+ @skip_upload = ENV.fetch('SKIP_UPLOAD', 'false') == 'true'
9
10
  @project = config.fetch('project')
10
11
  @region = config.fetch('region', ENV.fetch('AWS_REGION', nil))
11
- @file_path = File.expand_path(config.fetch('file_name'), File.dirname(config_file))
12
- raise "File not found: #{@file_path}" unless File.exist?(@file_path)
13
12
 
14
- @s3_bucket = config.fetch('s3_bucket', ENV.fetch('LAMBDA_S3_BUCKET', nil))
15
13
  @s3_key = s3_key_name(config.fetch('file_name'))
14
+ @s3_bucket = config.fetch('s3_bucket', ENV.fetch('LAMBDA_S3_BUCKET', nil))
16
15
  @s3_sse = config.fetch('s3_sse', ENV.fetch('LAMBDA_S3_SSE', nil))
17
16
 
17
+ unless @skip_upload
18
+ @file_path = File.expand_path(config.fetch('file_name'), File.dirname(config_file))
19
+ raise "File not found: #{@file_path}" unless File.exist?(@file_path)
20
+ end
21
+
18
22
  @config_env = config.fetch('environment', {})
19
23
  @kms_key_arn = config.fetch('kms_key_arn', ENV.fetch('LAMBDA_KMS_KEY_ARN', nil))
20
24
 
@@ -1,6 +1,8 @@
1
1
  module LambdaDeployment
2
2
  module Lambda
3
3
  class Deploy
4
+ class ArchiveMissingError < StandardError ; end
5
+
4
6
  def initialize(config)
5
7
  @config = config
6
8
  @client = LambdaDeployment::Client.new(config.region)
@@ -23,6 +25,8 @@ module LambdaDeployment
23
25
  private
24
26
 
25
27
  def upload_to_s3
28
+ return if @config.skip_upload
29
+
26
30
  @client.s3_client.put_object(
27
31
  body: File.read(@config.file_path),
28
32
  bucket: @config.s3_bucket,
@@ -31,7 +35,20 @@ module LambdaDeployment
31
35
  )
32
36
  end
33
37
 
38
+ def code_exists_on_s3?
39
+ @client.s3_client.head_object(
40
+ bucket: @config.s3_bucket,
41
+ key: @config.s3_key
42
+ )
43
+
44
+ true
45
+ rescue Aws::S3::Errors::NotFound
46
+ false
47
+ end
48
+
34
49
  def update_function_code
50
+ raise ArchiveMissingError.new("Could not find an archive on #{@config.s3_bucket} with the key #{@config.s3_key}") unless code_exists_on_s3?
51
+
35
52
  @client.lambda_client.update_function_code(
36
53
  function_name: @config.project,
37
54
  s3_bucket: @config.s3_bucket,
@@ -1,3 +1,3 @@
1
1
  module LambdaDeployment
2
- VERSION = '0.5.0'.freeze
2
+ VERSION = '0.6.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.5.0
4
+ version: 0.6.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: 2018-09-06 00:00:00.000000000 Z
11
+ date: 2018-11-27 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: aws-sdk-kms
@@ -122,6 +122,20 @@ dependencies:
122
122
  - - ">="
123
123
  - !ruby/object:Gem::Version
124
124
  version: '0'
125
+ - !ruby/object:Gem::Dependency
126
+ name: byebug
127
+ requirement: !ruby/object:Gem::Requirement
128
+ requirements:
129
+ - - ">="
130
+ - !ruby/object:Gem::Version
131
+ version: '0'
132
+ type: :development
133
+ prerelease: false
134
+ version_requirements: !ruby/object:Gem::Requirement
135
+ requirements:
136
+ - - ">="
137
+ - !ruby/object:Gem::Version
138
+ version: '0'
125
139
  - !ruby/object:Gem::Dependency
126
140
  name: rubocop
127
141
  requirement: !ruby/object:Gem::Requirement