I am trying to access SSM parameter store from lambda. I have noticed major difference in performance when parameter is fetched from lambda based on Java AWS SDK Vs lambda based on NodeJS AWS SDK.
- For java based lambda - to retrieve first parameter it takes around 5-10 seconds
- For NodeJS based lambda - to retrieve first parameter it takes around 0.5-1 seconds
Sample code for java based lambda to fetch parameter:
import com.amazonaws.services.simplesystemsmanagement.AWSSimpleSystemsManagement;
import com.amazonaws.services.simplesystemsmanagement.AWSSimpleSystemsManagementClientBuilder;
import com.amazonaws.services.simplesystemsmanagement.model.GetParameterRequest;
import com.amazonaws.services.simplesystemsmanagement.model.GetParameterResult;
public class SSMClientUtil {
private static AWSSimpleSystemsManagement ssm = AWSSimpleSystemsManagementClientBuilder.defaultClient();
public static String getParameter(final String parameterName) {
final long startTime = System.currentTimeMillis();
final GetParameterRequest request = new GetParameterRequest();
request.setName(parameterName);
request.setWithDecryption(true);
final GetParameterResult parameterResult = ssm.getParameter(request);
System.out.println("GetParameterResult for parameter: " + parameterName + " Time : " + (System.currentTimeMillis() - startTime) + " -> " + parameterResult);
return parameterResult.getParameter().getValue();
}
}
Sample code for NodeJS based lambda to fetch parameter:
const AWS_SDK = require("aws-sdk");
ssmClient = new AWS_SDK.SSM();
var parameterPromise = await ssmClient.getParameter(params).promise();
console.log('parameterPromise: ' + JSON.stringify(parameterPromise));
return parameterPromise.Parameter.Value;
- Is it expected behavior? Why java based lambda takes almost 10 times more time than NodeJS to retrieve parameter?
- While packaging lambda in NodeJS AWS SDK is not required, but for Java it's mandatory as it's required at compile time, which makes jar ~8 MB, whereas zip for NodeJs ~1.4 MB
- Based on above 2 points, is it safe to conclude that NodeJS based lambda is much better than java based lambda when need to access parameter store?