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