create a staic website using amazon s3 with terraform
Published: 2024-06-27 19:03:50

In this step-by-step guide, we’ll dive into deploying a static website on AWS S3 using Terraform! We’ll 
walk through the process of:
1. Automating S3 Bucket Creation: Terraform will handle creating the S3 bucket where your 
website files will reside.
2. Effortless Website Upload: We’ll configure Terraform to skip manual uploads by referencing 
your website files locally.
3. Public Access for All: Terraform will configure the S3 bucket policy to grant public read 
access, ensuring anyone can access your website.
4. Enabling Web Hosting: Terraform will transform your S3 bucket into a fully functional static 
website, ready to serve your content to the world.
By the end, you’ll have a Terraform script that automates the entire deployment process, saving you 
time and ensuring a secure and accessible website.
Step 1: Setup Terraform
1. Create a `terraform.tf` file to set up the Terraform and provider:
terraform {
 required_version = "1.7.4"
 required_providers {
 aws = {
 source = "hashicorp/aws"
version = "5.40.0"
 }
 }
}
provider "aws" {
 profile = "default"
 region = "ap-south-1"
}
Terraform Configuration Block:
terraform { ... }**: This block defines the Terraform configuration itself.
required_version = "1.7.4"**: Specifies the minimum Terraform version required to run this 
configuration.
AWS Provider Block:
profile = "default"**: Uses the default AWS profile configured in your local AWS credentials.
region = "ap-south-1"**: Specifies the AWS region where your infrastructure will be deployed.
Step 2: Configuration for S3 Bucket:
1. Create a `bucket.tf` file to store the Terraform configuration related to the S3 bucket:
resource "aws_s3_bucket" "terraform_demo" {
 bucket = "terraform-demo-43234"
}
resource "aws_s3_object" "terraform_index" {
 bucket = aws_s3_bucket.terraform_demo.id
 key = "index.html"
 source = "index.html"
 content_type = "text/html"
 etag = filemd5("index.html")
}
resource "aws_s3_bucket_website_configuration" "terraform_hosting" {
 bucket = aws_s3_bucket.terraform_demo.id
 index_document {
 suffix = "index.html"
 }
}
Step 3: Configuration for Bucket Policy:
1. Create a `policy.tf` file to store the Terraform configuration related to the bucket policy for public 
access:
# S3 public access
resource "aws_s3_bucket_public_access_block" "terraform_demo" {
 bucket = aws_s3_bucket.terraform_demo.id
 block_public_acls = false
 block_public_policy = false
}
resource "aws_s3_bucket_policy" "open_access" {
 bucket = aws_s3_bucket.terraform_demo.id
policy = jsonencode({
 Version = "2012-10-17"
 Id = "Public_access"
 Statement = [
 {
 Sid = "IPAllow"
 Effect = "Allow"
 Principal = "*"
 Action = ["s3:GetObject"]
 Resource = "${aws_s3_bucket.terraform_demo.arn}/*"
 },
 ]
 })
 depends_on = [aws_s3_bucket_public_access_block.terraform_demo]
}
Step 4: Configuration for Output Variable
1. **Create an `output.tf` file to print out the URL to access the website:**
# Website URL
output "website_url" {
 value = "http://${aws_s3_bucket.terraform_demo.bucket}.s3-
website.${aws_s3_bucket.terraform_demo.region}.amazonaws.com"
}.
Step 5: Initialize Terraform
1. **Open the command prompt or terminal, navigate to the folder where the Terraform file is 
located, and run the below command:**
terraform init
- Prepares Terraform’s working directory for managing infrastructure.
Step 6: Terraform Validate
1. Run the below command to validate the Terraform configuration:
terraform validate
- Performs a static analysis of your Terraform configuration files.
Step 7: Terraform Plan
1. Run the below command to review the intended changes to the infrastructure
terraform plan
- Used for understanding and reviewing the intended changes to your infrastructure.
Step 8: Terraform Apply
1. Run the below command to execute the changes
terraform apply
- Executes the actions outlined in the plan generated by the Terraform plan.
Step 9: Destroy:
1. Run the below command to tear down the infrastructure resources
terraform destroy
- The terraform destroy command tears down the infrastructure resources that your Terraform 
configuration currently manages.
Conclusion:
In this comprehensive guide, we have walked through the process of deploying a static website on 
AWS S3 using Terraform. By following the step-by-step instructions outlined above, you can automate 
the creation of S3 buckets, effortlessly upload your website files, configure public access policies, and 
enable web hosting with ease