如何获取与 boto3 中的 Lambda 函数关联的日志组?

问题描述 投票:0回答:2

我发现我可以通过 环境变量从 Lambda 本身获取日志组作为环境变量,但是如果我有 Lambda 成功或失败的 Cloudwatch 事件,我如何使用 Lambda 函数名称来识别正在写入的日志组?我没有看到任何提供此功能的 lambda 或 cloudwatch boto3 客户端方法。

这提供了有关 Lambda 函数的一些详细信息(包括环境变量),但不包括日志组

client = boto3.client('lambda')
client.get_function(FunctionName=function_name)

cloudwatch 端有这个,但它需要日志组的前缀,无法将资源 ARN 绑定到日志组 ARN。

client = boto3.client('cloudwatch')
client.describe_log_groups()
python amazon-web-services boto3
2个回答
2
投票

没有 API 或 SDK 函数可检索给定 Lambda 函数的日志组名称。相反,您可以简单地从 Lambda 函数名称推断它,例如:

def get_log_group_name(function_name):
    return f"/aws/lambda/{function_name}"

如果您想更进一步并确保具有给定名称的 Lambda 函数确实存在,那么您可以使用以下变体:

import boto3

def get_log_group_name(function_name):
    lambda_client = boto3.client("lambda")

    try:
        response = lambda_client.get_function(FunctionName=function_name)
        if "Configuration" in response:
            log_group_name = f"/aws/lambda/{response["Configuration"]["FunctionName"]}"
            return log_group_name
        else:
            raise ValueError(
                f"Couldn't find the specified Lambda function: {function_name}"
            )
    except Exception as e:
        print(f"Error: {e}")
        raise e

0
投票

我刚刚发现 AWS 最近将日志配置详细信息添加到了 get_function 响应中。现在您可以像这样获取 lambda 的日志组名称:

def get_log_group(function_arn):
    function_details = boto3.client('lambda').get_function(FunctionName=function_arn)
    return function_details.get('Configuration').get('LoggingConfig').get('LogGroup')

在使用

boto3==1.26.161
时丢失了它,但在更新到
boto3==1.29.5
后看到它开始返回,因此,如果您在响应中没有看到
LoggingConfig
,请务必检查您是否获得了最新版本。

© www.soinside.com 2019 - 2024. All rights reserved.