Deploy · Intermediate

How to deploy an LLM in the EU

  • Time: About half a day to choose and configure a hosted EU option; one to two days to add a verification test and write the record. Self-hosting adds the time in the self-hosting guide.
  • Cost: Hosted options are priced per token and some regional options carry a different rate; check each provider's current price page. Self-hosting costs the server and the time to run it.
  • Level: Intermediate
On this page
  1. Short answer
  2. Before you start
  3. Residency, sovereignty and compliance are different things
  4. 1. Decide what "in the EU" has to mean for you
  5. 2. Choose a route and read its residency page
  6. 3. Configure the EU-scoped option and block the global one
  7. 4. Map everything else that touches the prompt
  8. 5. Check sub-processors, contracts and transfer safeguards
  9. 6. Test where requests actually run
  10. 7. If you need more control, self-host in the EU
  11. Which route fits which situation
  12. Troubleshooting
  13. Verify it worked
  14. Next steps
  15. FAQ
  16. How Swfte can help
  17. Sources and last verified

Short answer

To deploy an LLM in the EU, decide what "in the EU" must cover: where data is stored, where requests are processed, who can reach it, and where logs and backups go. Then pick a route: an EU-scoped option from a hosted provider, a self-hosted open-weight model on EU infrastructure, or on-premises. Read each provider's residency page, restrict the configuration, and test where requests run.

The steps at a glance

  1. Decide what "in the EU" has to mean for you
  2. Choose a route and read its residency page
  3. Configure the EU-scoped option and block the global one
  4. Map everything else that touches the prompt
  5. Check sub-processors, contracts and transfer safeguards
  6. Test where requests actually run
  7. If you need more control, self-host in the EU

Before you start

Who this is for

  • Engineering, security and data protection leads who must show where prompts and outputs are processed and stored.
  • Teams adding an LLM to a product used by EU customers who have asked "does this leave the EU?".
  • Procurement teams comparing hosted LLM options against self-hosting for a regulated workload.

Probably not for you if

  • Teams that need a physically disconnected network. That is a stricter requirement: see how to build an air-gapped AI environment.
  • Anyone looking for a legal opinion. This is a technical checklist. Your data protection officer or counsel decides what your transfers and contracts must say.

Prerequisites

  • A written description of the use case: what personal and confidential data goes into prompts, and who the data subjects are.
  • Access to a cloud account with permission to create model deployments, or a server you can run a model on.
  • Your data protection officer, or whoever acts as one, on a short call. Several choices below are legal as well as technical.
  • A list of the other services touched by an LLM request: vector database, logging, monitoring, queues, support tooling.
Time
About half a day to choose and configure a hosted EU option; one to two days to add a verification test and write the record. Self-hosting adds the time in the self-hosting guide.
Cost
Hosted options are priced per token and some regional options carry a different rate; check each provider's current price page. Self-hosting costs the server and the time to run it.
Skill
Comfortable with cloud consoles or infrastructure-as-code, and reading provider documentation.

Estimates are ours, not measurements, and move with your hardware, data and network.

Residency, sovereignty and compliance are different things

Residency is where data sits. Processing location is where it is computed on. Sovereignty is about who controls the service and which legal system can reach it. Compliance is a property of how you use the whole system under the rules that apply to you. A provider can honestly offer residency and still leave your sovereignty question open.

