From fb5f8ee353cb1f555c1e4a5a86df44d3880cc227 Mon Sep 17 00:00:00 2001 From: Umair Jibran Date: Sat, 21 Dec 2024 20:10:35 +0500 Subject: [PATCH 1/6] Create .nvmrc --- .nvmrc | 1 + 1 file changed, 1 insertion(+) create mode 100644 .nvmrc diff --git a/.nvmrc b/.nvmrc new file mode 100644 index 0000000..42e31a0 --- /dev/null +++ b/.nvmrc @@ -0,0 +1 @@ +v20.14.0 From 6e1674c78d986d21fa6fc86d9bc46b16a52abf11 Mon Sep 17 00:00:00 2001 From: Umair Jibran Date: Sat, 21 Dec 2024 20:10:58 +0500 Subject: [PATCH 2/6] add blog for localstack --- ...ocalstack-your-gateway-to-cloud-testing.md | 180 ++++++++++++++++++ .../cover.webp | Bin 0 -> 58104 bytes 2 files changed, 180 insertions(+) create mode 100644 _blogs/localstack-your-gateway-to-cloud-testing.md create mode 100644 public/assets/blogs/localstack-your-gateway-to-cloud-testing/cover.webp diff --git a/_blogs/localstack-your-gateway-to-cloud-testing.md b/_blogs/localstack-your-gateway-to-cloud-testing.md new file mode 100644 index 0000000..cdd3d62 --- /dev/null +++ b/_blogs/localstack-your-gateway-to-cloud-testing.md @@ -0,0 +1,180 @@ +--- +title: "LocalStack: Your Gateway to Seamless Cloud Testing Locally" +excerpt: "Discover how LocalStack enables you to emulate AWS services locally, saving time and costs while improving productivity." +coverImage: "/assets/blogs/localstack-your-gateway-to-cloud-testing/cover.webp" +date: "2024-12-22T18:13:00.000Z" +author: + name: Umair Jibran + picture: "/assets/authors/jibran.webp" +ogImage: + url: "/assets/blogs/localstack-your-gateway-to-cloud-testing/cover.webp" +tags: + - AWS + - LocalStack + - Cloud Development + - DevOps + - Testing +--- + +## What is LocalStack? + +[LocalStack](https://www.localstack.cloud/) is an open-source tool that creates a local environment for simulating AWS services on your machine. It is particularly popular among developers and teams for testing cloud applications without connecting to the actual AWS cloud. By mimicking various AWS APIs such as S3, Lambda, DynamoDB, and SQS, LocalStack provides a controlled, cost-effective, and fast development environment. + +## Why is LocalStack Important? + +### Cost Efficiency + +Developing on live AWS resources can incur significant costs, especially during frequent testing. LocalStack allows you to work offline, eliminating these expenses. + +### Faster Development Cycles + +Running AWS services locally reduces the latency of API calls, speeding up iterations and debugging. + +### Offline Accessibility + +With LocalStack, you can test and develop in environments where internet access is restricted or unavailable. + +### Seamless Integration + +LocalStack integrates with popular tools like Terraform, AWS CLI, and the AWS SDK, making it easy to incorporate into existing workflows. + +## What are the Benefits? + +- **Supports Multiple AWS APIs:** Simulate services such as S3, EC2, Lambda, DynamoDB, and many more. +- **Docker-Based Environment:** Ensures consistency across development and testing setups. +- **Customizable:** Extend LocalStack's capabilities to meet your specific needs. +- **CI/CD Ready:** Perfect for testing infrastructure as code and integrating into continuous integration pipelines. + +## What are the Challenges? + +- **Incomplete Feature Set:** Not all AWS services and features are supported, especially edge cases. +- **Performance Limitations:** While great for local testing, LocalStack isn’t designed for production or large-scale simulations. +- **Learning Curve:** Initial setup and understanding of LocalStack can take time for new users. + +--- + +## Step A: Setting Up LocalStack Environment + +### Prerequisites: + +- Docker installed on your machine [L](#references) +- Basic familiarity with AWS services and the command line + +### Steps: + +#### For macOS (using Homebrew): + +1. **Install LocalStack via Brew**: + + ```bash + brew install localstack + ``` + +2. **Run LocalStack Using Brew**: + + ```bash + localstack start + ``` + +3. **Configure AWS CLI**: + ```bash + aws configure + ``` + Use dummy credentials since LocalStack doesn’t validate them. + +#### For Linux (using Homebrew alternative or directly): + +1. **Install LocalStack via Pip**: + + ```bash + pip install localstack + ``` + +2. **Run LocalStack Using Docker**: + + ```bash + docker run --rm -it -p 4566:4566 -p 4571:4571 localstack/localstack + ``` + +3. **Configure AWS CLI**: + ```bash + aws configure + ``` + Use dummy credentials since LocalStack doesn’t validate them. + +#### For Windows (using Chocolatey or Pip): + +1. **Install LocalStack via Chocolatey**: + + ```powershell + choco install localstack + ``` + +2. **Run LocalStack Using Docker**: + + ```powershell + docker run --rm -it -p 4566:4566 -p 4571:4571 localstack/localstack + ``` + +3. **Configure AWS CLI**: + ```powershell + aws configure + ``` + Use dummy credentials since LocalStack doesn’t validate them. + +### Why This Way? + +Running LocalStack in a Docker container ensures a clean and isolated environment, minimizing conflicts with existing setups. + +### Configuration: + +Edit `localstack.config` to enable or disable specific AWS services: + +```json +{ + "services": ["s3", "dynamodb", "lambda"] +} +``` + +Restart LocalStack after making changes. + +--- + +## Step B: Testing and Troubleshooting + +### Testing the Setup: + +1. **Create an S3 Bucket:** + ```bash + aws --endpoint-url=https://localhost.localstack.cloud:4566 s3 mb s3://test-bucket + ``` +2. **List Buckets:** + ```bash + aws --endpoint-url=https://localhost.localstack.cloud:4566 s3 ls + ``` + You should see your `test-bucket` listed. + +### Common Issues and Solutions: + +- **Issue:** "Connection refused" errors. + - **Solution:** Ensure Docker is running and LocalStack is started correctly. +- **Issue:** AWS CLI unable to connect to LocalStack. + - **Solution:** Use the correct `--endpoint-url` in commands. +- **Issue:** Service not recognized. + - **Solution:** Verify the service is enabled in `localstack.config`. + +--- + +## Conclusion + +LocalStack is a powerful tool for developers looking to streamline cloud application testing and development. By simulating AWS services locally, it minimizes costs, enhances productivity, and provides a faster feedback loop. While it has its limitations, the benefits far outweigh the challenges, making LocalStack a must-have for modern cloud developers. + +--- + +## References + +- [LocalStack Official Documentation](https://docs.localstack.cloud/) +- [AWS CLI Documentation](https://aws.amazon.com/cli/) +- [Docker Installation Guide](https://docs.docker.com/get-docker/) +- [LocalStack GitHub Repository](https://github.com/localstack/localstack) +- [LocalStack Academy](https://docs.localstack.cloud/academy/) diff --git a/public/assets/blogs/localstack-your-gateway-to-cloud-testing/cover.webp b/public/assets/blogs/localstack-your-gateway-to-cloud-testing/cover.webp new file mode 100644 index 0000000000000000000000000000000000000000..9fd97d871c33896cf6086d35c520acc72cf07d82 GIT binary patch literal 58104 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 z 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 literal 0 HcmV?d00001 From 72e0bdee187a6dc252ebe68a29f197629c747d03 Mon Sep 17 00:00:00 2001 From: Umair Jibran Date: Sat, 21 Dec 2024 20:14:02 +0500 Subject: [PATCH 3/6] handle api errors --- src/lib/api.ts | 46 +++++++++++++++++++++++++++++----------------- 1 file changed, 29 insertions(+), 17 deletions(-) diff --git a/src/lib/api.ts b/src/lib/api.ts index 3237d5d..b1fe156 100644 --- a/src/lib/api.ts +++ b/src/lib/api.ts @@ -22,30 +22,41 @@ export function getBlogSlugs() { } } -export function getBlogBySlug(slug: string) { - const realSlug = slug.replace(/\.md$/, ""); - const fullPath = join(blogsDirectory, `${realSlug}.md`); - const fileContents = fs.readFileSync(fullPath, "utf8"); - const { data, content } = matter(fileContents); +export function getBlogBySlug(slug: string): Story | null { + try { + const realSlug = slug.replace(/\.md$/, ""); + const fullPath = join(blogsDirectory, `${realSlug}.md`); + const fileContents = fs.readFileSync(fullPath, "utf8"); + const { data, content } = matter(fileContents); - return { ...data, slug: realSlug, content } as Story; + return { ...data, slug: realSlug, content } as Story; + } catch (error) { + return null; + } } export function getAllBlog(): Story[] { const slugs = getBlogSlugs(); const blogs = slugs .map((slug) => getBlogBySlug(slug)) - .sort((blog1, blog2) => (blog1.date > blog2.date ? -1 : 1)); - return blogs.map((blog) => ({ ...blog, type: "blog" })); + .filter((blog) => blog !== null) as Story[]; + const sortedBlogs = blogs.sort((blog1, blog2) => + blog1.date > blog2.date ? -1 : 1, + ); + return sortedBlogs.map((blog) => ({ ...blog, type: "blog" })); } export function getCaseStudyBySlug(slug: string) { - const realSlug = slug.replace(/\.md$/, ""); - const fullPath = join(caseStudiesDirectory, `${realSlug}.md`); - const fileContents = fs.readFileSync(fullPath, "utf8"); - const { data, content } = matter(fileContents); + try { + const realSlug = slug.replace(/\.md$/, ""); + const fullPath = join(caseStudiesDirectory, `${realSlug}.md`); + const fileContents = fs.readFileSync(fullPath, "utf8"); + const { data, content } = matter(fileContents); - return { ...data, slug: realSlug, content } as Story; + return { ...data, slug: realSlug, content } as Story; + } catch (error) { + return null; + } } export function getAllCaseStudies(): Story[] { @@ -55,10 +66,11 @@ export function getAllCaseStudies(): Story[] { } const caseStudies = slugs .map((slug) => getCaseStudyBySlug(slug)) - .sort((caseStudy1, caseStudy2) => - caseStudy1.date > caseStudy2.date ? -1 : 1, - ); - return caseStudies.map((caseStudy) => ({ + .filter((caseStudy) => caseStudy !== null) as Story[]; + const sortedCaseStudies = caseStudies.sort((caseStudy1, caseStudy2) => + caseStudy1.date > caseStudy2.date ? -1 : 1, + ); + return sortedCaseStudies.map((caseStudy) => ({ ...caseStudy, type: "case-study", })); From 0ed67d9805569a006e67a873bc12249ceff1335e Mon Sep 17 00:00:00 2001 From: Umair Jibran Date: Sat, 21 Dec 2024 20:16:33 +0500 Subject: [PATCH 4/6] Update localstack-your-gateway-to-cloud-testing.md --- _blogs/localstack-your-gateway-to-cloud-testing.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/_blogs/localstack-your-gateway-to-cloud-testing.md b/_blogs/localstack-your-gateway-to-cloud-testing.md index cdd3d62..7b3be55 100644 --- a/_blogs/localstack-your-gateway-to-cloud-testing.md +++ b/_blogs/localstack-your-gateway-to-cloud-testing.md @@ -57,7 +57,7 @@ LocalStack integrates with popular tools like Terraform, AWS CLI, and the AWS SD ### Prerequisites: -- Docker installed on your machine [L](#references) +- Docker installed on your machine - Basic familiarity with AWS services and the command line ### Steps: From 148f35dcf7d746bc84defbc2580e40e57b4e9099 Mon Sep 17 00:00:00 2001 From: Umair Jibran Date: Sat, 21 Dec 2024 20:19:41 +0500 Subject: [PATCH 5/6] rephrase grammar --- _blogs/localstack-your-gateway-to-cloud-testing.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/_blogs/localstack-your-gateway-to-cloud-testing.md b/_blogs/localstack-your-gateway-to-cloud-testing.md index 7b3be55..8477fe9 100644 --- a/_blogs/localstack-your-gateway-to-cloud-testing.md +++ b/_blogs/localstack-your-gateway-to-cloud-testing.md @@ -24,7 +24,7 @@ tags: ### Cost Efficiency -Developing on live AWS resources can incur significant costs, especially during frequent testing. LocalStack allows you to work offline, eliminating these expenses. +Developing with live AWS resources can incur significant costs, especially during frequent testing. LocalStack allows you to work offline, eliminating these expenses. ### Faster Development Cycles From 67ee80901828dc5f4f82d5dc6edfe433f46f3047 Mon Sep 17 00:00:00 2001 From: Umair Jibran Date: Sat, 21 Dec 2024 20:19:57 +0500 Subject: [PATCH 6/6] add return type for getCaseStudy by slug --- src/lib/api.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/lib/api.ts b/src/lib/api.ts index b1fe156..f71ceea 100644 --- a/src/lib/api.ts +++ b/src/lib/api.ts @@ -46,7 +46,7 @@ export function getAllBlog(): Story[] { return sortedBlogs.map((blog) => ({ ...blog, type: "blog" })); } -export function getCaseStudyBySlug(slug: string) { +export function getCaseStudyBySlug(slug: string): Story | null { try { const realSlug = slug.replace(/\.md$/, ""); const fullPath = join(caseStudiesDirectory, `${realSlug}.md`);