今天我有一个新的AWS Lambda问题,在谷歌的任何地方找不到。
我新增了一个Lambda函数,毫无疑问。 但是当我在这个函数中输入任何代码时[例如。 console.log();]并单击“保存”,出现错误: “提供的执行角色没有权限在EC2上调用DescribeNetworkInterfaces”
exports.handler = (event, context, callback) => {
callback(null, 'Hello from Lambda');
console.log(); // here is my code
};
我使用Role绑定了该函数:lambda_excute_execution(Policy:AmazonElasticTranscoderFullAccess) 此功能现在不与任何触发器绑定。
然后,我赋予角色“AdministratorAccess”策略,我可以正确保存我的源代码。
此角色可以在今天之前成功运行函数。
有人知道这个错误吗?
非常感谢!
答案 0 :(得分:8)
如果您使用的是Terraform,只需添加:
Value1.1 (T1.ID=1, T2.ID=1) = (T1.Value1 * T2.Perc1) + (T1.Value2 * T2.Perc2) = (1000 * 10%) + (5000*5%) = 350
Value1.2(T1.ID=1, T2.ID=2) = (T1.Value1 * T2.Perc1) + (T1.Value2 * T2.Perc2) = (1000 * 15%) + (5000*2%) = 250
Value1.3 (T1.ID=1, T2.ID=3) = (T1.Value1 * T2.Perc1) + (T1.Value2 * T2.Perc2) = (1000 * 20%) + (5000*8%) = 600
Value2.1 (T1.ID=1, T2.ID=1, T3.ID=1) = (1000 * 8%) + (5000*3%) = 230 < Value1.1 -> MaybeMax1= Value2.1 = 230
Value2.2 (T1.ID=1, T2.ID=2, T3.ID=2) = (1000 * 10%) + (5000*8%) = 500 > Value1.2 -> MaybeMax2 = Value1.2 = 500
Value2.3 (T1.ID=1, T2.ID=3, T3.ID=3) = (1000 * 9%) + (5000*7%) = 440 > Value1.3 -> MaybeMax3 = Value2.3 = 440
**MaxValue**
MaxValue(T1.ID=1)=Max(230, 500, 440) = 500
答案 1 :(得分:2)
AWSLambdaVPCAccessExecutionRole
托管策略就像手套一样适合(并且我们都知道IAM托管策略是AWS推荐的最佳实践)。将aws lambda get-function-configuration
输出到grep中以生成角色 (可能是更简洁/更精简/更简单的方式)
aws lambda get-function-configuration \
--function-name <<your function name or ARN here>> \
| grep "Role"
返回
"Role": "arn:aws:iam::000000000000:role/service-role/your-service-role-name",
在角色ARN的最后斜杠 your-service-role-name
到#2
AWSLambdaVPCAccessExecutionRole
附加到服务角色aws iam attach-role-policy \
--role-name your-service-role-name \
--policy-arn arn:aws:iam::aws:policy/service-role/AWSLambdaVPCAccessExecutionRole
答案 2 :(得分:2)
这是一种快速而肮脏的解决错误的方法。
在 AWS 控制台上打开 IAM
,选择附加到 Lambda 函数的角色并为其授予 EC2FullAccess
权限。
这将允许您通过授予 EC2 控制访问权限来更新 Lambda VPC。 一定要去掉角色的权限,函数还是可以运行的。
是否比永久附加某些权限更安全?值得商榷。
答案 3 :(得分:2)
似乎已经有很多不同的方式回答了这个问题,但截至本文发布时,AWS 有一个托管策略。如果您只是搜索 AWSLambdaVPCAccessExecutionRole,您将能够附加它,并且此方法对我有用。
这是arn:
arn:aws:iam::aws:policy/service-role/AWSLambdaVPCAccessExecutionRole
答案 4 :(得分:1)
如果您尝试在VPC中部署Lambda,并为该Lambda提供所需的网络接口相关权限let additionalCssStyle = document.getElementById('additionalCss');
if (! additionalCssStyle) {
additionalCssStyle = document.createElement("style");
additionalCssStyle.id = 'additionalCss';
document.head.appendChild(additionalCssStyle);
}
additionalCssStyle.innerText = cssCode;
,ec2:DescribeNetworkInterfaces
和ec2:CreateNetworkInterface
(请参阅{{3 }}。
例如,此策略允许将Lambda部署到VPC:
ec2:DeleteNetworkInterface
答案 5 :(得分:1)
这实际上是一个常见问题。
您可以通过在“权限”选项卡下的Lambda执行角色中添加自定义内联策略来解决此问题。
只需添加:
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"ec2:DescribeNetworkInterfaces",
"ec2:CreateNetworkInterface",
"ec2:DeleteNetworkInterface",
"ec2:DescribeInstances",
"ec2:AttachNetworkInterface"
],
"Resource": "*"
}
]
}
如果您需要更多信息或感到困惑,请在此处找到带有图片的完整教程:https://ao.gl/the-provided-execution-role-does-not-have-permissions-to-call-createnetworkinterface-on-ec2/
答案 6 :(得分:-1)
这绝对是一个奇怪的错误,但您确定您添加的示例代码是您在lambda中使用的代码吗?
因为在您的代码中,您在通过回调返回控件后尝试在lambda中记录某些内容。换句话说,首先你告诉你的lambda你已经完成了。接下来,当它忙于关闭并返回结果时,您尝试进行一些记录...
首先,我试试这个:
exports.handler = (event, context, callback) => {
console.log('this is a test');
// do stuff
callback(null, 'Hello from Lambda'); // only do a callback *after* you've run all your code
};
看看是否能解决问题。