diff --git a/app/server/appsmith-interfaces/src/main/java/com/appsmith/external/constants/PluginConstants.java b/app/server/appsmith-interfaces/src/main/java/com/appsmith/external/constants/PluginConstants.java
index 37fc3534a8..65c5bd5414 100644
--- a/app/server/appsmith-interfaces/src/main/java/com/appsmith/external/constants/PluginConstants.java
+++ b/app/server/appsmith-interfaces/src/main/java/com/appsmith/external/constants/PluginConstants.java
@@ -16,6 +16,7 @@ public interface PluginConstants {
String ANTHROPIC_PLUGIN = "anthropic-plugin";
String GOOGLE_AI_PLUGIN = "googleai-plugin";
String DATABRICKS_PLUGIN = "databricks-plugin";
+ String AWS_LAMBDA_PLUGIN = "aws-lambda-plugin";
}
public static final String DEFAULT_REST_DATASOURCE = "DEFAULT_REST_DATASOURCE";
@@ -43,6 +44,7 @@ public interface PluginConstants {
public static final String ANTHROPIC_PLUGIN_NAME = "Anthropic";
public static final String GOOGLE_AI_PLUGIN_NAME = "Google AI";
public static final String DATABRICKS_PLUGIN_NAME = "Databricks";
+ public static final String AWS_LAMBDA_PLUGIN_NAME = "AWS Lambda";
}
interface HostName {
diff --git a/app/server/appsmith-plugins/awsLambdaPlugin/pom.xml b/app/server/appsmith-plugins/awsLambdaPlugin/pom.xml
new file mode 100644
index 0000000000..d89ae8093b
--- /dev/null
+++ b/app/server/appsmith-plugins/awsLambdaPlugin/pom.xml
@@ -0,0 +1,81 @@
+
+
+ 4.0.0
+
+ com.appsmith
+ appsmith-plugins
+ 1.0-SNAPSHOT
+
+
+ com.external.plugins
+ awsLambdaPlugin
+ 1.0-SNAPSHOT
+ awsLambdaPlugin
+ http://maven.apache.org
+
+
+
+ com.amazonaws
+ aws-java-sdk-lambda
+ 1.12.622
+
+
+ com.fasterxml.jackson.core
+ *
+
+
+
+
+ com.amazonaws
+ aws-java-sdk-osgi
+ 1.12.622
+
+
+ com.fasterxml.jackson.core
+ *
+
+
+
+
+
+
+ io.projectreactor
+ reactor-test
+ 3.2.11.RELEASE
+ test
+
+
+ org.mockito
+ mockito-core
+ 3.1.0
+ test
+
+
+
+
+
+
+
+ maven-shade-plugin
+
+
+ maven-dependency-plugin
+
+
+ copy-dependencies
+
+ copy-dependencies
+
+ package
+
+ runtime
+ ${project.build.directory}/lib
+
+
+
+
+
+
+
+
diff --git a/app/server/appsmith-plugins/awsLambdaPlugin/src/main/java/com/external/plugins/AwsLambdaPlugin.java b/app/server/appsmith-plugins/awsLambdaPlugin/src/main/java/com/external/plugins/AwsLambdaPlugin.java
new file mode 100644
index 0000000000..8a4757400c
--- /dev/null
+++ b/app/server/appsmith-plugins/awsLambdaPlugin/src/main/java/com/external/plugins/AwsLambdaPlugin.java
@@ -0,0 +1,242 @@
+package com.external.plugins;
+
+import com.amazonaws.auth.AWSStaticCredentialsProvider;
+import com.amazonaws.auth.BasicAWSCredentials;
+import com.amazonaws.regions.Regions;
+import com.amazonaws.services.lambda.AWSLambda;
+import com.amazonaws.services.lambda.AWSLambdaClientBuilder;
+import com.amazonaws.services.lambda.model.AWSLambdaException;
+import com.amazonaws.services.lambda.model.FunctionConfiguration;
+import com.amazonaws.services.lambda.model.InvokeRequest;
+import com.amazonaws.services.lambda.model.InvokeResult;
+import com.amazonaws.services.lambda.model.ListFunctionsResult;
+import com.amazonaws.services.lambda.model.ResourceNotFoundException;
+import com.appsmith.external.exceptions.pluginExceptions.AppsmithPluginError;
+import com.appsmith.external.exceptions.pluginExceptions.AppsmithPluginException;
+import com.appsmith.external.models.ActionConfiguration;
+import com.appsmith.external.models.ActionExecutionResult;
+import com.appsmith.external.models.DBAuth;
+import com.appsmith.external.models.DatasourceConfiguration;
+import com.appsmith.external.models.DatasourceTestResult;
+import com.appsmith.external.models.TriggerRequestDTO;
+import com.appsmith.external.models.TriggerResultDTO;
+import com.appsmith.external.plugins.BasePlugin;
+import com.appsmith.external.plugins.PluginExecutor;
+import com.fasterxml.jackson.databind.node.ArrayNode;
+import lombok.extern.slf4j.Slf4j;
+import org.pf4j.Extension;
+import org.pf4j.PluginWrapper;
+import org.springframework.util.ObjectUtils;
+import org.springframework.util.StringUtils;
+import reactor.core.publisher.Mono;
+import reactor.core.scheduler.Schedulers;
+
+import java.nio.ByteBuffer;
+import java.nio.charset.StandardCharsets;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.Objects;
+import java.util.Set;
+import java.util.stream.Collectors;
+import java.util.stream.StreamSupport;
+
+import static com.appsmith.external.helpers.PluginUtils.STRING_TYPE;
+import static com.appsmith.external.helpers.PluginUtils.getDataValueSafelyFromFormData;
+
+public class AwsLambdaPlugin extends BasePlugin {
+
+ public AwsLambdaPlugin(PluginWrapper wrapper) {
+ super(wrapper);
+ }
+
+ @Slf4j
+ @Extension
+ public static class AwsLambdaPluginExecutor implements PluginExecutor {
+
+ @Override
+ public Mono execute(
+ AWSLambda connection,
+ DatasourceConfiguration datasourceConfiguration,
+ ActionConfiguration actionConfiguration) {
+
+ Map formData = actionConfiguration.getFormData();
+ String command = getDataValueSafelyFromFormData(formData, "command", STRING_TYPE);
+
+ return Mono.fromCallable(() -> {
+ ActionExecutionResult result;
+ switch (Objects.requireNonNull(command)) {
+ case "LIST_FUNCTIONS" -> result = listFunctions(actionConfiguration, connection);
+ case "INVOKE_FUNCTION" -> result = invokeFunction(actionConfiguration, connection);
+ default -> throw new IllegalStateException("Unexpected value: " + command);
+ }
+
+ return result;
+ })
+ .onErrorMap(
+ IllegalArgumentException.class,
+ e -> new AppsmithPluginException(
+ AppsmithPluginError.PLUGIN_ERROR, "Unsupported command: " + command))
+ .onErrorMap(
+ ResourceNotFoundException.class,
+ e -> new AppsmithPluginException(AppsmithPluginError.PLUGIN_ERROR, e.getErrorMessage()))
+ .onErrorMap(
+ Exception.class,
+ e -> new AppsmithPluginException(AppsmithPluginError.PLUGIN_ERROR, e.getMessage()))
+ .map(obj -> obj)
+ .subscribeOn(Schedulers.boundedElastic());
+ }
+
+ @Override
+ public Mono trigger(
+ AWSLambda connection, DatasourceConfiguration datasourceConfiguration, TriggerRequestDTO request) {
+ if (!StringUtils.hasText(request.getRequestType())) {
+ throw new AppsmithPluginException(
+ AppsmithPluginError.PLUGIN_EXECUTE_ARGUMENT_ERROR, "request type is missing");
+ }
+ ActionExecutionResult actionExecutionResult = listFunctions(null, connection);
+ ArrayNode body = (ArrayNode) actionExecutionResult.getBody();
+ List