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)