amazon-web-services - 无法从 docker 容器访问 aws s3。被拒绝
问题描述
我正在尝试从 docker 容器访问 aws s3。创建具有 AWSS3FullAccess 的 IAM 角色并使用 json 配置文件设置凭证。
在代码中读取配置为
AWS.config.loadFromPath('./config/credentials.json');
但是,当代码运行时出现以下错误:
Error downloading file from s3
{ Error: connect ECONNREFUSED 169.254.169.254:80
at TCPConnectWrap.afterConnect [as oncomplete] (net.js:1107:14)
message: 'Missing credentials in config',
errno: 'ECONNREFUSED',
code: 'CredentialsError',
syscall: 'connect',
address: '169.254.169.254',
port: 80,
time: 2020-01-25T07:42:31.329Z,
originalError:
{ message: 'Could not load credentials from any providers',
errno: 'ECONNREFUSED',
code: 'CredentialsError',
syscall: 'connect',
address: '169.254.169.254',
port: 80,
time: 2020-01-25T07:42:31.328Z,
originalError:
{ message: 'EC2 Metadata roleName request returned error',
errno: 'ECONNREFUSED',
code: 'ECONNREFUSED',
syscall: 'connect',
address: '169.254.169.254',
port: 80,
time: 2020-01-25T07:42:31.328Z,
originalError: [Object] } } }
当在没有 docker 容器的情况下执行相同的代码并且如上所述提供配置文件时,它可以工作。
解决方案
发现我在配置 aws 凭据之前正在实例化 S3 客户端。尽管 aws 凭证是全局的,但是,nodejs sdk 似乎需要在实例化客户端之前设置凭证。
推荐阅读
- entity-framework - 实体框架:不能在引用列是标识列的情况下创建级联外键。无法创建约束或索引
- java - 使用数组的自组织搜索
- amazon-ec2 - 如何使用用户数据脚本在 EC2 机器上的 virtualenv 中安装 Airflow?
- reactjs - React Router - 添加斜杠或 URL 参数不会在 Switch 语句之外呈现组件
- deep-learning - 使用 PyTorch RNN / LSTM 的 SHAP 值
- docker - Kubernetes - Jenkins - Docker-compose 无法连接到互联网
- firebase - 为什么 Firebase 显示未设置为 screen_name
- c++ - 使用 jsoncpp 读取 JSON 文件
- snowflake-cloud-data-platform - AWS Glue 无法运行雪花 python 连接,如示例 https://www.snowflake.com/blog/how-to-use-aws-glue-with-snowflake/
- unity3d - 在 Unity UIElements 中,UGUI Canvas Scaler 的 'Scale with ScreenSize' 等价于什么?