AWS开发工具包和NODE JS-> UnknownEndpoint

时间:2019-01-14 20:53:37

标签: node.js amazon-web-services amazon-ec2 aws-cli

我已遵循本指南:https://docs.aws.amazon.com/sdk-for-javascript/v2/developer-guide/ec2-example-creating-an-instance.html

运行下面的代码时-出现UnknowEndPoint错误。

  1. 我已创建一个AWS IAM用户,并将该用户添加到策略名称为“ IAMFullAccess”的组中-我不知道其他哪个策略合适(我可以在AWS仪表板中看到我的凭据具有已通过编程方式使用-所以我想这部分效果很好...)?

  2. 我已将我的凭据放置在名为凭据的文件的.aws文件夹中。

  3. 我不确定要在下面的“ KeyName”中实际输入什么—当前,我已经通过单击仪表板中现有的一个AWS EC2实例之一来输入找到的密钥对名称。这是正确的吗?

是否需要编辑一些安全组或类似的安全组-才能将NodeJS连接到我的AWS账户?否则我不知道该怎么办?

在start.js文件中:

process.env.AWS_SDK_LOAD_CONFIG=1;    
var AWS_SDK = require('./aws_sdk');
var aws_sdk = new AWS_SDK();

aws_sdk.CopyInstance();

在aws_sdk.js文件中:

