Options for teams that want a simple deploy workflow on AWS without managing Beanstalk environments.
Elastic Beanstalk is the AWS service many teams used to get their first app running without managing EC2 by hand, and for a single web app it still does that job. It gets harder when a second service shows up, or a worker that reads from SQS, because each one needs its own environment and its own IAM setup, and the only real way to test an .ebextensions change is to deploy it and watch the logs. This article covers what teams usually move to from there, mostly ECS Express Mode, Render, Ravion (formerly Flightcontrol) and Encore.
Reasons teams look for Elastic Beanstalk alternatives:
.ebextensions and platform hooks, which are hard to test before a deploy.Encore combines the application code and the AWS setup that Beanstalk keeps apart, because you define the services, the Postgres database and the Pub/Sub topic in your TypeScript or Go code, encore run starts them locally (Postgres runs in Docker), and a deploy creates the same resources in your own AWS account. You can also start with just the new worker on Encore and leave the Beanstalk app where it is.

import { api } from "encore.dev/api";
import { SQLDatabase } from "encore.dev/storage/sqldb";
import { Topic, Subscription } from "encore.dev/pubsub";
const db = new SQLDatabase("orders", { migrations: "./migrations" });
export const orderPlaced = new Topic<{ orderId: number }>("order-placed", {
deliveryGuarantee: "at-least-once",
});
export const place = api({ method: "POST", path: "/orders", expose: true },
async (req: { item: string }): Promise<{ id: number }> => {
const row = await db.queryRow<{ id: number }>`
INSERT INTO orders (item) VALUES (${req.item}) RETURNING id`;
await orderPlaced.publish({ orderId: row!.id });
return { id: row!.id };
});
// receipts/receipts.ts, a separate service that deploys and scales on its own.
new Subscription(orderPlaced, "send-receipt", {
handler: async (event) => { /* send the receipt */ },
});
encore run and become ECS services, RDS and SNS/SQS on AWS.Encore is not a drop-in host for an existing Beanstalk bundle, because APIs and infrastructure go through Encore's SDKs for TypeScript, Go, Python and Rust, so moving is a code change. Most teams start with one new service or worker while the rest stays on Beanstalk.
See how Encore provisions AWS infrastructure.
Run in your terminal to get started locally.
ECS Express Mode is the path AWS recommends for teams leaving App Runner, and it fits Beanstalk users who are moving to containers, because you give it a container image and two IAM roles and ECS creates a Fargate service, an Application Load Balancer with TLS, auto scaling and networking in your account.
Express Mode covers the compute and the load balancer, so databases, queues, buckets and cron schedules are still separate AWS resources that you create and connect, usually with Terraform or CDK, and local development is up to you. It only takes container images, so an app on a Beanstalk source-code platform needs a Dockerfile first.
Ravion, formerly Flightcontrol, connects to your AWS account and git repository and deploys web servers, workers, schedulers, Lambda functions, static sites, RDS databases and Redis from a dashboard or a flightcontrol.json file.
Ravion suits teams that want a Heroku-style experience in their own AWS account. Pricing is a per-plan fee with a per-service charge beyond the included count, on top of AWS costs, and there is no managed Pub/Sub, so AWS services it does not support are configured in your account and passed in as config. Local development is not part of the product.
AWS Lambda runs functions in response to HTTP requests through function URLs or API Gateway, as well as SQS messages, S3 events and EventBridge schedules, with per-request billing and no instances to manage.
import json
def handler(event, context):
for record in event["Records"]: # SQS batch
order = json.loads(record["body"])
send_receipt(order["order_id"])
Lambda fits event-driven and spiky workloads, but a long-running API from Beanstalk usually needs reshaping to deal with cold starts, the 15-minute maximum execution time and connection pooling to RDS. Each function, trigger and role is a separate resource to define, so most teams use SAM, CDK or Terraform alongside it.
Render runs web services, background workers, cron jobs, managed Postgres and Redis-compatible Key Value instances, with git-based deploys and Blueprint files that describe each environment.
Render is simpler than Beanstalk for small teams, but it runs on Render's infrastructure rather than in your AWS account, so an app that depends on RDS, S3, SQS or IAM-scoped access to other AWS services either reaches them over the public internet with long-lived credentials or keeps part of the system on AWS. Render has no managed message broker.
Moving off Beanstalk does not have to happen in one step, because a new service or queue worker can run on Encore in the same AWS account while the existing Beanstalk app keeps running until there is a reason to move it. The quickstart walks through a first service.
Encore if you want services, databases, Pub/Sub, and cron jobs defined in code and provisioned in your own AWS account, Amazon ECS Express Mode for AWS's own simplified container deploys, Ravion (formerly Flightcontrol) for a PaaS dashboard on top of your AWS account, AWS Lambda for event-driven or spiky workloads, and Render if leaving AWS for a managed platform is acceptable.
No. Elastic Beanstalk is still supported and added Cluster Mode in September 2026, which runs multiple applications on shared EKS-based infrastructure. AWS App Runner, by contrast, closed to new customers on April 30, 2026, and the AWS Copilot CLI reached end of support on June 12, 2026.
AWS recommends Amazon ECS Express Mode for new container deployments. You provide a container image and two IAM roles, and ECS provisions a Fargate service, an Application Load Balancer, auto scaling, and networking in your account.
Elastic Beanstalk manages a whole environment per application (in Standard Mode) and supports source-code platforms like Node.js and Python. ECS runs containers and gives you direct control over services, task definitions, and load balancers. For new container workloads, ECS Express Mode gives you a Beanstalk-like starting point on ECS.
In Standard Mode each Beanstalk environment is one application with its own instances and load balancer, so independently scaled services usually mean one environment per service. Cluster Mode runs multiple applications on shared infrastructure. Service-to-service calls, queues between services, and shared databases still have to be wired up separately.
Yes. Encore provisions ECS Fargate or EKS, RDS, SNS/SQS, S3, ElastiCache, and Secrets Manager in your AWS account, with a separately scoped IAM role per service. Existing RDS or Aurora databases, S3 buckets, and SNS topics can also be imported.
Deploy to your cloud on AWS and Google Cloud
without managing infrastructure
Encore lets developers and agents define application infrastructure directly in code, then automatically provisions it from local development to production in your AWS or GCP account.