/yc-solution-library-for-aws

YC & AWS Solution Library

Primary LanguageHCLApache License 2.0Apache-2.0

Yandex.Cloud Solution Library for AWS

This repository contains a number of building blocks that will help developers and DevOps engineers build hybrid solutions between clouds. We at Yandex Cloud tried to identify the most common tasks that developers encounter while architecting or developing solutions, described the best practices, and provided examples of automation using Terraform for building blocks. The repository contains descriptions of common scenarios and consists of the following modules:

  1. Automation for a VPN between Yandex.Cloud and AWS
  2. Example of database replication between managed PostgreSQL and RDS using logical replication
  3. Example of Kubernetes deployment between clouds and traffic routing using a global DNS
  4. Example of syncing Yandex Object Storage and AWS S3 using Lambda functions
  5. Guide for establishing multi cloud S3-compatible storage that distributes data between two clouds
  6. Example and automation for managing instances on Yandex.Cloud using AWS Systems Manager
  7. Guide for establishing a direct connection or private link between clouds
  8. Guide for writing an application on Yandex.Cloud that is compatible with AWS DynamoDB

We are always open to new ideas for adding blocks to the repository. If you think we missed something, please contact us and describe your scenario in the GitHub repository under Issues.

Why we did it

We’ve observed more and more customers using cloud technology for a wide variety of reasons. For example:

  1. A Russian company that wants to start working with customers outside Russia and increase the quality of their services by deploying additional services via other cloud providers. This might be a game studio where latency is important, an ecommerce website, or a number of other situations.
  2. Companies that want to start operating in Russia and increase the quality of their services or comply with the federal laws on private data.

To address these scenarios, we decided to implement best practices and automation techniques to help bootstrap development and deployment. Below you’ll find some common architecture patterns that can be developed using the integration block examples in this repository, among other things.

Website with independent deployment and global routing

This is an example of a website that works independently on both clouds to be closer to end users and compliant with local private data laws and regulations. Routing is established by a global DNS via Amazon Route 53, which can route users based on their location or latency.

Classic web-site diagram on multi-cloud

An example of setting up Route 53 between Yandex.Cloud and AWS can be found here

Website with dependent or centralized databases

This is a more advanced scenario that requires you to collect data in a centralized location for further analysis or analytics.

Web-site with centralized DB

Examples to help build this architecture:

Centralized data warehouse on AWS and app deployment on Yandex.Cloud

Another common scenario is creating a data lake on AWS. Your website or application can operate in different countries and regions and on different cloud providers, but you need to collect all the information from distributed locations in one place. Below is an example of how that can be done. Data without personalized attributes is created on the Yandex.Cloud side and written to object storage, which is located physically within the country. Object storage then triggers a Yandex function, which uploads the object to the centralized object storage on AWS.

Centralized Data-lake or DataWarehouse

Examples to help build this architecture:

Kubernetes applications on multi clouds

Kubernetes is an extremely popular technology for building apps. This scenario shows how you can build a distributed app based on Kubernetes. The state of the app in the database can be synced. You can also enhance this architecture using KubeFed or Istio to establish a federation of Kubernetes resources between clusters.

Distributed Kubernetes app

Examples to help build this architecture:

Centralized virtual machine fleet management

In some cases, apps can work completely independently and you don’t need to sync states or data between deployment sites. However, you still need to operate and manage these apps and virtual machines. Management tasks include:

  • Patching
  • Monitoring
  • Access control
  • Inventory management

Fleet management

Examples to help build this architecture:

Customer stories or examples