Ten błąd zdarza się, gdy rola jest nieważna (co nie jest prawdą) lub podczas próby utworzenia funkcji Lambda tuż po, czyli do tworzenia rola. Amazon potrzebuje kilku sekund, aby powielić swoją nową rolę we wszystkich regionach. Tak więc, poprawka jest tutaj na odczekanie kilku sekund przed utworzeniem funkcji Lambda.
Rozwiązanie - Przykład 1:
var AWS = require('aws-sdk');
var lambda = new AWS.Lambda();
var params = {}; // define your parameters
lambda.createFunction(params, function(err, data) {
if (err && err.code === 'InvalidParameterValueException') {
// try again after a few seconds
setTimeout(function(){
lambda.createFunction(params, callback);
}, 10000);
} else {
callback(err, data);
}
});
Rozwiązanie - Przykład 2:
Zazwyczaj, czekając przez 5 sekund wystarczy, ale może także być nieco więcej. Aby uzyskać bardziej niezawodne rozwiązanie, można użyć modułu ponownej próby, takiego jak this.
var AWS = require('aws-sdk');
var retry = require('retry');
var lambda = new AWS.Lambda();
var params = {}; // define your parameters
var operation = retry.operation({
retries: 3, // try 1 time and retry 3 times if needed, total = 4
minTimeout: 1 * 1000, // the number of milliseconds before starting the first retry
maxTimeout: 15 * 1000 // the maximum number of milliseconds between two retries
});
operation.attempt(function(currentAttempt) {
lambda.createFunction(params, function(err, data) {
if (operation.retry(err) && err.code === 'InvalidParameterValueException')
return;
callback(err);
});
});
Opublikowaliśmy to pytanie samodzielnie, ponieważ spędziłem bardzo dużo czasu, aby znaleźć problem. Mam nadzieję, że może się przydać innym. – Zanon