Creación de BD en Dynamo y RDS para AWS mediante SDK.
En esta publicación estoy creando clientes para EC2, DynamoDB, RDS y ElastiCache para crear una base de datos noSQL, llenar los datos, crear una BD relacional y un cache. Para ello también se necesitan crear grupos de seguridad.
Comienzo con los módulos requeridos para estar operaciones, así como de los clientes requeridos.
const {
EC2Client,
AuthorizeSecurityGroupIngressCommand,
CreateSecurityGroupCommand
} = require('@aws-sdk/client-ec2');
const {
CreateTableCommand,
DynamoDBClient
} = require('@aws-sdk/client-dynamodb');
const {
BatchWriteCommand,
DynamoDBDocumentClient
} = require('@aws-sdk/lib-dynamodb');
const {
RDSClient
} = require('@aws-sdk/client-rds');
const {
ElastiCacheClient
} = require('@aws-sdk/client-elasticache');
const paramsClient = {...};
const client = new EC2Client(paramsClient);
const clientDynamo = new DynamoDBClient (paramsClient);
const clientRDS = new RDSClient(paramsClient);
const clientElastic = new ElastiCacheClient(paramsClient);
A continuación creo el grupo de seguridad requerido. Ya en otras publicaciones de AWS con SDK lo he puesto
const paramsSecGp = {...};
const cmdSecPg = new CreateSecurityGroupCommand(paramsSecGp);
const dataSecGp = client.send(cmdSecGp);
const paramsRules = {...};
const cmdAuth = new AuthorizeSecurityGroupIngressCommand(paramsRules);
const dataAuth = client.send(cmdAuth);
Ahora procedo a crear la tabla en Dynamo DB y llenarla, así como también crear una BD relacional y un cache
const paramsCreateTable = {...};
const cmdCreateTable = new CreateTableCommand(paramsCreateTable);
const dataCreateTable = clientDynamo.send(cmdCreateTable);
const paramsPopulateTable = {...};
const cmdPopulate = new BatchWriteCommand(paramsPopulateTable);
const dataPopulate = clientDynamo.send(cmdPopulate);
const paramsDB = {...};
const cmdDB = new CreateDBInstanceCommand(paramsDB);
const dataDB = clientRDS.send(cmdDB);
const paramsRedis = {...};
const cmdRedis = new CreateCacheClusterCommand(paramsRedis);
const dataRedis = clientElastic.send(cmdRedis);
Lo interesante viene, la definición básica de los parámetros para cada comando
const paramsClient = {
region: process.ev.AWS_REGION // string con el nombre de la región
};
const paramsSecGp = {
Description: sgName, // string con la descripción del grupo
GroupName: sgName // string con el nombre del grupo
};
const paramsRules = {
GroupId: groupId, // string con el id del grupo
IpPermissions: [
{
IpProtocol: protocol, // string con el nombre del protocolo
FromPort: port, // entero positivo
ToPort: port, // entero positivo
IpRanges: [
{
CidrIp: '0.0.0.0/0' // string con la especificación de IPs
}
]
}
]
};
const attributeDefinition = {
AttributeName: name, // string con el nombre del atributo
AttributeType: type // string con el tipo de atributo (un caracter)
};
const keySchema = {
AttributeName: name, // string con el nombre del atributo
KeyType: type // string con el tipo de llave
}
const paramsCreateTable = {
TableName: tableName, // string con el nombre del grupo
AttributeDefinitions: [ attributeDefinition ], // lista de attributeDefinition
KeySchema: [ keySchema ], // lista de keySchema
ProvisionedThroughtput: {
ReadCapacityUnits: readUnits, // entero positivo
WriteCapacityUnits: writeUnits // entero positivo
}
};
const paramsPopulateTable = {
RequestItems: {
[ tableName ]: data.map(i => { // "tableName" es lista de string con el nombre de las tablas
return {
PutRequest: {
Item: i
}
}
})
}
};
const paramsDB = {
AllocatedStorage: storage, // entero positivo
DBInstanceClass: instanceClass, // string con el tipo de instancia
SBInstanceIdentifier: dbName, // string con el nombre de la instancia para la BD
Engine: engineName, // string con el nombre el motor, p. e.: 'mysql'
DBName: dbName, // string con el nombre de la BD
VpcSecurityGroupIds: [ secGpIds ], // lista de string con los nombres de grupos
MasterUsername: userName, // string con el nombre de usuario
MasterUserPassword: password // string con la contraseña
};
const paramsRedis = {
CacheClusterId: clusterName, // string con el nombre del cache
CacheNodeType: nodeType, // string con el tipo de nodos
Engine: engine, // string con el nombre del motor
NumCacheNodes: numNodes, // entero positivo
SecurityGroupIds: [ secGpIds ] // lista de string con los nombres de los grupos
};
Comentarios
Publicar un comentario