Короткий ответ: да, это может быть сделано, но только окольным путем.
Если у вас установлена лямбда-функция в качестве запускаемой функции в очереди SQS, служба Lambda опрашивает очередь и обрабатывает прием и удаление сообщения из очереди. Единственный контроль над тем, сколько сообщений читает служба Lambda и сколько экземпляров вашей функции вызывает служба Lambda, - это (a) размер пакета и (b) параллелизм функции.
Ни одно из них не поможет вам при непосредственном применении к вашей функции, потому что установка небольшого числа для пакета (например, 1) приведет к запуску большего количества экземпляров (требуется больше времени для обработки 1 сообщения за раз), а установка большого числа может быть нежелательной в вашем случае, и если это так, то все равно не поможет, если количество сообщений превышает размер пакета или они часто принимаются, и ваша функция уже занята обработкой предыдущего пакета. И вы уже сказали, что параллелизм функции - это не go, потому что вы хотите ограничить параллелизм только из источника, а не из общего числа.
Итак, вот способ, которым это может быть достигнуто: создайте другую функцию с пределом параллелизма: 1, установите его как запускаемую функцию вместо вашей функции. Эта функция будет получать сообщения, и она в свою очередь вызовет вашу функцию с указанным сообщением (ями). Он будет ждать возврата вашей функции, прежде чем вернуться сам. Только когда новая функция вернется, она сможет получить другое сообщение / пакет от службы Lambda и снова вызвать вашу функцию. Таким образом, ваша «реальная» функция не имеет общего ограничения параллелизма, но только один экземпляр может быть запущен / запущен одновременно из вашего источника SQS (через новую функцию).