python-2.7 - EndpointConnectionError:无法连接到端点 URL:“http://169.254.169.254/.....”
问题描述
我正在尝试使用 python 脚本创建 AWS RDS 并部署 lambda 函数。但是,我遇到了错误,看起来它无法与 aws 命令进行通信以创建 rds。
DEBUG: Caught retryable HTTP exception while making metadata service request to http://169.254.169.254/latest/meta-data/iam/security-credentials/: Could not connect to the endpoint URL: "http://169.254.169.254/latest/meta-data/iam/security-credentials/"
Traceback (most recent call last):
File "/usr/lib/python2.7/site-packages/botocore/utils.py", line 303, in _get_request
response = self._session.send(request.prepare())
File "/usr/lib/python2.7/site-packages/botocore/httpsession.py", line 282, in send raise EndpointConnectionError(endpoint_url=request.url, error=e)
EndpointConnectionError: Could not connect to the endpoint URL: "http://169.254.169.254/latest/meta-data/iam/security-credentials/"
我正在通过 SSO okta 获取 aws 凭据。在 ~/.aws 目录中,下面分别是 'credentials' 和 'config' 文件的内容。
[default]
aws_access_key_id = <Key Id>
aws_secret_access_key = <Secret Key>
aws_session_token = <Token>
[default]
region = us-west-2
```python
```
for az in availability_zones:
if aurora.get_db_instance(db_instance_identifier + "-" + az)[0] != 0:
aurora.create_db_instance(db_cluster_identifier, db_instance_identifier + "-" + az, az, subnet_group_identifier, db_instance_type)
else:
aurora.modify_db_instance(db_cluster_identifier, db_instance_identifier + "-" + az, az, db_instance_type)
# Wait for DB to become available for connection
iter_max = 15
iteration = 0
for az in availability_zones:
while aurora.get_db_instance(db_instance_identifier + "-" + az)[1]["DBInstances"][0]["DBInstanceStatus"] != "available":
iteration += 1
if iteration < iter_max:
logging.info("Waiting for DB instances to become available - iteration " + str(iteration) + " of " + str(iter_max))
time.sleep(10*iteration)
else:
raise Exception("Waiting for DB Instance to become available timed out!")
cluster_endpoint = aurora.get_db_cluster(db_cluster_identifier)[1]["DBClusters"][0]["Endpoint"]
下面的实际错误来自 while 循环,DEBUG 显示无法找到凭证,但凭证在那里。我可以使用相同的 aws 凭证从 cli 部署 Elastic Beanstalk 环境,但不是这个。看起来上面的 aurora.create_db_instance 命令失败了。
DEBUG: Unable to locate credentials
Traceback (most recent call last):
File "./deploy_api.py", line 753, in <module> sync_rds()
File "./deploy_api.py", line 57, in sync_rds
while aurora.get_db_instance(db_instance_identifier + "-" + az)[1]["DBInstances"][0]["DBInstanceStatus"] != "available":
TypeError: 'NoneType' object has no attribute '__getitem__'
解决方案
我遇到此错误是因为 ECS 任务没有写入 DynamoDB 的权限。导致问题的代码是:
from boto3 导入资源
dynamodb_resource = 资源(“dynamodb”)
当我为 resource() 函数调用填写 region_name、aws_access_key_id 和 aws_secret_access_key 参数后,问题就解决了。
如果这不能解决您的问题,请检查您连接到 AWS 服务的代码,并确保您填写了所有正确的函数参数。
推荐阅读
- javascript - 在 nightwatch.js 中的单个元素中断言多个值
- arrays - 在R中查找数组中最近元素的最快方法
- c - 在 C 函数中修改变量或结构
- c# - 如何在 .NET Core 2.x 中本地化 URL?
- python - 使用 BS,当某些迭代中缺少行时循环标记 python3
- c# - 如何可靠地检测 BLE 设备超出范围以正确断开然后重新连接?
- c++ - cURL URL 编码混淆
- c# - 如何使用对话名称作为触发器来开始对话,而不是使用索引?
- wordpress - 在循环执行之前显示while循环变量
- node.js - NestJS - 如何/在哪里使用异步方式配置 FileInterceptor