Software Defined infrastructure refers to the abstraction layer of infrastructure components in such a way that the manual interference in the overall lifecycle management is minimized. Hypervisors (abstracts compute), Software Defined Networking (abstracts Network), Software Defined Storage (abstracts Storage) etc. are examples of Software Defined Infrastructure elements.
Programmable Infrastructure refers to the ability to programmatically access and reconfigure infrastructure elements. It requires every component in the infrastructure API-enabled, so that any application, orchestrator or management/monitoring systems can have a programmatic access. REST API-enabled Infrastructure components and Open Compute are examples of making Infrastructure programmable.
Infrastructure as Code refers to the ability to define a service environment as a code snippet, which can be version controlled with the ability rollback to the earlier versions, ability to clone multiple instances of the environment, automatically update versions of infra and applications. Vagrant, Ansible, Docker, Chef, and Puppet are examples of implementing “Infrastructure as Code”.
To summarize, Software Defined Infrastructure with granular level of programmability enables Infrastructure as Code. Programmability and Abstraction are key pillars to implement Agility, while Infrastructure as Code simplifies the definition of a complete service environment that includes - provisioning, managing updates, rollback changes and costing the service as one unit.
The key steps to building an Agile Infrastructure are:
- Begin building or sourcing Applications that are Cloud-ready
- Implement Software Defined and Scale-out Infrastructure
- Ensure every component in the infrastructure is API enabled
- Standardize orchestration processes
- Implement Environment or Infrastructure as Code for all Services
- Implement DevOps automation using Infrastructure as Code for home-grown applications
- Implement a Service Broker with Self-service
Large organizations which have implemented heterogeneous systems over time find it extremely different to implement this change and make their infrastructure agile. It is because of the complexity of the infrastructure - variety of tools and interfaces, variety of skillsets, variety of processes – which have hardly got an upgrade or optimization for years. Such infrastructure has gotten into a "Technical Debt". Loosening the knots and simplifying it can be a herculean task and expensive. As most industry experts believe, organizations should take a two-way or bimodal approach to this transformation, i.e., while we sustain the operations of the current setup, we should develop a new infrastructure in parallel based on Software Defined Infrastructure principles, make the components programmable and implement templates/recipes for repetitive environment deployments.