2016-07-26 55 views
-1

我有一个是通过下面的简单脚本,它引导我的EC2实例来执行备份定义的lambda函数:Python的lambda函数不能执行HTTPS cURL命令

def lambda_handler(event, context): 
    import subprocess 
    result = subprocess.call("curl -k https://loadbalancer.stuff.domain.com/backup/", shell=True) 
    return result 

我已经运行在shell命令从2台独立的服务器上面的子进程和它适用于那些正常,但是我得到的λ完成,这意味着当6返回错误代码:

CURLE_COULDNT_RESOLVE_HOST(6): 无法解析主机。给定的远程主机未解决。

我不知道如何继续,我已经尝试了每一种其他方式来执行此HTTPS请求。我在这里做错了什么?

+0

这是负载平衡器正确的“loadbalancer.stuff.domain.com”的链接? – error2007s

+0

正确。如果需要,它可以用EC2实例IP替换: > ##。##。###:###/backup /或其他 – Answoquest

+0

您的EC2实例和Load Balancer安全组是否有HTTPS端口443向公众开放? – error2007s

回答

1

您的Lambda函数在您的VPC之外执行。

但是您的负载均衡器位于您的VPC内部,并且不能公开访问。因此,Lambda函数没有到负载均衡器的网络路径。

有2级可能的解决方案:

  1. 把你的lambda函数的VPC内,或
  2. 让你的负载平衡器公开。
+0

还有第三种解决方案,其中添加lambda到添加了AWS VPC角色的IAM角色,并将VPC ID,子网ID和安全组ID添加到使用指定的IAM角色创建的lambda函数中。 – Answoquest

+0

@EschersEnigma您的“第三个分辨率”只会让Lambda功能访问权限对VPC进行修改。为了与VPC中的服务器通信,它仍然必须在VPC网络中运行,并且IAM角色与此无关。 –

+0

在VPC中创建它意味着什么 – Answoquest