然后我在公共子网中设置了一个AWS lambda函数来测试它是否能够连接到外部互联网。
以下是我用python3编写的lambda函数。
import requests
def lambda_handler(event, context):
r = requests.get('http://www.google.com')
print(r)
我将函数放在VPC的公共子网中,但是无法获取 http://www.google.com
的内容。
这里是错误消息:
"errorMessage": "HTTPConnectionPool(host='www.google.com', port=80): Max retries exceeded with url: / (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 110] Connection timed out',))", "errorType": "ConnectionError",
我不明白为什么。
公共子网的路由表如下所示:
对于 http://www.google.com
的 GET
请求应该匹配 igw-XXXXXXXXX
的目标。为什么互联网网关(igw)不能将请求传递到 http://www.google.com
并获取网站内容?
这篇文章说,我必须将lambda函数设置在私有子网中才能访问Internet。
如果您的Lambda函数需要访问私有VPC资源(例如Amazon RDS DB实例或Amazon EC2实例),则必须将函数与VPC关联。如果您的函数还需要访问Internet(例如到达公共AWS服务终端点),则必须使用NAT网关或实例。
但它没有解释为什么我不能将lambda函数设置在公共子网中。