Bedrock AgentCore Operational Review
SkillCloud & infraComprehensive operational review procedures for Amazon Bedrock
Available today. Use it from your connected AI after setup.
No other account needed.
Connect ahel once, and every AI you use reads what you have installed.
Then ask your AI: use the Bedrock AgentCore Operational Review skill
What this skill tells your AI
The instructions your AI receives, as published by aws/tools-for-devops-agent in skills/agentcore-ops-review/SKILL.md and read by ahel’s review.
Use this skill when performing an operational review of Amazon Bedrock AgentCore resources, investigating agent runtime failures, auditing memory/knowledge pipeline health, or reviewing gateway resilience and resource hygiene.
Overview
This skill provides procedures for a review of AgentCore resources across four check areas mapped to the AWS Well-Architected Framework:
- Runtime Resilience (Reliability) — Failed/stuck runtimes and endpoints, single-AZ VPC placement, endpoint version drift, DEFAULT-endpoint-only deployments
- Gateway Health (Reliability) — Gateway status, target redundancy and health, policy engine attachment, target synchronization freshness
- Memory & Knowledge Effectiveness (Performance Efficiency) — Extraction pipeline errors, empty long-term memory, high ingestion error rate, provisioned-but-never-populated memories
- Resource Utilization & Operational Hygiene (Operational Excellence) — Idle resources, consolidation opportunities, low overall utilization
- Runtime Observability (cross-pillar) — Session counts, invocations, throttles, vCPU-hours, GB-hours per runtime
This is a READ-ONLY review. No modifications are made to any resource, and it never invokes an agent (InvokeAgentRuntime), reads no prompts or responses, and makes no other data-plane calls. One exception: for long-term memories the skill calls bedrock-agentcore:ListMemoryRecords (a data-plane API) solely to obtain a record count. That response can include a content field carrying extracted, potentially PII-bearing memory content; the skill uses only the count and never parses, logs, stores, or reproduces content. See "Memory record data handling" below.
Data Source Boundaries (IMPORTANT — IAM footprint)
The standard AIDevOpsAgentAccessPolicy covers bedrock:* read actions but does NOT include the bedrock-agentcore:* namespace. (Note: bedrock-agentcore-control is the SDK client name, not an IAM prefix — all control-plane actions such as ListAgentRuntimes, GetMemory, and ListGateways authorize under the single service prefix bedrock-agentcore:.) Two modes:
- Runtime-observability-only mode — relies exclusively on CloudWatch metrics (
cloudwatch:GetMetricData,cloudwatch:ListMetrics) against namespaceAWS/Bedrock-AgentCore. Requires nobedrock-agentcore:additions. When an account isn't using AgentCore, the namespace is simply empty ("no activity detected") — this is not a failure. - Full control-plane mode — adds read-only
bedrock-agentcore:control-plane List/Get actions andec2:DescribeSubnetsto enable the runtime/gateway/memory/utilization checks. It also uses one data-plane action,bedrock-agentcore:ListMemoryRecords, for the long-term-memory record count only (see "Memory record data handling" below). Seereferences/iam-policy-linked-account.json.
If a required permission is missing, the affected check degrades to a visibility limit (reported as "signal unavailable / check skipped") rather than failing the review or producing a false finding.
Memory record data handling: bedrock-agentcore:ListMemoryRecords is a data-plane API whose MemoryRecordSummary entries include a required content field — the extracted facts/preferences/summaries a long-term memory has stored, which can contain end-user PII. This skill calls it only to count records for AC-MEM-2 and never reads, parses, logs, stores, transforms, or reproduces the content field. If you prefer zero data-plane access, omit this action from the IAM policy: AC-MEM-2 then degrades to a visibility limit while all other memory checks (which use CloudWatch ingestion metrics) continue to work.
Seam with agentcore-observability-setup: This skill assesses operational posture from existing telemetry; it does not configure or validate observability wiring. Where telemetry is absent, this skill reports a visibility limit and defers the configuration gap to agentcore-observability-setup — that skill owns the observability-wiring finding (Transaction Search, OTEL/ADOT, log delivery, X-Ray resource policy), while this skill reports only the posture consequence. A customer running both should not see two overlapping findings on the same resource.
Step 1: Discover Account and Regions
- Call
sts:GetCallerIdentityto determine the account. - Discover AgentCore-active regions:
- Query Cost Explorer:
ce:GetDimensionValues(dimension SERVICE, last 30 days), match "Amazon Bedrock AgentCore". - Then
ce:GetCostAndUsagefor that service grouped by REGION; select top regions by UnblendedCost. - If no AgentCore spend is found, fall back to probing
cloudwatch:ListMetrics(namespaceAWS/Bedrock-AgentCore) in the customer's primary regions to detect activity.
- Query Cost Explorer:
- If no AgentCore activity is detected in any region, stop: "No AgentCore usage detected in the last 30 days."
Step 2: Runtime Resilience Pillar (Reliability)
Discover runtimes and enrich each with endpoints and versions:
bedrock-agentcore:ListAgentRuntimes→GetAgentRuntime(status,failureReason,networkConfiguration)bedrock-agentcore:ListAgentRuntimeEndpoints(status,liveVersion,targetVersion, name)bedrock-agentcore:ListAgentRuntimeVersions(to compute latest version + drift)ec2:DescribeSubnets(resolve VPC subnet IDs to AZs — endpoints carry NO AZ data)
| Check | Rule | Severity |
|---|---|---|
| AC-RUN-1 | Runtime/endpoint in CREATE_FAILED/UPDATE_FAILED, or stuck in CREATING/UPDATING > 1 hour | Critical |
| AC-RUN-2 | VPC-mode runtime whose subnets all resolve to a single AZ (PUBLIC mode exempt) | High |
| AC-RUN-3 | Live endpoint ≥ 3 versions behind latest runtime version | Medium |
| AC-RUN-4 | Actively-updated runtime (2+ versions) served only by the auto-updating DEFAULT endpoint | Low |
Key fact: Endpoints are a versioning/traffic-routing construct, not a redundancy mechanism. AZ fault tolerance is derived exclusively from the runtime's VPC subnet configuration. If ec2:DescribeSubnets is unavailable, AC-RUN-2 degrades to "AZ distribution unknown".
Step 3: Gateway Health (Reliability)
Discover gateways and their targets:
bedrock-agentcore:ListGateways→GetGateway(status, protocolType, authorizerType,policyEngineConfiguration)bedrock-agentcore:ListGatewayTargets→GetGatewayTarget(status,targetConfiguration,lastSynchronizedAt, credential providers)
Target type derived from targetConfiguration.mcp: Lambda, MCP Server, API Gateway, OpenAPI Schema, Smithy Model.
| Risk Level | Condition |
|---|---|
| Critical | Gateway not READY, zero targets, OR all targets unhealthy |
| Warning | Single target (no redundancy), no policy engine attached, some unhealthy targets, OR stale sync (> 7 days) |
| Healthy | Multiple READY targets, policy engine attached, recent synchronization |
Unhealthy target statuses: FAILED, UPDATE_UNSUCCESSFUL, SYNCHRONIZE_UNSUCCESSFUL. Stale sync threshold: lastSynchronizedAt older than 7 days.
Step 4: Memory & Knowledge Effectiveness (Performance Efficiency)
Discover memories and their strategies, then query CloudWatch ingestion metrics:
bedrock-agentcore:ListMemories→GetMemory(status, createdAt, configured strategies)bedrock-agentcore:ListMemoryRecords— data-plane call, count only (long-term-strategy memories). Read the returned record count; do not read thecontentfield (see "Memory record data handling")cloudwatch:GetMetricData(namespaceAWS/Bedrock-AgentCore): per-memoryInvocations/Errorsfor theIngestionoperation, andInvocationsfor theCreateEventoperation (30-day window)
All rules are strategy-aware — read GetMemory strategies first. Record-count rules apply ONLY to memories with a long-term strategy; short-term-only memories are never flagged as empty.
| Check | Rule | Severity |
|---|---|---|
| AC-MEM-1 | Long-term memory with CloudWatch ingestion Errors > 0 | High |
| AC-MEM-2 | Long-term memory with < 10 records (escalates to High if 0 records AND > 7 days old) | Medium→High |
| AC-MEM-3 | Ingestion error rate > 20% (Errors / Invocations) | High |
| AC-MEM-4 | Provisioned but never populated: zero CreateEvent activity AND > 7 days old | Medium |
Safety rule: CreateEvent activity is queried for EVERY memory (short-term memories receive events too). When the CloudWatch signal is unreadable, event count is None (not 0), so AC-MEM-4 is skipped rather than firing a false "never populated" finding.
Step 5: Resource Utilization & Operational Hygiene (Operational Excellence)
Enumerate all provisionable resource types and collect a 30-day activity signal:
- Inventory:
ListAgentRuntimes,ListMemories,ListGateways,ListBrowsers,ListCodeInterpreters,ListWorkloadIdentities - Activity:
cloudwatch:GetMetricData(Invocations,AWS/Bedrock-AgentCore) keyed by per-type dimension (AgentRuntimeId,MemoryId,GatewayId)
| Check | Rule | Severity |
|---|---|---|
| AC-UTIL-1 | Idle resource: zero activity over 30-day window, > 7 days old | Medium |
| AC-UTIL-2 | Consolidation: duplicate configs in a region, OR regions holding resources with < 5% of total activity (3+ regions) | Informational→Medium |
| AC-UTIL-3 | Overall utilization < 60% (active / assessable, excluding recently-created) | Informational |
For the AC-UTIL-1 idle signal, prefer the real-time ActiveSessionCount gauge (a currently-running-sessions gauge, filterable by the Service dimension) where available; fall back to the cumulative SessionCount / Invocations counters over the 30-day window when ActiveSessionCount is not present.
Framing: AgentCore runtime billing is consumption-based — idle time is free. Frame findings as operational hygiene and security surface (unmanaged IAM roles, stale config), NOT wasted spend. Exception: memories holding stored long-term records DO accrue storage cost — call this out in the finding.
Classification safety: A resource is only classified Idle when its activity signal is complete for the full window. Types with no queryable per-resource metric (Browser, CodeInterpreter, WorkloadIdentity), and every resource when the CloudWatch call fails, are classified Active (partial) — never Idle. Resources younger than 7 days are RecentlyCreated and excluded from both idle flagging and the utilization ratio.
Step 6: Runtime Observability (cross-pillar signals)
For each runtime, collect CloudWatch metrics from namespace AWS/Bedrock-AgentCore:
| Metric | Dimensions | Period | Statistic |
|---|---|---|---|
| CPUUsed-vCPUHours | Resource (ARN), Service=AgentCore.Runtime, Name | 3600s | Sum |
| MemoryUsed-GBHours | Resource (ARN), Service=AgentCore.Runtime, Name | 3600s | Sum |
| SessionCount | Resource (ARN), Operation=InvokeAgentRuntime, Name | 300s | Sum |
| Invocations | Resource (ARN), Operation=InvokeAgentRuntime, Name | 300s | Sum |
| Throttles | Resource (ARN), Operation=InvokeAgentRuntime, Name | 300s | Sum |
SessionCount is a cumulative counter of new sessions per period. Where a real-time view is needed, ActiveSessionCount is a gauge of currently-running sessions (filterable by the Service dimension).
Discover resources first via cloudwatch:ListMetrics (namespace AWS/Bedrock-AgentCore), extract unique Resource ARN + Name dimensions, then batch GetMetricData per resource.
Derived signals:
- Throttle rate =
Throttles / Invocations × 100 - Health status = "Throttling Detected" when
Throttles > 0, else "Healthy" - Only report runtimes with any activity (CPU-hours, GB-hours, invocations, or session count > 0).
Step 7: Additional Context
- Health Events:
health:DescribeEventsfiltered for Bedrock/AgentCore service, last 14 days. - Documentation: Cross-reference findings against AgentCore best-practices docs for remediation links.
Step 8: Produce Report and Recommendations
Produce an artifact with the structure defined in references/report-template.md.
For each finding with severity Warning/Medium or higher, create a recommendation with:
- Title:
[Check ID] [Check name] — [Resource identifier] - Summary: Current state, expected state, business/operational impact, remediation steps, and a TAM conversation starter.
Related Skills / Boundaries
Boundaries are deliberate and non-overlapping:
agentcore-observability-setup— sets up/validates observability wiring. This skill consumes that telemetry for posture assessment and defers observability-configuration gaps to it (see the seam described in Data Source Boundaries).agentcore-runtime-diag(queued submission — referenced for scope, not yet published) — reactive triage of a single failing invocation. This skill is proactive, estate-wide posture; it does not diagnose individual call failures or evaluate authorizer/credential correctness. Gateway checks here are redundancy/staleness/health only, not auth evaluation.aiml-access-diagnostics(published) — generic AI/ML AccessDenied chain viaiam:SimulatePrincipalPolicy. Not overlapping — this skill makes no IAM-simulation calls.bedrock-adoption-readiness(published) — foundation-model workload readiness (IAM governance, ZDR, quotas, observability). Different resource surface — this skill reviews the AgentCore agent runtime / memory / gateway layer, not foundation-model inference.
Error Handling
| Error | Action |
|---|---|
AccessDenied on bedrock-agentcore:* | Log as visibility limit "signal unavailable — check skipped", continue in observability-only mode |
AccessDenied on ec2:DescribeSubnets | AC-RUN-2 degrades to "AZ distribution unknown" |
| CloudWatch returns no data | Report "no activity detected" for that resource; classify utilization as Active (partial), never Idle |
| No AgentCore usage anywhere | Stop early: "No AgentCore usage detected" |
| Throttled by AWS API | Retry with exponential backoff (3 attempts) |
| Check raises an exception | Isolate the failure — degrade that check to a visibility limit and continue the others |
Important Notes
- ALL API calls with pagination (NextToken) MUST be paginated to completion.
- Cost Explorer queries run against us-east-1 (global endpoint).
- Findings are only produced when the underlying signal is complete — incomplete signals become visibility limits, never false positives.
- Batch CloudWatch
GetMetricDatarequests where possible. - This is a READ-ONLY review — no modifications, and no data-plane calls other than
ListMemoryRecordsfor record count (count only;contentis never read).
Signals
- GitHub stars
- 68
- Forks
- 54
- Last commit
- Sep 2026
Advanced
- Catalog kind
- skill
- Gateway key
agentcore-ops-review- Source
- github.com/aws/tools-for-devops-agent
github.com/aws/tools-for-devops-agent