私は実行するたびにS3からファイルを読み込む必要があるラムダ関数を持っています。
ファイルは非常に小さく、約200バイトです.S3バケットはUS標準領域にあり、ラムダ関数はus-east-1領域(同じ領域)にあります。ファイルの読み込みには10〜15秒かかりますが、どうしてこれが遅いのですか?AWS Lambda関数がS3ファイルを取得するのが極端に遅い
ありがとうございました。
編集:いくつかのコード
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:ブルックスの提案した後、私は
AmazonS3Client s3Client = new AmazonS3Client(new InstanceProfileCredentialsProvider());
を行なったし、私はこのエラーを取得する:
Unable to load credentials from Amazon EC2 metadata service
EDIT#3:
ラムダ関数に割り当てられたメモリは256MBでした。私が1024MBを割り当てると、それはta 3〜4秒の遅さはまだ遅いです(コンピュータからローカルにテストすると約1〜2秒かかります)。
投票した人がその理由を説明している可能性があります。 –
AmazonS3Clientをインスタンス化するときにInstanceProfileCredentialsProviderを指定してみてください。デフォルトのコンストラクターは、(この順序で)環境変数、システム・プロパティー、信任状ファイル、およびインスタンス・プロファイルを介して許可を試行する必要があります。したがって、あなたの優先権申請方法は最後です。私はそれが長い時間がかかりそうだとは思わないでしょうが、ショットを与えて私に知らせてください。 – Brooks
申し訳ありませんが、私は間違っていました。私はラムダコンテナがInstanceProfilesに同梱されていると思っていた(なぜそうでないのか分からない)。それは、環境変数(http://stackoverflow.com/questions/32275169/aws-lambda-custom-triggers)で指定された資格情報とともに出荷されるようです。 AmazonS3Clientをインスタンス化するときに、(新しいEnvironmentVariableCredentialsProvider())を指定してみてください。デフォルトのコンストラクタを使用するときにチェックされる資格情報のリストの最初の項目でも、試しても害はありません。我々に教えてください。 – Brooks