# Infrastructure as code: tools in this layer of The Stack

> If I can't provision it, it loses points. 4 tools, from Nicolas Dao's defaults to what he would never use (Cloudless Labs, Sydney).

- Web page: https://cloudlesslabs.com/stack/layers/iac/

## My default

- [Pulumi](https://cloudlesslabs.com/stack/pulumi/index.md), Infrastructure as code: Infrastructure as real code. And it can use any Terraform provider, so nearly everything is provisionable from one codebase.

## Use when it fits

- [GitHub Actions](https://cloudlesslabs.com/stack/github-actions/index.md), CI/CD: The pipeline I'd pick if a project needs one. Today I deploy with Pulumi directly.
- [Terraform / OpenTofu](https://cloudlesslabs.com/stack/terraform/index.md): Fine, and its providers power half of Pulumi's ecosystem. I prefer Pulumi.

## Never

- [AWS CloudFormation](https://cloudlesslabs.com/stack/aws-cloudformation/index.md): I hate it. Pulumi does the same job with real code. Instead: Pulumi: real code, an S3 backend, and every other vendor through Terraform providers.

## Related

- [Provisioning everything](https://cloudlesslabs.com/stack/use-cases/infra/index.md): a job that picks or avoids tools from this layer
- [An AWS foundation for a client](https://cloudlesslabs.com/stack/use-cases/aws-foundation/index.md): a job that picks or avoids tools from this layer
- [Moving on-premises systems to AWS](https://cloudlesslabs.com/stack/use-cases/migration/index.md): a job that picks or avoids tools from this layer
- [Every layer, use case and tool in one file](https://cloudlesslabs.com/stack/brief.md)
- [Map of every Markdown file on cloudlesslabs.com, with what each one answers](https://ask.cloudlesslabs.com)
