def get_or_build()

in aws_emr_launch/constructs/lambdas/emr_lambdas.py [0:0]


    def get_or_build(scope: core.Construct, event_rule: events.Rule) -> aws_lambda.Function:
        code = aws_lambda.Code.from_asset(_lambda_path("emr_utilities/check_cluster_status"))
        stack = core.Stack.of(scope)

        layer = EMRConfigUtilsLayerBuilder.get_or_build(scope)

        lambda_function = stack.node.try_find_child("CheckClusterStatus")
        if lambda_function is None:
            lambda_function = aws_lambda.Function(
                stack,
                "CheckClusterStatus",
                code=code,
                handler="lambda_source.handler",
                runtime=aws_lambda.Runtime.PYTHON_3_7,
                timeout=core.Duration.minutes(1),
                layers=[layer],
                initial_policy=[
                    iam.PolicyStatement(
                        effect=iam.Effect.ALLOW,
                        actions=["states:SendTaskSuccess", "states:SendTaskHeartbeat", "states:SendTaskFailure"],
                        resources=["*"],
                    ),
                    iam.PolicyStatement(
                        effect=iam.Effect.ALLOW, actions=["elasticmapreduce:DescribeCluster"], resources=["*"]
                    ),
                    iam.PolicyStatement(
                        effect=iam.Effect.ALLOW,
                        actions=["events:ListTargetsByRule", "events:DisableRule", "events:RemoveTargets"],
                        resources=[event_rule.rule_arn],
                    ),
                ],
            )
            BaseBuilder.tag_construct(lambda_function)
            lambda_function.add_permission(
                "EventRulePermission",
                principal=iam.ServicePrincipal("events.amazonaws.com"),
                action="lambda:InvokeFunction",
                source_arn=event_rule.rule_arn,
            )

        return cast(aws_lambda.Function, lambda_function)