Code Deploy is your central deployment system for the hosting platform. Code Deploy allows applications to be easily deployed to your cloud infrastructure from a central location. This supports developers to focus on developing and building the software. Code Deploy makes it easy to use Auto Scaling and the principle of "immutable infrastructure". Code Deploy further provides an intelligent role concept. Roles are the server-side configurations for a specific application. Typical source code sources for Code Deploy are CI/CD (e.g. GitLab) or version control systems (e.g. Git). The transfer of source code can be done via S3 bucket or SFTP, among others.
What is special about deployment in cloud environments?
Cloud environments, as developed by root360, are no longer a static setup of servers, but code ("Infrastructure as Code"). This code determines how the individual components of the environment interact. The components are services such as databases, web servers, caches, firewalls or CDNs. These components are integrated via APIs and should remain interchangeable. Some services - e.g. web servers - should also be able to scale automatically. These requirements on flexible and scalable cloud hosting environments also require a rethinking of deployment processes, since there is no longer "the one" (web) server, but any number of virtualized (web) servers or instances (“multi-server”), which can also be created and disappear automatically.
Download and prepare the source code
Cache the source code in a central storage
Upload the source code to the application instances
Start specific installation routines and activate the new source code
Adding the completely installed instances to the load balancer
In auto scaling cloud hosting environments, either more or fewer instances are available as the load increases or decreases (for example, due to the amount of visitors). The deployment system must support this scaling so that new instances can be quickly provisioned with the correct application software version and instances that are no longer needed can be removed cleanly.
Support of common protocols
The application code needs to get to the instances, whether from a version control system like Git or SVN, via downloads via HTTP and FTP, a complete file copy via rsync, or from a continuous integration system like Jenkins. Ideally, a deployment system should be able to support these sources and more.
Customizable deployment processes
Every application has its own subtleties. Whether it involves the subsequent installation of modules, special configuration in the database or clearing certain caches: the deployment system must be able to support such (application-specific) adjustments.
Independence from external sources
A malfunction or failure of external systems (e.g. github, customer server) on which the application source code is stored must not affect the stability of the application and the scalability of the cloud environment. For this reason, the deployment must create a high degree of independence from third-party systems.
Stability of the process
In general, deployment processes must be highly stable, as they are essential to the stability of the cloud environment. It must be clear to the user how he triggers the process and what result they can expect.
High speed of deployment
Time is money - also in deployment. The faster the deployment system operates, the faster a new application version goes online or an additional web instance is added.
Source code security
Independent of whether deploying to the cloud or to conventional systems, a deployment system must ensure that no unauthorized access can occur when transferring and storing source code.