2015-10-25 15 views
12

Mam funkcję AWS Lambda, która musi łączyć się ze zdalną usługą TCP. Czy istnieje sposób konfigurowania funkcji Lambda z adresem IP usługi zdalnej po wdrożeniu funkcji Lambda w AWS? Czy muszę upiec konfigurację do pakowanej funkcji Lambda przed jej wdrożeniem?Konfiguracja środowiska wykonawczego dla funkcji AWS Lambda

+0

Istnieje prawdopodobnie wiele sposobów na zrobienie tego. Na przykład, możesz mieć funkcję Lambda odczytać konfigurację z tabeli DynamoDB. Lub możesz go posłuchać tematu SNS i uzyskać adres IP z wiadomości wysłanej do tego tematu. Lub można odczytać plik konfiguracyjny z wiadra S3. – garnaat

Odpowiedz

1

Możesz wywołać funkcję Lambda poprzez subskrypcję tematu SNS i skonfigurować ją z ładunku wewnątrz zdarzenia SNS.

Oto oficjalny przewodnik, jak to zrobić: Invoking Lambda via SNS.

4

Znalazłem sposób, w jaki używam do obsługi środowiska testowego i środowiska produkcyjnego, które może ci pomóc.

Dla wersji testowej funkcji, nazywam ją TEST-ConnectToRemoteTcpService, a dla wersji produkcyjnej funkcji nazywam funkcję PRODUCTION-ConnectToRemoteTcpService. To pozwala mi wyciągnąć nazwę środowiska za pomocą wyrażenia regularnego.

Następnie przechowuje config/test.json i config/production.json w pliku zip, który przesyłam jako kod dla funkcji. Ten plik zip zostanie wyodrębniony do katalogu process.env.LAMBDA_TASK_ROOT, gdy funkcja się uruchomi. Mogę więc załadować ten plik i uzyskać potrzebną konfigurację.

Niektóre osoby nie lubią przechowywania pliku konfiguracyjnego w pliku zip, co jest w porządku - wystarczy, że załadujesz plik z S3 lub użyjesz dowolnej strategii.

Kod do odczytu pliku z zip:

const readConfiguration =() => { 
    return new Promise((resolve, reject) => { 
    let environment = /^(.*?)-.*/.exec(process.env.AWS_LAMBDA_FUNCTION_NAME)[1].toLowerCase(); 
    console.log(`environment is ${environment}`); 

    fs.readFile(`${process.env.LAMBDA_TASK_ROOT}/config/${environment}.json`, 'utf8', function (err,data) { 
     if (err) { 
     reject(err); 
     } else { 
     var config = JSON.parse(data); 
     console.log(`configuration is ${data}`); 
     resolve(config); 
     } 
    }); 
    }); 
}; 
0

kilka opcji, w zależności od przypadków użycia

  • Jeśli config nie ulegnie zmianie, można korzystać z obiektów S3 i dostęp z Lambdy lub ustaw Lambdę, aby wyzwoliła nowe zmiany w konfiguracji. (Chociaż jest to najtańszy sposób, jesteś ograniczony co możesz zrobić w porównaniu do innych alternatyw)
  • Jeśli konfiguracja stale się zmienia, to DynamoDB - Klucz/wartość jest alternatywą.
  • Jeśli DynamoDB jest kosztowny dla częstych odczytów/zapisów i nie warty wartości, możesz mieć usługę post-config TCP do kolejki SQS. (Lub SNS, jeśli chcesz wywołać kiedy słupki usługowa nowy config)
4

Wsparcie dla zmiennych środowiskowych było added dla AWS Lambda wyjściowej 18 listopada 2016 Dodawanie zmiennej do istniejącej funkcji może odbywać się za pomocą polecenia linii jak pokazano poniżej lub z konsoli AWS.

aws lambda update-function-configuration \ 
    --function-name MyFunction \ 
    --environment Variables={REMOTE_SERVICE_IP=100.100.100.100} 

Dokumentacja znajduje się pod numerem here.

Powiązane problemy