IaC Templates
Infrastructure as Code Templates
Pre-built AWS infrastructure templates with Terraform and Pulumi code. Deploy production-ready architectures in minutes.
Static Website with CloudFront
Host a static website on S3 with CloudFront CDN for global distribution and HTTPS.
beginner
S3
CloudFront
Route53
ACM
Est. $1-5/month
# AWS Provider
provider "aws" {
region = "us-east-1"
}
# S3 Bucket for website hosting
resource "aws_s3_bucket" "website" {
bucket = "my-static-website-bucket"
}
resource "aws_s3_bucket_website_configuration" "website" {
bucket = aws_s3_bucket.website.id
index_document {
suffix = "index.html"
}
error_document {
key = "error.html"
}
}
# CloudFront Distribution
resource "aws_cloudfront_distribution" "website" {
origin {
domain_name = aws_s3_bucket.website.bucket_regional_domain_name
origin_id = "S3-Website"
s3_origin_config {
origin_access_identity = aws_cloudfront_origin_access_identity.website.cloudfront_access_identity_path
}
}
enabled = true
default_root_object = "index.html"
default_cache_behavior {
allowed_methods = ["GET", "HEAD"]
cached_methods = ["GET", "HEAD"]
target_origin_id = "S3-Website"
forwarded_values {
query_string = false
cookies {
forward = "none"
}
}
viewer_protocol_policy = "redirect-to-https"
min_ttl = 0
default_ttl = 3600
max_ttl = 86400
}
restrictions {
geo_restriction {
restriction_type = "none"
}
}
viewer_certificate {
cloudfront_default_certificate = true
}
}
output "website_url" {
value = aws_cloudfront_distribution.website.domain_name
}Serverless API with DynamoDB
RESTful API using API Gateway, Lambda, and DynamoDB for data persistence.
intermediate
API Gateway
Lambda
DynamoDB
IAM
Est. $5-20/month
# Lambda function for API
resource "aws_lambda_function" "api" {
filename = "lambda.zip"
function_name = "api-handler"
role = aws_iam_role.lambda_role.arn
handler = "index.handler"
runtime = "nodejs18.x"
environment {
variables = {
TABLE_NAME = aws_dynamodb_table.main.name
}
}
}
# DynamoDB Table
resource "aws_dynamodb_table" "main" {
name = "api-data"
billing_mode = "PAY_PER_REQUEST"
hash_key = "id"
attribute {
name = "id"
type = "S"
}
}
# API Gateway
resource "aws_apigatewayv2_api" "main" {
name = "serverless-api"
protocol_type = "HTTP"
}
resource "aws_apigatewayv2_integration" "lambda" {
api_id = aws_apigatewayv2_api.main.id
integration_type = "AWS_PROXY"
integration_uri = aws_lambda_function.api.invoke_arn
}
resource "aws_apigatewayv2_route" "default" {
api_id = aws_apigatewayv2_api.main.id
route_key = "ANY /{proxy+}"
target = "integrations/${aws_apigatewayv2_integration.lambda.id}"
}Container App with Database
Containerized application on ECS Fargate with RDS PostgreSQL database.
advanced
ECS
Fargate
RDS
ALB
VPC
Est. $50-150/month
# ECS Cluster
resource "aws_ecs_cluster" "main" {
name = "app-cluster"
}
# ECS Task Definition
resource "aws_ecs_task_definition" "app" {
family = "app-task"
network_mode = "awsvpc"
requires_compatibilities = ["FARGATE"]
cpu = 256
memory = 512
container_definitions = jsonencode([{
name = "app"
image = "nginx:latest"
portMappings = [{
containerPort = 80
hostPort = 80
}]
}])
}
# RDS PostgreSQL
resource "aws_db_instance" "main" {
identifier = "app-database"
engine = "postgres"
engine_version = "15"
instance_class = "db.t3.micro"
allocated_storage = 20
db_name = "appdb"
username = "admin"
password = var.db_password
skip_final_snapshot = true
}