Как использовать AWS SDK C ++ XRay в AWS лямбда-слое, реализованном в C ++, который вызывается лямбда-функцией в Python? - PullRequest
11 голосов
/ 26 февраля 2020

Моя команда реализовала конвейер с Computer Vision (OpenCV) и DNN в Tensorflow и Keras, используя C ++. Этот конвейер представляет собой слой AWS, используемый лямбда-функцией AWS, реализованной в Python, и этот слой вызывается из библиотеки Boost.

При необходимости также был создан контейнер docker со всеми требования (OpenCV, Boost, Python 3.7, Serverless и др. c) для построения конвейерного кода (с использованием cmake) и развертывания. Все работало нормально, конвейер и лямбда-функция были успешно построены и развернуты.

Теперь моя задача: чтобы улучшить производительность конвейера, я хотел бы измерить продолжительность нескольких шагов этого конвейера. и я пытался сделать это, используя aws -sdk- cpp -xray.

Перед началом кодирования я добавил и собрал aws -sdk- cpp в том же контейнере docker, который использовал для построения и развертывания конвейера (в качестве слоя) и функций Lambda. (Ниже фрагмент, который я добавил в Dockerfile):

# Build AWS SDK with BUILD_ONLY XRay
RUN mkdir /tmp/${AWS_SDK_CPP}/build
WORKDIR /tmp/${AWS_SDK_CPP}/build

RUN cmake -D CMAKE_BUILD_TYPE=RELEASE \
        -D BUILD_ONLY="xray" \
        -D TARGET_ARCH=LINUX \
        -D CMAKE_INSTALL_PREFIX=/usr/local \
        -D ENABLE_TESTING=OFF \
        -D SIMPLE_INSTALL=OFF \
        -D BUILD_SHARED_LIBS=ON \
        -D BUILD_DEPS=ON \
        ..


RUN make -j $(nproc) && make install

Затем я помещаю ссылки aws -sdk- cpp -xray в CMakeList.txt моего проекта на c ++ ( конвейер), как показано ниже:

cmake_minimum_required(VERSION 3.4.1)
set( CMAKE_CXX_STANDARD 11 )

find_package(AWSSDK REQUIRED COMPONENTS xray)
add_definitions(-DUSE_IMPORT_EXPORT)

SET(GCC_COVERAGE_COMPILE_FLAGS "-rdynamic -O3 -ffunction-sections -fdata-sections")
add_definitions(${GCC_COVERAGE_COMPILE_FLAGS})

find_package(OpenCV REQUIRED)

set( LIB_FOLDER /lib/src )
link_libraries(lib ${OpenCV_LIBS} ${AWSSDK_LINK_LIBRARIES})
target_link_libraries(lib ${OpenCV_LIBS})

include_directories(${LIB_FOLDER}/include)

file(GLOB lib_src
    "${LIB_FOLDER}/**/**.cpp"
)
include_directories(${CMAKE_INSTALL_PREFIX})

file(GLOB aws_sdk_src
    "${CMAKE_INSTALL_PREFIX}/**/**/**.*"
)
add_library(lib SHARED ${lib_src} ${aws_sdk_src})

Наконец, я написал несколько кодов, используя aws -sdk- cpp -xray внутри конвейерного проекта, но без успеха при кодировании (из-за пропущенных выборок) и даже с выполнением Lambda Layer (при тестировании кода XRay).

Теперь, когда я выполняю функцию Lambda, которая использует этот слой (конвейер), я получаю следующую ошибку:

Runtime.ImportModuleError: Unable to import module 'functions/myfunction': /opt/lib/lib.so: undefined symbol: _ZTVN3Aws35AmazonSerializableWebServiceRequestE

  • " myfunction "- это лямбда-функция в Python.
  • " lib.so "- это уровень (конвейер) в c ++.

Итак ... Похоже, проблема с выполнением вызвана установкой aws -sdk- cpp в Dockerfile. Или, может быть, это связано с записями в файле проекта конвейера CMakeList.txt ... Или даже не хватает добавления некоторых файлов * .so, * .a или .so в пакет Layer. Но из-за отсутствия документации / руководства и отсутствия ошибок, описанных выше, я прошу помощи с некоторым примером использования AWS XRay с использованием C ++ или даже альтернатив для реализации этого измерения.

Ps .: Я уже просил примеры в GitHub AWS SDK home, а также. Пожалуйста, по крайней мере, вы можете проголосовать там? https://github.com/awsdocs/aws-doc-sdk-examples/issues/1012

Спасибо!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...