in aws_emr_launch/constructs/lambdas/emr_lambdas.py [0:0]
def get_or_build(scope: core.Construct, roles: emr_roles.EMRRoles, event_rule: events.Rule) -> aws_lambda.Function:
code = aws_lambda.Code.from_asset(_lambda_path("emr_utilities/run_job_flow"))
stack = core.Stack.of(scope)
layer = EMRConfigUtilsLayerBuilder.get_or_build(scope)
lambda_function = stack.node.try_find_child("RunJobFlow")
if lambda_function is None:
lambda_function = aws_lambda.Function(
stack,
"RunJobFlow",
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=["elasticmapreduce:RunJobFlow"], resources=["*"]
),
iam.PolicyStatement(
effect=iam.Effect.ALLOW,
actions=["iam:PassRole"],
resources=[
roles.service_role.role_arn,
roles.instance_role.role_arn,
roles.autoscaling_role.role_arn,
],
),
iam.PolicyStatement(effect=iam.Effect.ALLOW, actions=["states:SendTaskSuccess"], resources=["*"]),
iam.PolicyStatement(
effect=iam.Effect.ALLOW,
actions=["events:EnableRule", "events:PutTargets"],
resources=[event_rule.rule_arn],
),
],
)
BaseBuilder.tag_construct(lambda_function)
return cast(aws_lambda.Function, lambda_function)