Ansible vs Terraform āđāļāļāļĩ 2026: Infrastructure as Code āđāļĨāļ°āļāļģāļāļēāļĄāļŠāļąāļĄāļ āļēāļĐāļāđ DevOps
āđāļāļĢāļĩāļĒāļāđāļāļĩāļĒāļ Ansible vs Terraform āđāļāļāļĩ 2026: configuration management vs provisioning, āđāļĄāļ·āđāļāđāļŦāļĢāđāļāļ§āļĢāđāļāđāđāļāļĢāļ·āđāļāļāļĄāļ·āļāđāļ, OpenTofu, āđāļĨāļ°āļāļēāļĢāđāļāļĢāļĩāļĒāļĄāļāļąāļ§āļŠāļąāļĄāļ āļēāļĐāļāđ DevOps

Ansible vs Terraform āđāļāđāļāļŦāļāļķāđāļāđāļāļāļģāļāļēāļĄāđāļāļĢāļĩāļĒāļāđāļāļĩāļĒāļāļāļĩāđāļāļāļāđāļāļĒāļāļĩāđāļŠāļļāļāđāļāļāļēāļĢāļŠāļąāļĄāļ āļēāļĐāļāđ DevOps āđāļāđāļāļēāļĢāļāļąāđāļāļāļģāļāļēāļĄāđāļāļāļāļĩāđāđāļāļāļāđāđāļāļĒāđāļŦāđāđāļŦāđāļāļāļ§āļēāļĄāđāļāđāļēāđāļāļāļīāļ: āđāļāļĢāļ·āđāļāļāļĄāļ·āļāļāļąāđāļāļŠāļāļāđāļāđāļāļąāļāļŦāļēāļāļĩāđāđāļāļāļāđāļēāļāļāļąāļ Ansible 2.20 āļāļąāļāļāļēāļĢ configuration management āđāļĨāļ°āļāļēāļĢ deploy āđāļāļāļāļĨāļīāđāļāļāļąāļ āđāļāļāļāļ°āļāļĩāđ Terraform 1.15 provision āļāļĢāļąāļāļĒāļēāļāļĢāđāļāļĢāļāļŠāļĢāđāļēāļāļāļ·āđāļāļāļēāļ āļāļēāļĢāđāļāđāļēāđāļāļ§āđāļēāđāļāđāļĨāļ°āļāļąāļ§āđāļāđāļāđāļĄāļ·āđāļāđāļŦāļĢāđ āļāļĢāļāđāļŦāļāļāļĩāđāļāļąāļāļāđāļāļāļāļąāļ āđāļĨāļ°āļāļ§āļāļĄāļąāļāđāļŠāļĢāļīāļĄāļāļąāļāļāļĒāđāļēāļāđāļĢ āļāļ·āļāļŠāļīāđāļāļāļĩāđāđāļĒāļāļ§āļīāļĻāļ§āļāļĢ DevOps āļĢāļ°āļāļąāļ senior āļāļāļāļāļēāļāļāļđāđāļāļĩāđāļĒāļąāļāļāļāđāļĢāļĩāļĒāļāļĢāļđāđāļāļ·āđāļāļāļēāļāļāļĒāļđāđ
Terraform āļāļąāļāļāļēāļĢ state āļāļāļāđāļāļĢāļāļŠāļĢāđāļēāļāļāļ·āđāļāļāļēāļāđāļāļ declarative (VM, āđāļāļĢāļ·āļāļāđāļēāļĒ, āļāļēāļāļāđāļāļĄāļđāļĨ) Ansible āļāļģāļŦāļāļāļāđāļēāļŠāļīāđāļāļāļĩāđāļĢāļąāļāļāļāđāļāļĢāļāļŠāļĢāđāļēāļāļāļ·āđāļāļāļēāļāļāļąāđāļāđāļāļ procedural (packages, services, files) āļŠāļ āļēāļāđāļ§āļāļĨāđāļāļĄ production āļŠāđāļ§āļāđāļŦāļāđāđāļāđāļāļąāđāļāļŠāļāļāļāļĒāđāļēāļ
Declarative vs Procedural: āļāļ§āļēāļĄāđāļāļāļāđāļēāļāļāļ·āđāļāļāļēāļ
Terraform āđāļāđāļ§āļīāļāļĩāļāļēāļĢāđāļāļ declarative āđāļāļĨāđāļāļāļāļāļīāļāļāļāļīāļāļēāļĒ state āļāļĨāļēāļĒāļāļēāļāļāļĩāđāļāđāļāļāļāļēāļĢ āđāļĨāļ° Terraform āļāļģāļāļ§āļāļāļēāļĢāđāļāļĨāļĩāđāļĒāļāđāļāļĨāļāļāļĩāđāļāļģāđāļāđāļāđāļāļ·āđāļāđāļāļāļķāļāļāļļāļāļāļąāđāļ āļ§āļīāļāļĩāļāļĩāđāļāļģāļāļēāļāđāļāđāļāļĩāļŠāļģāļŦāļĢāļąāļāđāļāļĢāļāļŠāļĢāđāļēāļāļāļ·āđāļāļāļēāļāļāļĩāđāļāđāļāļāļŠāļĢāđāļēāļ āđāļāđāđāļ āļŦāļĢāļ·āļāļĨāļāđāļāđāļāļŦāļāđāļ§āļĒāđāļāļĩāļĒāļ§
# main.tf
resource "aws_instance" "web" {
ami = "ami-0c55b159cbfafe1f0"
instance_type = "t3.medium"
tags = {
Name = "web-server"
Environment = "production"
}
}
resource "aws_security_group" "web" {
name = "web-sg"
description = "Allow HTTP and HTTPS"
ingress {
from_port = 443
to_port = 443
protocol = "tcp"
cidr_blocks = ["0.0.0.0/0"]
}
}āļāļēāļĢāļĢāļąāļ terraform apply āļāļ°āļŠāļĢāđāļēāļāļāļĢāļąāļāļĒāļēāļāļĢāļāļąāđāļāļŠāļāļāļāđāļēāļĒāļąāļāđāļĄāđāļĄāļĩ āļŦāļĢāļ·āļāļāļąāļāđāļāļāđāļŦāđāļāļĢāļāļāļąāļāļāļāļāļāļīāļ āļāļēāļĢāļĢāļąāļāļāļĩāļāļāļĢāļąāđāļāđāļāļĒāđāļĄāđāļĄāļĩāļāļēāļĢāđāļāļĨāļĩāđāļĒāļāđāļāļĨāļāļāļ°āđāļĄāđāļĄāļĩāļāļēāļĢāļāļģāđāļāļīāļāļāļēāļĢāđāļāđ: Terraform āđāļāļĢāļĩāļĒāļāđāļāļĩāļĒāļāļāļāļāļāļīāļāļāļąāļ state file āđāļĨāļ°āđāļĄāđāļāļāļŠāļīāđāļāļāļĩāđāļāđāļāļāļāļģ
Ansible āđāļāđāļ§āļīāļāļĩāļāļēāļĢāđāļāļ procedural āđāļāļĒ tasks āļāļđāļāļĢāļąāļāļāļēāļĄāļĨāļģāļāļąāļ āđāļĄāđāļ§āđāļē modules āļāļāļ Ansible āļĄāļąāļāļāļ°āđāļāđāļ idempotent (āļĢāļąāļāļŠāļāļāļāļĢāļąāđāļāđāļāđāļāļĨāđāļŦāļĄāļ·āļāļāļāļąāļ) āđāļāđ playbook āđāļāļāļāļāļīāļāļēāļĒāļĨāļģāļāļąāļāļāļāļāļāļēāļĢāļāļĢāļ°āļāļģāļĄāļēāļāļāļ§āđāļē state āļāļĨāļēāļĒāļāļēāļ
# webserver.yml
- name: Configure web server
hosts: webservers
become: true
tasks:
- name: Install nginx
ansible.builtin.apt:
name: nginx
state: present
update_cache: true
- name: Copy nginx configuration
ansible.builtin.template:
src: nginx.conf.j2
dest: /etc/nginx/nginx.conf
notify: Restart nginx
- name: Ensure nginx is running
ansible.builtin.service:
name: nginx
state: started
enabled: true
handlers:
- name: Restart nginx
ansible.builtin.service:
name: nginx
state: restartedāđāļāđāļĨāļ° task āļĢāļąāļāļāļēāļĄāļĨāļģāļāļąāļ āļĢāļđāļāđāļāļ notify/handler āđāļŦāđāļāļĪāļāļīāļāļĢāļĢāļĄāđāļāļ declarative āļāļēāļāļŠāđāļ§āļ: handler āļĢāļąāļāđāļāļĩāļĒāļāļāļĢāļąāđāļāđāļāļĩāļĒāļ§āļāļāļāļāđāļēāļĒāđāļāļĒāđāļĄāđāļāļģāļāļķāļāļ§āđāļēāļĄāļĩ tasks āļāļĩāđāļāļąāļ§āļāļĩāđ trigger āļĄāļąāļ
āļāļēāļĢāļāļąāļāļāļēāļĢ State: āļŦāļąāļ§āļāđāļāļŠāļąāļĄāļ āļēāļĐāļāđāļāļĩāđāļŠāļģāļāļąāļ
Terraform āļĢāļąāļāļĐāļē state file āļāļĩāđ map āļāļāļāļāļīāļāļāļąāļāļāļĢāļąāļāļĒāļēāļāļĢāļāļĢāļīāļ state āļāļĩāđāļāļīāļāļāļēāļĄ resource ID, dependencies āđāļĨāļ° metadata āļŦāļēāļāđāļĄāđāļĄāļĩ Terraform āđāļĄāđāļŠāļēāļĄāļēāļĢāļāļĢāļ°āļāļļāđāļāđāļ§āđāļēāļĄāļĩāļāļ°āđāļĢāļāļĒāļđāđāļŦāļĢāļ·āļāļāļ°āđāļĢāļāđāļāļāđāļāļĨāļĩāđāļĒāļ
| āļāđāļēāļ | Terraform | Ansible |
|---|---|---|
| āļāļēāļĢāļāļąāļāđāļāđāļ state | āļāļģāđāļāđāļ (āđāļāļĨāđ local āļŦāļĢāļ·āļ remote backend) | āđāļĄāđāļĄāļĩāđāļāļĒ default |
| āļāļēāļĢāļāļĢāļ§āļāļāļąāļ drift | Built-in āļāđāļēāļ terraform plan | āļāđāļāļāļāļĢāļ§āļāļŠāļāļāļāļĒāđāļēāļāļāļąāļāđāļāļ |
| āļāļēāļĢāļāļīāļāļāļēāļĄāļāļĢāļąāļāļĒāļēāļāļĢ | āļāļąāļāđāļāļĄāļąāļāļīāļāđāļēāļ state | āļāđāļēāļāļāļīāļāļāļēāļ inventory |
| Rollback | Destroy āđāļĨāļ° recreate āļāļēāļ state | āđāļĄāđāļĄāļĩ rollback āđāļāļ native |
Ansible āđāļĄāđāļĄāļĩ state file āļāļĩāđāđāļāļĩāļĒāļāđāļāđāļē āļĄāļąāļāđāļāļ·āđāļāļĄāļāđāļāļāļąāļāļĢāļ°āļāļāđāļāđāļēāļŦāļĄāļēāļĒāđāļĨāļ°āļĢāļąāļ tasks āđāļāļĒāļāļēāļĻāļąāļĒ state āļāļąāļāļāļļāļāļąāļāļāļāļāļĢāļ°āļāļāđāļĨāļ° idempotency āļāļāļ module āļŠāļīāđāļāļāļĩāđāļāļģāđāļŦāđ Ansible āđāļĢāļīāđāļĄāļāđāļāļāđāļēāļĒāļāļ§āđāļēāđāļāđāļĒāļēāļāļāļ§āđāļēāđāļāļāļēāļĢāļāļīāļāļāļēāļĄāļāļēāļĢāđāļāļĨāļĩāđāļĒāļāđāļāļĨāļāļāļēāļĄāđāļ§āļĨāļē
āļāļģāļāļēāļĄāļŠāļąāļĄāļ āļēāļĐāļāđāļāļąāđāļ§āđāļāļāļēāļĄāđāļāļĩāđāļĒāļ§āļāļąāļāļāļ§āļēāļĄāļāļĨāļāļāļ āļąāļĒāļāļāļ state file State āļāļāļ Terraform āļāļēāļāļĄāļĩāļāđāļāļĄāļđāļĨāļāļĩāđāļĨāļ°āđāļāļĩāļĒāļāļāđāļāļ: āļĢāļŦāļąāļŠāļāđāļēāļāļāļēāļāļāđāļāļĄāļđāļĨ, API keys, resource identifiers āļāļēāļĢ deploy āđāļ production āļāļ°āļāļąāļāđāļāđāļ state āđāļāļ remote (S3, Azure Blob, Terraform Cloud) āļāļĢāđāļāļĄāļāļēāļĢāđāļāđāļēāļĢāļŦāļąāļŠāđāļĨāļ°āļāļēāļĢāļāļ§āļāļāļļāļĄāļāļēāļĢāđāļāđāļēāļāļķāļ
# backend.tf
terraform {
backend "s3" {
bucket = "company-terraform-state"
key = "prod/infrastructure.tfstate"
region = "us-east-1"
encrypt = true
dynamodb_table = "terraform-locks"
}
}āļāļēāļĢāļēāļ DynamoDB āđāļŦāđ locking āļāđāļāļāļāļąāļāļ§āļīāļĻāļ§āļāļĢāļŠāļāļāļāļāđāļāđāđāļ state āļāļĢāđāļāļĄāļāļąāļ
āđāļĄāļ·āđāļāđāļŦāļĢāđāļāļ§āļĢāđāļāđāđāļāđāļĨāļ°āđāļāļĢāļ·āđāļāļāļĄāļ·āļ
Terraform āđāļāđāļāđāļāļāļēāļĢ provision āđāļāļĢāļāļŠāļĢāđāļēāļāļāļ·āđāļāļāļēāļ cloud: virtual machines, managed databases, load balancers, IAM roles, VPCs āļĄāļąāļāļāļąāļāļāļēāļĢ dependencies āļĢāļ°āļŦāļ§āđāļēāļāļāļĢāļąāļāļĒāļēāļāļĢāđāļāļĒāļāļąāļāđāļāļĄāļąāļāļīāđāļĨāļ°āļĢāļāļāļĢāļąāļ cloud providers āļŦāļĨāļąāļāļāļąāđāļāļŦāļĄāļāļāđāļēāļ syntax HCL āļāļĩāđāļŠāļāļāļāļĨāđāļāļāļāļąāļ
Ansible āđāļāđāļāđāļāļāļēāļĢāļāļģāļŦāļāļāļāđāļēāļĢāļ°āļāļāļāļĩāđāļĄāļĩāļāļĒāļđāđ: āļāļīāļāļāļąāđāļ packages, āļāļąāļāļāļēāļĢ users, deploy application code, orchestrate āļāļēāļĢ deploy āļŦāļĨāļēāļĒāļāļąāđāļāļāļāļ āļĄāļąāļāđāļāļ·āđāļāļĄāļāđāļāļāđāļēāļ SSH (āļŦāļĢāļ·āļ WinRM āļŠāļģāļŦāļĢāļąāļ Windows) āđāļāļĒāđāļĄāđāļāđāļāļāļĄāļĩ agents āļāļāđāļāļĢāļ·āđāļāļāđāļāđāļēāļŦāļĄāļēāļĒ
āđāļāļāļāļĩāđāļāļąāļāļāđāļāļāļāļąāļāļāļģāđāļŦāđāđāļāļīāļāļāļ§āļēāļĄāļŠāļąāļāļŠāļ āļāļąāđāļāļŠāļāļāļŠāļēāļĄāļēāļĢāļāļāļīāļāļāļąāđāļāļāļāļāļāđāđāļ§āļĢāđāļāļ VM āđāļāđ Terraform āļŠāļēāļĄāļēāļĢāļāđāļāđ provisioners āđāļāļ·āđāļāļĢāļąāļ scripts āļŦāļĨāļąāļāļāļēāļāļŠāļĢāđāļēāļāļāļĢāļąāļāļĒāļēāļāļĢ Ansible āļŠāļēāļĄāļēāļĢāļāļŠāļĢāđāļēāļāļāļĢāļąāļāļĒāļēāļāļĢ cloud āļāđāļēāļ modules āđāļāđāļ amazon.aws.ec2_instance āđāļāđāļāļēāļĢāđāļāđāđāļāđāļĨāļ°āđāļāļĢāļ·āđāļāļāļĄāļ·āļāļāļāļāđāļŦāļāļ·āļāļāļēāļāļāļļāļāđāļāđāļāļāļāļāļĄāļąāļāļāļģāđāļāļŠāļđāđāļāļąāļāļŦāļēāļāļēāļĢāļāļģāļĢāļļāļāļĢāļąāļāļĐāļē
āļāļēāļĢāđāļāđ provisioners āļāļāļ Terraform āļāļĒāđāļēāļāļāļ§āđāļēāļāļāļ§āļēāļāļŠāļģāļŦāļĢāļąāļ configuration management āļŠāļĢāđāļēāļāđāļāļĢāļāļŠāļĢāđāļēāļāļāļ·āđāļāļāļēāļāļāļĩāđāđāļāļĢāļēāļ°āļāļēāļ Provisioners āļĢāļąāļāđāļāļāļēāļ°āļāļāļāļŠāļĢāđāļēāļāđāļāđāļēāļāļąāđāļ āđāļĄāđāđāļāđāđāļ applies āļāļĢāļąāđāļāļāđāļāđāļ āđāļāđ Terraform āļŠāļģāļŦāļĢāļąāļāđāļāļĢāļāļŠāļĢāđāļēāļāļāļ·āđāļāļāļēāļ āđāļĨāđāļ§āļŠāđāļāļāđāļāđāļŦāđ Ansible āļŠāļģāļŦāļĢāļąāļ configuration
Workflow āļĢāļ§āļĄāđāļ Production
āļāļāļāđāļāļĢāļŠāđāļ§āļāđāļŦāļāđāđāļāđāļāļąāđāļāļŠāļāļāđāļāļĢāļ·āđāļāļāļĄāļ·āļāļĢāđāļ§āļĄāļāļąāļ Terraform provision āđāļāļĢāļāļŠāļĢāđāļēāļāļāļ·āđāļāļāļēāļāđāļĨāļ° outputs āļĢāļēāļĒāļĨāļ°āđāļāļĩāļĒāļāļāļēāļĢāđāļāļ·āđāļāļĄāļāđāļ Ansible āđāļāđ outputs āđāļŦāļĨāđāļēāļāļąāđāļāđāļāļ·āđāļāļāļģāļŦāļāļāļāđāļēāļĢāļ°āļāļ
# outputs.tf
output "web_server_ips" {
value = aws_instance.web[*].private_ip
description = "Private IPs of web servers"
}
output "db_endpoint" {
value = aws_rds_instance.main.endpoint
description = "RDS endpoint for application config"
}Pipeline CI/CD āļĢāļąāļ Terraform āļāđāļāļ, capture outputs, āļŠāļĢāđāļēāļ Ansible inventory āđāļāļ dynamic, āđāļĨāđāļ§āļĢāļąāļ playbooks āļāļąāļāđāļāļĢāļāļŠāļĢāđāļēāļāļāļ·āđāļāļāļēāļāđāļŦāļĄāđ
# ansible/inventory/aws_ec2.yml
plugin: amazon.aws.aws_ec2
regions:
- us-east-1
filters:
tag:Environment: production
instance-state-name: running
hostnames:
- private-ip-address
groups:
webservers: "'web' in tags.Role"
databases: "'db' in tags.Role"Inventory āđāļāļ dynamic āļāļĩāđ query AWS āđāļāļĒāļāļĢāļ āļāļąāļāļāļĨāļļāđāļĄ instances āļāļēāļĄ tags āļāļāļāļāļ§āļāļĄāļąāļ āđāļĄāđāļāđāļāļāļāļąāļāļāļēāļĢ IP āļāđāļ§āļĒāļāļāđāļāļ
āļāļĢāđāļāļĄāļāļĩāđāļāļ°āļāļīāļāļīāļāļāļēāļĢāļŠāļąāļĄāļ āļēāļĐāļāđ DevOps āđāļĨāđāļ§āļŦāļĢāļ·āļāļĒāļąāļāļāļĢāļąāļ?
āļāļķāļāļāļāļāđāļ§āļĒāļāļąāļ§āļāļģāļĨāļāļāđāļāļāđāļāđāļāļāļ, flashcards āđāļĨāļ°āđāļāļāļāļāļŠāļāļāđāļāļāļāļīāļāļāļĢāļąāļ
OpenTofu: Fork āļāļĩāđāđāļāļĨāļĩāđāļĒāļāļ āļđāļĄāļīāļāļąāļĻāļāđ
HashiCorp āđāļāđāđāļāļĨāļĩāđāļĒāļāļŠāļąāļāļāļēāļāļāļļāļāļēāļāļāļāļ Terraform āđāļāđāļ Business Source License (BSL) āđāļāđāļāļ·āļāļāļŠāļīāļāļŦāļēāļāļĄ 2023 āļāļļāļĄāļāļāļāļāļāļŠāļāļāļāļāđāļ§āļĒāļāļēāļĢ fork Terraform 1.5 āđāļāđāļ OpenTofu āļāļķāđāļāļāļāļāļāļĩāđāļāļĒāļđāđāļ āļēāļĒāđāļāđ Linux Foundation
āļ āđāļāļ·āļāļāļŠāļīāļāļŦāļēāļāļĄ 2026 OpenTofu 1.11.6 āļĒāļąāļāļāļāđāļāđāļāļāļąāļ§āđāļāļāđāļāļ drop-in āļŠāļģāļŦāļĢāļąāļ workflow Terraform āļŠāđāļ§āļāđāļŦāļāđ syntax HCL āđāļāļĩāļĒāļ§āļāļąāļ, ecosystem āļāļāļ providers āđāļāļĩāļĒāļ§āļāļąāļ, āļĢāļđāļāđāļāļ state āđāļāļĩāļĒāļ§āļāļąāļ OpenTofu āđāļāđāđāļāļīāđāļĄāļāļĩāđāļāļāļĢāđāļāļĩāđāđāļĄāđāļĄāļĩāđāļ binary open-source āļāļāļ Terraform: āļāļēāļĢāđāļāđāļēāļĢāļŦāļąāļŠ state, provider for_each, āđāļĨāļ°āļāļēāļĢāļāļĢāļ°āđāļĄāļīāļāļāļąāļ§āđāļāļĢāđāļāļ early
āļŠāļģāļŦāļĢāļąāļāļāļēāļĢāđāļāļĢāļĩāļĒāļĄāļŠāļąāļĄāļ āļēāļĐāļāđ āđāļŦāđāđāļāđāļēāđāļāļāļ§āļēāļĄāđāļāļāļāđāļēāļāļāđāļēāļāļŠāļąāļāļāļēāļāļāļļāļāļēāļ BSL āļāļāļļāļāļēāļāļāļēāļĢāđāļāđāļāļēāļāļ āļēāļĒāđāļāđāļāđāļāļģāļāļąāļāļāļēāļĢāļŠāļĢāđāļēāļāļāļĨāļīāļāļ āļąāļāļāđāļāļđāđāđāļāđāļ āļāļāļāđāļāļĢāļāļĩāđāļāļąāļāļ§āļĨāđāļāļĩāđāļĒāļ§āļāļąāļ vendor lock-in āļŦāļĢāļ·āļāļĄāļĩāļāđāļāļāļģāļŦāļāļ compliance āđāļāļāļēāļ°āļāļēāļāđāļĨāļ·āļāļāļŠāļąāļāļāļēāļāļāļļāļāļēāļ MPL 2.0 āļāļāļ OpenTofu āļāļēāļĢāļāļĩāđ IBM āđāļāđāļēāļāļ·āđāļ HashiCorp āđāļāđāļāļ·āļāļāļāļąāļāļ§āļēāļāļĄ 2024 āđāļāļīāđāļĄāļāļąāļ§āđāļāļĢāļāļĩāļāļāļąāļ§āđāļāļāļēāļĢāļŠāļāļāļāļēāđāļĢāļ·āđāļāļāļāļ§āļēāļĄāļŠāļąāļĄāļāļąāļāļāđāļāļąāļ vendor
āļāļģāļāļēāļĄāļŠāļąāļĄāļ āļēāļĐāļāđ DevOps āļāļĩāđāļāļāļāđāļāļĒ
Q: Ansible āļŠāļēāļĄāļēāļĢāļāđāļāļāļāļĩāđ Terraform āđāļāđāļŦāļĢāļ·āļāđāļĄāđ?
āđāļĄāđāđāļāđāļāļĒāđāļēāļāļĄāļĩāļāļĢāļ°āļŠāļīāļāļāļīāļ āļēāļ Ansible āļŠāļēāļĄāļēāļĢāļāļŠāļĢāđāļēāļāļāļĢāļąāļāļĒāļēāļāļĢ cloud āđāļāđ āđāļāđāļāļēāļāļāļēāļĢāļāļąāļāļāļēāļĢ state āļāļēāļĢāļĢāļąāļ playbook āđāļāļĩāļĒāļ§āļāļąāļāļŠāļāļāļāļĢāļąāđāļāļāļēāļāļŠāļĢāđāļēāļāļāļĢāļąāļāļĒāļēāļāļĢāļāđāļģ State file āļāļāļ Terraform āļāļīāļāļāļēāļĄāļŠāļīāđāļāļāļĩāđāļĄāļĩāļāļĒāļđāđāđāļĨāļ°āļāļģāļāļ§āļāļāļēāļĢāđāļāļĨāļĩāđāļĒāļāđāļāļĨāļāļāļĩāđāļāđāļāļĒāļāļĩāđāļŠāļļāļ āđāļāđ Ansible āļŠāļģāļŦāļĢāļąāļāļŠāļīāđāļāļāļĩāđāļĄāļąāļāļāļģāđāļāđāļāļĩāļāļĩāđāļŠāļļāļ: configuration management
Q: āļāļ°āļāļąāļāļāļēāļĢ secrets āđāļ Terraform āļāļĒāđāļēāļāđāļĢ?
āļāļĒāđāļē commit secrets āđāļāļĒāļąāļ version control āđāļāđ environment variables, āļāļēāļĢāļĢāļ§āļĄ Vault, āļŦāļĢāļ·āļ secret managers āļāļāļ cloud provider āļāļģāđāļāļĢāļ·āđāļāļāļŦāļĄāļēāļĒāļāļąāļ§āđāļāļĢāļ§āđāļē sensitive āđāļāļ·āđāļāļāđāļāļāļāļąāļāđāļĄāđāđāļŦāđāļāļĢāļēāļāļāđāļ logs:
# variables.tf
variable "db_password" {
type = string
sensitive = true
description = "Database password from Vault or environment"
}Q: Idempotency āļāļāļ Ansible āļāļ·āļāļāļ°āđāļĢ?
āļāļēāļĢāļāļģāđāļāļīāļāļāļēāļĢāđāļāļ idempotent āđāļŦāđāļāļĨāļĨāļąāļāļāđāđāļŦāļĄāļ·āļāļāļāļąāļāđāļĄāđāļ§āđāļēāļāļ°āļĢāļąāļāļāļĢāļąāđāļāđāļāļĩāļĒāļ§āļŦāļĢāļ·āļāļŦāļĨāļēāļĒāļāļĢāļąāđāļ Module apt āļāļĩāđāļĄāļĩ state: present āļāļīāļāļāļąāđāļ package āļāđāļēāđāļĄāđāļĄāļĩāđāļĨāļ°āđāļĄāđāļāļģāļāļ°āđāļĢāļāđāļēāļĄāļĩāļāļĒāļđāđāđāļĨāđāļ§ āļāļēāļĢāđāļāļĩāļĒāļ playbooks āļāļĩāđāđāļāđāļ idempotent āļāđāļāļāļāļąāļāļāļēāļĢāđāļāļĨāļĩāđāļĒāļāđāļāļĨāļāļāļĩāđāđāļĄāđāļāļąāđāļāđāļāđāļāļāļēāļĢāļĢāļąāļāļāļĢāļąāđāļāļāđāļāđāļ
Q: āļāļ°āļāļāļŠāļāļ infrastructure code āļāļĒāđāļēāļāđāļĢ?
Terraform: terraform validate āļāļĢāļ§āļāļŠāļāļ syntax, terraform plan āđāļŠāļāļāļāļąāļ§āļāļĒāđāļēāļāļāļēāļĢāđāļāļĨāļĩāđāļĒāļāđāļāļĨāļ, āđāļĨāļ°āđāļāļĢāļ·āđāļāļāļĄāļ·āļāļāļĒāđāļēāļ Terratest āļĢāļąāļ integration tests Ansible: ansible-lint āļāļĢāļ§āļāļāļąāļāļāļąāļāļŦāļē, āđāļŦāļĄāļ --check āļāļģ dry runs, āđāļĨāļ° Molecule āļāļāļŠāļāļ roles āļāļąāļ containers
āļŠāļģāļŦāļĢāļąāļāļāļēāļĢāđāļāļĢāļĩāļĒāļĄāļŠāļąāļĄāļ āļēāļĐāļāđ Terraform āļāļĩāđāļĨāļķāļāļāļ§āđāļē āļāļđ Terraform Interview Questions: Infrastructure as Code Complete Guide āļāļķāļāļāļāļīāļāļąāļāļīāļāļĢāļīāļāļāļąāļ modules Terraform Basics āđāļĨāļ° Ansible Configuration Management
āļāļ§āļēāļĄāđāļāđāļēāļāļąāļāđāļāđāļāļāļāđāļ§āļāļĢāđāļāļąāļāđāļĨāļ° Ecosystem
āđāļ§āļāļĢāđāļāļąāļāđāļŠāļāļĩāļĒāļĢāļāļąāļāļāļļāļāļąāļ āļ āđāļāļ·āļāļāļŠāļīāļāļŦāļēāļāļĄ 2026:
| āđāļāļĢāļ·āđāļāļāļĄāļ·āļ | āđāļ§āļāļĢāđāļāļąāļ | āļ§āļąāļāļāļĩāđāļāļāļ | āļāļĩāđāļāļāļĢāđāļŦāļĨāļąāļ |
|---|---|---|---|
| Ansible | 2.20.5 | āđāļĄāļĐāļēāļĒāļ 2026 | āļāļēāļĢāļāļąāļāļāļēāļĢ collection āļāļĩāđāļāļĢāļąāļāļāļĢāļļāļ |
| Terraform | 1.15.8 | āļāļĢāļāļāļēāļāļĄ 2026 | āļĢāļāļāļĢāļąāļ Windows ARM64, āļāļąāļāļāđāļāļąāļ convert |
| OpenTofu | 1.11.6 | āđāļĄāļĐāļēāļĒāļ 2026 | āļāļēāļĢāđāļāđāļēāļĢāļŦāļąāļŠ state, provider for_each |
āļŠāļāļēāļāļąāļāļĒāļāļĢāļĢāļĄ collection āļāļāļ Ansible āđāļĒāļāļāļąāļāļāđāļāļąāļāļŦāļĨāļąāļāļāļēāļ modules āđāļāļāļēāļ° provider Collection amazon.aws āļĢāļąāļāļāļąāļāđāļāļāļāļīāļŠāļĢāļ°āļāļēāļ Ansible core āļŠāļīāđāļāļāļĩāđāļŠāļģāļāļąāļāļŠāļģāļŦāļĢāļąāļāļāļēāļĢ pin version āđāļ pipelines CI/CD
āļāļēāļĢāļāļģāļŦāļāļāđāļ§āļāļĢāđāļāļąāļ provider āļāļāļ Terraform āļāļāļīāļāļąāļāļīāļāļēāļĄāļŦāļĨāļąāļāļāļēāļĢāđāļāļĩāļĒāļ§āļāļąāļ Lock files (terraform.lock.hcl) āļĢāļąāļāļāļĢāļ°āļāļąāļāđāļ§āļāļĢāđāļāļąāļ provider āļāļĩāđāļŠāļāļāļāļĨāđāļāļāļāļąāļāļĢāļ°āļŦāļ§āđāļēāļāļŠāļĄāļēāļāļīāļāļāļĩāļĄāđāļĨāļ°āļĢāļ°āļāļ CI
# versions.tf
terraform {
required_version = ">= 1.15.0"
required_providers {
aws = {
source = "hashicorp/aws"
version = "~> 5.60"
}
}
}āļāļēāļĢāđāļĨāļ·āļāļāļĢāļ°āļŦāļ§āđāļēāļāļŠāļāļāđāļāļĢāļ·āđāļāļāļĄāļ·āļ: āļāļĢāļāļāļāļēāļĢāļāļąāļāļŠāļīāļāđāļ
āļāļģāļāļēāļĄāđāļĄāđāļāđāļāļĒāđāļāđāļ Ansible āļŦāļĢāļ·āļ Terraform āļāļģāļāļēāļĄāļāļ·āļāđāļāļĢāļ·āđāļāļāļĄāļ·āļāđāļŦāļāļĢāļąāļāļāļīāļāļāļāļāļāļ§āļēāļĄāļĢāļąāļāļāļīāļāļāļāļāđāļŦāļ
| Use Case | āđāļāļĢāļ·āđāļāļāļĄāļ·āļāļāļĩāđāđāļāļ°āļāļģ |
|---|---|
| Provision VMs, databases, āđāļāļĢāļ·āļāļāđāļēāļĒ | Terraform |
| āļāļģāļŦāļāļāļāđāļē OS, āļāļīāļāļāļąāđāļ packages | Ansible |
| āļāļąāļāļāļēāļĢāļāļĢāļąāļāļĒāļēāļāļĢ Kubernetes | Terraform āļŦāļĢāļ·āļ kubectl/Helm |
| Deploy application code | Ansible āļŦāļĢāļ·āļ CI/CD native |
| āļŠāļĢāđāļēāļ IAM roles āđāļĨāļ° policies | Terraform |
| āļāļąāļāļāļēāļĢāļāļąāļāļāļĩ user āļāļ servers | Ansible |
| āļāļąāđāļāļāđāļēāđāļāļĢāļāļŠāļĢāđāļēāļāļāļ·āđāļāļāļēāļ monitoring | Terraform (āļŠāļĢāđāļēāļāļāļĢāļąāļāļĒāļēāļāļĢ) + Ansible (āļāļģāļŦāļāļāļāđāļē agents) |
āļŠāļģāļŦāļĢāļąāļāļ āļēāļāļĢāļ§āļĄāļāļāļāļāļēāļĢāļāļĩāđāđāļāļĢāļ·āđāļāļāļĄāļ·āļāđāļŦāļĨāđāļēāļāļĩāđāđāļāđāļēāļāļąāļ workflow āļāļēāļĢ deploy āļŠāļĄāļąāļĒāđāļŦāļĄāđ āļāļđ CI/CD Pipeline Interview Questions
āļŠāļīāđāļāļāļĩāđāļ§āļīāļĻāļ§āļāļĢ Senior āļāļ§āļĢāļĢāļđāđāđāļāļĩāđāļĒāļ§āļāļąāļ Ansible āđāļĨāļ° Terraform
- Terraform āļāļąāļāļāļēāļĢ state āđāļāļĢāļāļŠāļĢāđāļēāļāļāļ·āđāļāļāļēāļāđāļāļ declarative; Ansible āļāļģāļŦāļāļāļāđāļēāļĢāļ°āļāļāđāļāļ procedural āļāļēāļĢāđāļāđāļāļąāđāļāļŠāļāļāļĢāđāļ§āļĄāļāļąāļāļŠāļĢāđāļēāļāđāļāļĢāļāļŠāļĢāđāļēāļāļāļ·āđāļāļāļēāļāļāļĩāđāļāļģāļĢāļļāļāļĢāļąāļāļĐāļēāđāļāđ
- āļāļ§āļēāļĄāļāļĨāļāļāļ āļąāļĒāļāļāļ state file āļŠāļģāļāļąāļ āļāļąāļāđāļāđāļ state āļāļāļ Terraform āđāļāļ remote āļāļĢāđāļāļĄāđāļāļīāļāđāļāđāļāļēāļĢāđāļāđāļēāļĢāļŦāļąāļŠāđāļĨāļ° locking
- OpenTofu āļĄāļāļāļāļēāļāđāļĨāļ·āļāļāļāļĩāđāļĄāļĩāļŠāļąāļāļāļēāļāļāļļāļāļēāļ MPL āđāļāļ Terraform āļāļĢāđāļāļĄāļāļĩāđāļāļāļĢāđāđāļāļīāđāļĄāđāļāļīāļĄ āļāļēāļĢāļĒāđāļēāļĒāļāļĢāļāđāļāļāļĢāļāļĄāļēāļŠāļģāļŦāļĢāļąāļ workflows āļŠāđāļ§āļāđāļŦāļāđ
- Idempotency āđāļĄāđāđāļāđāđāļāļīāļāļāļķāđāļāļāļąāļāđāļāļĄāļąāļāļī āđāļāļĩāļĒāļ playbooks āļāļĩāđāđāļŦāđāļāļĨāļĨāļąāļāļāđāļŠāļāļāļāļĨāđāļāļāļāļąāļāđāļāļāļēāļĢāļĢāļąāļāļāđāļģ
- Inventory āđāļāļ dynamic āļāļģāļāļąāļāļāļēāļĢāļāļąāļāļāļēāļĢ host āļāđāļ§āļĒāļāļāđāļāļ Query cloud providers āđāļāļĒāļāļĢāļāļŠāļģāļŦāļĢāļąāļāđāļāļĢāļāļŠāļĢāđāļēāļāļāļ·āđāļāļāļēāļāļāļąāļāļāļļāļāļąāļ
- āļāļēāļĢ pin version āļāđāļāļāļāļąāļāļāļ§āļēāļĄāļāļĢāļ°āļŦāļĨāļēāļāđāļ Lock āđāļ§āļāļĢāđāļāļąāļ provider āđāļ Terraform; pin āđāļ§āļāļĢāđāļāļąāļ collection āđāļ Ansible
- āļāļēāļĢāļāļāļŠāļāļ infrastructure code āļāđāļāļāļāļēāļĢāļ§āļīāļāļĩāļāļēāļĢāļāļĩāđāđāļāļāļāđāļēāļ:
terraform planāļŠāļģāļŦāļĢāļąāļ preview āļāļēāļĢāđāļāļĨāļĩāđāļĒāļāđāļāļĨāļ, āđāļŦāļĄāļ--checkāļŠāļģāļŦāļĢāļąāļ Ansible dry runs, frameworks integration test āļŠāļģāļŦāļĢāļąāļāļāļąāđāļāļŠāļāļ
āđāļĢāļīāđāļĄāļāļķāļāļāđāļāļĄāđāļĨāļĒ!
āļāļāļŠāļāļāļāļ§āļēāļĄāļĢāļđāđāļāļāļāļāļļāļāļāđāļ§āļĒāļāļąāļ§āļāļģāļĨāļāļāļŠāļąāļĄāļ āļēāļĐāļāđāđāļĨāļ°āđāļāļāļāļāļŠāļāļāđāļāļāļāļīāļāļāļĢāļąāļ
āļāļļāļāļŦāļēāļāļąāđāļāđāļ DevOps āđāļāļāđāļŦāļĄ
āđāļāđāļāļāļĢāļīāļāļŦāļāļķāđāļāļāļīāđāļ āļāļąāđāļāļāļĩāđāļāđāļāļāļāļĒāļđāđāļŦāļāļķāđāļāļāļļāļ āļ§āļąāļāļĨāļ°āļŦāļāļķāđāļāļāļĢāļąāđāļ āļĨāļāļāđāļāđāđāļāļĒāđāļĄāđāļāđāļāļāļĄāļĩāļāļąāļāļāļĩ

