eladkal commented on code in PR #28241:
URL: https://github.com/apache/airflow/pull/28241#discussion_r1113441726


##########
airflow/providers/amazon/aws/operators/lambda_function.py:
##########
@@ -20,35 +20,122 @@
 import json
 from typing import TYPE_CHECKING, Sequence
 
+from airflow.compat.functools import cached_property
 from airflow.models import BaseOperator
 from airflow.providers.amazon.aws.hooks.lambda_function import LambdaHook
 
 if TYPE_CHECKING:
     from airflow.utils.context import Context
 
 
-class AwsLambdaInvokeFunctionOperator(BaseOperator):
+class LambdaCreateFunctionOperator(BaseOperator):
     """
-    Invokes an AWS Lambda function.
-    You can invoke a function synchronously (and wait for the response),
-    or asynchronously.
-    To invoke a function asynchronously,
-    set `invocation_type` to `Event`. For more details,
-    review the boto3 Lambda invoke docs.
+    Creates an AWS Lambda function.
+
+    More information regarding parameters of this operator can be found here
+    
https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/lambda.html#Lambda.Client.create_function
+
+    .. seealso::
+        For more information on how to use this operator, take a look at the 
guide:
+        :ref:`howto/operator:LambdaCreateFunctionOperator`
 
     :param function_name: The name of the AWS Lambda function, version, or 
alias.
-    :param log_type: Set to Tail to include the execution log in the response. 
Otherwise, set to "None".
-    :param qualifier: Specify a version or alias to invoke a published version 
of the function.
-    :param invocation_type: One of RequestResponse / Event / DryRun
-    :param client_context: Up to 3,583 bytes of base64-encoded data about the 
invoking client
-        to pass to the function in the context object.
-    :param payload: The JSON string that you want to provide to your Lambda 
function as input.
+    :param runtime: The identifier of the function's runtime. Runtime is 
required if the deployment package
+        is a .zip file archive.
+    :param role: The Amazon Resource Name (ARN) of the function's execution 
role.
+    :param handler: The name of the method within your code that Lambda calls 
to run your function.
+        Handler is required if the deployment package is a .zip file archive.
+    :param code: The code for the function.
+    :param description: A description of the function.
+    :param timeout: The amount of time (in seconds) that Lambda allows a 
function to run before stopping it.
+    :param config: Optional dictionary for arbitrary parameters to the boto 
API create_lambda call.
+    :param wait_for_completion: If True, the operator will wait until the 
function is active.
     :param aws_conn_id: The AWS connection ID to use
+    """
+
+    template_fields: Sequence[str] = (
+        "function_name",
+        "runtime",
+        "role",
+        "handler",
+        "code",
+        "config",
+    )
+    ui_color = "#ff7300"
+
+    def __init__(
+        self,
+        *,
+        function_name: str,
+        runtime: str | None = None,
+        role: str,
+        handler: str | None = None,
+        code: dict,
+        description: str | None = None,
+        timeout: int | None = None,
+        config: dict = {},
+        wait_for_completion: bool = False,
+        aws_conn_id: str = "aws_default",
+        **kwargs,
+    ):
+        super().__init__(**kwargs)
+        self.function_name = function_name
+        self.runtime = runtime
+        self.role = role
+        self.handler = handler
+        self.code = code
+        self.description = description
+        self.timeout = timeout
+        self.config = config
+        self.wait_for_completion = wait_for_completion
+        self.aws_conn_id = aws_conn_id
+
+    @cached_property
+    def hook(self) -> LambdaHook:
+        return LambdaHook(aws_conn_id=self.aws_conn_id)
+
+    def execute(self, context: Context):
+        self.log.info("Creating AWS Lambda function: %s", self.function_name)
+        response = self.hook.create_lambda(
+            function_name=self.function_name,
+            runtime=self.runtime,
+            role=self.role,
+            handler=self.handler,
+            code=self.code,
+            description=self.description,
+            timeout=self.timeout,
+            **self.config,
+        )
+        self.log.info("Lambda response: %r", response)
+
+        if self.wait_for_completion:
+            self.log.info("Wait for Lambda function to be active")
+            waiter = self.hook.conn.get_waiter("function_active_v2")
+            waiter.wait(
+                FunctionName=self.function_name,
+            )
+
+        return response.get("FunctionArn")
+
+
+class AwsLambdaInvokeFunctionOperator(BaseOperator):

Review Comment:
   Why the Aws prefix?
   This is not aligned with the convention 
https://github.com/apache/airflow/issues/20296



-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: commits-unsubscr...@airflow.apache.org

For queries about this service, please contact Infrastructure at:
us...@infra.apache.org

Reply via email to