【发布时间】:2020-09-07 10:04:35
【问题描述】:
我创建了一个简单的 AWS Neptune 集群,有一个写入器,没有读取副本。我使用该选项为其创建了一个新的 VPC,并且也自动为其创建了两个安全组。
我还有一个调用 Nepture 集群端点的 Lambda。我已经使用 Neptune 集群的 VPC 配置了 Lambda,指定了它的所有子网和上面提到的两个安全组。在我从 AWS 控制台执行 VPC 配置时自动分配入站和出站规则后,我没有手动修改它们(只是通过这些步骤)。
Lambda 是用 Python 编写的,并使用 requests 库通过 AWS Singature V4 进行 HTTPS 调用。 Lambda 的执行角色具有NeptuneFullAccess 和一个内联策略,以允许为 Lambda 配置 VPC(已完成,因此该策略有效)。
Lambda 在端口 8182 上调用 Neptune 集群的端点,集群的名称和 ID 已编辑:
https://NAME.cluster-ID.us-east-1.neptune.amazonaws.com:8182
我收到以下错误:
{
"errorMessage": "2020-05-20T21:26:35.066Z c8ee70ac-6390-48fd-a32e-36f80d58a24e Task timed out after 3.00 seconds"
}
我做错了什么?
更新:因此,看起来 Neptune 集群的第二个安全组是由我在创建集群时选择一个选项创建的。因此,我再次尝试使用安全组的Choose existing 选项,而不是Create new。 (我想我之前很困惑,因为我正在创建一个全新的 VPC,那么安全组怎么可能已经存在?但是向导只是假设届时将创建 default 安全组。)
现在,我不再遇到同样的错误。但是,我看到的是这样的:
{
"errorType": "Runtime.ExitError",
"errorMessage": "RequestId: 48e3b4fb-1b88-48d3-8834-247dbb1a4f3f Error: Runtime exited without providing a reason"
}
日志显示:
{
"requestId": "b8b91c18-34cd-c5f6-9103-ed3357b9241e",
"code": "BadRequestException",
"detailedMessage": "Bad request."
}
查询是(给定 https://docs.amazonaws.cn/en_us/neptune/latest/userguide/iam-auth-connecting-python.html 中描述的 Lambda 代码):
{
"host": "NAME.cluster-ID.us-east-1.neptune.amazonaws.com:8182",
"method": "GET",
"query_type": "status",
"query": ""
}
有什么建议吗?
更新:尝试针对另一个 Neptune 集群时,[Errno 111] Connection refused' 错误又回来了。然而,我注意到一件奇怪的事情:我有一些孤立的网络接口,从 Lambda 与现已删除的 Neptune 集群的 VPC 相关联开始。但是,网络接口标记为in use,我无法分离和删除它们,即使使用Force detachment 选项也是如此。收到You are not allowed to manage 'ela-attach' attachments 错误。
更新:从一个新的 Lambda 开始(不再重做其 VPC 配置,因此不再有孤立的网络接口)和一个启用和配置了 IAM 身份验证的新 Neptune 集群(即使 Lambda 的执行角色被授予对出于调试目的,以消除任何丢失的权限),仍然出现此错误:
{
"errorMessage": "HTTPSConnectionPool(host='NAME.cluster-ID.us-east-1.neptune.amazonaws.com', port=8182): Max retries exceeded with url: /status/ (Caused by NewConnectionError('<urllib3.connection.HTTPSConnection object at 0x7f1f9f98c310>: Failed to establish a new connection: [Errno 111] Connection refused'))",
"errorType": "ConnectionError",
"stackTrace": [
" File \"/var/task/lambda_function.py\", line 71, in lambda_handler\n return make_signed_request(host, method, query_type, query)\n",
" File \"/var/task/lambda_function.py\", line 264, in make_signed_request\n r = requests.get(request_url, headers=headers, verify=False, params=request_parameters)\n",
" File \"/var/task/requests/api.py\", line 76, in get\n return request('get', url, params=params, **kwargs)\n",
" File \"/var/task/requests/api.py\", line 61, in request\n return session.request(method=method, url=url, **kwargs)\n",
" File \"/var/task/requests/sessions.py\", line 530, in request\n resp = self.send(prep, **send_kwargs)\n",
" File \"/var/task/requests/sessions.py\", line 643, in send\n r = adapter.send(request, **kwargs)\n",
" File \"/var/task/requests/adapters.py\", line 516, in send\n raise ConnectionError(e, request=request)\n"
]
}
【问题讨论】:
-
你找到这个[Errno 111]连接被拒绝错误的原因了吗?
-
是的。稍后会发布。
标签: amazon-web-services aws-lambda amazon-vpc amazon-neptune