/SKILL.md
Helps users migrate from Azure Cache for Redis (ACR/OSS) Basic, Standard, and Premium tiers to Azure Managed Redis (AMR). Provides SKU mapping, real-time pricing scripts, cache metrics assessment, automated migration via ARM REST APIs with DNS switching, and IaC template migration (ARM, Bicep, Terraform). Use when users ask about: Redis migration, ACR to AMR, OSS to AMR, automated migration, DNS switch migration, cache retirement deadline, ACR retirement date, SKU selection, AMR vs ACR features, feature compatibility, Redis module support, pricing comparison, cache upgrade, Basic/Standard/Premium tier migration, P1/P2/C3 cache migration, AMR SKU recommendation, migration rollback, migration validation, connection string changes, port changes, cache assessment and metrics, IaC template migration (ARM, Bicep, Terraform), or checking for amr-migration-skill updates. Do NOT use for: Enterprise (ACRE) tier migrations, creating new Redis caches, or general Redis performance tuning.
npx skillsauth add lolodi/amr-migration-skill amr-migration-skillInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
This skill assists users in migrating from Azure Cache for Redis (ACR) Basic/Standard/Premium tiers to Azure Managed Redis (AMR), including automated migration via ARM REST APIs.
Users may refer to Azure Cache for Redis by several names: OSS, ACR, or by tier name (Basic, Standard, Premium). These all refer to the same product. Treat these terms interchangeably when users ask about migration.
This skill does not cover Azure Cache for Redis Enterprise (ACRE) migrations. If users ask about migrating from Enterprise or Enterprise Flash tiers, explain that those have different migration paths and suggest contacting Microsoft support or consulting the official documentation.
Supported source tiers: Basic (C0-C6), Standard (C0-C6), Premium (P1-P5)
Avoid using the term "shards" when describing AMR. In AMR, sharding is managed internally and not exposed to customers, so the concept doesn't apply and would be confusing. The term only applies to ACR Premium clustered caches. When discussing AMR, refer to the performance tier (e.g., Balanced, Memory Optimized) and size (e.g., B10, M20) instead.
Before executing Migrate or Cancel actions via the migration scripts, the agent must:
ask_user tool before running the scriptThis applies regardless of how the user phrased their request. Even if the user says "go ahead and migrate", the agent must confirm the specific resource IDs before executing.
For the bash script, always pass --yes when the agent runs it (since the agent cannot interact with the terminal prompt), but only after obtaining user confirmation through the ask_user tool first.
Before executing Migrate, the agent must first run Validate with the same source and target resource IDs and present the results to the user. Do not proceed to Migrate if validation returns errors. If validation returns warnings, explain them and ask the user whether to proceed with -ForceMigrate $true (PowerShell) or --force-migrate (bash).
Do not check for updates automatically. Only perform a version check when the user explicitly asks (e.g., "check for updates for the amr skill", "is there a newer version of amr-migration-skill?").
When requested:
VERSION file in this skill's root directory.https://raw.githubusercontent.com/AzureManagedRedis/amr-migration-skill/main/VERSIONCheck the user's OS to choose the right migration script variant:
.ps1 scripts (requires Azure CLI).sh scripts (requires Azure CLI + jq)If the OS is unclear, prefer the bash scripts — they work cross-platform. Both script variants use Azure CLI (az rest) for ARM API calls.
Users will typically provide a cache name, resource group, and subscription. Construct the full ARM resource IDs as follows:
/subscriptions/<subId>/resourceGroups/<rg>/providers/Microsoft.Cache/Redis/<cacheName>/subscriptions/<subId>/resourceGroups/<rg>/providers/Microsoft.Cache/redisEnterprise/<cacheName>If the user only provides a cache name, use az redis show -n <name> -g <rg> --query id -o tsv to retrieve the full resource ID. If the subscription or RG is also unknown, use az redis list --query "[?name=='<name>'].{id:id, rg:resourceGroup}" -o table to find it.
Before recommending an AMR SKU to the user, cross-check it against the valid SKU list in AMR SKU Specs. Never recommend a SKU that doesn't appear in that file. If the ideal capacity falls between two SKU sizes, recommend the next size up.
Always mention these when discussing migration — they require application changes:
.redis.cache.windows.net → <region>.redis.azure.netIf the user is using the automated migration with DNS switching, the old hostname continues to work, but the port change still applies.
Post-migration recommendation: Suggest adopting Microsoft Entra ID authentication as a replacement for access keys. Entra ID configurations are not migrated automatically and must be set up on the new AMR instance.
Important: Always use the provided scripts for pricing lookups and metrics retrieval. Do not craft custom API calls or scripts — the provided ones already handle tier-specific calculation logic (HA, shards, MRPP) and metric aggregation correctly. For metrics, use a default time range of 7 days unless the user specifies otherwise.
Note: Most migration guidance is already available in this skill's local reference files. Only use the MCP server to look up information not covered locally (e.g., latest release notes, region availability, or new features).
Use the Microsoft Learn MCP server to fetch up-to-date documentation:
https://learn.microsoft.com/api/mcp/azure/redis/ - Azure Managed Redis documentation hub/azure/redis/overview - Consolidated AMR overview, key scenarios, and tier selection starting point/azure/redis/architecture - AMR architecture, clustering model, and policy guidance/azure/redis/migrate/migrate-overview - Migration hub organized into Understand differences, Explore options, and Plan executionSee Azure CLI Commands for practical az redis examples to:
See SKU Mapping Guide for guidelines, ACR → AMR mapping tables, selection criteria, and decision matrix. For AMR SKU definitions (M, B, X, Flash series), see AMR SKU Specs.
Once you've identified candidate SKUs, get real-time pricing with monthly cost calculations:
# Windows PowerShell
.\scripts\get_redis_price.ps1 -SKU M10 -Region westus2
.\scripts\get_redis_price.ps1 -SKU M10 -Region westus2 -NoHA
.\scripts\get_redis_price.ps1 -SKU C3 -Region westus2 -Tier Standard
.\scripts\get_redis_price.ps1 -SKU P2 -Region westus2 -Shards 3 -Replicas 2
# Linux/Mac bash
./scripts/get_redis_price.sh M10 westus2
./scripts/get_redis_price.sh P2 westus2 --shards 3
Script options:
-NoHA / --no-ha - Non-HA deployment (AMR only, 50% savings for dev/test)-Shards N / --shards N - Number of shards (ACR Premium clustered)-Replicas N / --replicas N - Replicas per primary (ACR Premium MRPP, default: 1)-Currency X / --currency X - Currency code (default: USD)SKUs supported:
Resources:
See Feature Comparison for detailed comparison between ACR (Basic/Standard/Premium) and AMR features.
See Retirement FAQ for retirement dates, timelines, and common migration questions.
Relevant to this skill (ACR Basic/Standard/Premium):
Not covered by this skill:
See Migration Overview for detailed migration guidance including:
For converting ACR templates (ARM, Bicep, Terraform) to AMR format, use these reference docs:
arm/ — 6 ARM JSON scenarios (basic, premium non-clustered, clustered, VNet, persistence, all-features)arm-parameterized/ — 4 ARM JSON scenarios with separate parameter filesbicep/ — 2 Bicep scenarios (basic, premium clustered)terraform/ — 2 Terraform scenarios (basic, premium clustered)Choose the correct workflow based on the user's intent. The two workflows are independent — do not mix their steps.
| User Intent | Signal Phrases | Workflow | |---|---|---| | Move a live cache to AMR | "migrate cache", "move to AMR", "select SKU", "assess metrics", "migration strategy", "switch traffic" | Migration Workflow (Steps 1-4) | | Convert IaC templates to AMR format | "convert template", "Bicep migration", "ARM to AMR", "Terraform", "IaC", "template transformation", "region buildout" | IaC Migration Workflow (Steps 1-8) | | Compare features or answer general questions | "compare ACR vs AMR", "feature compatibility", "retirement date", "best practices" | Answer directly using reference docs — no workflow needed |
If the user's intent is unclear (e.g., "help me migrate to AMR" could mean either), ask:
"Are you looking to migrate a live cache (data migration, SKU selection, traffic cutover) or convert your infrastructure-as-code templates (Bicep/ARM/Terraform) to AMR format? Or both?"
If the user needs both (e.g., "migrate everything including our IaC"):
Gather metrics from the existing ACR cache to inform SKU selection:
# Windows PowerShell
.\scripts\get_acr_metrics.ps1 -SubscriptionId <id> -ResourceGroup <rg> -CacheName <name>
.\scripts\get_acr_metrics.ps1 -SubscriptionId <id> -ResourceGroup <rg> -CacheName <name> -Days 7
# Linux/Mac bash
./scripts/get_acr_metrics.sh <subscriptionId> <resourceGroup> <cacheName>
./scripts/get_acr_metrics.sh <subscriptionId> <resourceGroup> <cacheName> 7
Also retrieve the actual memory reservation to determine true usable capacity (defaults in the SKU mapping tables assume ~20%):
az redis show -n <cache-name> -g <resource-group> -o json \
--query "{maxfragmentationmemoryReserved: redisConfiguration.maxfragmentationmemoryReserved, maxmemoryReserved: redisConfiguration.maxmemoryReserved}"
Both values are in MB. Actual Usable = SKU Capacity − (maxmemoryReserved + maxfragmentationmemoryReserved). Use this as the source of truth for sizing.
Requires: Azure CLI logged in (az login)
Fallback: If the scripts fail (e.g., locked tenant, insufficient permissions, no CLI access), direct the user to retrieve the same metrics manually from the Azure Portal under their cache's Monitoring → Metrics blade.
Metrics retrieved (Peak, P95, and Average for each):
Clustered caches: For Premium caches with multiple shards, the scripts automatically detect the shard count and aggregate metrics across all shards. Memory and bandwidth are summed (total capacity), while Server Load and Connected Clients report the max per shard (bottleneck value). The output header indicates when shard aggregation is active.
Use these values to:
Zone pinning check: Also check if the source cache uses zone pinning:
az redis show -n <cache-name> -g <resource-group> -o json \
--query "{zones: zones, zonalAllocationPolicy: properties.zonalAllocationPolicy}"
If zones is set and zonalAllocationPolicy is UserDefined, the cache is zone-pinned — deployed to specific availability zones chosen by the customer. Warn the user: AMR does not support zone pinning. When high availability is enabled, AMR is automatically zone redundant across all available zones in the region, but cannot be pinned to specific zones. If the user had zone pinning for co-locality with other resources (e.g., VMs in the same zone for lower latency), they should be aware this guarantee will not carry over to AMR.
.\scripts\get_redis_price.ps1 -SKU M20 -Region westus2
.\scripts\get_redis_price.ps1 -SKU B20 -Region westus2
For the full 8-step workflow, see IaC Migration Workflow.
Converts ACR templates (ARM JSON, Bicep, Terraform) to AMR format using AI-driven transformation with reference docs for grounding. Includes SKU mapping, pricing comparison, feature gap analysis, customer confirmation gate, and template generation. Scripts are only used for pricing lookups.
Azure offers an automated migration path from ACR to AMR via ARM REST APIs, handling DNS switching automatically so clients using the old OSS endpoint continue to work after migration.
Important: This feature is currently in Public Preview. Use the manual migration strategies (Steps 1–4 above) for production workloads until GA.
Key facts:
Scripts:
scripts/Azure-Redis-Migration-Arm-Rest-Api-Utility.ps1 (requires Azure CLI)scripts/azure-redis-migration-arm-rest-api-utility.sh (requires Azure CLI + jq)📖 For the full workflow, prerequisites, script parameters, and troubleshooting, read Automated Migration Reference. For ARM API internals, see Migration Scripts Reference. For validation error codes, see Validation Errors & Warnings.
Refer to Feature Comparison for the full matrix. Key differences include:
Refer to SKU Mapping Guide and consider:
Check Feature Comparison for the current feature matrix. Use the MCP server to fetch the latest documentation for authoritative information.
This skill does not cover Enterprise tier migrations. If asked about ACRE (Azure Cache for Redis Enterprise) migration, inform the user that Enterprise tier has different considerations and they should consult Microsoft support or official documentation.
development
Maintainer-only workflow for handling GitHub Secret Scanning alerts on OpenClaw. Use when Codex needs to triage, redact, clean up, and resolve secret leakage found in issue comments, issue bodies, PR comments, or other GitHub content.
development
Maintainer workflow for OpenClaw releases, prereleases, changelog release notes, and publish validation. Use when Codex needs to prepare or verify stable or beta release steps, align version naming, assemble release notes, check release auth requirements, or validate publish-time commands and artifacts.
development
Run, watch, debug, and extend OpenClaw QA testing with qa-lab and qa-channel. Use when Codex needs to execute the repo-backed QA suite, inspect live QA artifacts, debug failing scenarios, add new QA scenarios, or explain the OpenClaw QA workflow. Prefer the live OpenAI lane with regular openai/gpt-5.4 in fast mode; do not use gpt-5.4-pro or gpt-5.4-mini unless the user explicitly overrides that policy.
development
End-to-end Parallels smoke, upgrade, and rerun workflow for OpenClaw across macOS, Windows, and Linux guests. Use when Codex needs to run, rerun, debug, or interpret VM-based install, onboarding, gateway smoke tests, latest-release-to-main upgrade checks, fresh snapshot retests, or optional Discord roundtrip verification under Parallels.