Well-Architected Framework
Define your infrastructure systems
Before you can automate your infrastructure processes, you need to clearly define what infrastructure systems and tools you need. Using infrastructure as code (IaC) to define your systems creates a clear, version-controlled specification of your infrastructure that can be reviewed, tested, and automated.
Define infrastructure as code
Infrastructure as code lets you define your infrastructure using declarative configuration files, making it easier to understand your resource configurations and infrastructure topology. When you define your infrastructure as code, you can use the same engineering practices for your infrastructure as for application development, such as code review, automated deployment, and phased rollout.
Defining your infrastructure as code lets you version control your infrastructure changes to track changes over time. Infrastructure as code with version control enables seamless team collaboration through structured review and feedback processes, while ensuring consistency by deploying identical infrastructure across all environments. It also supports thorough testing to validate infrastructure changes before deployment, streamlines automation for deployment and ongoing management, and establishes clear audit trails that maintain detailed records of every infrastructure modification.
Use Terraform to define your infrastructure
Terraform uses providers to interact with cloud resources and services. Terraform creates and manages these resources by storing the state of your infrastructure. You define the desired state of your infrastructure using HashiCorp Configuration Language (HCL), and Terraform deploys and configures the resources to match your configuration.
The following Terraform maturity model provides a roadmap for you create consistent infrastructure, application configurations, and images.
- Adopt: Compose infrastructure as code in a Terraform file using HCL to provision resources from any infrastructure provider.
- Build: Infrastructure automation workflows to compose, collaborate, reuse, and provision infrastructure as code across IT operations and teams of developers.
- Standardize: Establish guardrails for security, compliance, and cost management through role-based access controls, policy, enforcement, and audit.
- Scale: Extend workflow automation to all teams in the organization with self-service infrastructure as code and integrate with VSC, ITSM, and CI/CD.
Use Terraform to define your CI/CD infrastructure, container orchestration platforms like Kubernetes or Nomad, database systems including database instances and storage, monitoring and observability systems, security systems including identity providers and access controls, and version control systems including repositories and access controls.
Next steps
In this section of Codify infrastructure and tools, you learned how to define your infrastructure systems using infrastructure as code to establish a foundation for automation. CDefine your infrastructure systems is part of the Define and automate processes pillar.
Refer to the following documents to learn more about defining specific infrastructure components:
- Create reusable infrastructure modules to standardize your infrastructure deployments
- Define CI/CD infrastructure to establish consistent CI/CD processes
- Define container orchestration to configure Kubernetes and Nomad platforms
- Topics in Automate your workflows
- CI/CD - Implement automation for infrastructure and applications
- Testing - Implement testing for infrastructure and applications
- Deployment - Implement deployment for infrastructure and applications
- Packaging - Package applications for deployment
To learn more about Terraform and infrastructure as code, you can check out the following resources:
- Terraform providers registry - Browse available Terraform providers
- Terraform configuration tutorials - Learn HCL by writing Terraform configuration