Как выполнить exe-файл из AWS lambda

Я написал лямбда-функцию, которая выполняет другой исполняемый файл с именем abc.exe.

Теперь я создал zip-файл лямбда-функции и загрузил его в aws. Я не уверен куда поместить мой "abc.exe"

Я попытался поместить его в тот же почтовый индекс, но я получаю следующую ошибку:

exec: "abc": executable file not found in $PATH:

Вот мой код лямбда-функции:

func HandleLambdaEvent(request Request) (Response, error) {

    fmt.Println("Input", request.Input)
    fmt.Println("Output", request.Output)

    cmd := exec.Command("abc", "-v", "--lambda", request.Input, "--out", request.Output)
    var out bytes.Buffer
    var stderr bytes.Buffer
    cmd.Stdout = &out
    cmd.Stderr = &stderr
    err := cmd.Run()

    if err != nil {
        fmt.Println(fmt.Sprint(err) + ": " + stderr.String())
        return Response{Message: fmt.Sprintf(stderr.String())}, nil
    }
    fmt.Println("Result: " + out.String())

    return Response{Message: fmt.Sprintf(" %s and %s are input and output", request.Input, request.Output)}, nil
}

Обновлять:

Испытание 1:

Я загрузил abc.exe на s3, а затем в своей функции HandleLambdaEvent я загружаю его в папку tmp/. И затем, когда я пытаюсь получить к нему доступ после успешной загрузки, он показывает следующую ошибку:

fork/exec /tmp/abc: no such file or directory:

Код для загрузки abc.exe:

file, err2 := os.Create("tmp/abc.exe")
    if err2 != nil {
        fmt.Println("Unable to create file %q, %v", err2)
    }

    defer file.Close()


    sess, _ := session.NewSession(&aws.Config{
        Region: aws.String(region)},
    )

    downloader := s3manager.NewDownloader(sess)

    numBytes, err2 := downloader.Download(file,
        &s3.GetObjectInput{
            Bucket: aws.String(bucket),
            Key:    aws.String("abc.exe"),
        })
    if err2 != nil {
        fmt.Println("Unable to download item %q, %v", fileName, err2)
    }

    fmt.Println("Downloaded", file.Name(), numBytes, "bytes")
    file.Close()

Я почти ничего не знаю о Lambda, но вы уверены, что даже могу выполняете внешний двоичный файл? Мне это кажется нелогичным, как будто это нарушает точку лямбда.

Flimzy 16.03.2019 11:20

Что за файл .exe? Это приложение для Windows?

John Rotenstein 16.03.2019 11:31

@Flimzy, я тоже не уверен. Для меня это тоже метод проб и ошибок. Но чтобы проверить, может ли лямбда выполнять двоичный код, во-первых, мне нужен способ получить к нему доступ из лямбды :)

iMDroid 16.03.2019 12:28

@JohnRotenstein Это исполняемый программный файл golang.

iMDroid 16.03.2019 12:29

Интересно, можно ли просто использовать GO напрямую? объявляет о поддержке Go для AWS Lambda | Блог AWS о вычислительных ресурсах и Создание функций Lambda с помощью Go — AWS Lambda

John Rotenstein 16.03.2019 22:46

Я сомневаюсь, что в целом вы идете в правильном направлении, но непосредственная проблема заключается в том, что .exe никогда не подразумевается в Linux. Полное имя файла, например. exec.Command("abc.exe", ... потребуется.

Michael - sqlbot 16.03.2019 22:49
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
2
6
5 414
1

Ответы 1

are you sure you even can execute an external binary? That seems counter-intuitive to me, like it violates the point of Lambda

Вполне приемлемо. Посмотрите Запуск произвольных исполняемых файлов в AWS Lambda в блоге AWS Compute.

I am not sure where to put my "abc.exe"

Для запуска исполняемых файлов на Lambda упакуйте их в ZIP-файл, который вы загружаете. Затем сделайте что-то вроде

exec.Command(path.Join(os.GetEnv("LAMBDA_TASK_ROOT"), "abc.exe"))

What sort of file is the .exe file? Is it a Windows app?

Вы не сможете запускать приложения Windows на Lambda. Связанный пост в блоге гласит: Если вы компилируете свои собственные двоичные файлы, убедитесь, что они либо статически связаны, либо созданы для соответствующей версии Amazon Linux.

Переменные среды, доступные для лямбда-функций docs.aws.amazon.com/lambda/latest/dg/…

mozey 12.09.2019 11:50

Как бы вы запустили исполняемый файл с аргументами командной строки? Я делаю то же самое на python и могу запустить исполняемый файл через subprocess.Popen(args), где args = "./abc.exe". Могу ли я просто добавить еще один элемент в список аргументов?

Prithvi Boinpally 23.12.2021 00:41

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