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);
    });
});
Другие вопросы по тегам