The cloud deployment process typically consists of two basic phases:
- Infrastructure deployment
- Product deployment
During the infrastructure deployment, the external environment in which the product runs is prepared. First, the underlying networks are created and configured properly, including all necessary routing options. Then, the virtual machines and their network interfaces are created and configured properly. Also, all of the firewall and other security rules are applied.
After the external environment is prepared and the virtual machines are deployed, the product installation can take place. First, the internal environment of the virtual machine is inspected and modified accordingly. This includes configuration of the operating system, internal firewall settings and installation of the tools necessary for the product deployment. After the environment is prepared, the product itself is installed and configured with respect to the internal and external environment (e.g. configuration of the IP addresses of other system components, assigning of the available ports, …).
Components of the deployment
In general, there are three necessary components of the cloud deployment. Each one of these should be interchangeable without affecting the other components:
- Infrastructure deployment configuration
- Product deployment configuration
- Product versioning
Infrastructure deployment configuration
Infrastructure deployment configuration describes everything necessary for the deployment of the environment. This approach is called infrastructure as a code and it allows defining all parameters of the infrastructure in machine-readable configuration files. These can be later reused, modified and versioned to keep track of the infrastructure modifications. It also allows
easier management of the infrastructure, as all configurations are exactly defined and automated.
Product deployment configuration
Product deployment configuration represents the necessary steps for the successful deployment of the product (or a particular component) to a single machine. This can be seen as an automated installation process, ran and controlled remotely by the deployment tools. It also consists of the product configuration, as it is usually necessary to interconnect several components of the product spread across the underlying network.
Product versioning defines the exact versions of all components of the product which are to be deployed (e.g. in form of a manifest file). It is important to separate the versions of the components from the rest of the deployment configurations, as the deployment process should not depend on the particular version of the product. Note here that it is, of course, possible that future versions of the product will require different installation steps or different infrastructure setup. This separation of versions from the configuration aims to provide transparency only within a subset of versions with similar properties (e.g. minor versions within a single major release or snapshot versions between several minor releases).