Ho una funzione Lambda che deve leggere un file da S3 ogni volta che viene eseguito.
Il file è molto piccolo, circa 200 byte, il secchio S3 si trova nella regione degli Stati Uniti, la funzione Lambda si trova nella regione us-east-1 (quindi nella stessa regione). Ci vogliono tra 10 e 15 secondi per leggere il file, come mai questo è così lento?Funzione AWS Lambda estremamente lenta per il recupero del file S3
Grazie.
EDIT: un codice
long start = System.nanoTime();
AmazonS3Client s3Client = new AmazonS3Client();
S3Object propertyFile = null;
try {
propertyFile = s3Client.getObject(S3_BUCKET_NAME, S3_PROPERTY_FILE);
} catch (Exception e) {...}
try (InputStream in = propertyFile.getObjectContent()) {
PROPERTIES.load(in);
} catch (Exception e) {...}
LOGGER.debug("S3 access " + (System.nanoTime() - start));
EDIT # 2: Dopo il suggerimento Brooks' ho fatto
AmazonS3Client s3Client = new AmazonS3Client(new InstanceProfileCredentialsProvider());
e ottengo questo errore:
Unable to load credentials from Amazon EC2 metadata service
EDIT # 3:
La memoria allocata alla funzione Lambda era 256 MB, quando alloco 1024 MB, è kes 3-4 secondi che è ancora troppo lento (ci vogliono circa 1-2 secondi quando provo localmente dal mio computer).
La persona che ha votato potrebbe forse spiegare il motivo. –
Provare a specificare InstanceProfileCredentialsProvider durante l'istanziazione di AmazonS3Client. Il costruttore predefinito deve tentare l'autorizzazione tramite variabili di ambiente (in questo ordine), proprietà di sistema, file di credenziali e quindi profilo di istanza. Quindi, il tuo metodo di autorizzazione preferito è l'ultimo. Non penserei che ci vorrebbe QUELLO a lungo, comunque dagli un colpo e fammi sapere. – Brooks
Mi dispiace, mi sono sbagliato. Pensavo che i contenitori Lambda fossero forniti con InstanceProfiles (non riesco a capire perché non lo farebbe). Sembra che venga fornito con le credenziali specificate nelle variabili di ambiente (http://stackoverflow.com/questions/32275169/aws-lambda-custom-triggers). Prova a specificare (nuovo EnvironmentVariableCredentialsProvider()) durante l'istanziazione di AmazonS3Client. Anche se è il primo elemento nell'elenco di credenziali verificate quando si utilizza il costruttore predefinito, non può fare male provare. Facci sapere. – Brooks