使用AWS Lambda函数调用lex聊天机器人

时间:2018-11-28 00:28:55

标签: aws-lambda amazon-iam amazon-lex

我试图在AWS lambda函数中使用boto3,以便对Lex聊天机器人执行post_text。

Python代码:

    client = boto3.client('lex-runtime')
    data = "string input"
    response = client.post_text(
    botName='xxx',
    botAlias='yyy',
    userId='id',
    inputText= data)

但是我得到了

An error occurred (AccessDeniedException) when calling the PostText 
operation: User: arn:aws:sts::111111111:assumed- 
role/functionName/functionName is not authorized to perform: lex:PostText on 
resource: arn:aws:lex:us-east-1:111111111:bot:xxx:yyyy"

因此,我设置了IAM规则和策略:

{
"Version": "2012-10-17",
"Statement": [
    {
        "Effect": "Allow",
        "Action": [
            "lex:PostText"
        ],
        "Resource": [
            "arn:aws:lex:us-east-1:111111111:bot:xxx:yyyy"
        ]
    }
]
}

信任关系:

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

但是它仍然不起作用,并且我得到相同的错误。

1 个答案:

答案 0 :(得分:0)

我最近遇到了同样的问题。

这肯定与运行Lambda函数时分配给您正在使用的IAM角色的权限有关。

解决此问题的最简单方法如下:-

  1. 在AWS控制台上打开Lambda函数。
  2. 向下滚动到“执行角色”部分。
  3. 单击角色下的链接以在新窗口中查看角色。它 应该看起来像这样:“查看角色”。
  4. 在新窗口的权限标签下,点击“附加 政策”。
  5. 这将带您进入新屏幕。在此屏幕上过滤列出的 通过在输入字段中输入“ lex”来确定策略。
  6. 过滤后的列表将包含策略调用“ AmazonLexRunBotsOnly”。
  7. 将此政策附加到您的角色中。
  8. 保存更改,并返回到lambda函数。
  9. 保存lambda函数并重新测试。

这将解决您的问题。