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

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

【问题讨论】:

标签: python amazon-web-services lambda aws-lambda ip-address


【解决方案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 地址。

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

    1. 无法使用requests,因为它不是核心的一部分
    2. 发现被 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'))
      
      

      【讨论】:

        猜你喜欢
        • 2019-07-09
        • 2016-01-08
        • 2011-10-11
        • 2016-12-15
        • 1970-01-01
        • 1970-01-01
        • 2021-12-22
        • 2017-04-07
        • 2021-08-11
        相关资源
        最近更新 更多