DEV Community

Kishore Suzil
Kishore Suzil

Posted on

Deploying a Static Website on AWS S3 Using Terraform

Introduction :

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"
}
Enter fullscreen mode Exit fullscreen mode

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"
 }
}
Enter fullscreen mode Exit fullscreen mode

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]
}
Enter fullscreen mode Exit fullscreen mode

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"
}.
Enter fullscreen mode Exit fullscreen mode

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
Enter fullscreen mode Exit fullscreen mode
  • Prepares Terraform’s working directory for managing infrastructure.

Step 6: Terraform Validate

  1. Run the below command to validate the Terraform configuration:
terraform validate

Enter fullscreen mode Exit fullscreen mode
  • 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
Enter fullscreen mode Exit fullscreen mode
  • 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
Enter fullscreen mode Exit fullscreen mode
  • 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
Enter fullscreen mode Exit fullscreen mode
  • 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

Top comments (0)