3

我正在尝试从 lambda 访问 SSM 参数存储。我注意到当从基于 Java AWS SDK 的 lambda 与基于 NodeJS AWS SDK 的 lambda 获取参数时,性能存在重大差异。

  • 对于基于java的 lambda - 检索第一个参数大约需要5-10 秒
  • 对于基于NodeJS的 lambda - 检索第一个参数大约需要0.5-1 秒

基于 java 的 lambda 获取参数的示例代码:

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();
    }

}

基于 NodeJS 的 lambda 获取参数的示例代码:

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;
  1. 这是预期的行为吗?为什么基于 java 的 lambda 检索参数的时间是 NodeJS 的近 10 倍?
  2. 虽然不需要在 NodeJS AWS SDK 中打包 lambda,但对于 Java,它是强制性的,因为它在编译时需要,这使得 jar ~8 MB,而 NodeJs 的 zip ~1.4 MB
  3. 基于以上两点,当需要访问参数存储时,是否可以肯定地得出结论,基于 NodeJS 的 lambda 比基于 java 的 lambda 好得多?
4

0 回答 0