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