跳到正文
DEV Community· Denys Zaruin·· 3 小時前AI 評分51

AWS 遷移至 UpCloud:服務對應、架構變化與成本比較

Migrating from AWS to UpCloud: what moves, what changes, what it costs

AI 導讀

文章梳理企業由 AWS 遷移至 UpCloud 時的服務對應、架構調整及 2026 年成本差異。EC2、RDS、S3、EKS 等服務可對應至 UpCloud 方案,但 Lambda、SQS、DynamoDB 等 AWS 專有服務通常需要替換或改造。文章指出,UpCloud 方案包含儲存及對外數據傳輸,UKS 控制平面不另收費;AWS EKS 控制平面則每小時收費 $0.10,約每月 $73。

正文

Originally published on moveinfra.eu.

Migrating from AWS to UpCloud is straightforward for companies running standard web architectures built on virtual machines, Kubernetes, relational databases, and S3-compatible object storage. Most core compute, storage, and networking resources map directly between the two platforms, while proprietary AWS services like DynamoDB, SQS, or Lambda require replacing with open-source equivalents or container workloads. Companies making this move typically reduce their monthly cloud spend by eliminating outbound data transfer fees, avoiding Kubernetes control plane charges, and switching to predictable, bundled server pricing.

Key takeaways

  • Direct infrastructure mapping: EC2, RDS (PostgreSQL and MySQL), ElastiCache, S3, EKS, and Application Load Balancers all have direct managed equivalents on UpCloud.
  • True European jurisdiction: UpCloud is headquartered in Helsinki, Finland, operating under EU and Finnish law rather than US extraterritorial jurisdiction.
  • Predictable cost structure: UpCloud includes storage and outbound data transfer (under a Fair Transfer Policy) in its server plans, removing two of the most unpredictable items on an AWS bill.
  • Proprietary services need adjustment: Workloads relying heavily on AWS Lambda, SQS, or DynamoDB must be refactored to run on containers, self-managed queues, or standard databases before or during the move.
  • Egress fees for switching are regulated: Under the EU Data Act, cloud providers can charge no more than their actual cost for switching egress until January 12, 2027, when switching charges are banned altogether.

Why European companies move from AWS to UpCloud

For most 10-to-300-person European companies, AWS offers far more services than the engineering team actually uses. You pay a premium—both in monthly invoices and in cognitive load—for a catalog of over 200 services when your application only needs compute, a relational database, a Redis-compatible cache, and object storage.

Three practical reasons usually trigger a move to UpCloud:

  1. Cost predictability: AWS bills are composite. A single virtual machine involves separate charges for the EC2 instance, the EBS root volume, provisioned IOPS, public IPv4 addresses, NAT Gateway hourly fees,NAT Gateway data processing fees, and outbound internet traffic. UpCloud bundles CPU, memory, high-speed MaxIOPS block storage, and outbound data transfer into a single flat rate.
  2. Data sovereignty and compliance: UpCloud Ltd is a Finnish company. While AWS offers EU regions and an AWS European Sovereign Cloud that keeps data and operations inside the EU, Amazon remains a US parent corporation subject to the US CLOUD Act. For teams bound by strict customer contracts or regulations like DORA (Regulation (EU) 2022/2554), moving to an EU-owned provider simplifies compliance and risk assessments.
  3. Right-sized operational complexity: Managing AWS IAM policies, VPC route tables, and multi-layered security rules takes dedicated specialist time. UpCloud provides a cleaner API, native Terraform and OpenTofu providers, and straightforward private networking without losing production essentials.

Service mapping: what moves directly

If your stack is built on open standards or Linux primitives, migrating from AWS to UpCloud is mostly an infrastructure-as-code translation exercise.

AWS Service UpCloud Equivalent Migration Notes
EC2 Cloud Servers (Starter, Premium, Cloud Native) Rebuild via Terraform or Ansible; deploy existing Docker images or binaries.
EBS (gp3 / io2) MaxIOPS Block Storage Included in server plans or attached as extra volumes; no separate IOPS provisioning needed.
RDS (PostgreSQL, MySQL) Managed Databases (PostgreSQL, MySQL) Migrate using native logical replication (pglogical or MySQL binlog) for minimal cutover pause.
ElastiCache (Redis / Valkey) Managed Valkey Valkey is the open-source, drop-in successor to Redis. Standard Redis clients connect without code changes.
S3 Managed Object Storage S3-compatible API. Update endpoint URLs and credentials in your application config; sync data via rclone or AWS CLI.
EKS UpCloud Kubernetes Service (UKS) CNCF-certified Kubernetes. Manifests and Helm charts move directly; update storage classes and ingress annotations.
ALB / NLB Managed Load Balancer Supports HTTP/HTTPS and TCP balancing, TLS termination, and health checks.
VPC, Subnets, NAT Gateway SDN Private Networks & NAT Gateway Private Layer 2/3 networks between servers, databases, and Kubernetes clusters.
EFS File Storage (NFS) Shared network storage across multiple Cloud Servers.
OpenSearch Service Managed OpenSearch Direct managed equivalent for search and log analytics.

Compute and Block Storage

