placeholderAs mentioned in the Meadowlark Architecture, the Ed-Fi Alliance chose to develop Meadowlark on Amazon Web Services (AWS) simply because the development team needed to concentrate on one system while developing this proof-of-concept application. AWS was selected simply because they have the largest market share. However, the team stuck with a key principle: try to use only AWS managed services that have an analogous option on the other providers, which would make (relatively) easy to migrate from one platform to the other. This document reviews the services used and identifies the equivalent tools (or gaps) in Azure and in Google Cloud, with a bonus add-on of documenting equivalent services available on-premises.
Purpose | AWS Service | Azure | On-Premises | Additional Notes | |
---|---|---|---|---|---|
Load balancing and reverse proxy | API Gateway | NGiNX, among others | |||
Serverless Application | AWS Lambda | The Meadowloark application is written in Typescript using the Serverless package, making it theoretically easy to reuse these components with any platform's serverless functions. Could consider refactoring to OpenFaas or Fn for one system that is cloud-agnostic (runs in Kubernetes and Docker, respectively). | |||
Key-value data store and Change Data Capture | with | CosmosDB in Cassandra API mode with | see note below about change streams | with | The differences may be great enough that some tweaking of the storage model may be required. Switching to MongoDB may be a useful alternative, as it is available on all platforms:
Another option would be to switch to Cassandra for a single database platform available on all providers
|
Search engine | Amazon OpenSearch | Either ElasticSearch or OpenSearch can run on-premises |
Note |
---|
Google Firestore might not have a direct equivalent of Change Data Capture... at least, the searching for this does not turn up functionality that is clearly the same as with the other products. However, perhaps one of these techniques is capable of writing out to a stream: Extend... with Cloud Functions or onSnapshot. |