This guide helps with the technical side. It does not tell you that any setup meets the GDPR or the EU AI Act: that depends on your use case, your contracts and your configuration. For the platform view, see the EU hub and the deeper page on deploying an LLM in the EU.

  1. Step 1Decide what "in the EU" has to mean for you

    You end up with: A short list of requirements covering storage, processing, access, logs and law.

    "Hosted in the EU" is a location. It does not by itself say who operates the service, who can read the data in support cases, or which laws the operator is subject to. Before you compare providers, write down which of these you need: data stored at rest in the EU, requests processed in the EU, administrative and support access from the EU, logs and backups in the EU, and an operator with no legal exposure outside the EU.

    Most teams can get the first two from a hosted provider and have to negotiate or choose carefully for the rest. Be clear which requirements are firm (a regulator or customer contract says so) and which are preferences. Firm requirements decide the route; preferences decide between routes that pass.

    Also decide what data may go into prompts at all. A residency setting does not make a prompt that contains special-category data safe to send. Your GDPR for AI and DPIA work decide that, not the hosting choice.

  2. Step 2Choose a route and read its residency page

    You end up with: A chosen route, with the provider's own residency statement saved with a date.

    There are three families of route. Hosted APIs with an EU scope are quickest and the right start for most teams. Self-hosting an open-weight model on EU infrastructure gives you the most control. On-premises gives you the same plus physical custody. The table below summarises what the providers documented on the dates we read them. Treat it as a starting point and re-read the page before you decide, because these options change.

    Notice the pattern in the wording. Storage and processing are separate promises, "zone" and "geography" mean different things, and there are global options sitting next to the regional ones. The cheapest or newest option is often the global one. Choosing the EU-scoped option is an explicit decision.

    What each option documents (read on the dates in the sources list)
    OptionWhat the documentation saysWhat it does not settle
    Azure OpenAI in Microsoft Foundry, Data Zone deployment (EU)Data stored at rest stays in the designated Azure geography. Data Zone types process data only within the specified zone; for the EU this follows the Azure EU Data Boundary.The EU zone can include EFTA countries such as Norway and Switzerland, and Microsoft can add regions to a zone without prior notice. Global deployment types may process in any Azure region.
    Amazon Bedrock, geographic cross-Region inference profile (EU)Requests are routed within the geography; the comparison table lists data residency as within geographic boundaries such as EU. Data between Regions stays on the AWS network and is encrypted in transit.Routing picks a Region inside the geography, so you do not choose which one. A separate global profile routes worldwide.
    Google Vertex AI (Gemini Enterprise Agent Platform), regional or EU multi-region endpointsData at rest stays in the location you chose; ML processing location is determined by the endpoint you call, and jurisdictional endpoints keep processing in that area.The page defines the EU multi-region endpoint's coverage narrowly. Read it for the countries included. Global endpoints are separate.
    Mistral La PlateformeMistral's help centre says data is hosted in the EU by default, with a US endpoint available as an explicit choice, and regional endpoints for the EU and US.Some features can transfer data temporarily outside the EU to locations on its sub-processor list. Retention terms sit in its data processing addendum.
    Open-weight model on an EU cloudYou choose the region, the operator and the software. See how to self-host an LLM.You inherit the operator's sub-processors and legal exposure. You also run the service.
    Open-weight model on-premisesYour building, your network, your staff.You carry all operations, patching and capacity planning.

    Checked against: Microsoft Foundry Models: deployment types, Amazon Bedrock: cross-Region inference, Google Cloud: generative AI data residency, Mistral help centre: where do you store my data

  3. Step 3Configure the EU-scoped option and block the global one

    You end up with: A deployment that can only run in the EU option, with the global option prevented by policy where the platform allows it.

    On Azure, the deployment type decides where inference is processed. The documentation lists DataZoneStandard and DataZoneProvisionedManaged for processing within a data zone, and GlobalStandard for any Azure region. Create your deployment with a Data Zone type, in a region inside the EU zone, and check the model is available for that type, since not all models support all types.

    Then stop someone creating the global type by mistake. The documentation gives an Azure Policy definition that denies a named deployment type. Replace the SKU name with GlobalStandard to deny the global option. Test it in a non-production subscription first.

    On Bedrock, call a geographic EU inference profile rather than a global one, and make sure your organisation's policies allow all destination Regions in the profile. On Vertex, call a regional or EU multi-region endpoint rather than the global one. With Mistral, use the EU endpoint host named in its help centre, api.eu.mistral.ai, rather than relying on a default. Provider-specific console steps change often, so follow the provider's current guide for the click path.

    Azure Policy rule that denies the global deployment type (from the Azure documentation) · json
    {
        "mode": "All",
        "policyRule": {
            "if": {
                "allOf": [
                    {
                        "field": "type",
                        "equals": "Microsoft.CognitiveServices/accounts/deployments"
                    },
                    {
                        "field": "Microsoft.CognitiveServices/accounts/deployments/sku.name",
                        "equals": "GlobalStandard"
                    }
                ]
            }
        }
    }

    Checked against: Microsoft Foundry Models: deployment types, Amazon Bedrock: cross-Region inference, Google Cloud: generative AI data residency, Mistral help centre: where do you store my data

  4. Step 4Map everything else that touches the prompt

    You end up with: A table of every system that stores or sees prompts, responses or embeddings, with its location.

    The model endpoint is rarely the only place data lands. List the vector store that holds your documents, the application database, the logging and monitoring service, the queue, the error tracker, the evaluation tool, backups, and any support tool that agents use. For each, write down where it runs, who operates it, and how long it keeps data.

    Logs deserve special attention. Request and response logging is useful and it creates a second copy of the data. Decide whether you log content at all, where the logs live, and how long you keep them. On Bedrock, for example, the documentation says CloudTrail logs cross-Region inference requests in your source Region, so your logging sits in the Region you called from.

    Do the same for people. Who can administer the cloud account, and from where? If your customers need EU-only administrative access, a provider that supports it contractually or a self-hosted route is the answer, and a residency toggle is not.

    Template for the data-flow map
    SystemHolds prompts, outputs or embeddings?Location and operatorRetention
    Model endpointYes (in transit, and logs if enabled)From the provider page aboveProvider terms
    Vector databaseEmbeddings and source text
    Application logsIf you log content
    Monitoring and tracingIf spans carry content
    BackupsCopies of the above
    Support accessPossible during incidents
  5. Step 5Check sub-processors, contracts and transfer safeguards

    You end up with: A list of the providers and sub-processors involved, with the transfer mechanism for each that sends personal data outside the EU.

    Ask each provider for its data processing agreement and its list of sub-processors, and read both. Mistral's help centre, for instance, says some features can transfer data temporarily outside the EU to the locations on its sub-processor list, and that contracts with service providers processing personal data outside the EU include safeguards under Article 46 of the GDPR. That is the type of statement you need to find and file for every provider.

    Where personal data goes outside the EU or EEA, you need a lawful transfer mechanism. Commission Implementing Decision (EU) 2021/914 of 4 June 2021 contains the standard contractual clauses for transfers to third countries, and they have applied to new transfers since 27 September 2021. Whether SCCs, an adequacy decision or another tool applies, and whether extra measures are needed, is for your counsel to decide for your facts.

    Do the same exercise for your own stack. If you use Swfte, the sub-processor list is published at /subprocessors and the security and hosting statements are on /trust. The trust page states that customer data is stored in AWS eu-west-1 (Ireland), and that other locations are agreed per dedicated deployment. The platform includes many model providers, some outside the EU, so EU-only routing depends on which providers you allow.

    Checked against: Mistral help centre: where do you store my data, EUR-Lex: Commission Implementing Decision (EU) 2021/914

  6. Step 6Test where requests actually run

    You end up with: Evidence from provider records and your own logs that requests were processed where you intended.

    Do not stop at configuration. Send a set of test requests that contain only synthetic data and then look for the provider's own record of where they ran. On Bedrock, the documentation says to look at the additionalEventData.inferenceRegion field in CloudTrail to see where a request was processed. Check that every value is a Region in the EU geography.

    For other providers, find the equivalent evidence: a region field in the response headers or metadata if there is one, an audit log, or the provider's own statement for the deployment type you chose. If a provider gives you no evidence, record that as a finding. It means your assurance rests on their document alone.

    Check the network side too. From your application servers, record which hostnames the application calls for model requests. A configuration that sends a fallback request to a global hostname when the regional one fails is exactly the type of thing that goes unnoticed. Block the global hostnames at your egress proxy if you can.

    Put the results in a short record: the date, the configuration, the evidence, and the open risks. That record is what you will show the next customer who asks.

    Checked against: Amazon Bedrock: cross-Region inference

  7. Step 7If you need more control, self-host in the EU

    You end up with: A decision on whether an open-weight model on EU infrastructure removes the gaps the hosted options left.

    Self-hosting removes the questions about a provider's routing and sub-processors for the model itself. You choose an EU region or your own site, you run an open-weight model, and prompts never go to a third-party model API. You take on the work of operating GPUs, patching, capacity and monitoring, and you still depend on your cloud or colocation provider for the hardware.

    Check the licence of the model for EU use before you commit. Some open-weight licences restrict EU-domiciled users or companies for particular models. How to evaluate an open-source LLM shows how to read the licence and test the model on your tasks, and how to self-host an LLM covers the server.

    A common middle path is to self-host for the most sensitive workloads and use an EU-scoped hosted option for the rest, behind one gateway so applications do not care which is which. How to set up an LLM gateway explains that pattern.