āđāļāļĩāļĒāļāđāļāļĒ
Anthony Fillion-Mailletāļāļđāđāļāđāļāļāļąāđāļ SharpSkill
āđāļāđāļāļāļąāļāļāļąāļāļāļēāļāļđāļĨāļŠāđāļāļāļĄāļēāļāļ§āđāļē 10 āļāļĩ āļāļđāđāļĨ SharpSkill āđāļĨāļ°āļĢāļąāļāļāļīāļāļāļāļāļāļļāļāļŠāļīāđāļāļāļĩāđāđāļāļĒāđāļāļĢāđāļāļĩāđāļāļĩāđ
āļāļąāļāđāļāļāđāļĄāļ·āđāļ 22 āļŠāļīāļāļŦāļēāļāļĄ 2569
āđāļāļĢāđ
āļāļāļāļ§āļēāļĄāļāļĩāđāđāļāļĩāđāļĒāļ§āļāđāļāļ

āļāļēāļĢāļāļąāļāļāļēāļĢ Secrets āđāļ Kubernetes 2026: External Secrets, Vault āđāļĨāļ°āļāļģāļāļēāļĄāļŠāļąāļĄāļ āļēāļĐāļāđ
āļāļđāđāļĄāļ·āļāļāļĢāļāļāđāļ§āļāļŠāļģāļŦāļĢāļąāļāļāļēāļĢāļāļąāļāļāļēāļĢ secrets āđāļ Kubernetes āļāđāļ§āļĒ External Secrets Operator āđāļĨāļ° HashiCorp Vault āļĢāļ§āļĄāļāļķāļāļāļēāļĢāļāļģāļŦāļāļāļāđāļē production, āļāļēāļĢāļŦāļĄāļļāļāđāļ§āļĩāļĒāļāļāļąāļāđāļāļĄāļąāļāļī āđāļĨāļ°āļāļģāļāļēāļĄāļŠāļąāļĄāļ āļēāļĐāļāđ DevOps

