【问题标题】:Cannot connect to AWS EC2 using AWS-sdk无法使用 AWS-sdk 连接到 AWS EC2
【发布时间】:2018-02-13 05:53:37
【问题描述】:

我正在将 aws-sdk 与 node.js 一起使用,但我无法建立与 aws ec2 的连接以使用 sdk 获取实例详细信息。

这是错误:

Error Error: connect ENETUNREACH 
at Object.exports._errnoException (util.js:1020:11)
at exports._exceptionWithHostPort (util.js:1043:20)
at TCPConnectWrap.afterConnect [as oncomplete] (net.js:1086:14)

这是我写的一段代码: 出于安全考虑,我已删除访问密钥。

var express = require("express");
var mysql = require('mysql');
var connection = mysql.createConnection({
  host: 'localhost',
  user: '',
  password: '',
  database: ''
});

var app = express();
// Load the SDK for JavaScript
var AWS = require('aws-sdk');
// Set the region 
AWS.config.update({
  region: 'us-east-1'
});

var AWS_ACCESS_KEY_ID = '';
var AWS_SECRET_ACCESS_KEY = '';

var params = {
  DryRun: false
};

ec2 = new AWS.EC2({
  apiVersion: '2016-11-15'
});
ec2.describeInstances(params, function(err, data) {
  if (err) {
    console.log("Error", err.stack);
  } else {
    console.log("Success", JSON.stringify(data));
    res.send({
      message: data
    });
  }
});

app.listen(443);
console.log("The node server is running at port 443");

有没有办法解决这个问题?我是第一次使用 aws-sdk。提前致谢。

【问题讨论】:

  • 你在哪里传递 API 密钥?

标签: javascript node.js amazon-ec2 aws-sdk


【解决方案1】:
  • 可能您没有传递 API 密钥。
var AWS_ACCESS_KEY_ID = ''; var AWS_SECRET_ACCESS_KEY = ''; 变量参数 = { 干运行:假 }; ec2 = 新 AWS.EC2({ accessKeyId:AWS_ACCESS_KEY_ID, 秘密访问密钥:AWS_SECRET_ACCESS_KEY, api版本:'2016-11-15' });

建议:

  • 将您的 API 密钥放在不同的位置。
  • 如果此代码将托管在 EC2 中,请使用 EC2 的服务角色权限。
  • 使用配置文件。

【讨论】:

  • 我做了这些改变。但是,没有运气。我得到一个不同的错误。 . Error MultipleValidationErrors: There were 2 validation errors:** * UnexpectedParameter: Unexpected key 'AWS_ACCESS_KEY_ID' found in params * UnexpectedParameter: Unexpected key 'AWS_SECRET_ACCESS_KEY' found in params at ParamValidator.validate
  • @abhishekbv 我认为您没有声明这些变量。此外,你能测试删除那个 MySQL 连接吗?
  • 我现在可以建立连接了。非常感谢。如果我遇到任何其他问题,我会向您发送电子邮件。
【解决方案2】:

凭据似乎是这里的问题。请仔细检查您提供的用于连接 EC2 的凭据。最好的选择是生成一个新的 key_id 和 secret_access_key 并使用它。 我个人建议下载凭证文件并将其传递到您的代码中,而不是将 key_id 和 secret_access_key 放在这里。

【讨论】:

  • 我正在使用有效的凭据。另外,要交叉验证您的建议。我生成了新密钥。即使那样,我也遇到了同样的错误。
【解决方案3】:

您的计算机或 Node.js 是否连接到互联网?你控制这个。 首先打开 cmd 使用 ping,如果 ping 返回数据包正确。控制node.js的互联网。对于控制使用 requestify 模块。使用此代码:

const requi=require('requestify');
requi.get("https://google.com")
    .then(function(data){
        console.log(data);
    })
    .catch(function (err) {
       console.log(err);
    });

【讨论】:

  • 我可以使用我的 Node.js 服务器与外部世界进行交互。这是 AWS 密钥的问题。
【解决方案4】:

确保您正确执行此操作的最简单方法是遵循AWS SDK For NodeJs 中描述的建议凭据管理。

npm install aws-sdk

在 Mac/Linux 上的 ~/.aws/credentials 或 Windows 上的 C:\Users\USERNAME.aws\credentials 中创建凭据文件

[default] 
aws_access_key_id = your_access_key   
aws_secret_access_key = your_secret_key

然后让 AWS 对象为您管理凭证:

var AWS = require('aws-sdk');

看起来你可能快到了;不要将密钥存储在代码中,而是将它们存储在上面指定的 credentials 文件中,然后重试。

【讨论】:

  • 我将按照您的建议实施。这使代码更具可读性。
  • 这是 Windows 位置的拼写错误 -- USERNAME.aws? USERNAME\.aws 是有道理的。我想它是可测试的。我认为这是一个错字的假设肯定还行不通;但是在 C:\Users 下创建一个与 Windows 登录没有直接关系的文件夹确实看起来很奇怪(而且令人讨厌)。
  • 我忘记了这个页面以我期望的方式给出了目录:aws.amazon.com/developers/getting-started/nodejs
猜你喜欢
  • 2021-09-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-03-03
  • 1970-01-01
  • 2020-04-19
  • 2018-01-13
  • 2018-01-03
相关资源
最近更新 更多