【问题标题】:InvalidParameterValueException: The role defined for the function cannot be assumed by LambdaInvalidParameterValueException:为函数定义的角色不能由 Lambda 承担
【发布时间】:2016-09-26 22:48:10
【问题描述】:

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

InvalidParameterValueException:为函数定义的角色不能由 Lambda 承担。

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

我的角色信任关系是:

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

【问题讨论】:

  • 我已经发布了这个自我回答的问题,因为我花了很长时间才找到问题。我希望它对其他人有用。

标签: javascript node.js amazon-web-services aws-sdk aws-lambda


【解决方案1】:

当角色无效(实际情况并非如此)或当您在角色创建之后尝试创建 Lambda 函数时,会发生此错误。亚马逊需要几秒钟来在所有地区复制您的新角色。因此,这里的解决方法是在创建 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 one 这样的重试模块。

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);
    });
});

【讨论】:

  • +1 感谢您分享您的解决方案。我也有同样的问题。我试过自己睡觉,但次数不同。第二种解决方案看起来很强大。我希望 IAM 有一个状态码来表明该角色还没有准备好被使用:(
猜你喜欢
  • 2021-08-30
  • 2021-10-24
  • 2016-07-24
  • 2023-04-06
  • 1970-01-01
  • 2017-05-12
  • 2019-12-17
  • 2021-09-17
  • 1970-01-01
相关资源
最近更新 更多