Я использую JS-библиотеку амплификации Storage для того, чтобы поместить файл на S3.
this.amplify.storage().put(
this.s3ImagePath,
this.s3ImageFile,
this._storageOptions)
На s3 я создал триггер для событий PUT
для вызова Lambda.Лямбда вставляет запись в DynamoDB.Моя проблема в том, что я хочу указать правильного владельца в этой недавно созданной записи DynamoDB.
Внутри лямбды я называю headObject следующим образом:
const headResult = await S3.headObject({Bucket: bucketName, Key: key }).promise();
console.log('headResult ', headResult);
Я ожидаю, что headResult
будет содержать правильного владельца, который загрузил файл и создал событие в корзине S3.Я могу найти по событию S3:
ownerIdentity: { principalId: 'A2N3MUDHGLOEZI' },
, но я не уверен, как его использовать, чтобы найти правильного владельца и вставить правильное значение в новую запись DynamoDB.
Я также обнаружил, что это может помочь:
userIdentity:
{ principalId: 'AWS:AROASQSLQMXWXMMOH3FEA:CognitoIdentityCredentials' },
Поскольку я новичок в безсерверной парадигме, скажите, пожалуйста, как мне добавить новую запись в DynamoDB, когда Lambda запускается изсобытие S3 PUT?
В качестве обходного пути я думаю удалить событие S3 PUT, которое вызывает лямбду, чтобы создать запись и вызвать мутацию от клиента, когда загрузка файла завершится.Но я считаю, что это обходной путь, а не правильный подход к проблеме.