如何使用 Python 检索 AWS Lambda 公共 IP 地址?

Posted

技术标签:

【中文标题】如何使用 Python 检索 AWS Lambda 公共 IP 地址?【英文标题】:How could I retrieve AWS Lambda public IP address by using Python? 【发布时间】:2018-07-15 02:35:39 【问题描述】:

我的应用程序是使用链接(url)来调用 lambda 函数,然后我想知道 lambda 的公共 IP 并获取页面源。如何使用 python 获得 lambda 公共 IP? 非常感谢。

【问题讨论】:

欢迎来到 ***。请通过tour 环顾四周,通读HELP center,然后阅读How to 、What types of questions should I avoid asking? 并提供MCVE : Minimal, Complete, and Verifiable Example。如果周围的人可以轻松阅读并理解您的意思或问题所在,他们将更愿意提供帮助:) 试试gist.github.com/kixorz/3b172e2fc3ce35421ee9。代码简单适配Python 【参考方案1】:

你可以curl到checkip.amazonaws.com获取公网IP。

import requests
requests.get('http://checkip.amazonaws.com').text.rstrip()

输出:

52.x.147.64

【讨论】:

【参考方案2】:

我建议:

from botocore.vendored import requests
requests.get('http://checkip.amazonaws.com').text.rstrip()

在您的 lambda 函数中。

否则,您可能会收到一条错误消息,指出 lambda 无法找到 requests,除非您从包含通过 pip 安装的 requests 的 .zip 文件创建 lambda

【讨论】:

非常感谢。就像你说的,我从一个包含通过 pip 安装的请求的 .zip 文件创建了我的 lambda 函数。 此解决方案不再有效,因为请求的供应商版本已从 botocore 中删除。 aws.amazon.com/blogs/developer/… 它可以工作,但有 DeprecationWarning:此依赖项已从 Botocore 中删除,并将在 2021 年 12 月 1 日之后从 Lambda 中删除。 aws.amazon.com/blogs/developer/…。安装requests包,直接'import requests',改用requests.get()函数。【参考方案3】:
import urllib3
http = urllib3.PoolManager()
response = http.request('GET', 'http://checkip.amazonaws.com')
response.__dict__

'_body' 属性中找到的IP 地址。

由于以下原因的替代解决方案:

    无法使用requests,因为它不是核心的一部分 发现被 AWS 删除的 botocore 供应版本 here

【讨论】:

【参考方案4】:

您可以使用不需要 pip 的urllib 而不是import requests

示例代码如下;


from urllib.request import Request, urlopen


def lambda_handler(event, context):
    url = 'http://checkip.amazonaws.com'
    with urlopen(Request(url)) as response:
        print(response.read().decode('utf-8'))

【讨论】:

以上是关于如何使用 Python 检索 AWS Lambda 公共 IP 地址?的主要内容,如果未能解决你的问题,请参考以下文章