{"id":48696,"date":"2025-03-05T08:49:46","date_gmt":"2025-03-05T08:49:46","guid":{"rendered":"https:\/\/www.devopsschool.com\/blog\/?p=48696"},"modified":"2026-02-21T07:26:42","modified_gmt":"2026-02-21T07:26:42","slug":"comprehensive-localstack-tutorial","status":"publish","type":"post","link":"https:\/\/www.devopsschool.com\/blog\/comprehensive-localstack-tutorial\/","title":{"rendered":"Comprehensive LocalStack Tutorial"},"content":{"rendered":"\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" src=\"https:\/\/www.devopsschool.com\/blog\/wp-content\/uploads\/2025\/03\/Screenshot-2025-03-05-at-4.53.11%E2%80%AFPM-1024x555.png\" alt=\"\" class=\"wp-image-48698\"><\/figure>\n\n\n\n<p>LocalStack is an incredibly powerful tool for developers working with AWS services. It provides a <strong>fully functional local AWS cloud environment<\/strong>, allowing developers to test and develop cloud applications <strong>without incurring AWS costs<\/strong> or needing an internet connection.<\/p>\n\n\n\n<p>In this tutorial, we will cover:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>What is LocalStack?<\/strong><\/li>\n\n\n\n<li><strong>Top Use Cases of LocalStack<\/strong><\/li>\n\n\n\n<li><strong>How to Install LocalStack?<\/strong><\/li>\n\n\n\n<li><strong>Getting Started with LocalStack \u2013 Basic Tutorial<\/strong><\/li>\n\n\n\n<li><strong>Working with LocalStack \u2013 Common AWS Services<\/strong><\/li>\n\n\n\n<li><strong>Advanced LocalStack Features<\/strong><\/li>\n\n\n\n<li><strong>Using LocalStack in CI\/CD Pipelines<\/strong><\/li>\n\n\n\n<li><strong>Limitations of LocalStack<\/strong><\/li>\n\n\n\n<li><strong>Best Practices for LocalStack Usage<\/strong><\/li>\n<\/ol>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\">\n\n\n\n<h2 class=\"wp-block-heading\"><strong>1. What is LocalStack?<\/strong><\/h2>\n\n\n\n<p>LocalStack is an <strong>open-source tool<\/strong> that simulates <strong>AWS cloud services locally<\/strong>. It allows developers to develop and test AWS applications <strong>without needing access to AWS itself<\/strong>.<\/p>\n\n\n\n<p>Instead of making API calls to AWS, your application interacts with LocalStack\u2019s <strong>local endpoints<\/strong>, ensuring that your development process remains cost-effective and fast.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Key Features of LocalStack<\/strong><\/h3>\n\n\n\n<p>\u2714 <strong>Provides local AWS APIs<\/strong>: Simulates over 80+ AWS services, including <strong>S3, Lambda, DynamoDB, SQS, SNS, EC2, IAM, etc.<\/strong><br>\u2714 <strong>Fast Testing<\/strong>: Avoids long AWS API response times.<br>\u2714 <strong>Works Offline<\/strong>: No need for an AWS account or internet connection.<br>\u2714 <strong>Supports CI\/CD Pipelines<\/strong>: Works in <strong>Docker, GitHub Actions, and GitLab CI\/CD<\/strong>.<br>\u2714 <strong>Easy to Integrate<\/strong>: Works with <strong>AWS SDK, Terraform, Serverless Framework, and CloudFormation<\/strong>.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\">\n\n\n\n<h2 class=\"wp-block-heading\"><strong>2. Top Use Cases of LocalStack<\/strong><\/h2>\n\n\n\n<p>LocalStack is widely used in <strong>cloud application development<\/strong>. Below are its top use cases:<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>1\ufe0f\u20e3 Local Development of AWS Applications<\/strong><\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Test AWS services <strong>locally<\/strong> before deploying to AWS.<\/li>\n\n\n\n<li>Avoid AWS billing charges during development.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>2\ufe0f\u20e3 CI\/CD Testing &amp; Automation<\/strong><\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Run <strong>automated tests<\/strong> for AWS applications in <strong>GitHub Actions, GitLab CI\/CD, Jenkins, or CircleCI<\/strong>.<\/li>\n\n\n\n<li>Simulate AWS environments for integration testing.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>3\ufe0f\u20e3 Serverless Development<\/strong><\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Develop and test <strong>AWS Lambda functions<\/strong> before deploying.<\/li>\n\n\n\n<li>Use <strong>Serverless Framework<\/strong> to test API Gateway &amp; Lambda locally.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>4\ufe0f\u20e3 Infrastructure as Code (IaC) Testing<\/strong><\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Validate <strong>Terraform<\/strong> or <strong>CloudFormation<\/strong> templates before applying them to AWS.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>5\ufe0f\u20e3 Security &amp; Compliance Testing<\/strong><\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Test IAM roles, access policies, and permission configurations <strong>without AWS credentials<\/strong>.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>6\ufe0f\u20e3 API Development and Microservices Testing<\/strong><\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Test applications using <strong>S3, SNS, SQS, DynamoDB, etc.<\/strong> before deploying.<\/li>\n\n\n\n<li>Create local <strong>mock AWS APIs<\/strong> for development.<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\">\n\n\n\n<figure class=\"wp-block-gallery has-nested-images columns-1 is-cropped wp-block-gallery-1 is-layout-flex wp-block-gallery-is-layout-flex\">\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" data-id=\"48699\" src=\"https:\/\/www.devopsschool.com\/blog\/wp-content\/uploads\/2025\/03\/Screenshot-2025-03-05-at-4.52.29%E2%80%AFPM.png\" alt=\"\" class=\"wp-image-48699\"><\/figure>\n\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" data-id=\"48700\" src=\"https:\/\/www.devopsschool.com\/blog\/wp-content\/uploads\/2025\/03\/Screenshot-2025-03-05-at-4.58.15%E2%80%AFPM.png\" alt=\"\" class=\"wp-image-48700\"><\/figure>\n\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" data-id=\"48702\" src=\"https:\/\/www.devopsschool.com\/blog\/wp-content\/uploads\/2025\/03\/Screenshot-2025-03-05-at-5.01.30%E2%80%AFPM.png\" alt=\"\" class=\"wp-image-48702\"><\/figure>\n\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" data-id=\"48701\" src=\"https:\/\/www.devopsschool.com\/blog\/wp-content\/uploads\/2025\/03\/Screenshot-2025-03-05-at-5.02.17%E2%80%AFPM.png\" alt=\"\" class=\"wp-image-48701\"><\/figure>\n<\/figure>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>3. How to Install LocalStack?<\/strong><\/h2>\n\n\n\n<p>LocalStack requires <strong>Python and Docker<\/strong>.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>\ud83d\udd39 Prerequisites<\/strong><\/h3>\n\n\n\n<p>Ensure you have:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Python 3.7+<\/strong><\/li>\n\n\n\n<li><strong>Docker installed<\/strong> and running<\/li>\n\n\n\n<li><strong>pip (Python package manager)<\/strong><\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>\ud83d\udd39 Installation Steps<\/strong><\/h3>\n\n\n\n<p>You can install LocalStack using <strong>pip<\/strong> or <strong>Docker<\/strong>.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Option 1: Install LocalStack via pip<\/strong><\/h3>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">pip install localstack\n<\/code><\/span><\/pre>\n\n\n<p>After installation, start LocalStack with:<\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">localstack start\n<\/code><\/span><\/pre>\n\n\n<h3 class=\"wp-block-heading\"><strong>Option 2: Install LocalStack via Docker<\/strong><\/h3>\n\n\n\n<p>If you prefer running LocalStack as a <strong>Docker container<\/strong>, use:<\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">docker run --rm -it -p 4566:4566 localstack\/localstack\n<\/code><\/span><\/pre>\n\n\n<p>\ud83d\udc49 <strong>LocalStack runs on port <code>4566<\/code> by default<\/strong>.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\">\n\n\n\n<h2 class=\"wp-block-heading\"><strong>4. Getting Started with LocalStack \u2013 Basic Tutorial<\/strong><\/h2>\n\n\n\n<figure class=\"wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio\"><div class=\"wp-block-embed__wrapper\">\n<iframe loading=\"lazy\"  id=\"_ytid_31608\"  width=\"760\" height=\"427\"  data-origwidth=\"760\" data-origheight=\"427\" src=\"https:\/\/www.youtube.com\/embed\/_PD4j5Ra3kY?enablejsapi=1&#038;autoplay=0&#038;cc_load_policy=0&#038;cc_lang_pref=&#038;iv_load_policy=1&#038;loop=0&#038;rel=1&#038;fs=1&#038;playsinline=0&#038;autohide=2&#038;theme=dark&#038;color=red&#038;controls=1&#038;disablekb=0&#038;\" class=\"__youtube_prefs__  epyt-is-override  no-lazyload\" title=\"YouTube player\"  allow=\"fullscreen; accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\" allowfullscreen data-no-lazy=\"1\" data-skipgform_ajax_framebjll=\"\"><\/iframe>\n<\/div><\/figure>\n\n\n\n<p>Now that we have installed LocalStack, let&#8217;s interact with it.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>\ud83d\udd39 Step 1: Start LocalStack<\/strong><\/h3>\n\n\n\n<p>Run:<\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">localstack start\n<\/code><\/span><\/pre>\n\n\n<p>It will start LocalStack and provide you with <strong>local endpoints<\/strong> for AWS services.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\">\n\n\n\n<h3 class=\"wp-block-heading\"><strong>\ud83d\udd39 Step 2: Configure AWS CLI for LocalStack<\/strong><\/h3>\n\n\n\n<p>Since LocalStack mimics AWS, we configure <strong>AWS CLI<\/strong> to interact with it.<\/p>\n\n\n\n<p>Run:<\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">aws configure\n<\/code><\/span><\/pre>\n\n\n<p>Set the following values:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-2\" data-shcb-language-name=\"CSS\" data-shcb-language-slug=\"css\"><span><code class=\"hljs language-css\"><span class=\"hljs-selector-tag\">AWS<\/span> <span class=\"hljs-selector-tag\">Access<\/span> <span class=\"hljs-selector-tag\">Key<\/span> <span class=\"hljs-selector-tag\">ID<\/span> <span class=\"hljs-selector-attr\">&#91;None]<\/span>: <span class=\"hljs-selector-tag\">test<\/span>\n<span class=\"hljs-selector-tag\">AWS<\/span> <span class=\"hljs-selector-tag\">Secret<\/span> <span class=\"hljs-selector-tag\">Access<\/span> <span class=\"hljs-selector-tag\">Key<\/span> <span class=\"hljs-selector-attr\">&#91;None]<\/span>: <span class=\"hljs-selector-tag\">test<\/span>\n<span class=\"hljs-selector-tag\">Default<\/span> <span class=\"hljs-selector-tag\">region<\/span> <span class=\"hljs-selector-tag\">name<\/span> <span class=\"hljs-selector-attr\">&#91;None]<\/span>: <span class=\"hljs-selector-tag\">us-east-1<\/span>\n<span class=\"hljs-selector-tag\">Default<\/span> <span class=\"hljs-selector-tag\">output<\/span> <span class=\"hljs-selector-tag\">format<\/span> <span class=\"hljs-selector-attr\">&#91;None]<\/span>: <span class=\"hljs-selector-tag\">json<\/span>\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-2\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">CSS<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">css<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>\ud83d\udca1 LocalStack does <strong>not require real AWS credentials<\/strong>. You can use dummy values like <code>\"test\"<\/code>.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\">\n\n\n\n<h3 class=\"wp-block-heading\"><strong>\ud83d\udd39 Step 3: Create an S3 Bucket in LocalStack<\/strong><\/h3>\n\n\n\n<p>LocalStack <strong>simulates AWS S3<\/strong>. Let\u2019s create an S3 bucket.<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-3\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\">aws --endpoint-url=http:<span class=\"hljs-comment\">\/\/localhost:4566 s3 mb s3:\/\/my-local-bucket<\/span>\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-3\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>Verify:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-4\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\">aws --endpoint-url=http:<span class=\"hljs-comment\">\/\/localhost:4566 s3 ls<\/span>\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-4\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>\u2705 Output:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-5\" data-shcb-language-name=\"CSS\" data-shcb-language-slug=\"css\"><span><code class=\"hljs language-css\">2024<span class=\"hljs-selector-tag\">-03-05<\/span> 12<span class=\"hljs-selector-pseudo\">:30<\/span><span class=\"hljs-selector-pseudo\">:00<\/span> <span class=\"hljs-selector-tag\">my-local-bucket<\/span>\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-5\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">CSS<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">css<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\">\n\n\n\n<h3 class=\"wp-block-heading\"><strong>\ud83d\udd39 Step 4: Upload a File to LocalStack S3<\/strong><\/h3>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-6\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php\"><span class=\"hljs-keyword\">echo<\/span> <span class=\"hljs-string\">\"Hello LocalStack!\"<\/span> &gt; test.txt\naws --endpoint-url=http:<span class=\"hljs-comment\">\/\/localhost:4566 s3 cp test.txt s3:\/\/my-local-bucket\/<\/span>\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-6\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">PHP<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">php<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>Verify:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-7\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\">aws --endpoint-url=http:<span class=\"hljs-comment\">\/\/localhost:4566 s3 ls s3:\/\/my-local-bucket<\/span>\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-7\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>\u2705 Output:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-8\" data-shcb-language-name=\"CSS\" data-shcb-language-slug=\"css\"><span><code class=\"hljs language-css\">2024<span class=\"hljs-selector-tag\">-03-05<\/span> 12<span class=\"hljs-selector-pseudo\">:31<\/span><span class=\"hljs-selector-pseudo\">:00<\/span>  18 <span class=\"hljs-selector-tag\">test<\/span><span class=\"hljs-selector-class\">.txt<\/span>\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-8\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">CSS<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">css<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\">\n\n\n\n<h3 class=\"wp-block-heading\"><strong>\ud83d\udd39 Step 5: Create a DynamoDB Table in LocalStack<\/strong><\/h3>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-9\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\">aws --endpoint-url=http:<span class=\"hljs-comment\">\/\/localhost:4566 dynamodb create-table <\/span>\n    --table-name Users \n    --attribute-definitions AttributeName=UserID,AttributeType=S \n    --key-schema AttributeName=UserID,KeyType=HASH \n    --provisioned-throughput ReadCapacityUnits=<span class=\"hljs-number\">1<\/span>,WriteCapacityUnits=<span class=\"hljs-number\">1<\/span>\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-9\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>Verify:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-10\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\">aws --endpoint-url=http:<span class=\"hljs-comment\">\/\/localhost:4566 dynamodb list-tables<\/span>\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-10\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>\u2705 Output:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-11\" data-shcb-language-name=\"JSON \/ JSON with Comments\" data-shcb-language-slug=\"json\"><span><code class=\"hljs language-json\">{\n    <span class=\"hljs-attr\">\"TableNames\"<\/span>: &#91;\n        <span class=\"hljs-string\">\"Users\"<\/span>\n    ]\n}\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-11\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JSON \/ JSON with Comments<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">json<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\">\n\n\n\n<h2 class=\"wp-block-heading\"><strong>5. Working with LocalStack \u2013 Common AWS Services<\/strong><\/h2>\n\n\n\n<p>LocalStack supports over <strong>80 AWS services<\/strong>. Here are some frequently used ones:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th><strong>AWS Service<\/strong><\/th><th><strong>Command Example<\/strong><\/th><\/tr><\/thead><tbody><tr><td><strong>S3 (Object Storage)<\/strong><\/td><td><code>aws --endpoint-url=http:\/\/localhost:4566 s3 ls<\/code><\/td><\/tr><tr><td><strong>DynamoDB (NoSQL DB)<\/strong><\/td><td><code>aws --endpoint-url=http:\/\/localhost:4566 dynamodb list-tables<\/code><\/td><\/tr><tr><td><strong>Lambda (Serverless Functions)<\/strong><\/td><td><code>aws --endpoint-url=http:\/\/localhost:4566 lambda create-function<\/code><\/td><\/tr><tr><td><strong>SQS (Message Queue)<\/strong><\/td><td><code>aws --endpoint-url=http:\/\/localhost:4566 sqs create-queue --queue-name myQueue<\/code><\/td><\/tr><tr><td><strong>SNS (Pub\/Sub Messaging)<\/strong><\/td><td><code>aws --endpoint-url=http:\/\/localhost:4566 sns create-topic --name myTopic<\/code><\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\">\n\n\n\n<h2 class=\"wp-block-heading\"><strong>6. Advanced LocalStack Features<\/strong><\/h2>\n\n\n\n<p>LocalStack supports <strong>advanced AWS features<\/strong>, including:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>IAM Role Emulation<\/strong>: Test IAM roles and policies locally.<\/li>\n\n\n\n<li><strong>Multi-Account and Multi-Region<\/strong>: Simulate different AWS accounts and regions.<\/li>\n\n\n\n<li><strong>Event-driven Architecture<\/strong>: Trigger Lambda functions from S3\/SQS\/SNS.<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\">\n\n\n\n<h2 class=\"wp-block-heading\"><strong>7. Using LocalStack in CI\/CD Pipelines<\/strong><\/h2>\n\n\n\n<p>You can <strong>integrate LocalStack with CI\/CD tools<\/strong> like <strong>GitHub Actions, GitLab CI\/CD, and Jenkins<\/strong>.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>\ud83d\udd39 Example: Running LocalStack in GitHub Actions<\/strong><\/h3>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-12\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\">jobs:\n  test:\n    runs-on: ubuntu-latest\n    <span class=\"hljs-attr\">services<\/span>:\n      localstack:\n        image: localstack\/localstack\n        <span class=\"hljs-attr\">ports<\/span>:\n          - <span class=\"hljs-number\">4566<\/span>:<span class=\"hljs-number\">4566<\/span>\n    <span class=\"hljs-attr\">steps<\/span>:\n      - name: Check LocalStack S3\n        <span class=\"hljs-attr\">run<\/span>: aws --endpoint-url=http:<span class=\"hljs-comment\">\/\/localhost:4566 s3 ls<\/span>\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-12\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\">\n\n\n\n<h2 class=\"wp-block-heading\"><strong>8. Limitations of LocalStack<\/strong><\/h2>\n\n\n\n<p>\ud83d\udeab Not all AWS services are <strong>fully implemented<\/strong> in LocalStack.<br>\ud83d\udeab Some <strong>AWS-specific behaviors<\/strong> may differ.<br>\ud83d\udeab <strong>Performance issues<\/strong> for large-scale applications.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\">\n\n\n\n<h2 class=\"wp-block-heading\"><strong>9. Best Practices for LocalStack Usage<\/strong><\/h2>\n\n\n\n<p>\u2705 Use <strong>docker-compose<\/strong> for LocalStack in CI\/CD.<br>\u2705 <strong>Mock AWS credentials<\/strong> to prevent accidental AWS calls.<br>\u2705 Use <strong>LocalStack Pro<\/strong> for enhanced AWS support.<br>\u2705 Test <strong>IAM policies<\/strong> to ensure secure deployments.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\">\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Conclusion<\/strong><\/h2>\n\n\n\n<p>LocalStack is a <strong>powerful AWS emulator<\/strong> that enables developers to <strong>build, test, and deploy AWS applications locally<\/strong> without incurring cloud costs.<\/p>\n\n\n\n<p><strong>Would you like help in integrating LocalStack with Terraform, Serverless Framework, or Kubernetes? \ud83d\ude80<\/strong><\/p>\n","protected":false},"excerpt":{"rendered":"<p>LocalStack is an incredibly powerful tool for developers working with AWS services. It provides a fully functional local AWS cloud environment, allowing developers to test and develop cloud applications without&#8230; <\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"","sticky":false,"template":"","format":"standard","meta":{"_joinchat":[],"footnotes":""},"categories":[2],"tags":[],"class_list":["post-48696","post","type-post","status-publish","format-standard","hentry","category-uncategorised"],"_links":{"self":[{"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/posts\/48696","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/comments?post=48696"}],"version-history":[{"count":2,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/posts\/48696\/revisions"}],"predecessor-version":[{"id":58917,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/posts\/48696\/revisions\/58917"}],"wp:attachment":[{"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/media?parent=48696"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/categories?post=48696"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/tags?post=48696"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}