如何使用 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 地址?的主要内容,如果未能解决你的问题,请参考以下文章
使用 AWS SDK for Java 调用 AWS Lambda 函数时如何检索 context.done() 消息?
如何从AWS Lambda检索数据并将其显示在AWS S3托管的静态网站上?
雪花 python 连接器不适用于 AWS Lambda 中的更大数据集