Como invocar uma função do Lambda com uma função nativa do Aurora MySQL
nota
É possível chamar as funções nativas lambda_sync
e lambda_async
ao utilizar o Aurora MySQL versão 2 ou o Aurora MySQL versão 3.01 e posteriores. Para obter mais informações sobre as versões do Aurora MySQL, consult Atualizações do mecanismo de banco de dados Amazon Aurora MySQL.
Você pode invocar uma função do AWS Lambda a partir de um cluster de banco de dados Aurora MySQL chamando as funções nativas lambda_sync
e lambda_async
. Essa abordagem pode ser útil quando você desejar integrar o banco de dados em execução no Aurora MySQL a outros produtos da AWS. Por exemplo, você pode querer enviar uma notificação usando o Amazon Simple Notification Service (Amazon SNS) sempre que uma linha for inserida em uma tabela específica no seu banco de dados.
Sumário
- Como trabalhar com funções nativas para uma função do Lambda
- Conceder o perfil no Aurora MySQL versão 3
- Conceder o privilégio no Aurora MySQL versão 2
- Sintaxe para a função lambda_sync
- Parâmetros para a função lambda_sync
- Exemplo da função lambda_sync
- Sintaxe para a função lambda_async
- Parâmetros para a função lambda_async
- Exemplo da função lambda_async
- Invocar uma função do Lambda em um gatilho
Como trabalhar com funções nativas para uma função do Lambda
As funções lambda_sync
e lambda_async
são funções nativas incorporadas que invocam uma função do Lambda de forma síncrona ou assíncrona. Quando for necessário saber o resultado da função do Lambda antes de passar para outra ação, use a função síncrona lambda_sync
. Quando não for necessário saber o resultado da função Lambda antes de passar para outra ação, use a função assíncrona lambda_async
.
Conceder o perfil no Aurora MySQL versão 3
No Aurora MySQL versão 3, o usuário que invoca uma função nativa deve receber a função AWS_LAMBDA_ACCESS
. Para conceder essa função a um usuário, conecte-se à instância de banco de dados como usuário administrativo e execute o seguinte comando.
GRANT AWS_LAMBDA_ACCESS TO
user
@domain-or-ip-address
É possível revogar essa função executando a seguinte instrução.
REVOKE AWS_LAMBDA_ACCESS FROM
user
@domain-or-ip-address
dica
Ao utilizar a técnica de perfil no Aurora MySQL versão 3, você também pode ativar o perfil usando a instrução SET ROLE
ou role_name
SET ROLE
ALL
. Se não estiver familiarizado com o sistema de funções do MySQL 8.0, é possível saber mais em Modelo de privilégios baseados em funções. Para ver mais detalhes, consulte Using roles
Isso se aplica somente à sessão ativa atual. Ao se reconectar, execute a declaração SET ROLE
novamente para conceder privilégios. Para ter mais informações, consulte a instrução SET ROLE
Você pode usar o parâmetro activate_all_roles_on_login
de cluster de banco de dados para ativar automaticamente todos os perfis quando um usuário se conecta a uma instância de banco de dados. Quando esse parâmetro está definido, não é necessário chamar a declaração SET ROLE
explicitamente para ativar um perfil. Para ter mais informações, consulte activate_all_roles_on_login
No entanto, é necessário chamar SET ROLE ALL
explicitamente no início de um procedimento armazenado para ativar o perfil, quando o procedimento armazenado é chamado por um usuário diferente.
Se você receber um erro como o seguinte ao tentar invocar uma função do Lambda, execute uma instrução SET ROLE
.
SQL Error [1227] [42000]: Access denied; you need (at least one of) the Invoke Lambda privilege(s) for this operation
Conceder o privilégio no Aurora MySQL versão 2
No Aurora MySQL versão 2, o usuário que invoca uma função nativa deve receber o privilégio INVOKE LAMBDA
. Para conceder esse privilégio a um usuário, conecte-se à instância de banco de dados como usuário administrativo e execute o seguinte comando.
GRANT INVOKE LAMBDA ON *.* TO
user
@domain-or-ip-address
Você pode revogar esse privilégio executando o seguinte comando.
REVOKE INVOKE LAMBDA ON *.* FROM
user
@domain-or-ip-address
Sintaxe para a função lambda_sync
Invoque a função lambda_sync
de forma síncrona com o tipo de invocação RequestResponse
. A função retorna o resultado da invocação do Lambda em uma carga JSON. A função tem a seguinte sintaxe.
lambda_sync (
lambda_function_ARN
,
JSON_payload
)
Parâmetros para a função lambda_sync
A função lambda_sync
tem os parâmetros a seguir.
- lambda_function_ARN
-
O nome de recurso da Amazon (ARN) da função Lambda a ser invocada.
- JSON_payload
-
A carga para a função do Lambda, no formato JSON.
nota
O Aurora MySQL versão 3 oferece suporte às funções de análise JSON do MySQL 8.0. No entanto, o Aurora MySQL versão 2 não inclui essas funções. A análise JSON não é necessária quando uma função do Lambda retorna um valor atômico, como um número ou uma string.
Exemplo da função lambda_sync
A consulta a seguir, baseada em lambda_sync
, invoca a função do Lambda BasicTestLambda
de forma síncrona usando o ARN da função. A carga para a função é {"operation": "ping"}
.
SELECT lambda_sync( 'arn:aws:lambda:us-east-1:123456789012:function:BasicTestLambda', '{"operation": "ping"}');
Sintaxe para a função lambda_async
Invoque a função lambda_async
de forma assíncrona com o tipo de invocação Event
. A função retorna o resultado da invocação do Lambda em uma carga JSON. A função tem a seguinte sintaxe.
lambda_async (
lambda_function_ARN
,
JSON_payload
)
Parâmetros para a função lambda_async
A função lambda_async
tem os parâmetros a seguir.
- lambda_function_ARN
-
O nome de recurso da Amazon (ARN) da função Lambda a ser invocada.
- JSON_payload
-
A carga para a função do Lambda, no formato JSON.
nota
O Aurora MySQL versão 3 oferece suporte às funções de análise JSON do MySQL 8.0. No entanto, o Aurora MySQL versão 2 não inclui essas funções. A análise JSON não é necessária quando uma função do Lambda retorna um valor atômico, como um número ou uma string.
Exemplo da função lambda_async
A consulta a seguir, baseada em lambda_async
, invoca a função do Lambda BasicTestLambda
de forma assíncrona usando o ARN da função. A carga para a função é {"operation": "ping"}
.
SELECT lambda_async( 'arn:aws:lambda:us-east-1:123456789012:function:BasicTestLambda', '{"operation": "ping"}');
Invocar uma função do Lambda em um gatilho
Você pode usar triggers para chamar o Lambda em instruções de modificação de dados. O exemplo a seguir usa a função lambda_async
nativa e armazena o resultado em uma variável.
mysql>
SET @result=0;mysql>
DELIMITER //mysql>
CREATE TRIGGER myFirstTrigger AFTER INSERT ON Test_trigger FOR EACH ROW BEGIN SELECT lambda_async( 'arn:aws:lambda:us-east-1:123456789012:function:BasicTestLambda', '{"operation": "ping"}') INTO @result; END; //mysql>
DELIMITER ;
nota
Os gatilhos não são executados uma vez a cada instrução SQL, mas uma vez por linha alterada, uma linha por vez. Quando um trigger é executado, o processo é síncrono. A instrução de modificação de dados só retorna quando o trigger é concluído.
Tenha cuidado ao invocar uma função do AWS Lambda de triggers em tabelas que apresentam alto tráfego de gravação. Os triggers INSERT
, UPDATE
e DELETE
são ativados por linha. Uma workload com muitas gravações em uma tabela com triggers INSERT
, UPDATE
ou DELETE
resulta em um grande número de chamadas para a sua função do AWS Lambda.