Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/35.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript InvalidParameterValueException:Lambda无法承担为函数定义的角色_Javascript_Node.js_Amazon Web Services_Aws Sdk_Aws Lambda - Fatal编程技术网

Javascript InvalidParameterValueException:Lambda无法承担为函数定义的角色

Javascript InvalidParameterValueException:Lambda无法承担为函数定义的角色,javascript,node.js,amazon-web-services,aws-sdk,aws-lambda,Javascript,Node.js,Amazon Web Services,Aws Sdk,Aws Lambda,我正在使用,当我尝试创建Lambda函数时,它返回以下错误: InvalidParameterValueException:Lambda无法承担为函数定义的角色 我已经仔细检查了我的角色,它是完全有效的。但是,我仍然无法创建Lambda函数 我的角色信任关系是: { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": {

我正在使用,当我尝试创建Lambda函数时,它返回以下错误:

InvalidParameterValueException:Lambda无法承担为函数定义的角色

我已经仔细检查了我的角色,它是完全有效的。但是,我仍然无法创建Lambda函数

我的角色信任关系是:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                "Service": [
                    "lambda.amazonaws.com"
                ]
            },
            "Action": [
                "sts:AssumeRole"
            ]
        }
    ]
}

当角色无效(事实并非如此)或在角色创建之后尝试创建Lambda函数时,会发生此错误。Amazon需要几秒钟的时间在所有地区复制您的新角色。因此,这里的修复方法是在创建Lambda函数之前等待几秒钟

解决方案-示例1: 解决方案-示例2: 通常,等待5秒钟就足够了,但也可能需要更多的时间。为了获得更健壮的解决方案,您可以使用类似的重试模块


因为我花了很长时间才找到问题,所以我发布了这个自我回答的问题。我希望它可能对其他人有用。+1感谢分享您的解决方案。我也有同样的问题。我自己也试过睡觉,但次数不一。第二种解决方案看起来很稳健。我希望IAM有一个状态代码,表明该角色尚未准备好使用:(
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);
    }
});
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);
    });
});