diff --git a/src/main/java/cloud/localstack/LambdaContext.java b/src/main/java/cloud/localstack/LambdaContext.java index 20940c3..4a27ac6 100644 --- a/src/main/java/cloud/localstack/LambdaContext.java +++ b/src/main/java/cloud/localstack/LambdaContext.java @@ -5,76 +5,116 @@ import com.amazonaws.services.lambda.runtime.Context; import com.amazonaws.services.lambda.runtime.LambdaLogger; +import java.text.SimpleDateFormat; +import java.util.Date; +import java.util.UUID; import java.util.logging.Level; import java.util.logging.Logger; public class LambdaContext implements Context { - private final Logger LOG = Logger.getLogger(LambdaContext.class.getName()); + private static final int DEFAULT_MEMORY_SIZE_IN_MB = 256; + private static final String DEFAULT_ACCOUNT_ID = "123456789012"; + private static final String DEFAULT_REGION = "us-east-1"; + private static final String DEFAULT_FUNCTION_NAME = "localstack"; + private static final String DEFAULT_FUNCTION_VERSION = "$LATEST"; - public LambdaLogger getLogger() { - return new LambdaLogger() { + private static final String TODAY = new SimpleDateFormat("yyyy/MM/dd").format(new Date()); + private static final String CONTAINER_ID = UUID.randomUUID().toString(); - @Override - public void log(String msg) { - LOG.log(Level.INFO, msg); - } + private final Logger LOG = Logger.getLogger(LambdaContext.class.getName()); - @Override - public void log(byte[] msg) { - log(new String(msg)); - } - }; - } + private final String requestId; - public String getAwsRequestId() { - // TODO Auto-generated method stub - return null; + public LambdaContext(String requestId) { + this.requestId = requestId; } - public ClientContext getClientContext() { - // TODO Auto-generated method stub - return null; + @Override + public String getAwsRequestId() { + return requestId; } + @Override public String getFunctionName() { - // TODO Auto-generated method stub - return null; + String functionName = System.getenv("AWS_LAMBDA_FUNCTION_NAME"); + if (functionName == null) { + functionName = DEFAULT_FUNCTION_NAME; + } + return functionName; } + @Override public String getFunctionVersion() { - // TODO Auto-generated method stub - return null; - } - - public CognitoIdentity getIdentity() { - // TODO Auto-generated method stub - return null; + String functionVersion = System.getenv("AWS_LAMBDA_FUNCTION_VERSION"); + if (functionVersion == null) { + functionVersion = DEFAULT_FUNCTION_VERSION; + } + return functionVersion; } + @Override public String getInvokedFunctionArn() { - // TODO Auto-generated method stub - return null; + String region = System.getenv("AWS_REGION"); + if (region == null) { + region = DEFAULT_REGION; + } + return String.format("arn:aws:%s:%s:function:%s:%s", + region, DEFAULT_ACCOUNT_ID, getFunctionName(), getFunctionVersion()); } + @Override public String getLogGroupName() { - // TODO Auto-generated method stub - return null; + return String.format("/aws/lambda/%s", getFunctionName()); } + @Override public String getLogStreamName() { - // TODO Auto-generated method stub - return null; + return String.format("%s[%s]%s", TODAY, getFunctionVersion(), CONTAINER_ID); } + @Override public int getMemoryLimitInMB() { - // TODO Auto-generated method stub - return 0; + String memorySize = System.getenv("AWS_LAMBDA_FUNCTION_MEMORY_SIZE"); + if (memorySize == null) { + return DEFAULT_MEMORY_SIZE_IN_MB; + } else { + try { + return Integer.parseInt(memorySize); + } catch (NumberFormatException e) { + return DEFAULT_MEMORY_SIZE_IN_MB; + } + } } + @Override public int getRemainingTimeInMillis() { - // TODO Auto-generated method stub - return 0; + return Integer.MAX_VALUE; + } + + @Override + public LambdaLogger getLogger() { + return new LambdaLogger() { + @Override + public void log(String msg) { + LOG.log(Level.INFO, msg); + } + + @Override + public void log(byte[] msg) { + log(new String(msg)); + } + }; + } + + @Override + public ClientContext getClientContext() { + return null; + } + + @Override + public CognitoIdentity getIdentity() { + return null; } } diff --git a/src/main/java/cloud/localstack/LambdaExecutor.java b/src/main/java/cloud/localstack/LambdaExecutor.java index ba3ca32..c5d40bd 100644 --- a/src/main/java/cloud/localstack/LambdaExecutor.java +++ b/src/main/java/cloud/localstack/LambdaExecutor.java @@ -29,6 +29,7 @@ import java.util.List; import java.util.Map; import java.util.Optional; +import java.util.UUID; import java.util.stream.Collectors; /** @@ -89,7 +90,7 @@ public static void main(String[] args) throws Exception { } } - Context ctx = new LambdaContext(); + Context ctx = new LambdaContext(UUID.randomUUID().toString()); if (handler instanceof RequestHandler) { Object result = ((RequestHandler) handler).handleRequest(inputObject, ctx); // try turning the output into json