AWS

15 dez, 2016

Atualização no Amazon Aurora: chame funções Lambda a partir de procedimentos armazenados; carregue dados do S3

Publicidade

Muitos serviços da AWS funcionam muito bem por si só, mas são ainda melhores juntos! Este aspecto importante do nosso modelo permite que você selecione um único serviço, aprender sobre ele, obter alguma experiência com ele, e, em seguida, estender o seu espaço para outros serviços relacionados com o tempo. Por outro lado, as oportunidades para fazer com que os serviços trabalhem em conjunto estão sempre presentes e nós temos algumas delas no nosso roteiro orientado para o cliente.

Hoje eu gostaria de falar sobre dois novos recursos para o Amazon Aurora, o nosso banco de dados relacional compatível com MySQL:

Invocação de Funções Lambda – Os procedimentos armazenados que você cria dentro dos seus bancos de dados Amazon Aurora pode agora podem invocar funções AWS Lambda.

Carregar dados do S3 – Agora você pode importar dados armazenados em um bucket do Amazon Simple Storage Service (S3) em uma tabela em um banco de dados Amazon Aurora.

Como esses recursos envolvem o Amazon Aurora e outro serviço AWS, você deve conceder permissão ao Amazon Aurora para acessar o serviço através da criação de uma Política de IAM e uma função IAM e, em seguida, colocar a função no seu cluster de banco de dados do Amazon Aurora. Para saber como fazer isso, consulte Authorizing Amazon Aurora to Access Other AWS Services On Your Behalf.

Função de Integração Lambda

Os bancos de dados relacionais usam uma combinação de triggers e procedimentos armazenados para permitir a implementação de funcionalidades de alto nível. Os triggers são ativados antes ou depois que algumas operações de interesse são realizadas em uma tabela de banco de dados particular. Por exemplo, porque a Amazon Aurora é compatível com o MySQL, ele suporta triggers nas operações INSERT, UPDATE e DELETE. Os procedimentos de armazenamento são scripts que podem ser executados em resposta à ativação de um trigger.

Agora você pode escrever procedimentos armazenados que invocam funções Lambda. Este novo mecanismo de extensibilidade permite que você conecte seu banco de dados baseado no Aurora a outros serviços da AWS. Você pode enviar e-mail usando o Amazon Simple Email Service (SES), emitir uma notificação usando o Amazon Simple Notification Service (SNS), inserir métricas públicas para o Amazon CloudWatch, atualizar uma tabela no Amazon DynamoDB e muito mais.

No nível de aplicação, você pode implementar tarefas de ETL complexas e fluxos de trabalho, ações de pista e de auditoria em tabelas de banco de dados e realizar o monitoramento de desempenho avançado e análise.

O seu procedimento armazenado deve chamar o procedimento mysql_lambda_async. Este procedimento, como o nome indica, invoca a função Lambda desejada de forma assíncrona e não espera por ela para concluir antes de prosseguir. Como de costume, você terá que dar sua permissão à função Lambda para acessar quaisquer serviços ou recursos AWS desejados.

Para saber mais, leia Invoking a Lambda Function from an Amazon Aurora DB Cluster.

Carregar dados do S3

Como outra forma de integração, os dados armazenados em um bucket S3 podem agora ser importados diretamente para o Aurora (até agora você teria que copiar os dados para uma instância EC2 e importá-los de lá).

Os dados podem ser localizados em qualquer região AWS que seja acessível a partir do seu cluster Amazon Aurora e pode estar em texto ou em formato XML.

Para importar os dados em forma de texto, use o novo comando LOAD DATA FROM S3. Este comando aceita muitas das mesmas opções que LOAD DATA INFILE do MySQL, mas não suporta dados compactados. Você pode especificar linha e campo delimitadores e o conjunto de caracteres e você pode ignorar qualquer número desejado de linhas ou rows no início dos dados.

Para importar dados em forma de XML, use o novo comando LOAD DATA FROM S3. Seu XML pode ter esta aparência:

<row column1="value1" column2="value2" />
...
<row column1="value1" column2="value2" />

ou esta:

<row>
  <column1>value1</column1>
  <column2>value2</column2>
</row>
...

ou esta:

<row>
  <field name="column1">value1</field>
  <field name="column2">value2</field>
</row>
...

Para saber mais, leia Loading Data Into a DB Cluster From Text Files in an Amazon S3 Bucket.