diff --git a/lambda/README.md b/lambda/README.md index 512cf16f..458afffc 100644 --- a/lambda/README.md +++ b/lambda/README.md @@ -1,6 +1,6 @@ # SolarWinds Lambda Ruby Layer -## Building Lambda Ruby Layer With OpenTelemetry Ruby Dependencies Using SAM +## Building Lambda Ruby Layer with OpenTelemetry Ruby Dependencies Using SAM Build @@ -22,12 +22,18 @@ ruby └── specifications ``` -Zip the file for uploading to ruby lambda layer +Zip the layer to file ```bash cd .aws-sam/build/OTelLayer/ zip -qr ../../../.zip ruby/ cd - -# or run following script -zip_layer.sh -n +``` + +## Building Lambda Ruby Layer with build-ruby Docker image + +Execute the following command to build layer that is compatible with 3.2, 3.3 and 3.4 + +```bash +./build.sh ``` diff --git a/lambda/build.sh b/lambda/build.sh index fcaf099d..65fbe046 100755 --- a/lambda/build.sh +++ b/lambda/build.sh @@ -3,11 +3,10 @@ set -e if [ $SOLARWINDS_SOURCE = 'Local' ]; then cd ../ - sudo apt-get update && sudo apt-get install -y --no-install-recommends ruby ruby-dev g++ make swig bison + sudo apt-get update && sudo apt-get install -y --no-install-recommends ruby ruby-dev g++ make sudo gem install bundler sudo echo 'gem: --no-document' >> ~/.gemrc - sudo bundle install --without development --without test - sudo bundle exec rake fetch_oboe_file["prod"] + sudo bundle config set --local without 'test development' sudo gem build solarwinds_apm.gemspec CURRENT_GEM=$(ls | grep solarwinds_apm-*.gem) mv $CURRENT_GEM lambda/otel/layer/ @@ -32,8 +31,16 @@ docker build --no-cache \ docker run --rm -v "$(pwd)/build:/out" sw-lambda-ruby-layer-3-3 +docker build --no-cache \ + --build-arg BUNDLE_RUBYGEMS__PKG__GITHUB__COM=${GITHUB_RUBY_TOKEN} \ + --progress plain \ + -f otel/Dockerfile_3_4 \ + -t sw-lambda-ruby-layer-3-4 otel + +docker run --rm -v "$(pwd)/build:/out" sw-lambda-ruby-layer-3-4 + cd build/ mkdir solarwinds-apm && mkdir ruby && mkdir ruby/gems -unzip -q gems-3.2.0.zip -d ruby/gems/ && unzip -q gems-3.3.0.zip -d ruby/gems/ +unzip -q gems-3.2.0.zip -d ruby/gems/ && unzip -q gems-3.3.0.zip -d ruby/gems/ && unzip -q gems-3.4.0.zip -d ruby/gems/ cp ../otel/layer/otel_wrapper.rb . && cp ../otel/layer/wrapper solarwinds-apm/ zip -qr ruby-layer-$MATRIX_ARCH.zip ruby/ solarwinds-apm/ otel_wrapper.rb diff --git a/lambda/otel/Dockerfile_3_4 b/lambda/otel/Dockerfile_3_4 new file mode 100644 index 00000000..20e4b2bf --- /dev/null +++ b/lambda/otel/Dockerfile_3_4 @@ -0,0 +1,28 @@ +FROM public.ecr.aws/sam/build-ruby3.4:latest + +ARG BUNDLE_RUBYGEMS__PKG__GITHUB__COM +ENV LAMBDA_TASK_ROOT=/fake_lambda_task_root/ + +RUN mkdir /build +COPY . /build + +WORKDIR /build/layer +RUN bundle config set --local path 'ruby' + +RUN ls | grep solarwinds_apm-*.gem > gem_file.txt 2>/dev/null || true +RUN export gem_file=$(cat gem_file.txt) && \ + if [ -f "$gem_file" ]; then \ + echo "$gem_file exists."; \ + sed -i '$ s/^/#/' /build/layer/Gemfile; \ + bundle update; \ + bundle exec gem install $gem_file; \ + else \ + bundle update; \ + fi + +RUN rm /build/layer/ruby/ruby/3.4.0/cache/* && rm -rf /build/layer/ruby/ruby/3.4.0/doc/* + +WORKDIR /build/layer/ruby/ruby +RUN zip -qr gems-3.4.0.zip 3.4.0/ + +CMD cp /build/layer/ruby/ruby/gems-3.4.0.zip /out/gems-3.4.0.zip diff --git a/lambda/otel/layer/Gemfile b/lambda/otel/layer/Gemfile index 320c3824..e85297fc 100644 --- a/lambda/otel/layer/Gemfile +++ b/lambda/otel/layer/Gemfile @@ -6,7 +6,4 @@ source 'https://rubygems.org' # source 'https://rubygems.pkg.github.com/solarwinds' do # end -gem 'opentelemetry-api', '1.4.0' -gem 'opentelemetry-exporter-otlp', '0.30.0' -gem 'opentelemetry-exporter-otlp-metrics', '0.4.0' -gem 'solarwinds_apm', '6.1.2' +gem 'solarwinds_apm', '7.0.0.prev1' diff --git a/lambda/zip_layer.sh b/lambda/zip_layer.sh deleted file mode 100755 index f477fcff..00000000 --- a/lambda/zip_layer.sh +++ /dev/null @@ -1,39 +0,0 @@ -#!/bin/sh - -set -e -set -u - -echo_usage() { - echo "usage: Build Lambda layer/application by SAM" - echo " -n " -} - - -main() { - echo "running..." - layerName="opentelemetry-ruby-layer" - - while getopts "n:h" opt; do - case "${opt}" in - h) - echo_usage - exit 0 - ;; - n) - layerName="${OPTARG}" - ;; - \?) - exit 1 - ;; - :) - echo "Option -${OPTARG} requires an argument" >&2 - exit 1 - ;; - esac - done - - (cd .aws-sam/build/OTelLayer/ && zip -qr ../"$layerName".zip .) - mv .aws-sam/build/"$layerName".zip . -} - -main "$@"