Вызов двоичного файла в aws lambda с ржавчиной

Итак, у меня есть следующая лямбда-функция rust aws:

use std::io::Read;
use std::process::{Command, Stdio};
use lambda_http::{run, service_fn, Body, Error, Request, RequestExt, Response};
use lambda_http::aws_lambda_events::serde_json::json;

/// This is the main body for the function.
/// Write your code inside it.
/// There are some code example in the following URLs:
/// - https://github.com/awslabs/aws-lambda-rust-runtime/tree/main/examples
async fn function_handler(_event: Request) -> Result<Response<Body>, Error> {
    // Extract some useful information from the request
    let program = Command::new("./myProggram")
        .stdout(Stdio::piped())
        .output()
        .expect("failed to execute process");

    let data = String::from_utf8(program.stdout).unwrap();
    let parsed = data.split("\n").filter(|x| !x.is_empty()).collect::<Vec<&str>>();

    // Return something that implements IntoResponse.
    // It will be serialized to the right response event automatically by the runtime
    let resp = Response::builder()
        .status(200)
        .header("content-type", "application/json")
        .body(json!(parsed).to_string().into())
        .map_err(Box::new)?;
    Ok(resp)
}

#[tokio::main]
async fn main() -> Result<(), Error> {
    tracing_subscriber::fmt()
        .with_max_level(tracing::Level::INFO)
        // disable printing the name of the module in every log line.
        .with_target(false)
        // disabling time is handy because CloudWatch will add the ingestion time.
        .without_time()
        .init();

    run(service_fn(function_handler)).await
}

Идея здесь в том, что я хочу вернуть ответ из бинарника в формате JSON.

Я компилирую функцию с лямбдой Cargo, которая создает файл начальной загрузки, затем я заархивирую его вручную, включив двоичный файл начальной загрузки и двоичный файл myProgram.

Когда я проверяю свою функцию на лямбда-панели, отправляя ей событие, я получаю ответ с правильными заголовками и т. д., но тело ответа пусто. Я развертываю свою функцию через панель aws в пользовательской среде выполнения на Amazon Linux 2, загружая zip-файл.

Когда я тестирую локально с помощью Cargo Lambda Watch и Cargo Lambda, тело ответа заполняется стандартным выводом myProgram, преобразованным в json.

Любые идеи или мысли о том, что пойдет не так в реальном облаке, очень ценятся!

Вы пытаетесь выполнить команду в aws lambda из среды выполнения Rust? Вы уверены, что это действительно работает? Я имею в виду, что ответ пуст, может быть, потому, что нет вывода??

brushtakopo 09.01.2023 11:45

да, как я уже описал, на локальном компьютере, когда я вызываю функцию с помощью вызова лямбда-груза, я получаю вывод из myProgram, отформатированный как json

themartto 09.01.2023 12:20

Я не говорю о вашем локальном, но в лямбда-выражении AWS, вы уверены, что ./myProgram работает? Я имею в виду, вы можете как-то распечатать содержимое program? Возможно, output пуст, потому что ./myProggram не запущен

brushtakopo 09.01.2023 12:26

Спасибо, что указали мне правильное направление. Не уверен, почему я не подумал о проверке STDERR в начале.

themartto 10.01.2023 08:40
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
4
59
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Моя проблема была с динамически подключаемыми библиотеками в бинарнике. На самом деле это двоичный файл Python, и в нем отсутствовала конкретная версия GLIBC. Самым простым решением в моем случае было скомпилировать myProgram на Amazon Linux 2.

Другие вопросы по теме