Skip to content

Commit 23628b0

Browse files
committed
✨ First public version of dynamo data transformation
1 parent 36b009c commit 23628b0

26 files changed

Lines changed: 355 additions & 324 deletions

.eslintrc.js

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,16 @@ module.exports = {
2828
'import/no-dynamic-require': 'off',
2929
'global-require': 'off',
3030
'no-restricted-syntax': 'off',
31+
'max-len': [
32+
'error',
33+
{
34+
code: 120,
35+
ignoreComments: true,
36+
ignoreRegExpLiterals: true,
37+
ignoreStrings: true,
38+
ignoreTemplateLiterals: true,
39+
},
40+
],
3141
},
3242
overrides: [
3343
{
@@ -37,6 +47,13 @@ module.exports = {
3747
'import/no-unresolved': 'off',
3848
},
3949
},
50+
{
51+
files: ['*.js'],
52+
rules: {
53+
'import/no-extraneous-dependencies': 'off',
54+
'import/no-unresolved': 'off',
55+
},
56+
},
4057
],
4158

4259
};

.gitignore

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,5 @@ node_modules
33
dist
44
local
55
.vscode
6-
dynamodb-migrations-cli
76
.DS_Store
87
examples

.npmignore

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,4 +2,5 @@
22
/.github
33
/guy
44
/.vscode
5-
/docs/images
5+
/docs/images
6+
/examples

README.md

Lines changed: 28 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -130,7 +130,7 @@ Implement these functions:
130130

131131
1. Preparing data from external resources for the data transformation can be done by using `sls dynamodt prepare`
132132

133-
Run `sls dynamodt prepare --mNumber <transformation_number> --table <table>`\
133+
Run `sls dynamodt prepare --tNumber <transformation_number> --table <table>`\
134134
The data will be stored in a S3 bucket \
135135
The data will be decrypted while running the data transformation script.
136136

@@ -155,8 +155,20 @@ First of all, keep in mind that our mission is to prevent downtime while executi
155155
- To be continued...
156156

157157
### Troubleshooting
158-
To be continued
159-
158+
Credentials error:
159+
#### Required environment variables: #Move it to the tool docs
160+
```bash
161+
# configure aws credentials aws configure or use environment variables
162+
export AWS_ACCESS_KEY_ID=<your-access-key-id>
163+
export AWS_SECRET_ACCESS_KEY=<your-secret-access-key>
164+
export AWS_DEFAULT_REGION=<your-region>
165+
166+
#[OPTIONAL]
167+
# Required for preparing data for the migration
168+
# The default is migrations-preparation-data
169+
# Make sure you have created the bucket before running the migration
170+
export PREPARATION_DATA_BUCKET=<your-bucket-name>
171+
```
160172

161173
### Data Transformation Script Format (e.g v1_script.js)
162174
```js
@@ -182,7 +194,7 @@ const prepare = async ({ ddb, isDryRun }) => {
182194
module.exports = {
183195
transformUp,
184196
transformDown,
185-
prepare,
197+
prepare, // optional
186198
transformationNumber: 1,
187199
}
188200
```
@@ -196,7 +208,7 @@ https://github.com/jitsecurity/dynamo-data-transform/tree/main/examples/serverle
196208
#### Insert records
197209

198210
```js
199-
// Seed users data migration
211+
// Seed users data transformation
200212
const { utils } = require('dynamo-data-transform');
201213
const { USERS_DATA } = require('../../usersData');
202214

@@ -217,38 +229,38 @@ const transformDown = async ({ ddb, isDryRun }) => {
217229
module.exports = {
218230
transformUp,
219231
transformDown,
220-
migrationNumber: 1,
232+
transformationNumber: 1,
221233
};
222234
```
223235

