2015-02-01 10 views
7

stworzyłem funkcję AWS Lambda że:conecting AWS Lambda do przesunięcia ku czerwieni - limit czasu po 60 sekundach

  • loguje redshifcie poprzez JDBC URL
  • uruchamia kwerendę

Lokalnie, za pomocą węzła Mogę pomyślnie połączyć się z instancją Redshift za pośrednictwem JDBC i wykonać zapytanie.

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 

Jednak, kiedy wykonać funkcję AWS lambda (gdzie jest owinięta w async#waterfall bloku), kłody AWS Cloudwatch mi mówi, że funkcja AWS Lambda limit czasu po 60 sekundach.

Jakieś pomysły na to, dlaczego moja funkcja nie jest w stanie nawiązać połączenia?

Odpowiedz

3

Uważam, że możesz albo otworzyć publiczną grupę bezpieczeństwa Redshift we wszystkich źródłach, albo nie. Ponieważ funkcja Lambda nie działa na stałym adresie lub nawet na ustalonym zakresie adresów IP, który jest całkowicie przezroczysty dla użytkowników (bez serwera AKA).

Właśnie widziałem Amazon ogłosił nową funkcję Lambda do obsługi VPC wczoraj. Myślę, że jeśli możemy uruchomić klaster Redshift w VPC, może to rozwiązać problem.

1

Jeśli używasz Serverless-ramową v1.5.0, należy dodać:

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

Ponadto należy dodać wszystkie securityGroupIds na boisku regulaminu, jak poniżej: screenshot 2017-01-09 23 02 33

Więcej informacji: https://serverless.com/framework/docs/providers/aws/guide/functions/#vpc-configuration

1

Wracając, polecam użyć wędzidełka Kinesis [1] w celu podłączenia lambda i redshift. To jest lepsze podejście, jak sugerują dokumenty [2].

Kinesis może używać s3 jako pamięci pośredniej do automatycznego przesyłania danych do redshift za pomocą polecenia kopiowania.

„Polecenie COPY jest najbardziej skutecznym sposobem, aby załadować tabelę. Można także dodać dane do tabel za pomocą poleceń INSERT, choć jest znacznie mniej efektywne niż przy użyciu KOPIA”

Przypisy: [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.