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

时间:2018-05-03 01:56:04

标签: aws-lambda

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

我遇到过Lambda无法解析问题的问题,例如http://example.com:1234

我必须使用ip代替。我想知道如何确保网址可以解析,尤其是当我使用的网址是私有网址时。所有谷歌研究都指向53号公路,但没有解释应该如何做到这一点。

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

编辑:

更清晰:

  1. 我正在做的就是使用pyhton checkIfMyOffer = (offerKey, myOffers) => { if(myOffers){ return offerKey in myOffers } return false }; 并调用我的elasticsearch来插入一些数据,所以

    requests

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

    我想将<ip>:9200/some_index/some_type/更改为人类可读的域,例如ip,它在我的EC2实例中有效,但我无法在lambda函数中解析此名称

    1. 我相信我的lambda功能已连接到VPC。我不关心访问公共IP。我只需要访问驻留在同一个VPC中的ES。除非我的设置不正确......

2 个答案:

答案 0 :(得分:2)

它适用于我。

我做了以下事情:

  • 使用 VPC向导(公共和私有子网,NAT网关)创建新的VPC
  • 在没有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

没有VPC设置,也没有配置到私有子网的VPC。

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

def lambda_handler(event, context):
    import socket

    data = socket.gethostbyname_ex('stack.b155ae.0001.apse2.cache.amazonaws.com')
    print (data)
    return

它返回了:

('stack.b155ae.0001.apse2.cache.amazonaws.com', [], ['10.0.1.168'])

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

您的问题必须在于您的Lambda或VPC配置(您是否更改了DHCP选项?)。

答案 1 :(得分:1)

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