2025-07-21 10:45:13 -04:00

65 lines
2.2 KiB
Python

import boto3
def enable_observability_for_resource(
resource_arn: str,
resource_id: str,
account_id: str,
region: str = 'us-east-1'
):
"""
Enable observability for a Bedrock AgentCore resource (e.g., Memory Store)
"""
logs_client = boto3.client('logs', region_name=region)
# Step 0: Create new log group for vended log delivery
log_group_name = f'/aws/vendedlogs/bedrock-agentcore/{resource_id}'
logs_client.create_log_group(logGroupName=log_group_name)
log_group_arn = f'arn:aws:logs:{region}:{account_id}:log-group:{log_group_name}'
# Step 1: Create delivery source for logs
logs_source_response = logs_client.put_delivery_source(
name=f"{resource_id}-logs-source",
logType="APPLICATION_LOGS",
resourceArn=resource_arn
)
# Step 2: Create delivery source for traces
traces_source_response = logs_client.put_delivery_source(
name=f"{resource_id}-traces-source",
logType="TRACES",
resourceArn=resource_arn
)
# Step 3: Create delivery destinations
logs_destination_response = logs_client.put_delivery_destination(
name=f"{resource_id}-logs-destination",
deliveryDestinationType='CWL',
deliveryDestinationConfiguration={
'destinationResourceArn': log_group_arn,
}
)
# Traces required for memory only
traces_destination_response = logs_client.put_delivery_destination(
name=f"{resource_id}-traces-destination",
deliveryDestinationType='XRAY'
)
# Step 4: Create deliveries (connect sources to destinations)
logs_delivery = logs_client.create_delivery(
deliverySourceName=logs_source_response['deliverySource']['name'],
deliveryDestinationArn=logs_destination_response['deliveryDestination']['arn']
)
# Traces required for memory only
traces_delivery = logs_client.create_delivery(
deliverySourceName=traces_source_response['deliverySource']['name'],
deliveryDestinationArn=traces_destination_response['deliveryDestination']['arn']
)
print(f"Observability enabled for {resource_id}")
return {
'logs_delivery_id': logs_delivery['id'],
'traces_delivery_id': traces_delivery['id']
}