On AWS, you choose between dozens of instance families (t3, m6i, c7g) and configure EBS volumes separately. As of 2026, UpCloud organizes its general compute primarily around Starter plans (aimed at development, testing, and lighter workloads), Premium plans (built on AMD EPYC hardware with bundled MaxIOPS storage for production), and Cloud Native plans (designed for Kubernetes and container nodes where you size storage separately). UpCloud also offers dedicated GPU servers for machine learning workloads.

Managed Databases and Caches

AWS RDS for PostgreSQL and MySQL map directly to UpCloud Managed Databases. UpCloud handles automated backups, point-in-time recovery, minor version upgrades, and high-availability failover. For caching, AWS ElastiCache users move to UpCloud Managed Valkey. Because Valkey maintains wire-protocol compatibility with Redis, your application libraries (ioredis, redis-py, go-redis) work by simply changing the connection string.

Kubernetes (EKS to UKS)

Migrating from Amazon EKS to UpCloud Kubernetes Service (UKS) often removes significant glue code. EKS relies heavily on AWS-specific IAM Roles for Service Accounts (IRSA), the AWS Load Balancer Controller, and the EBS CSI driver. On UKS, the UpCloud Container Storage Interface (CSI) and Cloud Controller Manager are pre-configured, so creating a standard Kubernetes PersistentVolumeClaim or a Service of type LoadBalancer automatically provisions UpCloud block storage or a Managed Load Balancer.

What changes in your architecture

Not every part of an AWS account has a 1-to-1 button on UpCloud. When planning your migration, expect to adjust the following areas.

1. Identity and Access Management (IAM)

AWS uses IAM not just for human users, but as a service-to-service authentication fabric (for example, allowing an EC2 instance role to write to an S3 bucket without static keys). UpCloud supports sub-accounts, workspace permissions, API tokens, and S3 user access policies, but it does not replicate AWS's cross-service IAM role assumption.

  • What to change: Use S3 access keys stored in secret managers or Kubernetes Secrets for Object Storage access, and rely on private SDN networks and firewall rules to restrict database and cache traffic to authorized compute nodes.

2. Queues, Emails, and Serverless Functions

UpCloud focuses on core infrastructure (IaaS) and essential managed platforms (PaaS) rather than application-layer microservices. It does not offer native equivalents to AWS SQS, SNS, SES, or Lambda.

  • Serverless functions (Lambda): Most teams package their Node.js, Python, or Go functions as lightweight HTTP containers and deploy them onto their UKS cluster or a small Cloud Server, triggering them via standard cron jobs or webhooks.
  • Message queues (SQS/SNS): If you use queues for background jobs, you can move the queue workload onto your UpCloud Managed Valkey instance (using BullMQ, Sidekiq, or Celery) or run RabbitMQ / NATS on your Kubernetes cluster.
  • Transactional email (SES): Point your application to a dedicated European email provider (such as Scaleway Transactional Email or Mailjet) via standard SMTP or REST API.

3. Proprietary Databases and Warehouses

Workloads tied to Amazon DynamoDB, Aurora Serverless features, or Amazon Redshift cannot be lifted and shifted without code changes. If DynamoDB is used simply as a key-value store or session cache, it can often be replaced with PostgreSQL (using JSONB columns) or Valkey. If your entire application data model is built around single-table DynamoDB designs, you will need a dedicated refactoring project before moving.

4. DNS and CDN

UpCloud does not operate an authoritative DNS service equivalent to Route 53, though it is rolling out its own Content Delivery Network. Most engineering teams keep DNS on an independent provider (like Cloudflare or DNSimple) or another European provider. Keeping DNS independent of your compute provider is good operational practice anyway, as it makes traffic switching and multi-cloud rollbacks much easier.

What it costs: AWS vs. UpCloud in 2026

Cloud pricing changes frequently, so you should always verify current numbers on the official AWS and UpCloud pricing pages. However, comparing the pricing structures as of 2026 highlights why bills look so different on the two platforms.

Compute and Storage Pricing

On AWS (eu-central-1, Frankfurt), a standard production general-purpose instance like an m6i.xlarge (4 vCPUs, 16 GB RAM) costs approximately $180 to $190 per month on-demand, before adding EBS storage (roughly $0.09/GB-month for gp3) and public IPv4 fees (approximately $3.65/month per IP).

On UpCloud, as of 2026, compute is priced in flat tiers with storage included:

  • Starter plans (for dev/test and lighter workloads) start at approximately €3/month (1 vCPU, 1 GB RAM, 10 GB storage) and run up to €28/month for 4 vCPUs, 16 GB RAM, and 50 GB storage.
  • Premium plans (AMD EPYC production hardware with MaxIOPS storage) start at approximately €5/month. A production server with 4 CPU cores, 8 GB RAM, and 100 GB of MaxIOPS storage costs approximately €52/month, while 4 CPU cores, 16 GB RAM, and 150 GB of storage is approximately €92/month (excluding VAT).

The Hidden Multipliers: Egress and Control Planes

