Conectando AWS Lambda a Redshift – Tiempo de espera después de 60 segundos

Creé una función de AWS Lambda que:

  • inicia sesión en Redshift a través de la URL de JDBC
  • ejecuta una consulta

A nivel local, utilizando Node, puedo conectarme con éxito a la instancia de Redshift a través de JDBC y ejecutar una consulta.

var conString = "postgresql://USER_NAME:[email protected]_URL”; var client = new pg.Client(conString); client.connect(function(err) { if(err) { console.log('could not connect to redshift', err); }  // omitted due to above error 

Sin embargo, cuando ejecuto la función en AWS Lambda (donde está envuelto en un bloque de cascada asíncrono # ), los registros de AWS Cloudwatch me dicen que la función de AWS Lambda expiró después de 60 segundos.

¿Alguna idea sobre por qué mi función no puede conectarse?

Me parece que abres el grupo de seguridad de Redshift a todas las fonts o ninguno. Debido a que la función Lambda no se ejecuta en una dirección fija o incluso en un rango fijo de direcciones IP, que es completamente transparente para los usuarios (AKA sin servidor).

Acabo de ver que Amazon anunció la nueva función Lambda para soportar VPC ayer. Supongo que si podemos ejecutar un cluster Redshift en una VPC, esto podría resolver el problema.

Si está utilizando serverless-framework v1.5.0, debe agregar:

iamRoleStatements: - Effect: Allow Action: - ec2:CreateNetworkInterface Resource: '*' - Effect: Allow Action: - ec2:DeleteNetworkInterface - ec2:DescribeNetworkInterfaces Resource: 'arn:aws:ec2:${self:provider.region}:*:network-interface/*'

También debe agregar todos los securityGroupIds a las reglas de límites, como a continuación: captura de pantalla 2017-01-09 23 02 33

Más información: https://serverless.com/framework/docs/providers/aws/guide/functions/#vpc-configuration

Dando un paso atrás, recomendaría usar la manguera de fuego Kinesis [1] para conectar lambda y el desplazamiento al rojo. Este es un mejor enfoque como se sugiere en los documentos [2].

Kinesis puede usar s3 como almacenamiento intermedio para empujar los datos a un desplazamiento al rojo usando el comando de copia, automáticamente.

“Un comando COPY es la forma más eficiente de cargar una tabla. También puede agregar datos a sus tablas usando los comandos INSERT, aunque es mucho menos eficiente que usar COPY”

Notas al pie: [1] http://docs.aws.amazon.com/firehose/latest/dev/what-is-this-service.html

[2] http://docs.aws.amazon.com/redshift/latest/dg/t_Loading_data.html .

    Intereting Posts