diff --git a/localstack/services/lambda_/invocation/metrics.py b/localstack/services/lambda_/invocation/metrics.py index d842647776713..b9fcefa89f44b 100644 --- a/localstack/services/lambda_/invocation/metrics.py +++ b/localstack/services/lambda_/invocation/metrics.py @@ -5,30 +5,33 @@ LOG = logging.getLogger(__name__) -def record_cw_metric_invocation(function_name: str, region_name: str): +def record_cw_metric_invocation(function_name: str, account_id: str, region_name: str): try: publish_lambda_metric( "Invocations", 1, {"func_name": function_name}, region_name=region_name, + account_id=account_id, ) except Exception as e: LOG.debug("Failed to send CloudWatch metric for Lambda invocation: %s", e) -def record_cw_metric_error(function_name: str, region_name: str): +def record_cw_metric_error(function_name: str, account_id: str, region_name: str): try: publish_lambda_metric( "Invocations", 1, {"func_name": function_name}, region_name=region_name, + account_id=account_id, ) publish_lambda_metric( "Errors", 1, {"func_name": function_name}, + account_id=account_id, region_name=region_name, ) except Exception as e: diff --git a/localstack/services/lambda_/invocation/version_manager.py b/localstack/services/lambda_/invocation/version_manager.py index 9a5404723379d..b994853da7212 100644 --- a/localstack/services/lambda_/invocation/version_manager.py +++ b/localstack/services/lambda_/invocation/version_manager.py @@ -229,6 +229,7 @@ def invoke(self, *, invocation: Invocation) -> InvocationResult: start_thread( lambda *args, **kwargs: record_cw_metric_error( function_name=self.function.function_name, + account_id=self.function_version.id.account, region_name=self.function_version.id.region, ), name=f"record-cloudwatch-metric-error-{function_id.function_name}:{function_id.qualifier}", @@ -237,6 +238,7 @@ def invoke(self, *, invocation: Invocation) -> InvocationResult: start_thread( lambda *args, **kwargs: record_cw_metric_invocation( function_name=self.function.function_name, + account_id=self.function_version.id.account, region_name=self.function_version.id.region, ), name=f"record-cloudwatch-metric-{function_id.function_name}:{function_id.qualifier}", diff --git a/localstack/utils/cloudwatch/cloudwatch_util.py b/localstack/utils/cloudwatch/cloudwatch_util.py index eb6b7f6f9504e..a1cb8984787e4 100644 --- a/localstack/utils/cloudwatch/cloudwatch_util.py +++ b/localstack/utils/cloudwatch/cloudwatch_util.py @@ -29,11 +29,13 @@ def dimension_lambda(kwargs): return [{"Name": "FunctionName", "Value": func_name}] -def publish_lambda_metric(metric, value, kwargs, region_name: Optional[str] = None): +def publish_lambda_metric( + metric, value, kwargs, account_id: Optional[str] = None, region_name: Optional[str] = None +): # publish metric only if CloudWatch service is available if not is_api_enabled("cloudwatch"): return - cw_client = connect_to(region_name=region_name).cloudwatch + cw_client = connect_to(aws_access_key_id=account_id, region_name=region_name).cloudwatch try: cw_client.put_metric_data( Namespace="AWS/Lambda",