【发布时间】:2018-06-23 08:13:00
【问题描述】:
我有三个 lambda 函数:boss、worker1、worker2。使用 boto3.client.invoke 时,我可以从老板那里调用 worker1。这两个在同一个地区。
worker2 在一个单独的区域中。尝试从 boss 调用 worker2 时返回以下错误:
“调用 Invoke 操作时发生错误 (ResourceNotFoundException):来自 'us-east-1' 的函数在此区域 ('us-west-2') 中不可访问”。
boss 具有执行角色,具有以下权限:
{
"Version": "2012-10-17",
"Statement": [
{
"Action": [
"lambda:InvokeFunction"
],
"Effect": "Allow",
"Resource": "arn:aws:lambda:*:*:*"
}
]
}
请帮助澄清需要如何传达权限才能使其正常工作。 谢谢
编辑:
master 和 worker1 在 us-west-2 中,worker1 在 us-east-1 中。
下面是从 master 调用 worker 的代码:
def lambda_handler(event, context):
function_name = "arn:aws:lambda:us-east-1-...:function:worker_2"
lambda_client = boto3.client('lambda')
payload = json.dumps({"body-json": "payload string")
response = lambda_client.invoke(
FunctionName = function_name,
Payload = payload
)
response_payload = response['Payload'].read()
response_arr = json.loads(response_payload)
return response_arr['answer']
【问题讨论】:
-
请分享您用来调用函数的代码。
-
请澄清:boss和worker1在us-west-2,worker2在us-east-1。对吗?
-
@Dunedan 我已经破解了代码。
-
@Michael-sqlbot 你在这些地区是正确的。
-
@SawyerMerchant 我不是 python 人,但在 Lambda 环境中,您的 AWS 客户端库将默认向本地区域的服务端点发送请求,凭证范围为本地区域,并且您的错误消息表明您正在尝试通过将请求发送到 us-west-2 中的服务端点来调用 us-east-1 中的函数。这不是权限问题——请求被发送到错误的地方。您需要为您的客户端提供一个区域和/或端点。
标签: python amazon-web-services aws-lambda amazon-iam