All skills
aws avatar

/amazon-opensearch-service

@04f39cf

Guides migration, provisioning, search, log-analytics, trace-analytics, and Agentic AI Assistant workflows for Amazon OpenSearch Service and Serverless across six capabilities — migration (Solr/ES/self-managed into AOS/AOSS, schema/query translation, sizing, cutover); provisioning (domain + AOSS lifecycle, upgrades, FGAC, monitoring); search (vector / semantic / hybrid / RAG with Bedrock); log-analytics (PPL, OSI, anomaly detection, Dashboards); trace-analytics (OTel spans, service maps, Data Prepper); ai-assistant (natural language data exploration, incident investigation, root cause analysis). Triggers on OpenSearch, AOS, AOSS, Elasticsearch, Solr, vector/k-NN/semantic/hybrid search, RAG, log analytics, PPL, trace analytics, ISM, FAISS, HNSW, Migration Assistant, UltraWarm, OR1, query my data, analyze logs, investigate errors, root cause analysis.

Use this Skill: https://skilld.dev/gh/aws/agent-toolkit-for-aws/amazon-opensearch-service

This session only. Nothing lands on disk.

referencesassessment-gotchas.md

≈4.4k tokens on demand. Your agent reads this file only when SKILL.md points to it.

Gotchas — production failure modes

The traps experienced practitioners hit on Amazon OpenSearch. Each one is a real failure mode that silently breaks plans. Cite by number when the profile matches.

Each entry carries a **Category:** tag that determines which lane it surfaces under in the FULL_ASSESSMENT §7 split (and which assets it deducts from in readiness-rubric.md):

Category Meaning Lane in §7
TRUE_BLOCKER No clean fix; constrains target choice or forces rearchitecture. Deducts from Compatibility weight. Risks/blockers
MIGRATION_SPECIFIC The migration plan already includes a documented remediation (transformer, sanitizer, config override). Does not deduct unless customer action is required. Migration specifics
OPERATIONAL_CONSIDERATION Default-behavior thing to know about; affects sizing or operations rather than correctness. Risks/blockers (when actionable) or Migration specifics (when path-handled). Use judgment.
COST_TCO Pricing/billing trap that affects TCO model accuracy but doesn't block the migration. Migration specifics — reframe the TCO model.
CLARIFICATION The gotcha is "the customer's claim is wrong / ambiguous"; resolution is pre-work, not a remediation. Surface as a question, not in either §7 lane.

1. Solr → OpenSearch is document-level, NOT segment-level

Category: TRUE_BLOCKER

There is NO snapshot path between Solr and OpenSearch — different codecs, schema layouts. Schema, queries, configs all need translation.

Detect: "lift and shift Solr to OpenSearch", "snapshot Solr" Fix: State explicitly that this is a refactor migration. Use Migration Assistant for Amazon OpenSearch Service Solr backfill (Historical Data Migration) or document-level export+bulk for small datasets.

2. ES ≥ 7.11 snapshot/restore is NOT supported on AOS

Category: TRUE_BLOCKER

ES 7.11+ relicensed to ELv2/SSPL (Jan 2021). Snapshot/Restore from those versions to Amazon OpenSearch Service is NOT supported.

Detect: ES version ≥ 7.11 in source fingerprint; customer plans snapshot path Fix: Use Migration Assistant for Amazon OpenSearch Service Historical Data Migration, or _reindex from remote for small datasets (<100 GB).

3. Lucene 8 → 10 segment-format wall at OS 3.0

Category: TRUE_BLOCKER

OS 3.x ships Lucene 10. Pre-2.x indexes carry Lucene 8 segments. Lucene's segment format is forward-only — Lucene-10 cannot read Lucene-8.

Detect: OS 1.x source upgrading to OS 3.x; ES 7.10 indexes; any pre-OS 2.0 indexes Fix: Reindex affected indexes before upgrading to OS 3.x. Applies to hot, UltraWarm, and cold storage.

4. Per-node shard cap

Category: OPERATIONAL_CONSIDERATION

Detect: shard count > 800/node trending up. Fix: see sizing.md §Topology defaults for current cluster-manager + shard-cap values; source of truth is bp.html#bp-sharding. Architectural rule: Multi-AZ-with-Standby clusters cap at 1000/node regardless of OS version.

5. Cold storage is NOT directly queryable

Category: OPERATIONAL_CONSIDERATION

Cold storage holds detached indexes — must reattach to UltraWarm before querying. Migration is one index at a time, queue depth 100. Watch WarmToColdMigrationQueueSize.

Detect: "occasional queries on archived data" Fix: Accept warm-up latency (minutes-to-hours), keep data in UltraWarm permanently, or use S3+Athena for true on-demand archives.

