File tree Expand file tree Collapse file tree 13 files changed +658
-0
lines changed Expand file tree Collapse file tree 13 files changed +658
-0
lines changed Original file line number Diff line number Diff line change
1
+ .terraform
2
+ .terraform.lock.hcl
3
+ terraform-dev.tfvars
4
+ .terraform
5
+ .terraform.tfstate.lock.info
6
+ terraform.tfstate.backup
Original file line number Diff line number Diff line change
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
+ ```
Original file line number Diff line number Diff line change
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
+ }
Original file line number Diff line number Diff line change
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
+ }
Original file line number Diff line number Diff line change
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
+ }
Original file line number Diff line number Diff line change
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
+ # }
Original file line number Diff line number Diff line change
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
+ }
Original file line number Diff line number Diff line change
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
+ }
Original file line number Diff line number Diff line change
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
+ }
You can’t perform that action at this time.
0 commit comments