Untitled
unknown
plain_text
2 years ago
4.1 kB
14
Indexable
const AWS = require('aws-sdk');
// Create the DynamoDB Client with the region you want
const region = 'us-east-1';
const dynamoDbClient = createDynamoDbClient(region);
// Create the input for query call
const queryInput = createQueryInput();
// Call DynamoDB's query API
executeQuery(dynamoDbClient, queryInput).then(() => {
console.info('Query API call has been executed.')
}
);
function createDynamoDbClient(regionName) {
// Set the region
AWS.config.update({region: regionName});
// Use the following config instead when using DynamoDB local
// AWS.config.update({region: 'localhost', endpoint: 'http://localhost:8000', accessKeyId: 'access_key_id', secretAccessKey: 'secret_access_key'});
return new AWS.DynamoDB();
}
function createQueryInput() {
return {
"TableName": "Pemint_Dev_Transactions",
"ScanIndexForward": true,
"ReturnConsumedCapacity": "TOTAL",
"IndexName": "Partner_ID-CreatedAt-index",
"KeyConditionExpression": "#4c0a0 = :4c0a0 And #4c0a1 BETWEEN :4c0a1 AND :4c0a2",
"ExpressionAttributeValues": {
":4c0a0": {
"S": "1234"
},
":4c0a1": {
"S": "21-12-2023"
},
":4c0a2": {
"S": "22-12-2023"
}
},
"ExpressionAttributeNames": {
"#4c0a0": "Partner_ID",
"#4c0a1": "CreatedAt"
}
}
}
async function executeQuery(dynamoDbClient, queryInput) {
// Call DynamoDB's query API
try {
const queryOutput = await dynamoDbClient.query(queryInput).promise();
console.info('Query successful.');
// Handle queryOutput
} catch (err) {
handleQueryError(err);
}
}
// Handles errors during Query execution. Use recommendations in error messages below to
// add error handling specific to your application use-case.
function handleQueryError(err) {
if (!err) {
console.error('Encountered error object was empty');
return;
}
if (!err.code) {
console.error(`An exception occurred, investigate and configure retry strategy. Error: ${JSON.stringify(err)}`);
return;
}
// here are no API specific errors to handle for Query, common DynamoDB API errors are handled below
handleCommonErrors(err);
}
function handleCommonErrors(err) {
switch (err.code) {
case 'InternalServerError':
console.error(`Internal Server Error, generally safe to retry with exponential back-off. Error: ${err.message}`);
return;
case 'ProvisionedThroughputExceededException':
console.error(`Request rate is too high. If you're using a custom retry strategy make sure to retry with exponential back-off. `
+ `Otherwise consider reducing frequency of requests or increasing provisioned capacity for your table or secondary index. Error: ${err.message}`);
return;
case 'ResourceNotFoundException':
console.error(`One of the tables was not found, verify table exists before retrying. Error: ${err.message}`);
return;
case 'ServiceUnavailable':
console.error(`Had trouble reaching DynamoDB. generally safe to retry with exponential back-off. Error: ${err.message}`);
return;
case 'ThrottlingException':
console.error(`Request denied due to throttling, generally safe to retry with exponential back-off. Error: ${err.message}`);
return;
case 'UnrecognizedClientException':
console.error(`The request signature is incorrect most likely due to an invalid AWS access key ID or secret key, fix before retrying. `
+ `Error: ${err.message}`);
return;
case 'ValidationException':
console.error(`The input fails to satisfy the constraints specified by DynamoDB, `
+ `fix input before retrying. Error: ${err.message}`);
return;
case 'RequestLimitExceeded':
console.error(`Throughput exceeds the current throughput limit for your account, `
+ `increase account level throughput before retrying. Error: ${err.message}`);
return;
default:
console.error(`An exception occurred, investigate and configure retry strategy. Error: ${err.message}`);
return;
}
}
Editor is loading...
Leave a Comment