繁体   English   中英

跨区域调用 AWS lambda

[英]Invoke an AWS lambda across regions

我有三个 lambda 函数:boss、worker1、worker2。 使用 boto3.client.invoke 时,我可以从老板那里呼叫 worker1。 这两个在同一个地区。
worker2 位于一个单独的区域。 尝试从老板调用 worker2 时,返回以下错误:
“调用 Invoke 操作时发生错误 (ResourceNotFoundException):在此区域 ('us-west-2') 中无法访问来自 'us-east-1' 的函数”。 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']

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

client = boto3.client('lambda', region_name='us-west-2')

您是对的 Michael,区域之间从一个 lambda 到另一个 lambda 的用例是复杂的。 如果任何其他不熟悉 boto3 的人在尝试获取其他资源(从 lambda 到 ec2、从 lambda 到 s3 等)跨区域工作时遇到相同的错误,我将在此处留下这个答案。
谢谢

您需要设置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
)

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

+ 建议

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

并从master lambda 函数执行对该端点的请求。

资源

let lambda = new AWS.Lambda({region: region})之后你应该做lambda.invoke ,它会lambda.invoke

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM