Я следовал этому руководству: https://docs.aws.amazon.com/sdk-for-javascript/v2/developer-guide/ec2-example-creating-an-instance.html
Когда я запускаю приведенный ниже код - получаю ошибку UnknowEndPoint.
Я создал пользователя AWS IAM и добавил его в группу с именем политики «IAMFullAccess» - я не знаю, какая другая политика подойдет (на панели управления AWS я вижу, что мои учетные данные использовались программно - поэтому я думаю, эта часть работает хорошо ...)?
Я поместил свои учетные данные в папку .aws в файле с именем credentials.
Я не уверен, что на самом деле поместить в поле «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.info(data);
var instanceId = data.Instances[0].InstanceId;
console.info("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.info("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: Inaccessible host:
ec2.us-east-2a.amazonaws.com'. This service may not be available in theus-east-2a' region. at Request.ENOTFOUND_ERROR (D:\Workspace\BitBucket\Test\node_modules\aws-sdk\lib\event_listeners.js:486:46) 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 ClientRequest.error (D:\Workspace\BitBucket\Test\node_modules\aws-sdk\lib\event_listeners.js:325:22) at ClientRequest. (D:\Workspace\BitBucket\Test\node_modules\aws-sdk\lib\http\node.js:93:19) at ClientRequest.emit (events.js:182:13) at ClientRequest.EventEmitter.emit (domain.js:442:20) at TLSSocket.socketErrorListener (_http_client.js:391:9) at TLSSocket.emit (events.js:182:13) message: 'Inaccessible host:ec2.us-east-2a.amazonaws.com\'. This service may not be available in theus-east-2a\' region.', code: 'UnknownEndpoint',
region: 'us-east-2a', hostname: 'ec2.us-east-2a.amazonaws.com',
retryable: true, originalError: { Error: getaddrinfo ENOTFOUND ec2.us-east-2a.amazonaws.com ec2.us-east-2a.amazonaws.com:443 at GetAddrInfoReqWrap.onlookup [as oncomplete] (dns.js:57:26) message: 'getaddrinfo ENOTFOUND ec2.us-east-2a.amazonaws.com ec2.us-east-2a.amazonaws.com:443', errno: 'ENOTFOUND', code: 'NetworkingError', syscall: 'getaddrinfo', hostname: 'ec2.us-east-2a.amazonaws.com', host: 'ec2.us-east-2a.amazonaws.com', port: 443, region: 'us-east-2a', retryable: true, time: 2019-01-14T20:03:42.177Z }, time: 2019-01-14T20:03:42.177Z } 'UnknownEndpoint: Inaccessible host:ec2.us-east-2a.amazonaws.com\'. This service may not be available in theus-east-2a\' region.\n at Request.ENOTFOUND_ERROR (D:\Workspace\BitBucket\Test\node_modules\aws-sdk\lib\event_listeners.js:486:46)\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 ClientRequest.error (D:\Workspace\BitBucket\Test\node_modules\aws-sdk\lib\event_listeners.js:325:22)\n at ClientRequest. (D:\Workspace\BitBucket\Test\node_modules\aws-sdk\lib\http\node.js:93:19)\n at ClientRequest.emit (events.js:182:13)\n at ClientRequest.EventEmitter.emit (domain.js:442:20)\n at TLSSocket.socketErrorListener (_http_client.js:391:9)\n at TLSSocket.emit (events.js:182:13)'Process finished with exit code 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
Спасибо - Тогда должно быть правильно :)
Я подозреваю, что ошибка «Неподдерживаемый» возникает из-за того, что тип экземпляра, который вы запускаете, недоступен в этом регионе / зоне доступности. Обратите внимание, что t1.micro - это экземпляр предыдущего поколения, и он был заменен на t2.micro, поэтому используйте его.





Вы настроили свой регион AWS как us-east-2a. Это не регион, это зона доступности. Ваш регион должен быть настроен как us-east-2.
Спасибо. Но вместо этого я получаю второе сообщение об ошибке? Что это не поддерживает?
После того, как я добавил роль IAM: «AdministratorAccess», все проблемы исчезли :) Теперь вопрос - какую роль (роли) необходимо предоставить для работы ... «AdministratorAccess» был предназначен только для целей тестирования.
В документе для runInstances объясняется, что KeyName - это «имя пары ключей».