chore: import upstream snapshot with attribution
This commit is contained in:
@@ -0,0 +1,106 @@
|
||||
import * as dynamodb from '@aws-sdk/client-dynamodb'
|
||||
import util from 'util'
|
||||
|
||||
const format = (x: any): string => util.inspect(x, { depth: null, colors: true })
|
||||
|
||||
const getEnv = (envName: string): string => {
|
||||
const envValue = process.env[envName]
|
||||
if (!envValue) {
|
||||
throw new Error(`${envName} is required`)
|
||||
}
|
||||
return envValue
|
||||
}
|
||||
|
||||
const endpoint = getEnv('endpoint')
|
||||
const table_name = getEnv('table_name')
|
||||
const partition_key = getEnv('partition_key')
|
||||
const sort_key = getEnv('sort_key')
|
||||
const index_name = getEnv('index_name')
|
||||
const index_sort_key = getEnv('index_sort_key')
|
||||
|
||||
console.info(`### endpoint=${endpoint} ###`)
|
||||
console.info(`### table_name=${table_name} ###`)
|
||||
console.info(`### partition_key=${partition_key} ###`)
|
||||
console.info(`### sort_key=${sort_key} ###`)
|
||||
console.info(`### index_name=${index_name} ###`)
|
||||
console.info(`### index_sort_key=${index_sort_key} ###`)
|
||||
|
||||
const main = async () => {
|
||||
const ddbClient = new dynamodb.DynamoDBClient({
|
||||
endpoint,
|
||||
})
|
||||
|
||||
const listTablesCmd = new dynamodb.ListTablesCommand({})
|
||||
const listTablesRes = await ddbClient.send(listTablesCmd)
|
||||
if (listTablesRes.TableNames?.includes(table_name)) {
|
||||
console.info(`Table ${table_name} already exists. Skipping creation.`)
|
||||
return
|
||||
}
|
||||
|
||||
const createTableCmd = new dynamodb.CreateTableCommand({
|
||||
TableName: table_name,
|
||||
AttributeDefinitions: [
|
||||
{
|
||||
AttributeName: partition_key,
|
||||
AttributeType: 'S',
|
||||
},
|
||||
{
|
||||
AttributeName: sort_key,
|
||||
AttributeType: 'S',
|
||||
},
|
||||
{
|
||||
AttributeName: index_sort_key,
|
||||
AttributeType: 'S',
|
||||
},
|
||||
],
|
||||
KeySchema: [
|
||||
{
|
||||
AttributeName: partition_key,
|
||||
KeyType: 'HASH',
|
||||
},
|
||||
{
|
||||
AttributeName: sort_key,
|
||||
KeyType: 'RANGE',
|
||||
},
|
||||
],
|
||||
BillingMode: 'PAY_PER_REQUEST',
|
||||
LocalSecondaryIndexes: [
|
||||
{
|
||||
IndexName: index_name,
|
||||
KeySchema: [
|
||||
{
|
||||
AttributeName: partition_key,
|
||||
KeyType: 'HASH',
|
||||
},
|
||||
{
|
||||
AttributeName: index_sort_key,
|
||||
KeyType: 'RANGE',
|
||||
},
|
||||
],
|
||||
Projection: {
|
||||
ProjectionType: 'KEYS_ONLY',
|
||||
},
|
||||
},
|
||||
],
|
||||
})
|
||||
|
||||
await ddbClient.send(createTableCmd)
|
||||
|
||||
const describeTableCmd = new dynamodb.DescribeTableCommand({
|
||||
TableName: table_name,
|
||||
})
|
||||
|
||||
const describeTableRes = await ddbClient.send(describeTableCmd)
|
||||
|
||||
console.info('### Table Description ###')
|
||||
console.info(format(describeTableRes.Table))
|
||||
}
|
||||
|
||||
void main()
|
||||
.then(() => {
|
||||
process.exit(0)
|
||||
})
|
||||
.catch((err) => {
|
||||
console.error(err)
|
||||
process.exit(1)
|
||||
})
|
||||
Reference in New Issue
Block a user