Skip to content

Commit 18137fe

Browse files
feat: upload static website on s3 bucket
0 parents  commit 18137fe

13 files changed

+658
-0
lines changed

.gitignore

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
.terraform
2+
.terraform.lock.hcl
3+
terraform-dev.tfvars
4+
.terraform
5+
.terraform.tfstate.lock.info
6+
terraform.tfstate.backup

README.md

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
# deploy-static-website-on-aws-s3-with-terraform
2+
3+
Basic of terraform to deploy the static html pages on aws to s3 bucket.
4+
s3 bucket is use for storing the file of a static webiste as well as other file and folder.
5+
6+
## Demo
7+
8+
```bash
9+
[Demo]('https://random-bucket-name-with-terraform.s3.us-east-1.amazonaws.com/index.html')
10+
```
11+
12+
## Prerequisites
13+
* [Aws](https://aws.amazon.com/) - AWS Account.
14+
* [Terraform](https://terraform.io/) - Basic knowledge of Terraform.
15+
16+
## Instalation
17+
First Clone the rep
18+
```bash
19+
git clone https://github.com/hilalahmad0101/deploy-static-website-on-aws-s3-with-terraform.git
20+
```
21+
22+
## Create tfvar file
23+
24+
_terraform-dev.tfvar_
25+
26+
```bash
27+
bucket_name = ""
28+
secret_key = ""
29+
access_key = ""
30+
region = ""
31+
```
32+
33+
## Terraform Command
34+
35+
Run the basic command of terraform to serve your app on aws website.
36+
37+
```bash
38+
# init command
39+
terraform init
40+
41+
# plan command
42+
terraform plan -var-file terraform-dev.tfvar
43+
44+
# apply command
45+
terraform apply -var-file terraform-dev.tfvar
46+
```

providers.tf

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
# Configure the AWS Provider
2+
provider "aws" {
3+
region = var.region
4+
secret_key = var.secret_key
5+
access_key = var.access_key
6+
}

s3-acl.tf

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
resource "aws_s3_bucket_acl" "bucket_acl" {
2+
bucket = data.aws_s3_bucket.selected_bucket.id
3+
acl = "public-read"
4+
depends_on = [aws_s3_bucket_ownership_controls.s3_bucket_acl_ownership]
5+
}

s3-bucket.tf

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
resource "aws_s3_bucket" "first_bucket" {
2+
bucket = var.bucket_name
3+
4+
tags = {
5+
Name = var.bucket_name
6+
Environment = "Dev"
7+
}
8+
}
9+
10+
data "aws_s3_bucket" "selected_bucket" {
11+
bucket = aws_s3_bucket.first_bucket.bucket
12+
}

s3-object-upload.tf

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
resource "aws_s3_object" "object-upload-html" {
2+
for_each = fileset("uploads/", "*.html")
3+
bucket = data.aws_s3_bucket.selected_bucket.bucket
4+
key = each.value
5+
source = "uploads/${each.value}"
6+
content_type = "text/html"
7+
etag = filemd5("uploads/${each.value}")
8+
acl = "public-read"
9+
}
10+
# resource "aws_s3_object" "object-upload-jpg" {
11+
# for_each = fileset("uploads/", "*.jpeg")
12+
# bucket = data.aws_s3_bucket.selected-bucket.bucket
13+
# key = each.value
14+
# source = "uploads/${each.value}"
15+
# content_type = "image/jpeg"
16+
# etag = filemd5("uploads/${each.value}")
17+
# acl = "public-read"
18+
# }

s3-versioning.tf

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
resource "aws_s3_bucket_versioning" "versioning_bucket" {
2+
bucket = data.aws_s3_bucket.selected_bucket.id
3+
versioning_configuration {
4+
status = "Enabled"
5+
}
6+
}

s3-website.tf

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
resource "aws_s3_bucket_website_configuration" "website-config" {
2+
bucket = data.aws_s3_bucket.selected_bucket.bucket
3+
index_document {
4+
suffix = "index.html"
5+
}
6+
# error_document {
7+
# key = "404.jpeg"
8+
# }
9+
# IF you want to use the routing rule
10+
# routing_rule {
11+
# condition {
12+
# key_prefix_equals = "/abc"
13+
# }
14+
# redirect {
15+
# replace_key_prefix_with = "comming-soon.jpeg"
16+
# }
17+
# }
18+
}

ss3-bucket-policy.tf

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
resource "aws_s3_bucket_ownership_controls" "s3_bucket_acl_ownership" {
2+
bucket = data.aws_s3_bucket.selected_bucket.id
3+
rule {
4+
object_ownership = "BucketOwnerPreferred"
5+
}
6+
depends_on = [aws_s3_bucket_public_access_block.example]
7+
}
8+
9+
resource "aws_s3_bucket_public_access_block" "example" {
10+
bucket = data.aws_s3_bucket.selected_bucket.id
11+
12+
block_public_acls = false
13+
block_public_policy = false
14+
ignore_public_acls = false
15+
restrict_public_buckets = false
16+
}
17+
18+
resource "aws_s3_bucket_policy" "bucket-policy" {
19+
bucket = data.aws_s3_bucket.selected_bucket.id
20+
policy = data.aws_iam_policy_document.iam-policy-1.json
21+
}
22+
data "aws_iam_policy_document" "iam-policy-1" {
23+
statement {
24+
sid = "AllowPublicRead"
25+
effect = "Allow"
26+
resources = [
27+
"arn:aws:s3:::${data.aws_s3_bucket.selected_bucket.id}/*"
28+
]
29+
30+
# resources = [
31+
# "arn:aws:s3:::*"
32+
# ]
33+
actions = ["S3:GetObject"]
34+
principals {
35+
type = "*"
36+
identifiers = ["*"]
37+
}
38+
}
39+
40+
depends_on = [aws_s3_bucket_public_access_block.example]
41+
}

0 commit comments

Comments
 (0)