function AWS_SDK() {

    this.CopyInstance = function() {

        try {

            // Load the AWS SDK for Node.js
            var AWS = require('aws-sdk');

            //Set the region
            AWS.config.update({region: 'us-east-2a'});

            var instanceParams = {
                ImageId: 'ami-0...',
                InstanceType: 't1.micro',
                KeyName: '<Key_name>',
                MinCount: 1,
                MaxCount: 1
            };

            // Create a promise on an EC2 service object
            var instancePromise = new AWS.EC2({apiVersion: '2016-11-15'}).runInstances(instanceParams).promise();

            // Handle promise's fulfilled/rejected states
            instancePromise.then(
                function (data) {
                    console.log(data);
                    var instanceId = data.Instances[0].InstanceId;
                    console.log("Created instance", instanceId);
                    // Add tags to the instance
                    var tagParams = {
                        Resources: [instanceId], Tags: [
                            {
                                Key: 'Name',
                                Value: 'SDK Sample'
                            }
                        ]
                    };

                    // Create a promise on an EC2 service object
                    var tagPromise = new AWS.EC2({apiVersion: '2016-11-15'}).createTags(tagParams).promise();
                    // Handle promise's fulfilled/rejected states
                    tagPromise.then(
                        function (data) {
                            console.log("Instance tagged");
                        }).catch(
                        function (err) {
                            console.error(err, err.stack);
                        });
                }).catch(
                function (err) {
                    console.error(err, err.stack);
                });
        }
        catch(e){
            wl.info('Error: ' + e);
        }
    } 

function create() {

    if(globalAWS === null)
        globalAWS = new AWS_SDK();

    return globalAWS;
}

module.exports = create;

错误:

  

{UnknownEndpoint:无法访问的主机:ec2.us-east-2a.amazonaws.com'. This service may not be available in the us-east-2a'地区。       在Request.ENOTFOUND_ERROR(D:\ Workspace \ BitBucket \ Test \ node_modules \ aws-sdk \ lib \ event_listeners.js:486:46)       在Request.callListeners(D:\ Workspace \ BitBucket \ Test \ node_modules \ aws-sdk \ lib \ sequential_executor.js:106:20)       在Request.emit(D:\ Workspace \ BitBucket \ Test \ node_modules \ aws-sdk \ lib \ sequential_executor.js:78:10)       在Request.emit(D:\ Workspace \ BitBucket \ Test \ node_modules \ aws-sdk \ lib \ request.js:683:14)       在ClientRequest.error(D:\ Workspace \ BitBucket \ Test \ node_modules \ aws-sdk \ lib \ event_listeners.js:325:22)       在ClientRequest。 (D:\ Workspace \ BitBucket \ Test \ node_modules \ aws-sdk \ lib \ http \ node.js:93:19)       在ClientRequest.emit(events.js:182:13)       在ClientRequest.EventEmitter.emit(domain.js:442:20)       在TLSSocket.socketErrorListener(_http_client.js:391:9)       TLSSocket.emit(events.js:182:13)消息:“无法访问的主机:ec2.us-east-2a.amazonaws.com\'. This service may not be available in the美国东部2a \'地区。”,代码:“ UnknownEndpoint”,
  地区:“ us-east-2a”,主机名:“ ec2.us-east-2a.amazonaws.com”,
  可重试:true,originalError:{错误:getaddrinfo ENOTFOUND   ec2.us-east-2a.amazonaws.com ec2.us-east-2a.amazonaws.com:443          在GetAddrInfoReqWrap.onlookup上(作为完成时)(dns.js:57:26)        信息:         'getaddrinfo ENOTFOUND ec2.us-east-2a.amazonaws.com ec2.us-east-2a.amazonaws.com:443',        errno:“ ENOTFOUND”,        代码:“ NetworkingError”,        syscall:“ getaddrinfo”,        主机名:“ ec2.us-east-2a.amazonaws.com”,        主持人:“ ec2.us-east-2a.amazonaws.com”,        端口:443,        地区:“ us-east-2a”,        可重试:是的,        时间:2019-01-14T20:03:42.177Z},时间:2019-01-14T20:03:42.177Z}'UnknownEndpoint:无法访问的主机:   ec2.us-east-2a.amazonaws.com\'. This service may not be available in the“美国东部2a”区域。\ n应要求提供。ENOTFOUND_ERROR   (D:\ Workspace \ BitBucket \ Test \ node_modules \ aws-sdk \ lib \ event_listeners.js:486:46)\ n   在Request.callListeners   (D:\ Workspace \ BitBucket \ Test \ node_modules \ aws-sdk \ lib \ sequential_executor.js:106:20)\ n   在Request.emit   (D:\ Workspace \ BitBucket \ Test \ node_modules \ aws-sdk \ lib \ sequential_executor.js:78:10)\ n   在Request.emit   (D:\ Workspace \ BitBucket \ Test \ node_modules \ aws-sdk \ lib \ request.js:683:14)\ n   在ClientRequest.error   (D:\ Workspace \ BitBucket \ Test \ node_modules \ aws-sdk \ lib \ event_listeners.js:325:22)\ n   在ClientRequest。   (D:\ Workspace \ BitBucket \ Test \ node_modules \ aws-sdk \ lib \ http \ node.js:93:19)\ n   在ClientRequest.emit(events.js:182:13)\ n在   ClientRequest.EventEmitter.emit(domain.js:442:20)\ n在   TLSSocket.socketErrorListener(_http_client.js:391:9)\ n在   TLSSocket.emit(events.js:182:13)'

     

以退出代码0结束的过程

如果我将区域更改为“ us-east-2”(在末尾删除“ a”),则错误将更改为:

{ Unsupported: The requested configuration is currently not supported. Please check the documentation for supported configurations.
    at Request.extractError (D:\Workspace\BitBucket\Test\node_modules\aws-sdk\lib\services\ec2.js:50:35)
    at Request.callListeners (D:\Workspace\BitBucket\Test\node_modules\aws-sdk\lib\sequential_executor.js:106:20)
    at Request.emit (D:\Workspace\BitBucket\Test\node_modules\aws-sdk\lib\sequential_executor.js:78:10)
    at Request.emit (D:\Workspace\BitBucket\Test\node_modules\aws-sdk\lib\request.js:683:14)
    at Request.transition (D:\Workspace\BitBucket\Test\node_modules\aws-sdk\lib\request.js:22:10)
    at AcceptorStateMachine.runTo (D:\Workspace\BitBucket\Test\node_modules\aws-sdk\lib\state_machine.js:14:12)
    at D:\Workspace\BitBucket\Test\node_modules\aws-sdk\lib\state_machine.js:26:10
    at Request.<anonymous> (D:\Workspace\BitBucket\Test\node_modules\aws-sdk\lib\request.js:38:9)
    at Request.<anonymous> (D:\Workspace\BitBucket\Test\node_modules\aws-sdk\lib\request.js:685:12)
    at Request.callListeners (D:\Workspace\BitBucket\Test\node_modules\aws-sdk\lib\sequential_executor.js:116:18)
  message:
   'The requested configuration is currently not supported. Please check the documentation for supported configurations.',
  code: 'Unsupported',
  time: 2019-01-14T20:31:55.954Z,
  requestId: '815a44e2-5d0d-453e-a4ff-6faac2695064',
  statusCode: 400,
  retryable: false,
  retryDelay: 51.269952198296934 } 'Unsupported: The requested configuration is currently not supported. Please check the documentation for supported configurations.\n    at Request.extractError (D:\\Workspace\\BitBucket\\Test\\node_modules\\aws-sdk\\lib\\services\\ec2.js:50:35)\n    at Request.callListeners (D:\\Workspace\\BitBucket\\Test\\node_modules\\aws-sdk\\lib\\sequential_executor.js:106:20)\n    at Request.emit (D:\\Workspace\\BitBucket\\Test\\node_modules\\aws-sdk\\lib\\sequential_executor.js:78:10)\n    at Request.emit (D:\\Workspace\\BitBucket\\Test\\node_modules\\aws-sdk\\lib\\request.js:683:14)\n    at Request.transition (D:\\Workspace\\BitBucket\\Test\\node_modules\\aws-sdk\\lib\\request.js:22:10)\n    at AcceptorStateMachine.runTo (D:\\Workspace\\BitBucket\\Test\\node_modules\\aws-sdk\\lib\\state_machine.js:14:12)\n    at D:\\Workspace\\BitBucket\\Test\\node_modules\\aws-sdk\\lib\\state_machine.js:26:10\n    at Request.<anonymous> (D:\\Workspace\\BitBucket\\Test\\node_modules\\aws-sdk\\lib\\request.js:38:9)\n    at Request.<anonymous> (D:\\Workspace\\BitBucket\\Test\\node_modules\\aws-sdk\\lib\\request.js:685:12)\n    at Request.callListeners (D:\\Workspace\\BitBucket\\Test\\node_modules\\aws-sdk\\lib\\sequential_executor.js:116:18)'

更新1:

我将区域从“ us-est-2”更改了,现在还更新了我的〜/ .aws / config文件(之前该文件仅包含1行/行:“ region = us-west-2”):

[default]
region=us-west-2
output=json

现在我收到此错误(当我尝试在CMD中对其进行解码时)-我仍然不明白我必须赋予/授予IAM-AWS用户什么额外的角色才能读取错误消息?

An error occurred (AccessDenied) when calling the DecodeAuthorizationMessage operation: User: arn:aws:iam::0046xxxxxxx:user/user_name is not authorized to perform: sts:DecodeAuthorizationMessage

2 个答案:

答案 0 :(得分:1)

您已将AWS区域配置为us-east-2a。那不是区域,而是可用区域。您的区域应配置为us-east-2

答案 1 :(得分:0)

我添加了IAM角色:“ AdministratorAccess”之后,所有问题都消失了:)现在的问题是-实际上需要授予哪个角色才能正常工作...“ AdministratorAccess”仅用于测试目的