Where European companies usually see the biggest savings is not raw CPU cost, but the elimination of AWS overhead fees:

  • Data egress (outbound traffic): AWS charges roughly $0.09 per GB for data transferred out to the internet after the first 100 GB, plus cross-AZ transfer fees ($0.01/GB in each direction) when instances talk to databases or load balancers in different Availability Zones. UpCloud includes zero-cost egress across its plans under a generous Fair Transfer Policy, and private SDN traffic between your servers within a data center is free.
  • Kubernetes control plane: AWS charges $0.10 per hour (approximately $73/month) per EKS cluster just for the control plane—if you run separate dev, staging, and production clusters, that is over $215/month before booting a single worker node. UpCloud includes the UKS control plane at no additional cost as part of its "UpCloud Essentials" offering; you only pay for the worker nodes, load balancers, and storage you attach.
  • One-time migration egress fees: Historically, AWS charged steep data transfer fees when copying terabytes of S3 data and database snapshots out to another provider. Under Article 29 of the EU Data Act (Regulation (EU) 2023/2854), cloud providers may charge no more than their actual incurred cost for data egress when a customer is switching providers until January 12, 2027. Starting January 12, 2027, switching charges—including data egress fees for switching—are completely banned across the EU.

Pre-migration checklist: how to execute the move

A disciplined migration avoids "big bang" rewrites. Build the new environment alongside the old one, synchronize the data, and switch traffic only when both environments match.

  1. Audit your AWS bill and state: Export your last three AWS bills and your Terraform state. Flag any proprietary services (SQS, Lambda, SES) and decide how you will replace them before touching production.
  2. Choose your UpCloud region: Select a European data center close to your users—such as Frankfurt (de-fra1), Amsterdam (nl-ams1), Helsinki (fi-hel1 / fi-hel2), Madrid (es-mad1), Warsaw (pl-waw1), Stockholm (se-sto1), Copenhagen, or Oslo.
  3. Rebuild infrastructure as code: Write new Terraform or OpenTofu configurations using the official UpCloudLtd/upcloud provider to provision SDN private networks, firewall rules, UKS clusters or Cloud Servers, and Managed Databases.
  4. Update CI/CD pipelines: Duplicate your GitHub Actions or GitLab CI deployment jobs so your team can deploy the exact same application build to both AWS and UpCloud simultaneously.
  5. Sync Object Storage: Use rclone or S3 migration tooling to copy objects from AWS S3 to UpCloud Managed Object Storage. Run periodic delta syncs with checksum verification to capture newly uploaded files.
  6. Set up live database replication: Configure logical replication from AWS RDS to UpCloud Managed Databases. This allows your UpCloud database to stay within seconds of your live AWS production database without taking your app offline.
  7. Lower DNS TTLs: At least 48 hours before cutover, reduce the Time-To-Live (TTL) on your DNS records to 60 seconds.
  8. Cut over with a short write pause: During a low-traffic window, put the AWS application into maintenance (read-only) mode, verify that database replication lag is zero, run a final object storage delta sync, promote the UpCloud database to primary, and update your DNS records to point to your UpCloud Load Balancer.
  9. Keep a rollback window: Do not delete your AWS environment on day one. Keep reverse replication or snapshots running for two to four weeks until your team is confident in the new setup, then decommission the AWS resources.

Frequently asked questions

Does UpCloud support multi-AZ deployments like AWS?

UpCloud approaches availability differently than AWS. Instead of splitting every city into three separate Availability Zones and charging for cross-AZ traffic, UpCloud builds high redundancy directly into each data center (including triple-replicated MaxIOPS storage over InfiniBand and redundant networking) backed by a 99.99% uptime SLA. For Managed Databases and Managed Load Balancers, you can select multi-node High Availability plans that automatically handle node failures. For disaster recovery across physical locations, you can replicate across UpCloud's multiple European data centers.

Do we need to rewrite our applications to move from S3 to UpCloud Object Storage?

No. UpCloud Managed Object Storage is S3-compatible. You keep using the official AWS SDKs (@aws-sdk/client-s3, boto3, etc.) in your application code. You only need to change the endpoint configuration parameter to point to your UpCloud Object Storage URL and update your access key and secret key.

How long does a typical AWS to UpCloud migration take?

For a company with 10 to 300 employees running a standard web stack (VMs or Kubernetes, PostgreSQL/MySQL, Redis, and S3), the end-to-end process typically takes between two and four weeks. Most of that calendar time is spent testing the staging environment, updating CI/CD pipelines, and letting large initial data transfers complete in the background. The actual production cutover pause usually takes between 5 and 30 minutes.

What happens to our AWS Reserved Instances or Savings Plans?

If you have active 1-year or 3-year AWS Savings Plans or Reserved Instances, you remain financially committed to those hourly payments until the term expires (though some standard EC2 Reserved Instances can be listed on the AWS RI Marketplace). Before migrating, check the expiration dates in AWS Cost Explorer. Even with an active commitment, some companies move part of their workload early to eliminate high AWS NAT Gateway and data egress charges.

Sources


Drafted with AI assistance and fact-checked by the MoveInfra team. The original, kept up to date, is at moveinfra.eu. Free tools for pricing a move to an EU cloud: moveinfra.eu/tools.

來源:DEV Community · dev.to