我发现我可以通过 环境变量从 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()
没有 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
我刚刚发现 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
,请务必检查您是否获得了最新版本。