如何使用 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 地址?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 python 检索 AWS S3 对象 URL

使用 AWS SDK for Java 调用 AWS Lambda 函数时如何检索 context.done() 消息?

如何从AWS Lambda检索数据并将其显示在AWS S3托管的静态网站上?

雪花 python 连接器不适用于 AWS Lambda 中的更大数据集

AWS SDK (PHP):异步调用 lambda 函数,检索状态

我如何使用 aws lambda 将文件写入 s3 (python)?