Best scalable infrastructure to install Open edX on AWS

Hello everyone!

I was doing some research about open EDX because there’s a cultural organization here in Brazil that wants to establish an open EDX countrywide and we are looking for the best infrastructure for that. This organization already uses AWS as their cloud provider and we want to keep it that way.
For what I have seen until now, the best way to deploy a scalable Open EDX would be to segragate the databases and having an autoscaling group for each service (xserver, commomcluster, xqueue, certificates, insights and analytics-api).
But I couldn’t find any step by step for this kind of configuration. Have anyone here made this before?
I also have some considerations about:
Using MongoDB - The only way to use mongo on AWS is having it installed on a EC2 instance, but that doesn’t allow me to use an multi-az. Would it be possible to use dynamoDB instead?
rabbitqn - AWS has SQS, could it be used instead?

If anyone could help me with this… I thank you all a lot!

you can check this link, it does not have precise steps for deployment but will give an insight of edx deployment.

1 Like

Nice, @jramnai!

I can provide the infrastructure, but how do I make those edxapp.yml, forum.yml, commoncluster.yml to install on the EC2?

That documentation is quite old and points to nonexistent files. Those YAML files are actually the Ansible playbooks you’ll need to run to deploy each service.

What you need is to run the playbook to deploy the services into a pristine VM and turn that into an image for your autoscaling group.

2 Likes

Thank you a lot, @viadanna! I’ll try to do it and tell you here if I’ve succeeded!

@jramnai and @viadanna,

I think it is far from the best way to do it, but now it works! My steps were:

  • Install Open EDX in a single instance
  • take mysql dump to a RDS and mongodb dump to a ec2
  • change the server endpoint in cms.auth.json and lms.auth.json

Now, I wonder how can I take rabbitmq to annother instance? Where do I change the endpoint?
And where EDX saves files, like coursecards? I could point to an S3 bucket, right?

You can make sure of Ansible extra variables to deploy Open edX already pointing to separate servers, but if it works it works :slight_smile:

You can find these settings in /edx/etc/lms.yml for the LMS. You’ll also find YAML config files for the other services there. Remember that these are the de-facto configuration files from here on, as the JSON ones have been deprecated and already removed in master. The settings you’ll be looking for are:

CELERY_BROKER_HOSTNAME: localhost
CELERY_BROKER_PASSWORD: celery
CELERY_BROKER_TRANSPORT: amqp
CELERY_BROKER_USER: celery
CELERY_BROKER_USE_SSL: false
CELERY_BROKER_VHOST: ''

That’s correct. You’ll find the settings related to this in the same files stated earlier, just grep it for AWS|S3.