ich setze ein dynamodb lokal ein, um es mit meiner Node-App zu testen. Um es einzurichten, habe ich einfach den Code von hier kopiert und an meine Bedürfnisse angepasst.
Dies ist der Code:
var AWS = require("aws-sdk");
var config = ({
"apiVersion": "2012-08-10",
"accessKeyId": "abcde",
"secretAccessKey": "abcde",
"region": "us-west-2",
"endpoint": "http://localhost:8001",
});
var dynamodb = new AWS.DynamoDB(config);
var params = {
TableName : "Movies",
KeySchema: [
{ AttributeName: "year", KeyType: "HASH"}, //Partition key
{ AttributeName: "title", KeyType: "RANGE" } //Sort key
],
AttributeDefinitions: [
{ AttributeName: "year", AttributeType: "N" },
{ AttributeName: "title", AttributeType: "S" }
],
ProvisionedThroughput: {
ReadCapacityUnits: 10,
WriteCapacityUnits: 10
}
};
dynamodb.createTable(params, function(err, data) {
if (err) {
console.error("Unable to create table. Error JSON:", JSON.stringify(err, null, 2));
} else {
console.log("Created table. Table description JSON:", JSON.stringify(data, null, 2));
}
});
Dies wirft jedoch einen Fehler und ich habe keine Ahnung warum:
Unable to create table. Error JSON: {
"message": "Missing credentials in config",
"code": "CredentialsError",
"time": "2017-04-10T11:45:26.748Z",
"retryable": true,
"originalError": {
"message": "Could not load credentials from any providers",
"code": "CredentialsError",
"time": "2017-04-10T11:45:26.747Z",
"retryable": true,
"originalError": {
"message": "Connection timed out after 1000ms",
"code": "TimeoutError",
"time": "2017-04-10T11:45:26.747Z",
"retryable": true
}
}
}
Wäre für jede Hilfe dankbar!
Anscheinend habe ich das Problem herausgefunden. Die Verwendung der Json-Datei zum Festlegen der Berechtigungsnachweise führte immer noch zum Fehler. Die Verwendung nur des Konfigurationsobjekts ohne das Flag -inMemory hat ebenfalls einen Fehler verursacht. Die Kombination aus hartem Codieren der Berechtigungsnachweise im Skript und der Verwendung des -inMemory-Flags beim lokalen Starten von dynamodb schien das zu lösen. Ich verstehe wirklich nicht warum.
Wechseln Sie zum folgenden Code, verwenden Sie Dummy accessKeyId
und secretAccessKey
und führen Sie ihn aus
var AWS = require("aws-sdk");
AWS.config.update({
region: 'us-west-1',
accessKeyId: 'accessKeyId',
secretAccessKey: 'secretAccessKey',
endpoint: new AWS.Endpoint('http://localhost:8000'),
});
var dynamodb = new AWS.DynamoDB();
var params = {
TableName : "Movies",
KeySchema: [
{ AttributeName: "year", KeyType: "HASH"}, //Partition key
{ AttributeName: "title", KeyType: "RANGE" } //Sort key
],
AttributeDefinitions: [
{ AttributeName: "year", AttributeType: "N" },
{ AttributeName: "title", AttributeType: "S" }
],
ProvisionedThroughput: {
ReadCapacityUnits: 10,
WriteCapacityUnits: 10
}
};
dynamodb.createTable(params, function(err, data) {
if (err) {
console.error("Unable to create table. Error JSON:", JSON.stringify(err, null, 2));
} else {
console.log("Created table. Table description JSON:", JSON.stringify(data, null, 2));
}
});
Wie in der Fehlermeldung angegeben, sind Ihre Anmeldeinformationen nicht in config
festgelegt.
Ich gebe meine Ansicht, um die Anmeldeinformationen festzulegen und dann die Dienste zu verwenden.
const aws = require('aws-sdk');
aws.config = new aws.Config();
aws.config.accessKeyId = "xxxxxxxxxxxxxx";
aws.config.secretAccessKey = "xxxxxxxxxx";
aws.config.region = "region";
Verwenden Sie nun die Dynamodb
var dynamodb = new AWS.DynamoDB({apiVersion: '2012-08-10'});
UPDATE
sie können den Berechtigungsnachweis auch mit der Datei festlegen
aws.config.loadFromPath('./AwsConfig.json');
Hoffe, es funktioniert!!
Sie sind wahrscheinlich verwirrend zwischen dem Webdienst DynamoDB und der lokalen Version. Die Hauptunterschiede zwischen beiden finden Sie in der AWS-Dokumentation .
Wenn Sie eine lokale Version von DynamoDB verwenden möchten, finden Sie die neuesten Informationen zum Installieren und Ausführen dieser Version in AWS-Dokumentation .
Wenn Sie fertig sind, müssen Sie die lokale DynamoDB-Instanz ausführen, indem Sie Folgendes ausführen:
Java -Djava.library.path=./DynamoDBLocal_lib -jar DynamoDBLocal.jar -sharedDb -inMemory
Ihr Fehler wird wahrscheinlich vermieden.
DynamoDB local funktioniert für mich gut auf Port 8000 mit Dummy-Anmeldeinformationen.
Hinweis:
Die Portnummer ist 8000 . Ich verwende die unten angegebenen Dummy-Ausweise.
var creds = new AWS.Credentials('akid', 'secret', 'session');
AWS.config.update({
region: "us-west-2",
endpoint: "http://localhost:8000",
credentials: creds
});
Startbefehl: -
Java -Djava.library.path=DynamoDBLocal_lib -jar DynamoDBLocal.jar -sharedDb
OS: -
Windows