Jump into concepts and practice - no test required
or
Recommended
Test this pattern10 questions across easy, medium, and hard to know if this pattern is strong
Terraform vs CloudFormation vs Pulumi
📖 Scenario: You are working as a cloud engineer for a small company. Your team wants to manage cloud resources using Infrastructure as Code (IaC). You want to understand how to create a simple cloud resource using three popular IaC tools: Terraform, CloudFormation, and Pulumi.This project will guide you step-by-step to create a basic cloud infrastructure resource using Terraform, then add configuration, apply core logic, and finalize the setup. This will help you see how Terraform works compared to CloudFormation and Pulumi.
🎯 Goal: Build a simple Terraform configuration that creates an AWS S3 bucket with a specific name and versioning enabled. This will help you understand the basics of Terraform syntax and resource management.
📋 What You'll Learn
Create a Terraform configuration file named main.tf.
Define an AWS provider with a specific region.
Create an S3 bucket resource with a given name.
Enable versioning on the S3 bucket.
💡 Why This Matters
🌍 Real World
Cloud engineers use Infrastructure as Code tools like Terraform to automate and manage cloud resources reliably and repeatedly.
💼 Career
Knowing Terraform basics is essential for cloud jobs that require managing AWS, Azure, or Google Cloud infrastructure efficiently.
Progress0 / 4 steps
1
DATA SETUP: Define the AWS provider
Create a Terraform configuration file main.tf and add a provider block for AWS with the region set to us-east-1.
Terraform
Hint
The provider block tells Terraform which cloud to connect to and which region to use.
2
CONFIGURATION: Add an S3 bucket resource with a name
In main.tf, add a resource block to create an AWS S3 bucket named my-unique-bucket-12345.
Terraform
Hint
The resource block defines the cloud resource you want to create. Use aws_s3_bucket as the resource type.
3
CORE LOGIC: Enable versioning on the S3 bucket
Add an aws_s3_bucket_versioning resource named my_bucket_versioning. Set the bucket to aws_s3_bucket.my_bucket.id and add a versioning_configuration block with status set to Enabled.
Terraform
Hint
Versioning helps keep multiple versions of objects in the bucket. In modern Terraform AWS provider, use the dedicated aws_s3_bucket_versioning resource with status = "Enabled".
4
COMPLETION: Add a tag to the S3 bucket
Add a tags block inside the aws_s3_bucket resource with a tag Environment set to Dev.
Terraform
Hint
Tags help organize and identify resources. Add the tags block with the key and value inside the resource.
Practice
(1/5)
1. Which infrastructure as code tool is designed to work only with AWS and uses JSON or YAML for its templates?
easy
A. CloudFormation
B. Terraform
C. Pulumi
D. Ansible
Solution
Step 1: Identify AWS-only tool
CloudFormation is the only tool among the options that works exclusively with AWS.
Step 2: Check template language
CloudFormation uses JSON or YAML for its templates, unlike Terraform (HCL) or Pulumi (programming languages).
Final Answer:
CloudFormation -> Option A
Quick Check:
AWS-only + JSON/YAML = CloudFormation [OK]
Hint: AWS-only and JSON/YAML means CloudFormation [OK]
Common Mistakes:
Confusing Terraform as AWS-only
Thinking Pulumi uses JSON/YAML
Selecting Ansible which is not IaC focused
2. Which of the following is the correct way to describe Pulumi's approach to infrastructure as code?
easy
A. Uses general-purpose programming languages like JavaScript or Python
B. Uses JSON or YAML templates tightly integrated with AWS
C. Uses shell scripts for provisioning
D. Uses a domain-specific language called HCL
Solution
Step 1: Identify Pulumi's language style
Pulumi uses real programming languages such as JavaScript, Python, Go, or C# for defining infrastructure.
Step 2: Eliminate other options
HCL is Terraform's language, JSON/YAML with AWS is CloudFormation, and shell scripts are not Pulumi's approach.
Final Answer:
Uses general-purpose programming languages like JavaScript or Python -> Option A
Quick Check:
Pulumi = real programming languages [OK]
Hint: Pulumi uses real programming languages, not templates [OK]
Common Mistakes:
Confusing Pulumi with Terraform's HCL
Thinking Pulumi uses JSON/YAML
Assuming Pulumi uses shell scripts
3. Given the following statements, which tool supports multiple cloud providers and uses a simple declarative language called HCL?
1. Supports AWS, Azure, GCP
2. Uses JSON or YAML
3. Uses HCL
4. Uses programming languages like TypeScript
medium
A. Chef
B. Pulumi
C. CloudFormation
D. Terraform
Solution
Step 1: Match multi-cloud support
Terraform supports multiple clouds like AWS, Azure, and GCP.
Step 2: Match language used
Terraform uses HCL, a simple declarative language. JSON/YAML is CloudFormation, programming languages like TypeScript is Pulumi.
Final Answer:
Terraform -> Option D
Quick Check:
Multi-cloud + HCL = Terraform [OK]
Hint: Multi-cloud + HCL means Terraform [OK]
Common Mistakes:
Choosing Pulumi for HCL language
Selecting CloudFormation for multi-cloud
Confusing Chef with IaC tools
4. You wrote a Pulumi program in Python but it fails to deploy because it uses AWS-specific resource names not supported by Azure. What is the main error here?
medium
A. Terraform should be used instead of Pulumi for AWS
B. Pulumi does not support Python as a language
C. Using AWS resource names in a multi-cloud Pulumi program without adjusting for Azure
D. CloudFormation templates are required for Azure deployments
Solution
Step 1: Identify the cause of failure
The Pulumi program uses AWS resource names but tries to deploy on Azure, causing incompatibility.
Step 2: Understand Pulumi's multi-cloud nature
Pulumi supports multiple clouds but resource names and APIs differ per cloud and must be adjusted accordingly.
Final Answer:
Using AWS resource names in a multi-cloud Pulumi program without adjusting for Azure -> Option C
Quick Check:
Cloud-specific resource names must match target cloud [OK]
Hint: Match resource names to target cloud in Pulumi [OK]
Common Mistakes:
Thinking Pulumi can't use Python
Believing Terraform is required for AWS
Assuming CloudFormation works on Azure
5. You want to manage infrastructure across AWS and Azure using a single tool. You prefer writing code in TypeScript and want to reuse existing programming skills. Which tool should you choose and why?
hard
A. CloudFormation, because it is tightly integrated with AWS
B. Pulumi, because it supports multiple clouds and uses real programming languages like TypeScript
C. Terraform, because it supports multiple clouds and uses HCL
D. Ansible, because it uses YAML for automation
Solution
Step 1: Identify multi-cloud support with TypeScript
Pulumi supports multiple clouds and allows writing infrastructure code in TypeScript, matching the requirement.
Step 2: Compare other tools
Terraform supports multi-cloud but uses HCL, not TypeScript. CloudFormation is AWS-only. Ansible is for automation, not primarily IaC with TypeScript.
Final Answer:
Pulumi, because it supports multiple clouds and uses real programming languages like TypeScript -> Option B