6. Serverless redundancy adds an OCU floor

Category: COST_TCO

Architectural rule: Redundancy ON adds an idle OCU floor (separate indexing + search minimums billed continuously).

Detect: Bursty/low-volume customer thinking "I'll only pay for what I use" Fix: For current OCU minimums, see sizing.md §OCU model and serverless-scaling.html. For tiny non-prod workloads, consider small Managed t3.medium.search. NEVER t2.* or t3.small.search in prod.

7. Vector Search collections cannot share OCUs with Search/TimeSeries

Category: COST_TCO

Architectural rule: a vector search collection can't share OCUs with search and time series collections, even with same KMS key. Adding one vector collection adds a separate idle floor.

Detect: Mixed keyword + vector workload; user assumes one bill Fix: For current OCU minimums, see sizing.md §OCU model and serverless-scaling.html. If vector is exploratory, run k-NN on existing Managed cluster instead.

8. Serverless ignores most user-supplied index settings

Category: MIGRATION_SPECIFIC

Number of shards, intervals, refresh interval are NOT modifiable on Serverless. index.translog.* and index.routing.allocation.* are dropped. Cannot restore a snapshot to Serverless directly.

Detect: Plan involves restoring an existing snapshot to Serverless Fix: Use Migration Assistant for Amazon OpenSearch Service's metadata-migration Serverless sanitizer, or hand-strip settings before bulk. Re-validate post-load with GET <idx>/_settings.

9. NextGen TIME_SERIES does NOT exist

Category: TRUE_BLOCKER

NextGen Serverless supports only Search and Vector Search types. TIME_SERIES is Classic-only.

Detect: Customer wants time-series collection AND mentions "NextGen" Fix: Use Classic for TIME_SERIES; or use Managed Domain with ISM-managed time-series indexes (often a better fit at scale).

10. NMSLIB removed in OS 3.0

Category: TRUE_BLOCKER

Detect: source uses NMSLIB engine, target is OS 3.x. Fix: reindex into FAISS HNSW or FAISS IVF before the 3.x upgrade. Engine matrix and reindex recipe live in vector-knn.md; source of truth for current engines is knn.html.

11. q.op=AND divergence (Solr → OpenSearch)

Category: MIGRATION_SPECIFIC

Solr defaults q.op=OR; if user sets AND, OpenSearch defaults must explicitly match. OpenSearch's default operator on query_string is OR.

Detect: Solr source with <q.op>AND</q.op> or eDisMax with q.op=AND in solrconfig.xml Fix: Set default_operator: AND on query_string, OR operator: AND on match. Most common cause of result divergence.

12. fielddata: true on text fields will OOM data nodes

Category: MIGRATION_SPECIFIC

Pre-ES 2.0, text fields used in-memory fielddata for sort/agg. ES 1.x mappings still carry "fielddata": true and will OOM AOS data nodes on first aggregation.

Detect: Source = ES 1.x or 2.x; mapping JSON contains fielddata Fix: Strip fielddata. Add a .keyword subfield: "title": {"type":"text", "fields": {"keyword": {"type":"keyword"}}}. Migration Assistant for Amazon OpenSearch Service transformer does this automatically; hand-rolled _reindex MUST do it explicitly.

13. ES 7 → OS 1 _type removal

Category: MIGRATION_SPECIFIC

ES 7 still allows the placeholder type _doc; OS 1.0 removed types entirely. Templates with "_doc": {...} blow up _reindex/_bulk with [mapper_parsing_exception] unsupported parameters: [_doc].

Detect: ES 7 source with index templates Fix: Migration Assistant for Amazon OpenSearch Service metadata transformer, OR pre-flatten with jq 'del(.mappings._doc) | .mappings = .mappings._doc' template.json.

14. NAT Gateway charges silently inflate VPC OpenSearch bills

Category: COST_TCO

A private cluster fetching plugins, Bedrock embeddings, IDP metadata, or external knowledge sources accumulates NAT-Gateway charges. NAT Gateway charges per VPC pricing.

Detect: Private VPC cluster with external integrations Fix: Use VPC endpoints for S3, Bedrock, STS, OpenSearch Service. Project residual NAT egress per VPC pricing.

15. Manual snapshots bill against YOUR S3 bucket

Category: COST_TCO

AOS automated snapshots: kept 14 days (hourly, up to 336), no additional charge, in AOS-preconfigured bucket. Manual snapshots: stored in YOUR S3 bucket at standard S3 rates plus PUT charges.

Detect: Compliance retention > 14 days; cross-region snapshot requirements Fix: Add S3 line to sizing model: data_size × retention_days / 30 × $/GB-mo plus PUT cost.

16. UltraWarm uw.medium cannot host k-NN indexes

