Как включить функции lambda_sync / lambda_async в Aurora

Когда я пытаюсь предоставить привилегии ПРИЗЫВАТЬ ЛАМБДУ своему пользователю, происходит сбой с синтаксической ошибкой:

mysql> GRANT INVOKE LAMBDA ON mydb.* TO 'myuser'@'myaddress';
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'INVOKE LAMBDA ON mydb.* TO 'myuser'@'myaddress'' at line 1

Функции lambda_sync и lambda_async также не определены:

mysql> select lambda_sync("arn:aws:lambda:ap-southeast-1:xxxxxxxxxxx:function:MyLambda", '{"operation":"ping"}');
ERROR 1305 (42000): FUNCTION mydb.lambda_sync does not exist

Я также пробовал использовать здесь mysql.lambda_sync / mysql.lambda_async.

Согласно документации, эти функции должны быть встроены в мою версию aurora.

You can call the native functions lambda_sync and lambda_async when you use Aurora MySQL version 1.16 and later.

mysql> select AURORA_VERSION();
+------------------+
| AURORA_VERSION() |
+------------------+
| 2.01.1           |
+------------------+
1 row in set (0.10 sec)

The lambda_sync and lambda_async functions are built-in, native functions that invoke a Lambda function synchronously or asynchronously.

Я просмотрел документацию, создал экземпляр aurora с использованием совместимости с mysql 5.7, создал роль в моем кластере db с разрешениями на вызов лямбда-выражения и сделал еще полдюжины вещей, предложенных в документации. Что мне не хватает?

Между словами в _ не должно быть GRANT INVOKE LAMBDA ....

Michael - sqlbot 28.04.2018 01:18

Спасибо, я не хотел, чтобы там был исправлен _.

functionvoid 28.04.2018 12:16
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
В последние годы архитектура микросервисов приобрела популярность как способ построения масштабируемых и гибких приложений. Laravel , популярный PHP...
Как построить CRUD-приложение в Laravel
Как построить CRUD-приложение в Laravel
Laravel - это популярный PHP-фреймворк, который позволяет быстро и легко создавать веб-приложения. Одной из наиболее распространенных задач в...
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
В предыдущем посте мы создали функциональность вставки и чтения для нашей динамической СУБД. В этом посте мы собираемся реализовать функции обновления...
Документирование API с помощью Swagger на Springboot
Документирование API с помощью Swagger на Springboot
В предыдущей статье мы уже узнали, как создать Rest API с помощью Springboot и MySql .
Роли и разрешения пользователей без пакета Laravel 9
Роли и разрешения пользователей без пакета Laravel 9
Этот пост изначально был опубликован на techsolutionstuff.com .
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
В предыдущей статье мы завершили установку базы данных, для тех, кто не знает.
3
2
3 245
4
Перейти к ответу Данный вопрос помечен как решенный

Ответы 4

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

Currently, Aurora MySQL 2.01 does not support features added in Aurora MySQL version 1.16 and later.

https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/AuroraMySQL.Updates.20180206.html

Aurora / MySQL 2.x не является «более поздней» версией, чем Aurora / MySQL 1.x ... это два разных семейства выпусков. Собственные функции вызова Lambda недоступны в 2.x (пока).

Ух ты! Это объясняет, какая боль. Спасибо!

functionvoid 28.04.2018 19:21

См. Мой комментарий ниже ... похоже, на основе моего тестирования Aurora / MySQL 2.x теперь поддерживает собственные лямбда-функции.

tfrancois 16.05.2020 07:40

Я использую экземпляр AWS Aurora 2.02.2, и хотя встроенные функции вызова Lambda еще недоступны, он ДЕЙСТВИТЕЛЬНО поддерживает вызов хранимой процедуры mysql.lambda_async с использованием

CALL mysql.lambda_async('<<<<< AWS LAMBDA ARN GOES HERE >>>>>>', options);

И использование этой хранимой процедуры не требовало явной привилегии GRANT INVOKE LAMBDA для ее запуска. Для меня это сработало из коробки, как только я правильно настроил роли IAM, необходимые в AWS для RDS, чтобы получить доступ к моей лямбда-функции.

Где параметры в приведенном выше вызове - это объект JSON с параметрами, которые вы хотите передать в функцию, полученными параметром события в функции-обработчике Node.JS 8.10.

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

Попробуйте разрешить mysql.lambda_sync / mysql.lambda_async вашим пользователям:

GRANT EXECUTE ON PROCEDURE mysql.lambda_async TO 'your_user'@'%'

По состоянию на 16.05.2020 я использую AWS Aurora MySQL 2.07.2 и могу подтвердить, что наконец-то кажется, что встроенные функции lambda_async и lambda_sync включены и работают. Возможно, недавно Amazon молча включил их, но не объявил публично. Может ли кто-нибудь еще подтвердить то же самое?

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