2017-02-06 122 views
0

我有一個由S3存儲桶觸發的AWS Lambda函數。 Lambda函數在VPC中ping一個EC2實例。 VPC沒有NAT。由於某種原因,Lambda無法連接到EC2,並且超時。我試圖保持VPC和VPC外的lambda。我也嘗試使用該實例的公共和私有IP,但似乎沒有工作。關於我接下來可以做什麼的任何建議。 的爲lambda函數的代碼如下AWS Lambda無法在VPC中ping通EC2實例

from __future__ import print_function 

import json 
import boto3 
import urllib2 

print('Loading function') 

s3 = boto3.client('s3') 


def lambda_handler(event, context): 
    bucket = event['Records'][0]['s3']['bucket']['name'] 
    url = urllib2.urlopen("http://ip-address/API/") 

回答

2

首先用VPC內拉姆達功能,確保您使用的EC2實例的私有IP。然後打開EC2實例安全組中的端口80,以允許來自屬於您分配給Lambda函數的安全組的任何內容的傳入連接。

+0

Mark我有兩個問題: 一,lambda是否應該在EC2所在的VPC內? 第二,我們如何爲安全組打開端口80?我目前在我的安全組中爲某些IP打開端口80,通過該端口訪問我的EC2實例。請注意,我不希望每個人都通過HTTP訪問我的機器。 –

+0

嗨馬克, 感謝您的回答。我有兩個問題要問你。 第一個,lambda函數應該在VPC內嗎? 而第二個,我目前只爲我的EC2機器打開了端口80,只有某些IP,我應該如何打開HTTP端口80,使得安全組內的任何內容都可以訪問EC2? –

+1

是Lambda函數應該在VPC中,與EC2實例所在的VPC相同。要打開安全組的端口,在添加入站規則時,請爲源類型選擇「自定義」,然後輸入安全組ID作爲源值。如果你開始在這個字段中輸入「sg」,它會彈出你的安全組列表。 –