Which route fits which situation

Use this as a first pass, then confirm with your data protection officer.

If you needStart with
Fast start, EU processing, no infrastructure to runAn EU-scoped hosted deployment type
Contractual and technical control over the model operatorOpen-weight model on an EU cloud you contract with
Physical custody, or no outside operator at allOn-premises, possibly air-gapped
A mix of sensitivity levelsSelf-host the sensitive tier and route the rest to an EU-scoped hosted option behind a gateway
Evidence of where each request ranA provider that exposes region in audit logs, or self-hosting

Troubleshooting

What you seeLikely causeFix
The model you want is not available in the EU option or deployment typeProviders release new models first in global types and add regional ones later. The Azure documentation says geography-based types arrive last and have no guaranteed date.Pick the closest available model that is, or wait, or self-host an open-weight model. Do not switch to the global type without recording the decision and getting sign-off.
Requests succeed but your test shows a Region outside the EU geographyThe application is calling a global endpoint or a global inference profile, perhaps by default or as a fallback.Change the endpoint or profile to the EU-scoped one, block global hostnames at the egress proxy, and re-run the test.
Calls to an EU inference profile fail with a permissions errorOn Bedrock, organisational policies must allow all destination Regions in the profile.Review the service control policy and allow every Region the profile can route to, or choose a profile whose Regions your policy permits.
Latency is higher than the same model on a global optionRegional capacity is smaller and may route across Regions within the geography.Measure from your own servers. Consider provisioned capacity, a nearer region, or a smaller model for latency-sensitive calls.
The provider's zone includes countries you did not expectThe Azure EU Data Zone follows the Azure EU Data Boundary, which can include EFTA countries such as Norway and Switzerland, and Microsoft can add regions without prior notice.If that matters, choose a geography-based type in a named region, or self-host. Put the zone definition in your risk record.
Your logs or traces contain prompt text and live in a non-EU serviceObservability tools were set up before the residency decision.Turn off content capture, move the tool to an EU region, or redact before export. Update the data-flow map.

