From 09d9116c9e900d24988e65e8378950298a02af3d Mon Sep 17 00:00:00 2001 From: Arya Pratap Singh Date: Mon, 13 Oct 2025 04:16:46 +0530 Subject: [PATCH 1/2] docs: normalize S3 static website with Terraform tutorial structure Signed-off-by: Arya Pratap Singh --- .../tutorials/s3-static-website-terraform.mdx | 99 +++++++++++++++++++ 1 file changed, 99 insertions(+) diff --git a/src/content/docs/aws/tutorials/s3-static-website-terraform.mdx b/src/content/docs/aws/tutorials/s3-static-website-terraform.mdx index 25800509..8d301d9f 100644 --- a/src/content/docs/aws/tutorials/s3-static-website-terraform.mdx +++ b/src/content/docs/aws/tutorials/s3-static-website-terraform.mdx @@ -12,6 +12,8 @@ pro: false leadimage: "s3-static-website-terraform-featured-image.png" --- +## Introduction + [AWS Simple Storage Service (S3)](https://aws.amazon.com/s3/) is a proprietary object storage solution that can store an unlimited number of objects for many use cases. S3 is a highly scalable, durable and reliable service that we can use for various use cases: hosting a static site, handling big data analytics, managing application logs, storing web assets and much more! @@ -37,6 +39,48 @@ For this tutorial, you will need: - [Terraform](https://www.terraform.io/downloads.html) - [awslocal](https://github.com/localstack/awscli-local) +## Architecture + +The following diagram illustrates the architecture of the static website hosting setup using S3 and Terraform: + +``` +┌─────────────┐ +│ Browser │ +└──────┬──────┘ + │ + │ HTTP Request + │ + ▼ +┌─────────────────────────────────────────┐ +│ S3 Website Endpoint │ +│ testwebsite.s3-website. │ +│ localhost.localstack.cloud:4566 │ +└──────┬──────────────────────────────────┘ + │ + │ + ▼ +┌─────────────────────────────────────────┐ +│ LocalStack S3 Bucket │ +│ ┌───────────────────────────────────┐ │ +│ │ Bucket: testwebsite │ │ +│ │ ├── index.html │ │ +│ │ ├── error.html │ │ +│ │ └── assets/ (optional) │ │ +│ │ │ │ +│ │ Policy: Public Read Access │ │ +│ │ Website Hosting: Enabled │ │ +│ └───────────────────────────────────┘ │ +│ │ +│ Provisioned via Terraform │ +└─────────────────────────────────────────┘ +``` + +In this architecture: +- A browser makes an HTTP request to the S3 website endpoint +- LocalStack's S3 service serves the static content from the configured bucket +- The bucket contains HTML files and optional assets +- Terraform provisions and configures all resources locally + ## Creating a static website We will create a simple static website using plain HTML to get started. @@ -374,6 +418,61 @@ tflocal plan tflocal apply ``` +## Testing the application + +After deploying your static website, it's important to verify that everything is working correctly. +Here are several ways to test your S3-hosted static website: + +### Accessing the website + +Navigate to the LocalStack S3 website endpoint in your browser: + +``` +http://testwebsite.s3-website.localhost.localstack.cloud:4566/ +``` + +You should see your `index.html` content displayed, which in our case shows: "Static Website deployed locally over S3 using LocalStack". + +### Testing with curl + +You can also test the website using `curl` from your terminal: + +```bash +curl http://testwebsite.s3-website.localhost.localstack.cloud:4566/ +``` + +This should return the HTML content of your `index.html` file. + +### Verifying the error page + +To test the custom error document, try accessing a non-existent page: + +```bash +curl http://testwebsite.s3-website.localhost.localstack.cloud:4566/nonexistent.html +``` + +You should receive the content from your `error.html` file: "Something is amiss." with an appropriate HTTP 4XX status code. + +### Checking bucket configuration + +You can verify the bucket's website configuration using `awslocal`: + +```bash +awslocal s3api get-bucket-website --bucket testwebsite +``` + +This command should return the index and error document configuration for your bucket. + +### Listing bucket contents + +To confirm all your files were uploaded correctly: + +```bash +awslocal s3 ls s3://testwebsite/ +``` + +This will display all the files in your bucket, including `index.html`, `error.html`, and any additional assets. + ## Conclusion In this tutorial, we have seen how to use LocalStack to create an S3 bucket and configure it to serve a static website. From e5c53aef4c49dc888077aaf91c04efbf32610055 Mon Sep 17 00:00:00 2001 From: Brian Rinaldi Date: Wed, 15 Oct 2025 08:48:32 -0400 Subject: [PATCH 2/2] Minor tweaks and new architecture diagram --- .../s3-static-website-terraform-diagram.png | Bin 0 -> 59260 bytes .../tutorials/s3-static-website-terraform.mdx | 41 ++---------------- 2 files changed, 4 insertions(+), 37 deletions(-) create mode 100644 public/images/aws/s3-static-website-terraform-diagram.png diff --git a/public/images/aws/s3-static-website-terraform-diagram.png b/public/images/aws/s3-static-website-terraform-diagram.png new file mode 100644 index 0000000000000000000000000000000000000000..854c7be27d743e95b69521815c7da711cf966e55 GIT binary patch literal 59260 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 Feh2n?`N#kO literal 0 HcmV?d00001 diff --git a/src/content/docs/aws/tutorials/s3-static-website-terraform.mdx b/src/content/docs/aws/tutorials/s3-static-website-terraform.mdx index 8d301d9f..9ad33a65 100644 --- a/src/content/docs/aws/tutorials/s3-static-website-terraform.mdx +++ b/src/content/docs/aws/tutorials/s3-static-website-terraform.mdx @@ -15,13 +15,10 @@ leadimage: "s3-static-website-terraform-featured-image.png" ## Introduction [AWS Simple Storage Service (S3)](https://aws.amazon.com/s3/) is a proprietary object storage solution that can store an unlimited number of objects for many use cases. -S3 is a highly scalable, durable and reliable service that we can use for various use cases: hosting a static site, handling big data analytics, managing application logs, storing web assets and much more! +S3 is a highly scalable, durable and reliable service that we can use for any use case involving file-based storage: hosting a static site, handling big data analytics, managing application logs, storing web assets and much more! -With S3, you have unlimited storage with your data stored in buckets. -A bucket refers to a directory, while an object is just another term for a file. -Every object (file) stores the name of the file (key), the contents (value), a version ID and the associated metadata. -You can also use S3 to host a static website, to serve static content. -It might include HTML, CSS, JavaScript, images, and other assets that make up your website. +With S3, objects are stored in buckets. A bucket is effectively a directory, while an object is a file. Every object (file) stores the name of the file (key), the contents (value), a version ID and the associated metadata. You can also use S3 to host to server static content as a static website. +The static content might include HTML, CSS, JavaScript, images, and other assets that make up your website. LocalStack supports the S3 API, which means you can use the same API calls to interact with S3 in LocalStack as you would with AWS. Using LocalStack, you can create and manage S3 buckets and objects locally, use AWS SDKs and third-party integrations to work with S3, and test your applications without making any significant alterations. @@ -43,37 +40,7 @@ For this tutorial, you will need: The following diagram illustrates the architecture of the static website hosting setup using S3 and Terraform: -``` -┌─────────────┐ -│ Browser │ -└──────┬──────┘ - │ - │ HTTP Request - │ - ▼ -┌─────────────────────────────────────────┐ -│ S3 Website Endpoint │ -│ testwebsite.s3-website. │ -│ localhost.localstack.cloud:4566 │ -└──────┬──────────────────────────────────┘ - │ - │ - ▼ -┌─────────────────────────────────────────┐ -│ LocalStack S3 Bucket │ -│ ┌───────────────────────────────────┐ │ -│ │ Bucket: testwebsite │ │ -│ │ ├── index.html │ │ -│ │ ├── error.html │ │ -│ │ └── assets/ (optional) │ │ -│ │ │ │ -│ │ Policy: Public Read Access │ │ -│ │ Website Hosting: Enabled │ │ -│ └───────────────────────────────────┘ │ -│ │ -│ Provisioned via Terraform │ -└─────────────────────────────────────────┘ -``` +![Architecture](/images/aws/s3-static-website-terraform-diagram.png) In this architecture: - A browser makes an HTTP request to the S3 website endpoint