Setting up production server on AWS

Hey everyone,

I’m currently looking into setting up a Speckle server for the company i work for, to integrate Speckle in to the workflow of the designers. My expertise in devOps lies within AWS, and i was wondering if it was possible to host a speckle server through AWS. I’ve tried looking into the tutorials, but it explicitly states that you are not supposed to host the server on a VM - for good reasons of course.

The purpose of the server is to send 3D data from an internal design tool to Rhino/Grasshopper, where the Speckle act as a “middelman” and version control tool. This process could maybe also be improved, but im pretty new in the 3D design world.

My question would be if the speckle can be setup with AWS ECS or what the recommended structure for a production Speckle server ? Is it something that i can setup myself or do i need the paid plan setting up the server?

Thanks in advance, and please ask question if you need more details regarding the issue.

P.S If you have any suggestions for improvements please dont hesitate to write :slight_smile:

Hi @karlos

Thanks for your interest in setting up Speckle server on AWS. We’ve created Speckle server in a way that should be agnostic and deployable to any of the major cloud providers.

If you are running on AWS, we offer guides to deploy using Docker Compose or Helm Chart. You can either deploy Speckle server and all required services to a VM, such as those provided by AWS, or just deploy Speckle server and instead connect to AWS’ managed services (such as S3 or a postgres compatible database). We also provide a guide to deploying our Helm Chart on Kubernetes.

The Docker compose integration with AWS ECS was retired by AWS in November 2023, so deploying to AWS ECS may require more work than deploying with Docker Compose to EC2 or Helm Chart to AKS.

While we haven’t deployed to AWS ourselves, we do know that others have done this. I’d suggest searching our discussion forums for other users and posts. And if you do encounter any specific issues, please ask the community here.

Iain

1 Like

Our preferred solution for a production server is to deploy services with Kubernetes. This can specify the variety of resources required and point to associated AWS products. Using our open-source Helm charts with EKS (Amazon Elastic Kubernetes Service) may be an option.

If you are set on AWS ECS, this isn’t something we have documentation or extensive experience, but a modification from he Deploy to VM is not too much stretch other than we can’t support you 100%

To adapt the provided Docker Compose setup for AWS ECS, you could follow these general steps:

  • Push your Docker images (Speckle Server and any dependencies like PostgreSQL, Redis, etc.) to a container registry. Elastic Container Registry (ECR) say.
  • Create ECS Task Definitions for the Speckle Server and its dependencies. equivalent to the Docker Compose environment variables, CPU and memory allocations, and logging configurations.
  • Create an ECS Cluster; you can host your containers using AWS Fargate for a serverless compute engine or EC2 instances.
  • Define an ECS Service to run and maintain a specified number of instances of the Task Definition simultaneously in an ECS cluster. (If a container instance fails, the ECS service scheduler launches another instance of your Task Definition to replace it, maintaining the desired count of instances.)
    Stretch goals:
  • Configure an Application Load Balancer (ALB) to distribute incoming traffic across your Speckle Server containers. ECS integrates with ALB to provide dynamic port mapping and load balancing.
  • Service equivalences: for database and storage persistence, consider using AWS-managed services like RDS for PostgreSQL and ElastiCache for Redis. Fortunately (unlike Azure) S3-compatible object storage, AWS S3 is natively compatible and recommended.

This is probably inadequate as a guide and doesn’t cover IAMs or security groups

2 Likes