Docker Compose āļāļĩ 2026: āđāļāļāļāļĨāļīāđāļāļāļąāļ Multi-Container, Networking āđāļĨāļ°āļāļģāļāļēāļĄāļŠāļąāļĄāļ āļēāļĐāļāđ DevOps
āļāļāđāļĢāļĩāļĒāļ Docker Compose āļŠāļģāļŦāļĢāļąāļāđāļāļāļāļĨāļīāđāļāļāļąāļ multi-container āļāļĢāđāļāļĄ networking, volumes āđāļĨāļ°āļāļēāļĢ deploy production āļĢāļ§āļĄāļāļķāļāļāļģāļāļēāļĄāļŠāļąāļĄāļ āļēāļĐāļāđ DevOps

Kubernetes Helm Charts 2026: āļāļđāđāļĄāļ·āļāļāļēāļĢ Packaging, Deployment āđāļĨāļ°āļāļģāļāļēāļĄāļŠāļąāļĄāļ āļēāļĐāļāđāļāļēāļ
āđāļĢāļĩāļĒāļāļĢāļđāđ Helm Charts āđāļ Kubernetes āļāļĒāđāļēāļāļĨāļķāļāļāļķāđāļāļāđāļ§āļĒāļāļāđāļĢāļĩāļĒāļāļāļāļīāļāļąāļāļīāđāļāļĩāđāļĒāļ§āļāļąāļāļāļēāļĢāļŠāļĢāđāļēāļ chart, templating, deployment āđāļĨāļ°āļāļģāļāļēāļĄāļŠāļąāļĄāļ āļēāļĐāļāđāļāļĩāđāļāļāļāđāļāļĒāļāļĩāđāļŠāļļāļ