Infrastructure as Code is managing infrastructure through code instead of manual actions in a console. Servers, networks, and databases are described in configuration files, stored in Git, and deployed automatically. Infrastructure becomes versioned and reproducible.
Declarative vs Imperative
Declarative — describe the desired state; the tool figures out how to reach it. Terraform, Pulumi
Imperative — describe the steps to reach the state. Ansible playbooks (partially)