python - 在另一个区域调用 Lambda 并在调用的区域进行更改

标签 python amazon-web-services aws-lambda

我很确定我知道答案,但我想我还是会问。有没有办法在另一个区域调用 Lambda 函数,但利用被调用区域中的数据。我能够从一个区域调用另一个区域中的 Lambda 函数,但调用的函数针对其所在的区域运行。我试图做的是让调用的函数在调用它的区域中进行更改。

例如,用于检查某些 ec2 配置并在必要时进行更改的 lambda 函数位于区域 1 中,而我想调用区域 2 中的 lambda 函数。但是当我调用区域 2 中的函数时,它针对区域 1 中的 ec2 而不是区域 2 中的 ec2 实例运行。有没有办法让区域 1 中的 lambda 函数针对区域 2 中的 ec2 实例运行,或者我只需在每个区域中部署 lambda 函数.

我试图避免的是对 lambda 函数进行更改,并且必须将其部署在所有区域;而不是仅仅将其部署到单个区域并让所有区域调用该更新的函数。

目前,我调用的 lambda 看起来像这样,

client = boto3.client('lambda', region_name='region 1')
 
def lambda_handler(event,context):
 
    response = client.invoke(
        FunctionName = 'Lambda_function_name',
        InvocationType = 'RequestResponse',
        Payload = json.dumps(event)
    )

最佳答案

一般来说,使用 Python boto3 api,当您创建客户端时,您可以指定该客户端的区域。 https://stackoverflow.com/a/40377889/230055是一个有用的引用。因此,在您的代码中,您需要将创建客户端时为 region_name 指定的值传递给 lambda。您想要在 lambda 处理程序(或 lambda 处理程序调用的某个函数)内声明您的客户端,以便可以传递变量。也许类似

def lambda_handler(event, context):
    client = boto3.client('ec2', region_name=event['region_to_use'])

然后,作为调用 lambda 时发送的有效负载的一部分,您需要传递 region_to_use 键并指定您希望调用的 lambda 使用哪个区域。

您还可以通过 STS 承担角色来创建针对不同区域甚至不同帐户的客户端。因此,如果使用此方法,您可以让您的 lambda 在您选择的任何区域/帐户中使用客户端。该方法取决于 STS 和承担角色。

This answer另一个问题显示了承担创建针对不同区域的客户的角色的一般流程。因此,只要您传递 lambda,您就会调用足够的信息,使其知道需要为其创建客户端的区域,并假设您将角色设置为 allow for STS ,然后你就可以做你想做的事了。

如果您考虑一下,任何时候您使用 boto3 api 时,您都在为特定区域创建客户端。如果您在本地使用它,它可能使用您的凭据文件中指定的默认区域。但每次你建立客户时它都会针对一个区域。因此,如果您可以在 Lambda 中创建客户端,则可以在 Lambda 中定位不同的区域。

顺便说一句,我已经完成了您要求做的事情——在一个区域中拥有一个 lambda,它确实可以在其他区域中工作。所以它绝对有效并且是可能的。

关于python - 在另一个区域调用 Lambda 并在调用的区域进行更改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69352765/

相关文章:

python - SQLAlchemy 声明性扩展与 Elixir

java - AWS DynamoDB - 在 java 中的单个非键属性上组合多个查询过滤器

linux - 如何在 ELB 或 httpd 级别阻止不需要的请求

amazon-web-services - 当 MySQL (RDS) 表创建/更新行时,可以自动调用 Lambda 函数吗?

node.js - 亚马逊认知 : How to implement Post Confirmation Trigger which works only after SignupConfirmation not after ForgotPassword/ResetPassword Confirmation

python - 由于命名空间,使用 Scrapy Python 无法从带有 xpath 的响应 html 中提取数据

Python <函数函数名称位于 0x00000000>

aws-lambda - AWS lambda 函数在 Amazon Connect 中失败

python - 如何使用post请求在python中下载文件?

amazon-web-services - 使用 aws s3api 的 MalformedPolicy 错误