#typescript #amazon-web-services #aws-sdk #partiql
Вопрос:
У меня есть следующая лямбда-функция
const partiQl = "UPDATE '?' SET hits = hits 1 WHERE path = "'?'" RETURNING ALL NEW *"
console.log(partiQl)
console.log(event.path)
console.log(process.env.HITS_TABLE_NAME)
const execStatementCommand = new ExecuteStatementCommand({
Statement: partiQl,
Parameters: [
{ "S": process.env.HITS_TABLE_NAME } ,
{ "S": event.path }
]
});
console.log(execStatementCommand)
А значения путей-это в основном URL-адреса с косой чертой ‘/’
И я получаю эту ошибку, но не могу понять, почему:
2021-10-12T02:56:41.021Z 23d1ea78-48d2-4390-b100-2a3479697e4f ERROR Statement wasn't well formed, can't be processed: Expected identifier for simple path
событие.значение пути для тестового запуска равно /test
и HITS_TABLE передается из вызова CDK.
есть какие-нибудь идеи?
Обновить
Я изменил инструкцию partiqlна это, и ошибка изменилась на имя таблицы, которое не поддерживается.
const partiQl = `UPDATE "?" SET hits = hits 1 WHERE "path" = "?" RETURNING ALL NEW *`
вот новая ошибка:
ERROR
Table name should be within the length [3, 255]
and only contain 'a-z', 'A-Z', '0-9', '-', '_', '.'.
Если я включу аргументы непосредственно в строку, похоже, что это решит проблему с разделением:
const partiQl = `UPDATE "${process.env.HITS_TABLE_NAME}" SET hits = hits 1 `
`WHERE "path" = "${event.path}" RETURNING ALL NEW *`
console.log(partiQl)
const execStatementCommand = new ExecuteStatementCommand({
Statement: partiQl
});
Нет хороших примеров для partiqlи AWS SDK v3, есть идеи, почему?
Обновить
using the second method, I get the following error
User: arn:XXXX is not authorized to perform: dynamodb:PartiQLUpdate on resource: arn:YYYYY
even though I have granted read and write permission to the table using this method:
table.grantReadWriteData(this.handler);
I have looked at https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/ql-iam.html
and the list of permission I need the lambda to have are:
"dynamodb:PartiQLInsert",
"dynamodb:PartiQLUpdate",
"dynamodb:PartiQLDelete",
"dynamodb:PartiQLSelect"
do I have to create a custom IAM policy to add these?
Sorry I am very new to AWS in general.
UPDATE
after adding the following policy rule, the following error occurs:
this.handler.role?.addToPolicy(new iam.PolicyStatement({
effect: iam.Effect.ALLOW,
resources: [table.tableArn],
actions: [
'dynamodb:PartiQLUpdate',
'dynamodb:PartiQLSelect',
'dynamodb:PartiQLInsert',
'dynamodb:PartiQLDelete'
]
}));
и вот следующая ошибка:
ERROR Where clause does not contain a mandatory equality on all key attributes
Я предполагаю, что это связано с тем, что вызов обновления не находит никаких строк.