Używam AWS Lambda do zmiany rozmiaru obrazu w s3 bucket na warianty o różnych rozmiarach za pomocą węzła js, gdy obraz jest wstawiany do s3 bucket.AWS Lambda nie działa razem z modułem gm
To działało do wczoraj. Dzisiaj, kiedy używam tej samej funkcji lambda, pojawia się następujący błąd:
{
"errorMessage": "Command failed: identify: not authorized `//bucketname.s3.amazonaws.com/imagename.jpg' @ error/constitute.c/ReadImage/454.\n",
"errorType": "Error",
"stackTrace": [
"",
"ChildProcess.proc.on.onExit (/var/task/node_modules/gm/lib/command.js:297:17)",
"emitTwo (events.js:87:13)",
"ChildProcess.emit (events.js:172:7)",
"maybeClose (internal/child_process.js:821:16)",
"Socket.<anonymous> (internal/child_process.js:319:11)",
"emitOne (events.js:77:13)",
"Socket.emit (events.js:169:7)",
"Pipe._onclose (net.js:469:12)"
]
}
Nie jestem w stanie zrozumieć, dlaczego to zjawisko wystąpiło. Wszystkie podane funkcje mojej funkcji lambda poniżej są w async waterfall, aby najpierw obliczyć współczynnik kształtu, a następnie przekonwertować obraz na warianty o różnych rozmiarach.
var request=require("request");
function getTheAspectRatio(callback) {
gm(s3Url) // I am constructing the image url in the AWS Lambda Function.
.size(function(err, size) {
if (!err) {
//Calculate the Aspect ratio
} else if (err) {
//Give Back the Error
}
});
}
function getTheImageBuffer(callback) {
request(imageUrl, function(err, res, res1) {
if (err) {
callback(err);
} else {
buffer = res1;
console.log("got the BUffer");
callback(null);
}
});
}
function convertToThumbNail(callback) {
//Convert to Thumbnail Image
}
function convertToFull(callback) {
//Convert to Full Image
}
function convertToBadge(callback) {
//Convert to Badge image
}
Czy ktoś może pomóc w debugowaniu problemu? Trochę utknąłem na tym przez ostatnie 3 godziny. Moja AWS Lambda znajduje się w regionie Tokio.
Z prostego czytania komunikatu o błędzie wynika, że funkcja Lambda nie ma już dostępu do wiadra S3. –