How to migrate from Amazon Bedrock to vLLM without a cutover surprise
Most teams start this move because a Bedrock renewal, a Provisioned Throughput end date, a data control requirement or a model deprecation forces a decision on a fixed timeline. Migration means replacing Bedrock model calls with open-weight models served by vLLM, exposed to applications through a LiteLLM endpoint, with guardrails rebuilt as a separate layer. The work is rarely one change. It splits across platform engineering (GPU nodes, the serving cluster, networking and upgrades), ML or applications engineering (model selection, prompt behavior and the switch in client code) and security (endpoint authentication, retention and the replacement for Bedrock Guardrails). vLLM is licensed under Apache-2.0 and has no paid edition, so the license fee is zero and the cost sits in accelerator capacity, the surrounding infrastructure, implementation and the people who run it. Ask any implementation partner to price those components separately: accelerators (reserved or on demand), storage, the LiteLLM and Redis or PostgreSQL dependencies, monitoring, and the on-call rota. Bedrock charges per token or per committed capacity, so the comparison depends on your actual traffic profile, which you should measure before signing anything. Confirm the exact Provisioned Throughput end date and any notice terms in your AWS agreement, because that date sets the cutover window, not the other way around. The main risk is a cutover that goes live before output quality is proven. Run your own prompts through both endpoints in parallel, score the outputs against criteria your business owns, and keep a rollback path that routes traffic back to Bedrock through the same gateway. Cut over one workload at a time, starting with the one that tolerates the most variation. Set a go or no-go decision with named owners before the Provisioned Throughput end date, and budget time for the parts that are easy to forget, such as load testing, the vLLM metrics endpoint in your monitoring and the endpoint allowlist recommended in the vLLM security documentation.
Which Bedrock capabilities map to vLLM and LiteLLM
This table maps the Bedrock features a migration typically touches to the vLLM and LiteLLM capability that replaces each one. Read the status column first: clean means a direct substitute, needs rework means the logic moves to your side, and gap means no open-source equivalent is supplied, so plan a compensating control or accept the loss.
| Bedrock capability | Replacement on vLLM and LiteLLM | Status |
|---|---|---|
| InvokeModel and Converse calls | vLLM serves OpenAI-style /v1/chat/completions and /v1/responses; apps call a LiteLLM endpoint and rewrite Bedrock request bodies to the OpenAI format | needs rework |
| Bedrock model IDs | No shared identifiers. Map each Bedrock model ID to a chosen open-weight model and pin its exact weights and revision in your own registry | needs rework |
| Streaming responses | vLLM supports streamed chat completions, and LiteLLM passes streams through; confirm chunk format in your client library before cutover | needs rework |
| Embeddings | vLLM exposes /v1/embeddings for supported embedding models; confirm the model's dimensions match your existing vector index | needs rework |
| IAM access control | No IAM equivalent. Use LiteLLM virtual keys restricted to specific models, plus SSO in the admin UI or your identity provider for operators | needs rework |
| Per-team quotas and budgets | LiteLLM virtual keys support per-key, per-user and per-team budgets, TPM and RPM limits; virtual keys need a PostgreSQL database | clean |
| Fallbacks and routing | LiteLLM routing offers retries, cooldowns, priority failover and latency-based routing; fallback to a hosted provider changes your data residency position | clean |
| Logging and metrics | LiteLLM logs to Langfuse, OpenTelemetry and Prometheus; vLLM exposes Prometheus metrics at /metrics, which the vLLM --api-key option does not protect | needs rework |
| Guardrails | NeMo Guardrails provides input and output rails, self-check moderation and jailbreak detection; policies must be rewritten and tested, and Automated Reasoning checks have no direct open-source equivalent | gap |
Mapping Bedrock model IDs to open-weight replacements
Start by building a complete inventory of every Bedrock model ID your organization calls, and do not stop at the production service. Search application code, configuration files, infrastructure as code, prompt templates, evaluation harnesses and scheduled jobs for the modelId values passed to the Bedrock Runtime Converse and InvokeModel operations, and record which team owns each call, what task it performs (classification, extraction, summarization, code generation, tool calling or agent planning), the expected input and output token volumes, and whether the call sits behind a Provisioned Throughput commitment or an inference profile. Pull the same information from AWS CloudTrail or your Bedrock invocation logs for the last few months, because forgotten batch jobs and internal tools often appear only there. Each row becomes one decision: keep, replace, or retire.
For each row, pick an open-weight candidate that matches the task, then confirm three facts with the model publisher rather than assuming parity with the Bedrock model: the license terms (including any use restrictions that affect your product or customers), the supported context length, and whether the model's chat template supports the tool-calling format your applications depend on. Bedrock model names do not carry these guarantees over. Check how the publisher's model card describes the intended use and whether the weights you download match the version you tested. Then write the mapping down as a versioned file, so that the model revision, the vLLM version and the serving flags travel together and can be reviewed like any other change.
Treat output differences as a certainty, not an edge case. A replacement model can change phrasing, JSON formatting, refusal behavior and tool-call selection even when the benchmark scores look similar, so run every mapped workload against a set of your own prompts, with sampled production inputs stripped of personal data, and score the results against acceptance criteria your business owners agree before cutover. Hardware follows the model choice. vLLM runs on NVIDIA CUDA, AMD ROCm and Intel XPU GPUs, on several CPU architectures and through third-party hardware plugins, so size accelerators from the model's memory footprint and your latency targets after the candidate list is final, not before.
What data and integrations move, and what you rebuild
A Bedrock migration moves more than model calls. Prompts, evaluation sets, spend records and access rules each need a destination on your side, and some of them will be rebuilt rather than copied. The cards below sort each item by what moves, what gets replaced and what you must confirm with AWS before you start.
Prompt templates and system prompts
Prompts are the part of the application most likely to change behavior when the model changes, so export them from wherever they are stored today and version them in your own Git repository. Keep each prompt tied to the model and parameters it was tested against. Expect the open-weight replacement to respond differently to the same system prompt, and plan a rerun of your evaluation set before you change any prompt text.
Evaluation datasets and results
Your evaluation datasets are the only way to judge the replacement on your own work. Move the inputs, expected outputs and scoring rules out of Bedrock tooling into files or a store you control, and record the results of the current model as the baseline. Confirm with AWS whether any evaluation jobs or results can be exported, because a documented export format is not something this migration can assume.
Logs, traces and retained prompts
Route the new traffic through LiteLLM with logging to Langfuse, OpenTelemetry or Prometheus, so you know what the new stack records from day one. Bedrock invocation logs and any prompts retained under AWS review cannot be assumed to export in a documented format. Ask AWS in writing what is available for export, in what format and for which period, before you plan the retention of historical records.
Spend records and budgets
Spend history from Bedrock is a billing record, not a usage record for your applications, so keep the invoice data and attribute usage going forward. In LiteLLM, per-key, per-user and per-team budgets, TPM and RPM limits and spend tracking need a PostgreSQL database. Note that LiteLLM's production guide names PostgreSQL as the primary supported database and requires Redis 7.0 or newer once more than one proxy instance runs, so both become recurring components you operate.
IAM policies mapped to virtual keys
AWS IAM decides which roles can invoke which models, and that logic does not transfer. Map each role or service to a LiteLLM virtual key that is restricted to specific models and has its own budget and rate limits. Store the LITELLM_MASTER_KEY, which must start with sk-, in a secret manager, and review every mapping, because an IAM grant that was never documented will not appear in the new configuration by itself.
Application code and the Bedrock SDK
Application code calling the Bedrock SDK must change to an OpenAI-compatible request to the LiteLLM endpoint, which then forwards to vLLM. Inventory every call site, including streaming, tool calling and embeddings, since the request and response shapes differ. vLLM also exposes Prometheus metrics at /metrics, which you should scrape and alert on, and this endpoint sits outside the --api-key protection, so keep it off the public route.
The migration sequence from inventory to decommission
This sequence moves Bedrock workloads to open-weight models on vLLM in controlled stages, so each step produces evidence that the next one depends on. Each stage ends with a written output that your team and DeployOpen can review before any production traffic moves.
Inventory Bedrock call sites and model IDs
List every application, batch job, notebook and third-party tool that calls Bedrock, including the model ID, region, API used (Converse, InvokeModel or Agents), prompt templates, guardrail attachments and the IAM role each call uses. Record which workloads depend on Provisioned Throughput and when those terms end, and confirm the end date with your AWS account team. The output is a model map that pairs each Bedrock model ID with a candidate open-weight replacement, a named owner and a criticality rating for each workload.
Stand up vLLM and the LiteLLM endpoint
Deploy the candidate open-weight model on vLLM inside your own cloud account or data center, using the OpenAI-compatible server, and place it behind a reverse proxy that exposes only the endpoints users need, because the vLLM API key does not cover every path. Deploy LiteLLM as the single OpenAI-compatible entry point, configure virtual keys, budgets and logging, and back it with PostgreSQL, plus Redis once more than one proxy instance runs. The output is a tested runbook and a working endpoint that passes health checks and metrics collection.
Pilot on one non-critical workload
Choose one low-risk workload from the model map, such as an internal summarization job, and point its client at the LiteLLM endpoint, changing the base URL and model name while keeping prompts unchanged where possible. Run the workload on both Bedrock and the replacement model using your own representative prompts, and compare outputs, latency, error rates and token usage. The output is an evaluation report that records which differences matter to the business, signed off by the workload owner before the next step.
Recreate guardrail policies and retest
Map each Bedrock Guardrails policy attached to the pilot, such as content filters, denied topics, word filters and PII masking, to self-hosted controls in NeMo Guardrails or another tool you select, and note any policy with no open-source equivalent so that you can decide how to handle it. Test the replacement with the same adversarial and sensitive prompts used for the Bedrock baseline. The output is a guardrail test report listing each policy, its replacement and any residual gap accepted in writing.
Run a parallel period with weighted routing
Configure LiteLLM routing so that a defined share of production traffic goes to vLLM while the remainder continues to Bedrock, and increase the share in steps only when error rates, quality checks and cost dashboards stay within thresholds agreed with the workload owners. Keep fallbacks configured so that failed vLLM requests can reach Bedrock during this period. The output is a routing configuration under version control, a dashboard view of both paths and a log of each traffic change with its approver.
Cut over before the Provisioned Throughput end date
Move all remaining workloads to the LiteLLM endpoint, confirm that no traffic still reaches Bedrock in logs, and complete the cutover before your committed Provisioned Throughput term ends, so that you are not paying for capacity you no longer use. Ask your AWS account team to confirm the exact end date and any notice requirements in writing. The output is a cutover checklist signed by each workload owner and a rollback plan that names the Bedrock model IDs to restore if needed.
Decommission Bedrock access and keys
After a stability period agreed in writing, remove the IAM policies and roles that allow Bedrock invocation, rotate or delete the access keys and the LiteLLM master key references that pointed at Bedrock, cancel any remaining Bedrock commitments, and remove guardrail resources no longer used. Keep the audit trail and evaluation reports for your records. The output is a decommission record that shows which identities and resources were removed, when, and who approved each removal.
Replacing Bedrock Guardrails with NeMo Guardrails
Bedrock Guardrails content filters screen prompts and responses for categories such as hate, insults, sexual content, violence and misconduct, with configurable strength. In NeMo Guardrails, the closest equivalent is a combination of input rails that screen user messages before the model sees them and output rails that check the model's answer before the user receives it. The library includes self-check input and output moderation and NVIDIA content safety models, so you can choose between a prompt-based self-check that uses your own model and a dedicated classifier.
- Input rails: Block or redirect harmful user messages before they reach vLLM, which limits token spend on requests you will refuse anyway.
- Output rails: Check completions before return, which covers cases where a benign prompt produces harmful text.
- Model choice: Confirm which content safety model is licensed for your use and whether it runs fully inside your network.
- Thresholds: Bedrock exposes filter strength settings; NeMo Guardrails expects you to tune prompts or classifier thresholds yourself and record the values.
- Refusal text: Write standard refusal messages in the configuration so behavior stays consistent across applications.
Confirm with your security team which categories are in scope and which thresholds they accepted before cutover.
Bedrock denied topics let you describe a subject in natural language and block conversations about it. NeMo Guardrails handles this with dialog rails, which use Colang flows to define user intents, bot responses and the conditions under which a conversation is redirected. Topic safety models are also available in the library for classifying whether a message falls in a restricted area. Dialog rails give you more control over multi-turn conversations than a single filter, but they also need more authoring work.
- Dialog rails: Define the denied topic as a user intent and map it to a fixed refusal or handoff flow.
- Topic safety models: Use a classifier when the topic is hard to describe with example phrases.
- Multi-turn checks: Test whether a user can reach the denied topic gradually across several turns.
- Colang version: Colang 1.0 is the default, so decide early whether you will author flows in 1.0 or 2.x.
- Ownership: Assign a named owner for each topic definition, since changes to scope affect what users can ask.
Review each denied topic with the business owner and keep the agreed definitions in version control.
Bedrock word filters block listed terms and PII masking detects and redacts entities such as names, addresses and account numbers. In NeMo Guardrails, word lists and pattern checks are usually implemented as input or output rails backed by Python actions, which run custom code during the flow. PII detection can use an open-source detector wired in as an action, or a rule set you write yourself. Execution rails can also check tool calls and retrieved data before an action runs, which matters when a model can send data to another system.
- Word filters: Implement as input or output rails with a maintained term list stored in the repository.
- PII masking: Run detection on both prompts and completions, and log redaction events without storing the raw values.
- Execution rails: Apply checks to tool inputs and outputs so redacted values do not leave the boundary through a function call.
- Retrieval rails: If you use retrieval, screen chunks before they enter the prompt.
- Coverage gaps: Confirm which PII types your detector supports, since an unlisted identifier will pass through unchanged.
Run a test set of real-format but synthetic identifiers, and document every identifier type that is not covered.
NeMo Guardrails v0.24.1 was released on 16 September 2026, and the library supports Python 3.10 through 3.13. The configuration uses a config.yml file, optional Python actions and Colang files. Colang 1.0 is the default, but NVIDIA documents a Colang 1.0 to 2.x migration using the nemoguardrails convert tool, and says converted configurations still need manual review. You can call the library from Python or run a guardrails server with a Dockerfile. NVIDIA also offers a NeMo Guardrails microservice, a production container deployed on Kubernetes with Helm, built on the same configuration model.
- Pin the version: Record the exact library version and pin it in your build, since the release line moves quickly.
- Choose Colang version: Keep Colang 1.0 if your flows already work, or convert to 2.x and review every converted flow by hand.
- Server or library: Use the guardrails server for shared, language-neutral access, or the Python API when one application owns the rails.
- Microservice: The Helm-deployed microservice fits Kubernetes platforms, but confirm its license and support terms with NVIDIA before you adopt it.
- Placement: Run the guardrails layer next to vLLM and the LiteLLM gateway, inside the same network boundary.
Confirm the supported Python and Kubernetes versions in your environment before you build the image.
Guardrails change behavior in two directions: they can block attacks that should be blocked, and they can block ordinary requests that should be answered. Bedrock Guardrails gave you a managed set of policies with its own test tooling, so you cannot assume the replacement matches it. Build a test suite that includes adversarial prompts such as jailbreak and prompt injection attempts, harmful requests in each category, and benign prompts that look similar to restricted content. Run the same suite against Bedrock and the replacement and compare outcomes side by side.
- Adversarial set: Include jailbreak, prompt injection and encoding tricks that target each rail.
- Benign set: Include normal business requests that use sensitive words, so you can measure false positives.
- PII set: Use synthetic identifiers in every format your applications produce.
- Multi-turn set: Test denied topics across conversations, not only single prompts.
- Sign-off: Record results, the reviewer and the accepted residual risk before traffic moves.
Confirm the acceptance criteria with your security and compliance leads, and keep the test suite in version control so it runs again after every configuration change.
What drives cost and timing in this migration
This table lists the factors that set the effort and running cost of moving Bedrock workloads to vLLM and LiteLLM, and whether each is paid once or recurs. Read each row as a question to answer in your own environment before asking a partner for a quote. The main takeaway is that call-site inventory, GPU capacity and the operating team usually matter more than the software itself, which has no license fee.
| Driver | Why it changes cost or effort | One-time or recurring, and what to ask for in a quote |
|---|---|---|
| Number of call sites and model IDs | Each Bedrock model ID needs a replacement choice, a prompt re-test and a change to the calling code. Many call sites across teams multiply the testing and sign-off work. | One-time for the inventory and code changes. Ask for the scope to list every call site, model ID, SDK usage and owning team, and what is counted as a call site. |
| GPU capacity, reserved or on-demand | Capacity is the largest running cost once vLLM serves production traffic. Reserved capacity lowers the rate per hour but commits you to a size, while on-demand gives flexibility at a higher hourly rate. | Recurring. Ask the quote to state the GPU types, the reservation terms your cloud or hardware provider offers, and the load test used to size the cluster. |
| Multi-node parallelism needs | vLLM uses tensor parallelism within a node and pipeline parallelism across nodes, and multi-node runs need Ray or its own multiprocessing backend. Multi-node traffic must sit on an isolated network, which adds network design and testing work. | One-time for design and build, then recurring for operating the extra nodes. Ask how many nodes the target models need and how inter-node traffic will be isolated. |
| Redis and PostgreSQL operation for LiteLLM | PostgreSQL is the primary supported database and is required for virtual keys. Redis 7.0 or newer is needed once more than one proxy instance runs, for shared rate limits, router state and cache. LiteLLM suggests 1 vCPU and 4 GiB memory per worker, and the number of workers scales with traffic. | Recurring for hosting, backups, patching and high availability. Ask for the database and Redis topology, backup and restore testing, and the worker count used for sizing. |
| Guardrail policy count | Each Bedrock Guardrails policy, such as content filters, denied topics, word filters or PII masking, becomes a rail or validator to design, configure and test. NeMo Guardrails uses config.yml, Python actions and Colang files, and Colang 2 migrations need manual review. | One-time for mapping and testing, then recurring for tuning as models and policies change. Ask for a policy-by-policy mapping, and which policies have no open-source equivalent. |
| Evaluation effort on your own prompts | Output quality from open-weight models differs from Bedrock models, so each workload needs a test set built from real prompts with agreed pass criteria. Larger workloads and regulated outputs need more review rounds. | One-time for the baseline, then recurring for regression runs on each model or vLLM upgrade. Ask who builds the test set, who signs off on results and how many runs are included. |
| Team operating skills | Operating GPU inference, gateway configuration, observability and upgrades takes skills that Bedrock currently absorbs. vLLM releases new minor versions about every two weeks, so upgrade planning becomes a standing task. | Recurring staffing or retainer cost. Ask whether training, runbooks and on-call support are included, and what the handover covers. |
What usually goes wrong and how to prevent it
Most failed Bedrock migrations do not fail on model quality. They fail on sequencing, exposed endpoints, unencrypted traffic and gateway access controls that were left at their defaults. Each card below names one failure and the check that prevents it.
Cutting over before evaluation
Teams often switch production traffic to a self-hosted model after a few spot checks in a notebook. Replacement models can differ from Bedrock models in refusal behavior, output format and tool calling, and these differences only surface under real prompts. Build an evaluation set from your own production prompts, score the candidate against the current Bedrock output, and keep Bedrock running behind the gateway as a fallback until the results are signed off.
Exposing vLLM without an allowlist
The --api-key option protects the /v1, /v2, /inference and /cohere paths, but not /metrics, /health, /pause, /resume or /abort_requests. A server that relies on the key alone can expose operational controls and metrics to any caller that can reach the port. Place a reverse proxy in front of vLLM that allowlists only the endpoints your applications call, and keep the vLLM port off the network.
Unencrypted traffic between nodes
In a multi-node vLLM deployment, communication between nodes is insecure by default, with no authorization or encryption. Any host that can reach those nodes can join or observe the inference traffic. Place all nodes on an isolated network segment, restrict it to cluster members, and confirm the segment rules before you add a second node to production.
Assuming LiteLLM SSO is free
LiteLLM supports SSO with Google, Microsoft Entra ID, Okta and generic OIDC for the admin UI. From v1.76.0, SSO is free for up to 5 users, and an Enterprise license is needed beyond that. Teams that onboard a platform group during cutover can hit this limit without warning. Count the people who need admin UI access before you plan identity integration, and ask LiteLLM to confirm the current terms for your user count.
Storing LITELLM_MASTER_KEY in config files
The LiteLLM master key, which must start with sk-, grants full administrative control over the gateway, including virtual key creation and spend data. Keeping it in a Helm values file, a container image or a plain environment file spreads it to everyone with repository or cluster read access. Store it in a secret manager, inject it at runtime, rotate it on personnel changes, and restrict who can read the Kubernetes secret that holds it.
Missing the Provisioned Throughput end date
Provisioned Throughput commitments run for a fixed term, and teams that do not track the end date can renew by default or lose the migration window. Record the commitment's term and notice conditions in your migration plan, and set the cutover target well before the date. Confirm the exact terms and any notice period with your AWS account team, because these depend on your agreement.
How the migration differs by starting point
Teams paying per token on demand have the most flexibility, because no contract ties the cutover to a date. The main work is application-side: find every Bedrock call, record the model IDs in use, and decide which open-weight replacement serves each workload. Because billing is metered, you can run old and new paths side by side and shift traffic gradually without penalty.
- Inventory calls first: search code, prompt stores and scheduled jobs for
bedrock-runtimecalls and model IDs, including batch and evaluation jobs that teams forget. - Shift by workload: move low-risk summarization or classification traffic before customer-facing chat, so you learn the operating model on less sensitive paths.
- Run in parallel: route a share of requests to vLLM behind a LiteLLM endpoint and compare outputs on your own prompts before increasing that share.
- Plan for capacity, not contracts: GPU capacity is the new constraint, so confirm procurement lead times with your hardware or cloud provider early.
- Keep the fallback: retain Bedrock credentials until the replacement has passed your acceptance tests for each workload.
Before starting, check which of your models are Legacy or approaching end of life in your Bedrock account, since that can force a migration on a date you did not choose.
Teams with Provisioned Throughput commitments are bound by the term they signed, so the cutover date is set by the contract rather than by engineering readiness. The sequencing question becomes whether you can have the replacement validated before the commitment ends, and whether you should avoid renewing it while the migration is underway. Read the commitment terms with your account team and confirm exactly what happens at expiry, including any notice periods, before you set milestones.
- Find the end date: record each commitment's term end and whether it renews automatically, and confirm the notice requirements in writing.
- Work backward from expiry: schedule evaluation, load testing and the gateway cutover so the final acceptance gate falls before the term ends.
- Do not stack capacity: avoid buying a second commitment for the same workload, since that locks in cost while the self-hosted cluster is still being built.
- Budget for overlap: running dedicated GPU capacity while the commitment still serves traffic is a cost to model, so ask your team what overlap period the plan includes.
- Scale the new cluster in steps: size vLLM for the peak you actually measured, then add replicas once metrics confirm the headroom.
Confirm with your account team whether any capacity can be reduced or moved before the term ends, because the answer changes the overlap cost.
Teams that already import their own open-weight models into Bedrock have a head start on the model choice, because the weights and their evaluation history already exist. The shift is in who operates the serving layer. Import billing and scaling behavior are handled by Bedrock, while a vLLM deployment makes you responsible for instance sizing, warm capacity, quantization choices and upgrades. Your existing evaluation results are the best starting baseline for the new deployment.
- Reuse the weights: confirm you hold the model files and license terms in your own storage, so the same artifacts can load into vLLM without another download from Bedrock.
- Set warm capacity deliberately: where Bedrock scales to zero, decide whether your deployment keeps replicas warm, since that trade-off moves cost and latency.
- Pin versions: record the vLLM release and model revision in your configuration, and track the vLLM release cadence so upgrades are planned rather than forced.
- Test quantization: compare any quantized variant against the full-precision baseline on your own prompts before promoting it.
- Move the endpoint: point the existing application at the LiteLLM endpoint so the model switch does not require application code changes.
Verify that your license for each imported model allows self-hosting outside Bedrock before you copy any weights.
Regulated teams with strict data residency requirements often start with a compliance question rather than a model question. The first step is to document where prompts, completions, logs and traces go today, including any retention mode set on the Bedrock side, and to decide which workloads must stay inside your boundary. Self-hosting moves the inference path into your own infrastructure, but it also makes your team responsible for access control, logging and evidence, which your assessors will examine.
- Map data flows: list every system that receives prompts or completions, including observability tools and gateways, and confirm which ones leave your boundary.
- Choose the boundary first: decide whether the vLLM cluster, LiteLLM and any guardrail service run in your VPC, data center or disconnected network, then size the rest of the plan around that choice.
- Authenticate the endpoint: vLLM's
--api-keyoption does not protect every route, so place a reverse proxy in front that exposes only the endpoints users need. - Isolate multi-node traffic: the vLLM security documentation treats inter-node traffic as insecure by default, so place nodes on an isolated network.
- Prepare evidence early: collect configuration, access logs and change records from the start, since Bedrock's retention terms no longer apply to your own stack.
Ask your compliance lead and independent assessor which controls they expect to see before the first production request, because preparing that evidence takes longer than the technical cutover.
Questions buyers ask before moving off Bedrock
How much effort does moving off Amazon Bedrock to vLLM take?
The effort depends on how many Bedrock calls your applications make, how many models you use, and how much of the Bedrock surround you depend on. The API change is usually the smaller part, because vLLM exposes OpenAI-compatible endpoints such as /v1/chat/completions, so applications written for the OpenAI request format can point at a LiteLLM gateway in front of vLLM. The larger work is sizing GPU capacity, running the serving stack, rebuilding authentication and access control, replacing Bedrock Guardrails, and building an evaluation set from your own prompts. Ask us for a written scope that lists each application and model before estimating effort.
How long does a migration take, and what sets that timeline?
No fixed duration is supplied for this migration, so treat any number you hear as unverified until it is tied to a written scope. The timeline is driven by the number of applications, the model replacements you must test, the availability of GPU capacity in your account or data center, your security review cycle, and whether you need a parallel run before cutover. Cutover timing matters most if you hold Provisioned Throughput commitments, because you should plan the switch before those terms end. Confirm your commitment end dates with AWS early, since they set the hard deadline.
Can our own team run this migration without outside help?
A team that already operates Kubernetes, GPU workloads and an API gateway can carry out most of the work itself, and vLLM is Apache-2.0 licensed with no paid edition. The skills gap usually sits in GPU sizing, multi-node networking, observability and security hardening. vLLM's security documentation says node-to-node traffic in multi-node deployments is insecure by default and must be isolated, and that its --api-key option should not be the only control. If those skills are thin, you can buy implementation as a fixed-scope engagement, a retainer for ongoing operations, or a mix of both.
What does our side need to provide for the migration?
Expect to supply GPU or accelerator capacity, a network placement for the serving tier, identity provider access for SSO, an inventory of Bedrock model IDs and call patterns, and named owners for each application. You also need access to representative prompts and expected outputs, because you cannot judge output quality from vendor benchmarks alone. On the platform side, LiteLLM production guidance names PostgreSQL as the primary database and Redis 7.0 or newer once more than one proxy instance runs, so plan for those services and their backups. Secret storage for the LiteLLM master key should sit in a secret manager.
Will vLLM answers match what Bedrock returns?
Not automatically. Open-weight models served on vLLM are different models from the ones Bedrock hosts, so responses will change in wording, format, refusal behavior and sometimes accuracy, even when the request format matches. The reliable approach is to build an evaluation set from your own prompts, run both systems side by side, and score outputs against criteria your business owns. Include tool calls, structured output and edge cases, not only typical requests. Confirm model-specific behavior with the model publisher and test any change in prompt templates or quantization before production.
What happens to Bedrock Guardrails after the move?
Bedrock Guardrails does not move with the model, so you need a replacement for content filters, denied topics, word filters and PII masking. NVIDIA NeMo Guardrails is Apache 2.0 licensed and provides input, dialog, retrieval, execution and output rails, plus self-check moderation, jailbreak and injection detection and content safety models. Policies that map directly are easier to move, while checks such as Automated Reasoning have no direct open-source equivalent. Test the replacement against your own adversarial and compliance test cases before cutover, and record the results as evidence for your risk owners.
How does total cost compare by component?
Bedrock charges per token or per committed capacity, while a self-hosted stack moves cost into components you pay for directly: GPU or accelerator capacity, storage, the gateway and its database and cache, monitoring, implementation and the people who run inference. vLLM itself has no license fee, so its cost comes from hardware, infrastructure and operations. Costs that recur include GPU capacity, support and upgrades, while implementation is typically one-time. Ask any provider for a quote that separates hardware, implementation, retainer and internal staffing, and compare it against your Bedrock invoices by line item.
How DeployOpen scopes and runs the migration
DeployOpen plans, implements, hardens, documents and supports self-hosted open-source platforms inside your own infrastructure. For a move off Amazon Bedrock, we start with a written scope that names the workloads, models, gateway, guardrails and cutover conditions, then build and test the replacement in your environment.
How we scope
- Inventory every Bedrock model ID, API call pattern and guardrail policy in use across your applications
- Agree the target open-weight models, GPU capacity and network placement in a written scope before work starts
- Set evaluation criteria with your product owners using your own prompts, with agreed pass thresholds and sign-off steps
- Confirm the Provisioned Throughput end date and map a cutover window that leaves room for parallel running
How we build
- Deploy vLLM behind a LiteLLM gateway with virtual keys, budgets, rate limits and fallbacks configured to your teams
- Point existing OpenAI-compatible client code at the new endpoint and document each code change for review
- Rebuild Bedrock Guardrails policies as NeMo Guardrails rails, then test them against logged prompts and blocked-output samples
- Place vLLM endpoints behind a reverse proxy that allowlists only user-facing routes, since the API key does not cover every path
How we hand over
- Deliver configuration, runbooks and architecture records for the gateway, serving cluster and guardrail rails
- Run side-by-side evaluation reports comparing Bedrock and self-hosted outputs on your own test sets, with the gaps stated
- Train the operating team on upgrades, metrics monitoring, key rotation and model rollback before cutover
- Document where your compliance evidence comes from, so your auditors can review controls directly
How we support
- Ongoing support, upgrades and continuous testing are available as a retainer after handover
- Track vLLM and LiteLLM release changes and agree which upgrades are applied in your environment and when
- Re-run evaluation suites when models, prompts or guardrail rules change
- Confirm with your team who owns on-call response, capacity planning and model lifecycle decisions after go-live

