在 lambda 函数中解析私有主机名

JCh*_*hao 6 aws-lambda

我希望我描述正确......

我遇到了 Lambda 无法解析像http://example.com:1234这样的 url 的问题

我必须改用ip。我想知道如何确保可以解析 url,尤其是当我使用的 url 是私有的时。谷歌的所有研究都将我指向 Route 53,但没有解释到底应该如何做到这一点。

有人遇到过类似的问题吗?

编辑:

为了更清楚:

  1. 我所做的就是使用 pyhtonrequests并调用我的 elasticsearch来插入一些数据,所以

    response = requests.post(es_url, data=some_data, timeout=some_timeout)

这里es_url<ip>:9200/some_index/some_type/

我想更改ip为人类可读的域,例如my_es.example.com在我的 EC2 实例中工作的域,但我无法在 lambda 函数中解析此名称

  1. 我相信我的 lambda 函数已经连接到 VPC。我不在乎访问公共 IP。我需要访问驻留在同一个 VPC 中的 ES。除非我的设置不正确......

Joh*_*ein 6

这对我来说可以。

我做了以下事情:

  • 使用VPC 向导创建新的VPC(公共和私有子网、NAT 网关)
  • 在没有 VPC 连接的情况下创建了一个Lambda 函数(如下所示)
  • 经测试——成功解析域名
  • 将 Lambda 函数配置为使用新 VPC 中的私有子网
  • 测试 - 再次成功
  • 在私有子网中启动了ElastiCache 服务器
  • 将 Lambda 函数更改为解析ElastiCache 服务器DNS 名称-- 成功!

这是我使用的 Lambda (Python 3.6) 函数:

def lambda_handler(event, context):
    import socket

    data = socket.gethostbyname_ex('google.com')
    print (data)
    return
Run Code Online (Sandbox Code Playgroud)

这在没有 VPC 设置以及配置到私有子网的 VPC 下都有效。

然后我使用 ElastiCache 服务器的名称再次运行它:

def lambda_handler(event, context):
    import socket

    data = socket.gethostbyname_ex('stack.b155ae.0001.apse2.cache.amazonaws.com')
    print (data)
    return
Run Code Online (Sandbox Code Playgroud)

它返回:

('stack.b155ae.0001.apse2.cache.amazonaws.com', [], ['10.0.1.168'])
Run Code Online (Sandbox Code Playgroud)

因此,从 Lambda 解析 ElastiCache 名称似乎工作正常。

您的问题一定出在您的 Lambda 或 VPC 配置上(您是否更改了 DHCP 选项?)。


小智 1

尝试在您的 vpc 中配置 Lambda 以访问私有托管区域。