javascript - home - InvalidParameterValueException: Lambda no puede asumir el rol definido para la funciĆ³n
https console aws amazon com lambda home region us east 1 (1)
Estoy usando AWS SDK para JavaScript y devuelve el siguiente error cuando intento crear una función Lambda:
InvalidParameterValueException: Lambda no puede asumir el rol definido para la función.
He verificado mi función y es perfectamente válida. Sin embargo, todavía no puedo crear la función Lambda.
Mi relación de confianza es:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"Service": [
"lambda.amazonaws.com"
]
},
"Action": [
"sts:AssumeRole"
]
}
]
}
Este error ocurre cuando la función no es válida (que no es el caso) o cuando intenta crear la función Lambda justo después de la creación del rol. Amazon necesita unos segundos para replicar su nuevo rol en todas las regiones. Entonces, la solución aquí es esperar unos segundos antes de crear la función Lambda .
Solución - Ejemplo 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);
}
});
Solución - Ejemplo 2:
Generalmente, esperar 5 segundos es suficiente, pero también puede llevar un poco más. Para una solución más robusta, puede usar un módulo de reintento como este .
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);
});
});