Practical tools for system, network, security, and operations administrators.

CLD-C0109 · Infrastructure as Code

Terraform vs CloudFormation vs Bicep vs Pulumi

Compare Terraform, CloudFormation, Bicep, and Pulumi as a note. A generated program is a draft you do not apply.

Updated 25 October 2026 · Comparison

This is an original planning guide. It is not a vendor manual, an official standard, or legal advice. Example addresses use documentation ranges. Review every command before you paste it.

What this hour is for

Terraform vs CloudFormation vs Bicep vs Pulumi can draft a Pulumi program or a CDK construct. Review every name. Do not put a secret in the program. Do not apply during the reading. The comparison is not an order to rewrite a stack you have not read.

Write the account, project, or repository you administer, the name of this change, and the time. A second change waits until this line has been read back.

The browser tool drafts text or reads a paste you already hold. It does not log in, it does not scan, and it does not apply.

192.0.2.10/24, gateway 192.0.2.1, 198.51.100.0/24, 203.0.113.0/24, and 2001:db8::/32 are documentation. example.com is a documentation name. A sample password is replaced.

The change you can finish

Apply nothing while you are writing the note. When the lab window opens, it is one change on the account named in the ticket. Read the draft, then the account, then decide.

Rollback is the previous file, the previous plan, or the lab resource you can delete because it was only a lab.

  1. Write the one tool the ticket uses today.
  2. Write why another tool is only a candidate.
  3. Read any generated program.
  4. Remove secrets.
  5. Do not apply.
  6. Stop.

Mistakes that outlive the statement

Terraform vs CloudFormation vs Bicep vs Pulumi goes wrong in a small set of ways. The list is here so the ticket can forbid them before the window.

Decisions to write down

One decision for Terraform vs CloudFormation vs Bicep vs Pulumi: The comparison is a note. Nothing is applied. No secret is in the program. One candidate is enough. And a migration waits for its own page.

Checks before you call it done

Confirm this before you call the change done: The current tool is written. Nothing was applied. No secret is in the note. The candidate is labelled a candidate. And a second person can say what was not rewritten. If one of those fails, stop.

# Tool comparison. Do not apply a generated program.
# Do not put a secret in the source.

Before you leave the account

Terraform vs CloudFormation vs Bicep vs Pulumi ends when the account in the note is the account in the ticket. If it is not, stop.

The draft stays a draft until a person has read the names in it. A generator does not log in, does not apply, and does not scan.

192.0.2.10/24, gateway 192.0.2.1, 198.51.100.0/24, 203.0.113.0/24, and 2001:db8::/32 are documentation. example.com is a documentation name. A sample password is replaced. It is not a password you keep. 10.0.0.0/16 is a sample prefix, not a network you publish unless you already use it.

prompt-for-this is a reminder that a secret is missing. It is not an access key, a token, or a password you save. An Azure secret draft may contain a sample password. Replace it. Do not file it.

One change is the window. If two things move and the result is wrong, you will not know which one did it.

If the same step fails twice, stop for the day. Restore the copy you took first.

A second person reads the account and the change aloud. If they cannot find them in the ticket, the note is not done.

This page is a planning guide. It is not a vendor manual, not an official standard, not legal advice, and not an audit opinion. You do not apply it against an account you do not administer.

Tools for this guide

These tools run in the browser on this site. They do not log into your machines.

More in this cluster

The pillar for this page, and the next published pages filed with it.