Category: TRUE_BLOCKER

The instance lacks RAM headroom to hold k-NN graphs.

Detect: k-NN indexes scheduled for UltraWarm migration on uw.medium Fix: Use ultrawarm1.large.search instead. For current UltraWarm RAM-per-instance figures and circuit-breaker sizing, see ultrawarm.html.

17. OR1 trades RAM-bound aggregations for indexing throughput

Category: OPERATIONAL_CONSIDERATION

OR1 stores segments in S3 with local NVMe cache. ~2× r6g indexing throughput, replica=1 sufficient (S3 durable). Loses to r-family on cache-miss aggregations and k-NN graphs (RAM-bound).

Detect: k-NN, large-cardinality aggs, or cache-miss-sensitive workloads on OR1 Fix: Use OR1 only when peak_indexing × avg_doc_size > 50 GB/day/node. Use one replica unless durability model demands more. Migration to OR1 is irreversible.

18. Cluster goes read-only at flood-stage watermark (95%)

Category: OPERATIONAL_CONSIDERATION

When any node hits 95% disk, AOS applies index.blocks.read_only_allow_delete: true to all indexes with shards on that node. Releases automatically when below high (90%).

Detect: Cluster size near 90%; observability indexes growing fast Fix: Alert on FreeStorageSpace < 25 GB or storage > 80%. Add storage / shrink shards / move data to UltraWarm BEFORE this hits.

19. Multi-AZ ≠ Multi-AZ with Standby

Category: CLARIFICATION

Multi-AZ: 99.9% SLA. Multi-AZ with Standby: 99.99% SLA. Standby pre-positions one zone as inactive, sub-minute failover. Standby requirements: 3 AZs, 3 dedicated cluster managers, 3 (or multiple of 3) data nodes, ≥2 replicas, Auto-Tune ON, GP3 storage.

Detect: Customer expects "no downtime ever" without Standby Fix: Recommend Multi-AZ-with-Standby for tier-1 production. Standby is "available at no extra cost" but applies caps on per-shard size and total cluster shard count. For current Standby caps, see managedomains-multiaz.html.

20. Logstash default distro license check rejects OpenSearch

Category: MIGRATION_SPECIFIC

Default Logstash distro has Elastic license check that rejects OpenSearch. Two workarounds:

Detect: Customer using Logstash with new Amazon OpenSearch destination Fix: Use OSS distro of Logstash (Apache 2.0) OR logstash-output-opensearch plugin. Better: switch to OpenSearch Ingestion (managed Data Prepper) or Fluent Bit.

21. Cross-AZ data transfer is FREE within AOS clusters

Category: COST_TCO

Self-managed Elasticsearch on EC2 across AZs pays cross-AZ data-transfer at the standard regional rate for primary→replica replication. Amazon OpenSearch Service does NOT bill for intra-cluster cross-AZ replication.

Detect: Customer's current TCO model includes a cross-AZ line item for self-managed ES replication Fix: Call this out as a savings the migration unlocks. Cross-AZ data transfer between customer-owned resources (e.g., app tier ↔ AOS endpoint, or NAT Gateway egress) is still billed normally.

22. AOS-managed gp3 storage is priced separately from raw EBS gp3

Category: COST_TCO

The exact AOS-managed gp3 list price (volume + baseline IOPS + service overhead) is published on the AOS pricing page, NOT the raw EBS rate. TCO calculators reusing raw EBS underestimate.

Detect: Customer-built TCO calculator uses raw EBS rates Fix: Plug AOS-managed gp3 rate from https://calculator.aws into customer's TCO model. RI / Savings Plan / EDP discounts apply only there.

23. Cluster manager sizing scales with cluster size

Category: OPERATIONAL_CONSIDERATION

Architectural rule: 3 dedicated cluster managers (formerly "master node"), odd quorum. NEVER 1, 2, 4, or 5.

Detect: Cluster scaling beyond 30 nodes; shard count growth Fix: For current cluster-manager sizing (heap-to-nodes / shard tier), see sizing.md §Topology defaults.

24. Migration from Managed → Serverless requires reindex

Category: MIGRATION_SPECIFIC

There is NO automatic migration from Managed Domain to Serverless. Must reindex.

Detect: Customer wants "easy switch" from Managed to Serverless Fix: Plan a reindex migration. Use Migration Assistant for Amazon OpenSearch Service or _reindex from remote. Validate sizing on Serverless before cutover.

25. Authentication complexity is the #1 setup blocker

Category: OPERATIONAL_CONSIDERATION

Forum data: 60%+ of new-user issues are auth-related. FGAC + IAM + Cognito + SAML + master-user combinations have many failure modes.

