跨区域调用AWS lambda

问题描述

我有三个lambda函数:oss、worker1、worker2。在使用boto3.client.voke时,我可以从BOSS调用worker1。这两者位于同一地区。
Worker2位于单独的区域。尝试从BOSS调用worker2时,返回以下错误:
"调用调用操作时出现错误(ResourceNotFoundException):在此区域(‘us-West-2’)中无法访问来自‘us-East-1’的函数"。 BOSS具有执行角色,权限如下:

{
"Version": "2012-10-17",
"Statement": [
    {
        "Action": [
            "lambda:InvokeFunction"
        ],
        "Effect": "Allow",
        "Resource": "arn:aws:lambda:*:*:*"
    }
]
}

请帮助澄清如何传递权限才能起作用。 谢谢

编辑: Master和Worker 1位于US-West-2,而Worker 1位于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']

解决方案

感谢大家的投入。@Michael-sqlbot关于AWS客户端库默认将请求发送到本地区域的评论帮助我找到了解决方案。对于Python,库就是boto3。阅读docs后,不清楚如何设置区域。正是这个blog post提供了(简单的)答案:

client = boto3.client('lambda', region_name='us-west-2')
您是对的,Michael,区域之间从一个lambda到另一个lambda的用例是错综复杂的。我把这个答案留在这里,以防其他刚接触boto3的人在尝试让其他资源(lambda到EC2、lambda到S3等)跨区域工作时遇到相同的错误。
谢谢

相关文章