class LambdaDeployment::Lambda::Deploy
Public Class Methods
new(config)
click to toggle source
# File lib/lambda_deployment/lambda/deploy.rb, line 6 def initialize(config) @config = config @client = LambdaDeployment::Client.new(config.region) end
Public Instance Methods
run()
click to toggle source
# File lib/lambda_deployment/lambda/deploy.rb, line 11 def run upload_to_s3 update_function_code update_environment update_concurrency return unless @config.alias_name version = publish_version begin create_alias(version) rescue Aws::Lambda::Errors::ResourceConflictException update_alias(version) end end
Private Instance Methods
alias_params(version)
click to toggle source
# File lib/lambda_deployment/lambda/deploy.rb, line 108 def alias_params(version) { function_name: @config.project, name: @config.alias_name, function_version: version } end
code_exists_on_s3?()
click to toggle source
# File lib/lambda_deployment/lambda/deploy.rb, line 38 def code_exists_on_s3? @client.s3_client.head_object( bucket: @config.s3_bucket, key: @config.s3_key ) true rescue Aws::S3::Errors::NotFound false end
create_alias(version)
click to toggle source
# File lib/lambda_deployment/lambda/deploy.rb, line 100 def create_alias(version) @client.lambda_client.create_alias(alias_params(version)) end
encrypt(value)
click to toggle source
# File lib/lambda_deployment/lambda/deploy.rb, line 84 def encrypt(value) return value unless @config.kms_key_arn Base64.encode64( @client.kms_client.encrypt( key_id: @config.kms_key_arn, plaintext: value ).ciphertext_blob ) end
publish_version()
click to toggle source
# File lib/lambda_deployment/lambda/deploy.rb, line 94 def publish_version @client.lambda_client.publish_version( function_name: @config.project ).version end
update_alias(version)
click to toggle source
# File lib/lambda_deployment/lambda/deploy.rb, line 104 def update_alias(version) @client.lambda_client.update_alias(alias_params(version)) end
update_concurrency()
click to toggle source
# File lib/lambda_deployment/lambda/deploy.rb, line 59 def update_concurrency return unless @config.concurrency # Allow a value of -1 to remove concurrency limit if @config.concurrency == -1 @client.lambda_client.delete_function_concurrency(function_name: @config.project) else @client.lambda_client.put_function_concurrency( function_name: @config.project, reserved_concurrent_executions: @config.concurrency ) end end
update_environment()
click to toggle source
# File lib/lambda_deployment/lambda/deploy.rb, line 72 def update_environment environment = {} @config.environment.map { |k, v| environment[k] = encrypt(v) } @client.lambda_client.update_function_configuration( function_name: @config.project, kms_key_arn: @config.kms_key_arn, environment: { variables: environment } ) end
update_function_code()
click to toggle source
# File lib/lambda_deployment/lambda/deploy.rb, line 49 def update_function_code raise ArchiveMissingError.new("Could not find an archive on #{@config.s3_bucket} with the key #{@config.s3_key}") unless code_exists_on_s3? @client.lambda_client.update_function_code( function_name: @config.project, s3_bucket: @config.s3_bucket, s3_key: @config.s3_key ) end
upload_to_s3()
click to toggle source
# File lib/lambda_deployment/lambda/deploy.rb, line 27 def upload_to_s3 return if @config.skip_upload @client.s3_client.put_object( body: File.read(@config.file_path), bucket: @config.s3_bucket, key: @config.s3_key, server_side_encryption: @config.s3_sse ) end