2 параметры вызывают lambda aws из golang

0

Вопрос

я хочу отправить 2 параметра, которые нужны лямбде для работы, и ей в основном нужно значение, которое я хочу найти, и в качестве второго параметра поле, в котором нужно найти это значение.

Теперь без проблем я смог получить доступ к некоторым другим лямбдам, для которых нужен только один параметр с таким кодом.

func (s *resourceService) GetProject(ctx context.Context, name string) projectStruct {

    payload, err := json.Marshal(name)

    util.Logger.Debugf("Payload",payload)
    invokeOutput, err := s.lambdaSvc.Invoke(ctx, &lambda.InvokeInput{
        FunctionName:   &s.getProject,
        InvocationType: "RequestResponse",
        Payload: payload,

    })
    if err != nil {
        panic(err.Error())
    }
    var project projectStruct
    err = json.Unmarshal(invokeOutput.Payload, &project)
    if err != nil {
        panic(err.Error())
    }

    util.Logger.Debugf("Invocation output [%v]", invokeOutput)
    return project
}

теперь с 2 параметрами у меня было много проблем, и я перепробовал множество различных подходов, начиная с добавления другого значения полезной нагрузки, создания строки с 2 значениями и ее маршалирования, маршалирования обоих параметров и попытки добавить их в качестве полезной нагрузки, даже добавить оба массива маршалированных байтов, но я не смог отправить 2 параметра в качестве полезной нагрузки.

Знаете ли вы, как правильно это сделать? Пожалуйста, Помогите

aws-lambda go
2021-11-22 20:58:11
1

Лучший ответ

0

Лямбда-функции принимают только одну полезную нагрузку. В версии 1 пакета SDK AWS для вызова ввода требуется один []byte параметр, выражающий JSON, как вы уже знаете.

Вы можете структурировать одну полезную нагрузку Json так, чтобы она содержала список. Глядя на ваш пример, полезная нагрузка может выглядеть примерно так

["name","name"]

Вы могли бы изменить свою подпись вот так:

func (s *resourceService) GetProject(ctx context.Context, names []string) projectStruct

json.Marshal может обрабатывать маршалинг среза так же хорошо, как и элементы внутри среза, поэтому оставшийся код не нужно изменять.

Конечно, принимающая функция должна согласовать схему передаваемых данных. Если вы хотите перейти от строки к списку строк, это будет решающим изменением. По этой причине схемы Json обычно используют именованные значения вместо скаляров.

[{ "Name": "Joan"},{"Name":"Susan"}]

Вы можете добавить Age и Address не нарушая функцию приема (хотя, конечно, она будет игнорировать новые поля до тех пор, пока вы не запрограммируете ее игнорировать их).

Потратьте время, чтобы познакомиться с JSON - это простой и выразительный стандарт кодирования, который надежно поддерживается везде. JSON является естественным выбором для кодирования структурированных данных в Go, поскольку JSON хорошо интегрируется с Go со структурами, картами и фрагментами.

2021-11-22 23:47:47

Спасибо за помощь, имея это в виду, я думаю, что собираюсь использовать объект в качестве входных данных и изменить параметр лямбда для работы с ним
Julian Cisneros

На других языках

Эта страница на других языках

Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................