InvalidParameterValueException:Lambda 无法承担为函数定义的角色
InvalidParameterValueException: The role defined for the function cannot be assumed by Lambda
我正在使用 AWS SDK for JavaScript,当我尝试创建 Lambda 函数时它返回以下错误:
InvalidParameterValueException: The role defined for the function cannot be assumed by Lambda.
我已经仔细检查了我的角色,它完全有效。但是,我仍然无法创建 Lambda 函数。
我的角色信任关系是:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"Service": [
"lambda.amazonaws.com"
]
},
"Action": [
"sts:AssumeRole"
]
}
]
}
当角色无效(实际情况并非如此)或当您在角色创建之后尝试创建 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秒就够了,但也可以多等一点。要获得更强大的解决方案,您可以使用 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);
});
});
我正在使用 AWS SDK for JavaScript,当我尝试创建 Lambda 函数时它返回以下错误:
InvalidParameterValueException: The role defined for the function cannot be assumed by Lambda.
我已经仔细检查了我的角色,它完全有效。但是,我仍然无法创建 Lambda 函数。
我的角色信任关系是:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"Service": [
"lambda.amazonaws.com"
]
},
"Action": [
"sts:AssumeRole"
]
}
]
}
当角色无效(实际情况并非如此)或当您在角色创建之后尝试创建 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秒就够了,但也可以多等一点。要获得更强大的解决方案,您可以使用 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);
});
});