首页 > 解决方案 > 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__'

标签: python-2.7amazon-web-servicesamazon-iam

解决方案


我遇到此错误是因为 ECS 任务没有写入 DynamoDB 的权限。导致问题的代码是:

from boto3 导入资源

dynamodb_resource = 资源(“dynamodb”)

当我为 resource() 函数调用填写 region_name、aws_access_key_id 和 aws_secret_access_key 参数后,问题就解决了。

https://boto3.amazonaws.com/v1/documentation/api/latest/reference/core/session.html#boto3.session.Session.resource

如果这不能解决您的问题,请检查您连接到 AWS 服务的代码,并确保您填写了所有正确的函数参数。


推荐阅读