224236
#### Add a new field to each record
225237
```js
226-
// Adding a "randomNumber" field to each item
238+
// Adding a "randotNumber" field to each item
227239
const { utils } = require('dynamo-data-transform');
228240

229241
const TABLE_NAME = 'UsersExample';
230242

231243
const transformUp = async ({ ddb, isDryRun }) => {
232-
const addRandomNumberField = (item) => {
233-
const updatedItem = { ...item, randomNumber: Math.random() };
244+
const addRandotNumberField = (item) => {
245+
const updatedItem = { ...item, randotNumber: Math.random() };
234246
return updatedItem;
235247
};
236-
return utils.transformItems(ddb, TABLE_NAME, addRandomNumberField, isDryRun);
248+
return utils.transformItems(ddb, TABLE_NAME, addRandotNumberField, isDryRun);
237249
};
238250

239251
const transformDown = async ({ ddb, isDryRun }) => {
240-
const removeRandomNumberField = (item) => {
241-
const { randomNumber, ...oldItem } = item;
252+
const removeRandotNumberField = (item) => {
253+
const { randotNumber, ...oldItem } = item;
242254
return oldItem;
243255
};
244-
return utils.transformItems(ddb, TABLE_NAME, removeRandomNumberField, isDryRun);
256+
return utils.transformItems(ddb, TABLE_NAME, removeRandotNumberField, isDryRun);
245257
};
246258

247259
module.exports = {
248260
transformUp,
249261
transformDown,
250-
// prepare, // pass this function only if you need preparation data for the migration
251-
migrationNumber: 2,
262+
// prepare, // pass this function only if you need preparation data for the transformation
263+
transformationNumber: 2,
252264
};
253265
```
254266

