Source code for infrahouse_core.aws.vpc_flow_log

"""
VPC Flow Log resource wrapper.

Provides ``exists`` / ``delete()`` support for EC2 VPC flow logs.
"""

from __future__ import annotations

from logging import getLogger

from infrahouse_core.aws.base import AWSResource

LOG = getLogger(__name__)


[docs] class VPCFlowLog(AWSResource): """Wrapper around an EC2 VPC Flow Log. :param flow_log_id: Flow log ID (e.g. ``fl-0123456789abcdef0``). :param region: AWS region. :param role_arn: IAM role ARN for cross-account access. """ def __init__(self, flow_log_id, region=None, role_arn=None, session=None): super().__init__(flow_log_id, "ec2", region=region, role_arn=role_arn, session=session) @property def flow_log_id(self) -> str: """Return the flow log ID. :rtype: str """ return self._resource_id @property def exists(self) -> bool: """Return ``True`` if the flow log exists. The ``describe_flow_logs`` API does not raise an error for non-existent IDs -- it returns an empty list instead. """ response = self._client.describe_flow_logs(FlowLogIds=[self._resource_id]) return len(response.get("FlowLogs", [])) > 0
[docs] def delete(self) -> None: """Delete the flow log. Idempotent -- ``delete_flow_logs`` succeeds even if the flow log does not exist. """ response = self._client.delete_flow_logs(FlowLogIds=[self._resource_id]) unsuccessful = response.get("Unsuccessful", []) if unsuccessful: LOG.warning("Failed to delete flow log %s: %s", self._resource_id, unsuccessful) else: LOG.info("Deleted VPC flow log %s", self._resource_id)