Verify it worked

Next steps

Related guides

Frequently asked questions

How do I keep LLM data in the EU?

Choose an EU-scoped option from a hosted provider, such as an EU data zone or geographic inference profile, or self-host an open-weight model on EU infrastructure. Then map every other system that stores prompts or logs, check sub-processors, and test where requests are processed.

Is "EU data residency" the same as EU processing?

No. Residency usually describes where data is stored at rest. Processing is where requests are computed. Providers document them separately, and some deployment types process outside the EU even when data at rest stays in it. Read both statements for the option you choose.

Does Azure OpenAI keep my data in the EU?

Microsoft documents that data at rest stays in the designated Azure geography, and that Data Zone deployment types process data only within the specified zone, which for the EU follows the Azure EU Data Boundary. Global deployment types can process in any Azure region, so the type you pick matters.

Do I need standard contractual clauses to use a US LLM provider?

If personal data is transferred outside the EU or EEA, you need a lawful transfer mechanism. The Commission's standard contractual clauses in Implementing Decision (EU) 2021/914 are one such tool, and an adequacy decision can be another. Which applies depends on your facts, so ask your data protection officer.

Is self-hosting an LLM in the EU always better for compliance?

Not automatically. It removes a model provider from the chain and gives you control over location, but you take on security and operations, and compliance still depends on how you use the system. It is often the right choice for the most sensitive workloads.

How can I prove where my LLM requests were processed?

Use the provider's own audit records where they exist. For Bedrock, the CloudTrail field additionalEventData.inferenceRegion shows the processing Region. Pair it with your egress logs showing which hostnames the application called, and keep dated results from synthetic test requests.

How Swfte can help

You can follow every step here with your cloud provider and no Swfte products. If it helps, Swfte's gateway can sit in front of EU-scoped and self-hosted models so applications call one endpoint.

  • Dedicated cloud: a deployment set aside for your organisation, with locations agreed per deployment
  • Trust and hosting statements: where Swfte stores customer data today and which controls are designed for
  • Sub-processors: the published list, marked as not yet legally reviewed
  • Connect: the OpenAI-compatible gateway that routes between the models you allow

The trust page states customer data is stored in AWS eu-west-1 (Ireland) today, with other locations agreed per dedicated deployment. Region-pinned routing that the gateway enforces is designed for rather than shipped: <EU-only routing availability - founder to fill>.

Missing a step or found a command that no longer works? Tell us, or request a how-to.

Sources and last verified

Commands, versions and facts in this guide were checked against the sources below on . Tools change quickly: if something differs from what you see, trust the official documentation and let us know.

  1. Microsoft Foundry Models: deployment types: Global, Data Zone and geography deployment types; EU Data Zone follows the EU Data Boundary; data at rest in the designated geography; SKU names; deny-by-policy example (page dated 6 August 2026, updated 12 August 2026)
  2. Amazon Bedrock: cross-Region inference: geographic versus global inference profiles, data residency row, SCP requirement, CloudTrail inferenceRegion field
  3. Google Cloud: generative AI data residency: data at rest versus ML processing, endpoint choice decides processing location, EU multi-region endpoint (read through a search-result summary, because the full page did not load)
  4. Mistral help centre: where do you store my data: EU hosting by default, US endpoint optional, regional endpoints api.eu.mistral.ai and api.us.mistral.ai, temporary transfers per sub-processor list (read through a search-result summary)
  5. EUR-Lex: Commission Implementing Decision (EU) 2021/914: standard contractual clauses for transfers to third countries, decision of 4 June 2021, application to new transfers from 27 September 2021 (dates read through search-result summaries of law-firm commentary; the EUR-Lex page itself did not render)
  6. Swfte trust page: Swfte customer data hosted in AWS eu-west-1 (Ireland) today; other locations agreed per dedicated deployment

Topics

  • EU
  • data residency
  • hosted APIs
  • self-hosting
  • transfers
  • sub-processors

Machine-readable copies: this guide as markdown, index of all guides (JSON). Canonical address: https://www.swfte.com/how-to-deploy-an-llm-in-the-eu.

Deploy a model with Swfte Connect

One gateway, every provider, per-token cost visibility. Swap models without touching your code.