Infrastructure Architecture

This guide explains the technologies, structure and good coding practices people should follow in new or existing Vector Digital Platforms projects to ease the development and maintainability. Every piece of documentation for this project should have both examples and common use cases in order to improve understanding.

This section offers a high level vision of the architecture defined in Vector Digital Platforms Cloud Infrastructure. Of course it isn’t the final version, and it will never be, so both the architecture and the entire document are liable to change.

Overview and references

IaC (Infrastructure as Code) is a relatively new concept that tries to write and execute code to define, deploy and update the infrastructure. It has meant an important change when dealing with the traditional operations because they are now treated like software. For this reason we should apply the same principles and good practices that we use when developing an application like DRY, isolation, versioning…​

The purpose of this architecture is to establish a model that comply with the good practices used in software development applying them to the deployment of an infrastructure in a cloud environment.

By applying these kinds of techniques we achieve great benefits:

  • Self-service: everyone with privileges can run their own deployments without any help. This way we can reduce the bottleneck produced by having a small group of people responsible for deploying manually and whose knowledge isn’t shared.

  • Speed and safety: the deployment will be an automated process, so it will be quicker and less error prone than before.

  • Documentation: the know-how is not only in the admins heads anymore but in a documentation everyone can access and read.

  • Version control: infrastructure code will be managed using a version control system like any other code so we have all its advantages like keeping a history of changing or reverting any past commit.

  • Validation: every new change in the code will pass through a pipeline with automatic tests, static code analysis tools and other ways to reduce the probability of errors appearing later in production.

  • Reuse: we are packaging the code to create reusable modules that can be applied as many times as we need without having to rewrite everything.

The term IaC is huge and there are lots of tools that can be used. Ad hoc scripts, configuration management tools (Chef, Puppet, Ansible), server templating tools (Docker or Packer) and server provisioning tools (Terraform, CloudFormation) are some of them.

For Vector Digital Platforms architecture definition we will be using the following:

  • Terraform: used to provisioning the infrastructure. It is responsible for crating the infrastructure resources like VPCs, servers or nodes and managing important properties like their autoscaling and security.

  • Ansible: used to configure the servers we already created with Terraform. This tool must be used only in those machines that host other software than our own applications, like Nexus, Gitlab or Sonar.