2016-07-26 20 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