Detect: Any auth question; first-time AOS user Fix: See security.md for the FGAC + IAM + Cognito + SAML decision tree. Common pattern:

  • Internal users only → IAM SigV4 from app
  • External / human users → Cognito user pool + FGAC mapped to Cognito groups
  • Enterprise SSO → SAML to FGAC backend role mapping

26. ELSER is proprietary to Elastic — not on Amazon OpenSearch

Category: TRUE_BLOCKER

Don't promise ELSER on AOS. Use neural sparse search with SageMaker-hosted SPLADE/equivalent, or dense vectors via Bedrock Titan / Cohere.

Detect: Customer asks for ELSER on AOS Fix: Recommend neural_sparse query with SageMaker-hosted sparse encoder, OR hybrid (BM25 + dense vectors). Most ELSER use cases work fine with hybrid.

27. Painless scripts not supported on Serverless

Category: TRUE_BLOCKER

Inline scripts work on Managed but not Serverless. If customer relies on script_score, script_fields, or update-by-script, they need Managed.

Detect: Customer mentions Painless / script_score / scripted fields with Serverless target Fix: Move to Managed, OR rewrite scripted logic into ingest pipeline / search pipeline / function_score.

28. ES Runtime fields have only partial parity in OpenSearch

Category: TRUE_BLOCKER

OpenSearch added "derived fields" in 2.15 — limited functionality compared to ES Runtime fields. Not full parity.

Detect: ES source heavily uses Runtime fields; OS target Fix: For each Runtime field, decide: (a) pre-compute at ingest, (b) use derived fields if simple, or (c) move logic to query-time scripted fields (Managed only).

29. ILM JSON does NOT import as ISM

Category: MIGRATION_SPECIFIC

Elasticsearch ILM and OpenSearch ISM are conceptually similar but JSON formats differ. Must rebuild policies.

Detect: Customer has many ILM policies and assumes they "just work" on OS Fix: Translate each ILM policy to ISM. Common patterns: rollover, force_merge, warm/cold migration, delete. AWS-specific ISM operations: warm_migration, cold_migration, cold_delete.

30. AOS automated snapshots are NOT a backup strategy

Category: OPERATIONAL_CONSIDERATION

See #15 (canonical) — automated snapshots are kept only 14 days and are not a DR strategy.

Detect: Customer plans to "use automated snapshots for DR" Fix: See #15. Set up manual snapshots to your own S3 bucket with appropriate retention; build a cross-region snapshot strategy if DR is in scope.

31. FAISS HNSW IS supported on Serverless Vector Search

Category: CLARIFICATION

Architectural rule: FAISS HNSW is the underlying engine on BOTH Serverless Vector Search collection types (NextGen and Classic). The difference is configurability, not support. Saying 'FAISS HNSW is unavailable on Serverless' is WRONG.

For the per-config breakdown of NextGen vs Classic Vector Search (which engines/parameters each surfaces, what pins a workload to Managed Domain), see vector-knn.md.

Detect: Customer claims FAISS HNSW is unavailable on Serverless; vector workload routing decision Fix: Affirm FAISS HNSW availability on both Serverless Vector Search variants. Use vector-knn.md to decide whether the workload pins to Managed Domain.

32. OS 1.x version line

Category: CLARIFICATION

There is NO OS 1.7 GA release. OS 1.x had GA releases up through 1.3. For the current canonical version list, see version-migration.html.

If a customer says 'OS 1.7' they likely mean:

  • Elasticsearch 1.7 (different product, pre-fork era), OR
  • Misremembered OS 1.3 (the latest 1.x), OR
  • Confusion with a 2.x or 3.x version

Clarify before proceeding with upgrade plan.

Detect: Customer cites "OS 1.7" or any OS 1.x version above 1.3 Fix: Confirm the actual source version (ES 1.7 vs OS 1.3 vs OS 2.x/3.x) before scoping the upgrade. The Lucene-segment-format wall (#3) and other version-specific gotchas hinge on knowing the true source.

Source: SKILL.md on GitHub

No alerts28d3 checks · Risk SAFE
  • Gen Agent Trust Hub28d

    This skill is a highly structured and security-conscious guide for managing Amazon OpenSearch Service and Serverless. It provides comprehensive instructions for migrations, provisioning, and analytics while strictly adhering to AWS security best practices, such as using SigV4 signing, IAM least-privilege, and AWS Secrets Manager for credential handling.

  • Socket28d

    No alerts

  • Snyk28d

    Risk: LOW · No issues

Signed by skilld at 04f39cf. This ties the file your Agent reads to that commit on GitHub. It does not review the instructions.

Last checked against GitHub yesterday.

Activeupdated 2 months ago
metadata
{
  "version": "2"
}

README badge

README badge for aws/agent-toolkit-for-aws/amazon-opensearch-service