@@ -333,7 +345,7 @@ module.exports = {
333345
transformUp,
334346
transformDown,
335347
prepare,
336-
migrationNumber: 3,
348+
transformationNumber: 4,
337349
};
338350
```
339351

cli/Components/App.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,8 @@ const App = () => {
1414

1515
return (
1616
<>
17-
<BigTextErrorBoundary text={'Data Migration Tool'} key={'keyfortitle'}>
18-
<Title text='Data Migration Tool' />
17+
<BigTextErrorBoundary text='Dynamo Data Transform' key='keyfortitle'>
18+
<Title text='Dynamo Data Transform' />
1919
</BigTextErrorBoundary>
2020
<Newline />
2121
{selection ? (

cli/Components/CommandForm.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ const CommandForm = ({ selection, setSelection }) => {
4747
script(params).then(() => {
4848
setSelection(null);
4949
}).catch((error) => {
50-
console.error(error, `An error has occured while running migration (${selection}).`);
50+
console.error(error, `An error has occured while running transformation (${selection}).`);
5151
});
5252
};
5353

cli/cli-commands.js

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,8 @@ const COMMAND_OPTIONS = {
77
table: {
88
type: 'string', name: 'table', label: 'Specify table name', initialValue: '',
99
},
10-
mNumber: {
11-
type: 'string', name: 'mNumber', label: 'Specify the version of current migration number',
10+
tNumber: {
11+
type: 'string', name: 'tNumber', label: 'Specify the version of current transformation number',
1212
},
1313
tableNames: {
1414
type: 'string', name: 'tableNames', label: 'Specify table names e.g "table1, table2"', initialValue: '',
@@ -24,11 +24,11 @@ const CLI_COMMANDS = {
2424
};
2525

2626
const HELP_COMMANDS = {
27-
up: 'ddm up',
28-
down: 'ddm down --table <table>',
29-
history: 'ddm history --table <table>',
30-
prepare: 'ddm prepare --table <table> --mNumber <migration_number>',
31-
init: 'ddm init --tableNames <table_names>',
27+
up: 'ddt up',
28+
down: 'ddt down --table <table>',
29+
history: 'ddt history --table <table>',
30+
prepare: 'ddt prepare --table <table> --tNumber <transformation_number>',
31+
init: 'ddt init --tableNames <table_names>',
3232
};
3333

3434
const CLI_FORM = {
@@ -49,7 +49,7 @@ const CLI_FORM = {
4949
title: 'Preparetion Parameters',
5050
fields: [
5151
COMMAND_OPTIONS.table,
52-
COMMAND_OPTIONS.mNumber,
52+
COMMAND_OPTIONS.tNumber,
5353
COMMAND_OPTIONS.dry,
5454
],
5555
},

cli/index.js

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ const { HELP_COMMANDS } = require('./cli-commands');
99
const commandAliases = {
1010
dry: 'd',
1111
table: 't',
12-
mNumber: 'm',
12+
tNumber: 'tnum',
1313
tableNames: 'n',
1414
interactive: 'i',
1515
};
@@ -18,7 +18,7 @@ const options = parseArgs(process.argv.slice(2),{
1818
alias: commandAliases,
1919
boolean: ['dry', 'interactive', 'help'],
2020
string: ['table', 'tableNames'],
21-
number: ['mNumber'],
21+
number: ['tNumber'],
2222
});
2323

2424
(() => {
@@ -44,7 +44,7 @@ const options = parseArgs(process.argv.slice(2),{
4444
console.info(`"${command}" command run successfully.`);
4545
process.exit(0);
4646
}).catch((error) => {
47-
console.error(error, `An error has occured while running migration (${command}).`);
47+
console.error(error, `An error has occured while running transformation (${command}).`);
4848
process.exit(1);
4949
});
5050
}

index.js

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1-
const SlsPluginDynamodbDataMigrations = require('./serverless-plugin/sls-plugin');
1+
const SlsDynamoDataTransformationsPlugin = require('./serverless-plugin/sls-plugin');
2+
const utils = require('./src/utils');
23

3-
module.exports = SlsPluginDynamodbDataMigrations;
4+
module.exports = SlsDynamoDataTransformationsPlugin;
5+
module.exports.utils = utils;

serverless-plugin/commands.js

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -13,8 +13,8 @@ const COMMAND_OPTIONS = {
1313
required: true,
1414
type: 'string',
1515
},
16-
mNumber: {
17-
usage: 'Specify the version of current migration (e.g. "--mNumber 1")',
16+
tNumber: {
17+
usage: 'Specify the version of current transformation (e.g. "--tNumber 1")',
1818
required: true,
1919
type: 'number',
2020
},
@@ -24,39 +24,39 @@ const COMMAND_OPTIONS = {
2424
};
2525

2626
module.exports = {
27-
migration: {
28-
usage: 'Runs database migrations',
27+
dynamodt: {
28+
usage: 'Run data transformations',
2929
commands: {
3030
init: {
31-
usage: `sls migration init - ${COMMAND_DESCRIPTION.init}`,
31+
usage: `sls dynamodt init - ${COMMAND_DESCRIPTION.init}`,
3232
lifecycleEvents: ['init'],
3333
},
3434
up: {
35-
usage: `sls migration up - ${COMMAND_DESCRIPTION.up}`,
36-
lifecycleEvents: ['migrate'],
35+
usage: `sls dynamodt up - ${COMMAND_DESCRIPTION.up}`,
36+
lifecycleEvents: ['transform'],
3737
options: {
3838
dry: COMMAND_OPTIONS.dry,
3939
},
4040
},
4141
prepare: {
42-
usage: `"sls migration prepare --table {{TABLE_NAME}} --mNumber 1" - ${COMMAND_DESCRIPTION.prepare}`,
42+
usage: `"sls dynamodt prepare --table {{TABLE_NAME}} --tNumber 1" - ${COMMAND_DESCRIPTION.prepare}`,
4343
lifecycleEvents: ['prepare'],
4444
options: {
45-
mNumber: COMMAND_OPTIONS.mNumber,
45+
tNumber: COMMAND_OPTIONS.tNumber,
4646
dry: COMMAND_OPTIONS.dry,
4747
table: COMMAND_OPTIONS.table,
4848
},
4949
},
5050
down: {
51-
usage: `sls migration down --table {{TABLE_NAME}} - ${COMMAND_DESCRIPTION.down}`,
51+
usage: `sls dynamodt down --table {{TABLE_NAME}} - ${COMMAND_DESCRIPTION.down}`,
5252
lifecycleEvents: ['rollback'],
5353
options: {
5454
table: COMMAND_OPTIONS.table,
5555
dry: COMMAND_OPTIONS.dry,
5656
},
5757
},
5858
history: {
59-
usage: `sls migration history --table {{TABLE_NAME}} - ${COMMAND_DESCRIPTION.history}`,
59+
usage: `sls dynamodt history --table {{TABLE_NAME}} - ${COMMAND_DESCRIPTION.history}`,
6060
lifecycleEvents: ['history'],
6161
options: {
6262
table: COMMAND_OPTIONS.table,

0 commit comments

Comments
 (0)