aws-lambda - 使用 AWS lambda 函数调用 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"
}
]
}
但它仍然不起作用,我得到同样的错误。
解决方案
我最近遇到了同样的问题。
它肯定与分配给您在运行 Lambda 函数时使用的 IAM 角色的权限有关。
解决此问题的最简单方法如下:-
- 在 AWS 控制台上打开 Lambda 函数。
- 向下滚动到“执行角色”部分。
- 单击角色下方的链接可在新窗口中查看角色。它应该看起来像这样:“查看角色”。
- 在权限选项卡下的新窗口中,单击“附加策略”。
- 这会将您带到一个新屏幕。在此屏幕上,通过在输入字段中键入“lex”过滤列出的策略。
- 过滤后的列表将包含一个策略调用“AmazonLexRunBotsOnly”。
- 将此策略附加到您的角色。
- 保存更改并返回到您的 lambda 函数。
- 保存 lambda 函数并重新测试。
这将解决您的问题。
推荐阅读
- anylogic - 如何在anylogic中将不同的代理组织在一起?
- qt - 如何从一组 qt 文件中获取 .pro 文件
- php - Laravel 电子邮件模板
- android - 使用 adb 命令向下滚动 android 设备 - 如何知道我到达了终点?
- javascript - 如何根据javascript中的随机ID显示/隐藏信息?
- python - 如何仅使用 Python PIL 检查 jpeg 图像是彩色还是灰度?(不使用 OpenCV)
- python - 使用 'map' 显示每个元组中第一个元素的计数
- python - 如何测试是否使用 Pytest 创建了类对象
- ios - 架构 x86_64 的未定义符号:编译 iOS 时 React Native 中的“_RCTSetLogFunction”
- mysql - MySQL 中的“SELECT [value]”与“SELECT [value] FROM [table] LIMIT 1”