我已经按照此处的教程创建了具有公共和私有子网的VPC。
然后,我在公共子网中设置了一个AWS lambda函数,以测试它是否可以连接到外部互联网。
这是我用python3编写的lambda函数
import requests
def lambda_handler(event, context):
r = requests.get('http://www.google.com')
print(r)
Run Code Online (Sandbox Code Playgroud)
http://www.google.com
当我在VPC的公共子网中进行设置时,上述函数无法获取其内容。
这是错误消息:
“ errorMessage”:“ HTTPConnectionPool(host ='www.google.com',port = 80):url超过了最大重试次数:/(由NewConnectionError(':导致:建立新连接失败:[Errno 110]连接超时',))“,” errorType“:” ConnectionError“,
我不明白为什么。
公共子网的路由表如下所示:
对的GET
请求http://www.google.com
应匹配igw-XXXXXXXXX
目标。为什么Internet网关(igw)无法将请求传递到http://www.google.com
网站并取回网站内容?
该文章说,我必须设置专用子网内的lambda函数才能有互联网接入。
如果您的Lambda函数需要访问私有VPC资源(例如,Amazon RDS数据库实例或Amazon EC2实例),则必须将该函数与VPC关联。如果您的功能还需要互联网访问(例如,到达公共AWS服务终端节点),则您的功能必须使用NAT网关或实例。
但这并不能解释为什么我不能在公共子网中设置lambda函数。