InvalidParameterValueException: роль, определенная для функции, не может быть принята лямбда-выражением
Я использую AWS SDK для JavaScript, и он возвращает следующую ошибку, когда я пытаюсь создать функцию Lambda:
InvalidParameterValueException: роль, определенная для функции, не может быть принята лямбда-выражением.
Я дважды проверил свою роль, и это совершенно верно. Тем не менее, я все еще не могу создать функцию Lambda.
Моя роль в доверительных отношениях:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"Service": [
"lambda.amazonaws.com"
]
},
"Action": [
"sts:AssumeRole"
]
}
]
}
1 ответ
Эта ошибка возникает, когда роль недействительна (что не так) или когда вы пытаетесь создать функцию Lambda сразу после создания роли. Amazon нужно несколько секунд, чтобы повторить вашу новую роль во всех регионах. Итак, исправление здесь заключается в том, чтобы подождать несколько секунд, прежде чем создавать функцию Lambda.
Решение - Пример 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);
}
});
Решение - Пример 2:
Обычно достаточно 5 секунд ожидания, но это может занять и немного больше. Для более надежного решения вы можете использовать такой модуль повторов.
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);
});
});