in syndicate/core/transform/cloudformation/converter/cf_lambda_function_converter.py [0:0]
def convert(self, name, meta):
lambda_function = awslambda.Function(lambda_function_logic_name(name))
lambda_function.FunctionName = meta['name']
lambda_function.Code = awslambda.Code(
S3Bucket=self.config.deploy_target_bucket,
S3Key=meta[S3_PATH_NAME])
lambda_function.Handler = meta['func_name']
lambda_function.MemorySize = meta['memory']
role_name = meta['iam_role_name']
role = self.get_resource(iam_role_logic_name(role_name))
_arn = None
if not role:
_LOG.warning(f'Role \'{role_name}\' was not found in '
f'build_meta.json. Building arn manually')
iam_service = self.resources_provider.iam()
role = role_name # for kinesis trigger
_arn = iam_service.iam_conn.build_role_arn(role_name)
else:
_arn = GetAtt(iam_role_logic_name(meta['iam_role_name']), 'Arn')
lambda_function.Role = _arn
lambda_function.Runtime = meta['runtime'].lower()
lambda_function.Timeout = meta['timeout']
env_vars = meta.get('env_variables')
if env_vars:
lambda_function.Environment = \
awslambda.Environment(Variables=env_vars)
dl_target_arn = LambdaResource.get_dl_target_arn(
meta=meta,
region=self.config.region,
account_id=self.config.account_id)
if dl_target_arn:
lambda_function.DeadLetterConfig = \
awslambda.DeadLetterConfig(TargetArn=dl_target_arn)
layer_meta = meta.get('layers')
if layer_meta:
lambda_layers = []
for layer_name in layer_meta:
layer_logic_name = lambda_layer_logic_name(layer_name)
layer = self.get_resource(layer_logic_name)
if not layer:
raise AssertionError("Lambda layer '{}' is not present "
"in build meta.".format(layer_name))
lambda_layers.append(layer.ref())
lambda_function.Layers = lambda_layers
vpc_sub_nets = meta.get('subnet_ids')
vpc_security_group = meta.get('security_group_ids')
if vpc_sub_nets and vpc_security_group:
lambda_function.VpcConfig = awslambda.VPCConfig(
SubnetIds=vpc_sub_nets,
SecurityGroupIds=vpc_security_group)
tracing_mode = meta.get('tracing_mode')
if tracing_mode:
lambda_function.TracingConfig = \
awslambda.TracingConfig(Mode=tracing_mode)
reserved_concur = meta.get(LAMBDA_MAX_CONCURRENCY)
lambda_service = self.resources_provider.lambda_resource()
if lambda_service.check_concurrency_availability(reserved_concur):
lambda_function.ReservedConcurrentExecutions = reserved_concur
self.template.add_resource(lambda_function)
provisioned_concur = meta.get(PROVISIONED_CONCURRENCY)
publish_version = meta.get('publish_version', False)
lambda_version = None
if publish_version:
lambda_version = self._lambda_version(
function=lambda_function,
provisioned_concurrency=provisioned_concur)
alias = meta.get('alias')
lambda_alias = None
if alias:
lambda_alias = self._lambda_alias(
function=lambda_function, alias=alias,
version_logic_name=lambda_version.title,
provisioned_concurrency=provisioned_concur)
retention = meta.get('logs_expiration')
if retention:
group_name = get_lambda_log_group_name(lambda_name=name)
self.template.add_resource(
self._log_group(group_name=group_name,
retention_in_days=retention))
event_sources = meta.get('event_sources')
if event_sources:
for trigger_meta in event_sources:
if lambda_alias:
arn = lambda_alias.ref()
elif lambda_version:
arn = lambda_version.ref()
else:
arn = lambda_function.ref()
trigger_type = trigger_meta['resource_type']
func = self.CREATE_TRIGGER[trigger_type]
func(self, name, arn, role, trigger_meta)