diff --git a/.dockerignore b/.dockerignore index 65e89d0..ff5ea71 100644 --- a/.dockerignore +++ b/.dockerignore @@ -5,4 +5,5 @@ !datadog-lambda.gemspec !.rubocop.yml !Gemfile -!Rakefile \ No newline at end of file +!Rakefile +!handler.rb \ No newline at end of file diff --git a/Dockerfile b/Dockerfile index cdb5f0f..0b1e8b4 100644 --- a/Dockerfile +++ b/Dockerfile @@ -2,8 +2,8 @@ ARG image FROM $image AS builder ARG runtime # Install dev dependencies -COPY . /var/task/datadog-lambda-rb -WORKDIR /var/task/datadog-lambda-rb +COPY . /ruby +WORKDIR /ruby RUN apt-get update RUN apt-get install -y gcc zip binutils @@ -14,6 +14,9 @@ RUN gem build datadog-lambda RUN gem install datadog-lambda --install-dir "/opt/ruby/gems/$runtime" RUN gem install datadog -v 2.0 --install-dir "/opt/ruby/gems/$runtime" +# Copy handler +COPY handler.rb /opt + WORKDIR /opt # Remove native extension debase-ruby_core_source (25MB) runtimes below Ruby 2.6 RUN rm -rf ./ruby/gems/$runtime/gems/debase-ruby_core_source*/ diff --git a/handler.rb b/handler.rb new file mode 100644 index 0000000..a25b1c4 --- /dev/null +++ b/handler.rb @@ -0,0 +1,41 @@ +# frozen_string_literal: true + +# Customer code lives here +LAMBDA_TASK_ROOT = ENV['LAMBDA_TASK_ROOT'] + +# Get the handler file and method from the environment +# file.method +LAMBDA_HANDLER = ENV['DD_LAMBDA_HANDLER'] +handler_file, HANDLER_METHOD = LAMBDA_HANDLER.split('.') + +# Add extension to the handler file +handler_file += '.rb' + +begin + handler_path = File.join(LAMBDA_TASK_ROOT, handler_file) + + raise LoadError, "Handler file not found at: #{handler_path}" unless File.exist?(handler_path) + + load(handler_path) +rescue LoadError => e + puts "Failed to load handler file: #{e.message}" + exit(1) +rescue SyntaxError => e + puts "Syntax error in handler file: #{e.message}" + exit(1) +rescue StandardError => e + puts "Unexpected error while loading handler: #{e.class} - #{e.message}" + exit(1) +end + +require 'datadog/lambda' + +Datadog::Lambda.configure_apm do |c| + # Enable the instrumentation +end + +def handler(event:, context:) + Datadog::Lambda.wrap(event, context) do + Kernel.send(HANDLER_METHOD, event:, context:) + end +end