Invoke an AWS lambda across regions

Saw*_*ant 5 python lambda amazon-web-services amazon-iam

I have three lambda functions: boss, worker1, worker2. When using boto3.client.invoke I am able to call worker1 from boss. These two are in the same region.
worker2 is in a separate region. When attempting to call worker2 from boss the following error returns:
"An error occurred (ResourceNotFoundException) when calling the Invoke operation: Functions from 'us-east-1' are not reachable in this region ('us-west-2')" . boss has an execution role with the following permission:

{
"Version": "2012-10-17",
"Statement": [
    {
        "Action": [
            "lambda:InvokeFunction"
        ],
        "Effect": "Allow",
        "Resource": "arn:aws:lambda:*:*:*"
    }
]
}
Run Code Online (Sandbox Code Playgroud)

Please help clarify how permissions need to be conveyed for this to work. Thanks

Edit: master and worker1 are in us-west-2 and worker1 is in us-east-1.
Here is the code used to invoke worker from master:

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']
Run Code Online (Sandbox Code Playgroud)

Saw*_*ant 8

谢谢大家的投入。@ Michael-sqlbot关于AWS客户端库默认将请求发送到本地的评论是帮助我找到解决方案的原因。对于Python,该库为boto3。阅读文档后,尚不清楚如何设置区域。正是此博客文章提供了(简单)答案:

cleint = boto3.client('lambda', region_name='us-west-2')
Run Code Online (Sandbox Code Playgroud)

你是对的迈克尔,区域之间一个到另一个lambda的用例是复杂的。如果在尝试让其他资源(lambda到ec2,lambda到s3等)跨区域工作时,boto3的其他任何新功能遇到相同的错误,我将在此处保留此答案。
谢谢


Ele*_*Ele -1

worker2您需要按如下方式设置 lambda 函数的区域:

arn:aws:lambda:us-east-1-...:function:worker_2

所以,代码看起来如下:

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
)
Run Code Online (Sandbox Code Playgroud)

master太好了,现在您需要通过 lambda 函数的 IAM 角色向您的 Lambda 授予权限master

+ 建议

您可以创建一个在region中执行lambda函数的API网关端点us-east-1。该端点只能使用特定的 API 密钥来执行,以提供一层安全性。

并从masterlambda 函数执行到该端点的请求。

资源