Source code for ecs_composex.ecs.ecs_firelens.helpers.cloudwatch_helpers

#  SPDX-License-Identifier: MPL-2.0
#  Copyright 2020-2022 John Mille <john@compose-x.io>

"""
Module to help with common FireLens + CloudWatch configuration and settings
"""

from __future__ import annotations

from typing import TYPE_CHECKING, Any

if TYPE_CHECKING:
    from ecs_composex.ecs.ecs_family import ComposeFamily
    from ecs_composex.compose.compose_services import ComposeService
    from ecs_composex.common.settings import ComposeXSettings

from troposphere import Ref, Region, Sub

from ecs_composex.ecs.ecs_family.family_logging.cw_logging import (
    LOGGING_IAM_PERMISSIONS_MODEL,
)
from ecs_composex.resource_settings import define_iam_permissions


[docs]def set_default_cloudwatch_logging_options( family: ComposeFamily, service: ComposeService, settings: ComposeXSettings, ) -> None: """ Sets up all the options for CloudWatch in absence of fluentbit options :param family: :param service: :param settings: """ service.logging.log_options.update( { "Name": "cloudwatch", "region": Region, "auto_create_group": True, "log_group_name": Ref(family.logging.family_log_group), "log_stream_prefix": service.container_name, } )
[docs]def handle_cloudwatch_log_group_name( family: ComposeFamily, service: ComposeService, settings: ComposeXSettings, parameter_name: str, config_value: Any = None, ): """ Function to handle Log Group settings and permissions for CloudWatch FireLens settings """ if not isinstance(service.logging.log_options[parameter_name], str): return service.logging.log_options[parameter_name] _arn = Sub( f"arn:${{AWS::Partition}}:logs:*:${{AWS::AccountId}}:log-group:{service.logging.log_options[parameter_name]}:*" ) roles = [family.iam_manager.exec_role.name, family.iam_manager.task_role.name] define_iam_permissions( "logs", family, family.template, "CloudWatchLogsAccess", LOGGING_IAM_PERMISSIONS_MODEL, access_definition="LogGroupOwner", resource_arns=[_arn], roles=roles, sid_override=f"{service.logical_name}CloudWatchLogsAccess", ) return service.logging.log_options[parameter_name]