def convert()

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)