DEV Community

Cover image for create a staic website using amazon s3 with terraform
Jeyaprakash Prakash
Jeyaprakash Prakash

Posted on

create a staic website using amazon s3 with terraform

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
  5. 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:
  6. 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:
  7. 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
  8. 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
  9. Open the command prompt or terminal, navigate to the folder where the Terraform file is located, and run the below command: terraform init
  10. Prepares Terraform’s working directory for managing infrastructure. Step 6: Terraform Validate
  11. Run the below command to validate the Terraform configuration: terraform validate
  12. Performs a static analysis of your Terraform configuration files. Step 7: Terraform Plan
  13. Run the below command to review the intended changes to the infrastructure terraform plan
  14. Used for understanding and reviewing the intended changes to your infrastructure. Step 8: Terraform Apply
  15. Run the below command to execute the changes terraform apply
  16. Executes the actions outlined in the plan generated by the Terraform plan. Step 9: Destroy:
  17. Run the below command to tear down the infrastructure resources terraform destroy
  18. 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 (1)

Collapse
 
moopet profile image
Ben Sinclair

This looks like you've pasted aws.plainenglish.io/host-your-stat... into the markdown editor here. Was that the case?