<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Janith Disanayake</title>
    <description>The latest articles on DEV Community by Janith Disanayake (@janithdisanayake).</description>
    <link>https://dev.to/janithdisanayake</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F1901738%2F2e4f7539-442c-465e-b91f-67d1b8ae5bab.jpeg</url>
      <title>DEV Community: Janith Disanayake</title>
      <link>https://dev.to/janithdisanayake</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/janithdisanayake"/>
    <language>en</language>
    <item>
      <title>Simple Steps to Deploy Smart Contract</title>
      <dc:creator>Janith Disanayake</dc:creator>
      <pubDate>Fri, 19 Dec 2025 11:43:05 +0000</pubDate>
      <link>https://dev.to/janithdisanayake/simple-steps-to-deploy-smart-contract-30dd</link>
      <guid>https://dev.to/janithdisanayake/simple-steps-to-deploy-smart-contract-30dd</guid>
      <description>&lt;p&gt;Tools &amp;amp; Softwares:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;VS Code / Cursor &lt;/li&gt;
&lt;li&gt;NodeJS (22.10.0 or a later LTS version)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Accounts:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.alchemy.com/" rel="noopener noreferrer"&gt;Alchemy&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://metamask.io/en-GB" rel="noopener noreferrer"&gt;Metamask&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h1&gt;
  
  
  Prerequisites
&lt;/h1&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;node --version
npx --version
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h1&gt;
  
  
  Overview
&lt;/h1&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;.
├── artifacts
│   ├── artifacts.d.ts
│   ├── build-info
│   │   ├── solc-0_8_28-5d5e77a08f43f8366c520176a292b83d65132357.json
│   │   └── solc-0_8_28-5d5e77a08f43f8366c520176a292b83d65132357.output.json
│   └── contracts
│       └── Counter.sol
│           ├── artifacts.d.ts
│           └── Counter.json
├── cache
│   ├── build-info
│   ├── compile-cache.json
│   └── test-artifacts
│       ├── build-info
│       │   ├── solc-0_8_28-58a47ee13fa4eb204cf4c42c730b3f2707de3d94.json
│       │   └── solc-0_8_28-58a47ee13fa4eb204cf4c42c730b3f2707de3d94.output.json
│       └── contracts
│           └── Counter.t.sol
│               └── CounterTest.json
├── contracts
│   ├── Counter.sol
│   └── Counter.t.sol
├── coverage
│   ├── data
│   │   └── solidity
│   │       └── a23a0f3b-7ab8-4f87-8e19-8279db5ae7a4.json
│   └── lcov.info
├── hardhat.config.ts
├── ignition
│   ├── deployments
│   │   ├── chain-1
│   │   │   ├── artifacts
│   │   │   │   └── CounterModule#Counter.json
│   │   │   ├── build-info
│   │   │   │   └── solc-0_8_28-5d5e77a08f43f8366c520176a292b83d65132357.json
│   │   │   └── journal.jsonl
│   │   ├── chain-11155111
│   │   │   ├── artifacts
│   │   │   │   └── CounterModule#Counter.json
│   │   │   ├── build-info
│   │   │   │   └── solc-0_8_28-5d5e77a08f43f8366c520176a292b83d65132357.json
│   │   │   ├── deployed_addresses.json
│   │   │   └── journal.jsonl
│   │   └── chain-31337
│   │       ├── artifacts
│   │       │   └── CounterModule#Counter.json
│   │       ├── build-info
│   │       │   └── solc-0_8_28-5d5e77a08f43f8366c520176a292b83d65132357.json
│   │       ├── deployed_addresses.json
│   │       └── journal.jsonl
│   └── modules
│       └── Counter.ts
├── package-lock.json
├── package.json
├── README.md
├── test
│   └── Counter.ts
└── tsconfig.json
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h1&gt;
  
  
  Project creation
&lt;/h1&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;mkdir hardhat-tutorial
cd hardhat-tutorial
npx hardhat --init
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h1&gt;
  
  
  Writing a smart contract
&lt;/h1&gt;

&lt;p&gt;&lt;code&gt;contracts/Counter.sol&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;// SPDX-License-Identifier: UNLICENSED
pragma solidity ^0.8.28;

contract Counter {
  uint public x;

  event Increment(uint by);

  function inc() public {
    x += 1; 
    emit Increment(1);
  }

  function incBy(uint by) public {
    require(by &amp;gt; 0, "incBy: increment should be positive");
    x += by;
    emit Increment(by);
  }
}
// Random number to make this contract file unique: 185640209
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  ♾️ Compile the project
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;code&gt;npx hardhat build&lt;/code&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Test writing
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;contracts/Couter.t.sol&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;// SPDX-License-Identifier: UNLICENSED
pragma solidity ^0.8.28;

import { Counter } from "./Counter.sol";

contract CounterTest {
  Counter counter;

  function setUp() public {
    counter = new Counter();
  }

  function test_InitialValueIsZero() public view {
    require(counter.x() == 0, "x should start at 0");
  }

  function test_IncIncreasesByOne() public {
    counter.inc();
    require(counter.x() == 1, "inc should increase x by 1");
  }

  function test_IncByIncreasesByGivenAmount() public {
    counter.incBy(3);
    require(counter.x() == 3, "incBy should increase x by the given amount");
  }
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  🧪 Testing
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;code&gt;npx hardhat test&lt;/code&gt;&lt;br&gt;
&lt;code&gt;npx hardhat test solidity&lt;/code&gt;&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h1&gt;
  
  
  Use Hardhat
&lt;/h1&gt;

&lt;h3&gt;
  
  
  👷 Install
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;code&gt;npm add --save-dev @nomicfoundation/hardhat-toolbox-viem @nomicfoundation/hardhat-ignition viem&lt;/code&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  ➕ Add to hardhat config
&lt;/h3&gt;

&lt;p&gt;&lt;code&gt;hardhat.config.ts&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;import hardhatToolboxViemPlugin from "@nomicfoundation/hardhat-toolbox-viem";
import { defineConfig } from "hardhat/config";

export default defineConfig({
   plugins: [hardhatToolboxViemPlugin],
  solidity: {
    version: "0.8.28",
  },
});
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Writing a test
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;test/Counter.ts&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;import assert from "node:assert/strict";
import { describe, it } from "node:test";

import { network } from "hardhat";

describe("Counter", async function () {
  const { viem } = await network.connect();
  const publicClient = await viem.getPublicClient();

  it("The sum of the Increment events should match the current value", async function () {
    const counter = await viem.deployContract("Counter");
    const deploymentBlockNumber = await publicClient.getBlockNumber();

    // run a series of increments
    for (let i = 1n; i &amp;lt;= 10n; i++) {
      await counter.write.incBy([i]);
    }

    const events = await publicClient.getContractEvents({
      address: counter.address,
      abi: counter.abi,
      eventName: "Increment",
      fromBlock: deploymentBlockNumber,
      strict: true,
    });

    // check that the aggregated events match the current value
    let total = 0n;
    for (const event of events) {
      total += event.args.by;
    }

    assert.equal(total, await counter.read.x());
  });
});
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  🏃‍♂️ Run the test
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;code&gt;npx hardhat test nodejs&lt;/code&gt;&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h1&gt;
  
  
  Deploy locally
&lt;/h1&gt;

&lt;p&gt;&lt;code&gt;ignition/modules/Counter.ts&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;import { buildModule } from "@nomicfoundation/hardhat-ignition/modules";

export default buildModule("CounterModule", (m) =&amp;gt; {
  const counter = m.contract("Counter");

  m.call(counter, "incBy", [5n]);

  return { counter };
});
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  🧪 Try
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;code&gt;npx hardhat ignition deploy ignition/modules/Counter.ts&lt;/code&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  🚀 Run the local network
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;code&gt;npx hardhat node&lt;/code&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  🚀 Deploy Contract locally
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;code&gt;npx hardhat ignition deploy ignition/modules/Counter.ts --network localhost&lt;/code&gt;&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h1&gt;
  
  
  Deploy live
&lt;/h1&gt;

&lt;h2&gt;
  
  
  Prerequisites
&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;Create Alchemy Account&lt;br&gt;
Create Meta Mask Account&lt;br&gt;
Install dotenv &lt;code&gt;npm install dotenv&lt;/code&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Code
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;hardhat.config.ts&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;import hardhatToolboxViemPlugin from "@nomicfoundation/hardhat-toolbox-viem";

import { defineConfig } from "hardhat/config";
import dotenv from "dotenv";

dotenv.config();

export default defineConfig({
  plugins: [hardhatToolboxViemPlugin],
  solidity: {
    version: "0.8.28",
  },
  networks: {
    sepolia: {
      type: "http",
      url: process.env.SEPOLIA_RPC_URL || "",
      accounts: process.env.SEPOLIA_PRIVATE_KEY ? [process.env.SEPOLIA_PRIVATE_KEY] : [],
    },
  },
});
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  🏃‍♂️ Run
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;code&gt;npx hardhat ignition deploy ignition/modules/Counter.ts --network sepolia&lt;/code&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  Check with you Contract address
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://sepolia.etherscan.io/" rel="noopener noreferrer"&gt;https://sepolia.etherscan.io/&lt;/a&gt;&lt;/p&gt;

</description>
      <category>smartcontract</category>
      <category>hardhat</category>
      <category>web3</category>
      <category>blockchain</category>
    </item>
    <item>
      <title>What LLM Contains</title>
      <dc:creator>Janith Disanayake</dc:creator>
      <pubDate>Sun, 03 Aug 2025 06:26:52 +0000</pubDate>
      <link>https://dev.to/janithdisanayake/what-llm-contains-5d0c</link>
      <guid>https://dev.to/janithdisanayake/what-llm-contains-5d0c</guid>
      <description>&lt;p&gt;Downloading a model from Ollama or similar platforms (like Hugging Face, TensorFlow Hub, etc.) gives you access to more than just a file labeled “model.” These packages contain several components that allow the model to be executed, fine-tuned, or embedded in applications.&lt;/p&gt;

&lt;p&gt;Let’s break it down into a clear structure, so you can understand, dissect, and even modify the model effectively.&lt;/p&gt;




&lt;h2&gt;
  
  
  🔹 1) What You Get When You Download a Model
&lt;/h2&gt;

&lt;p&gt;A typical downloaded model (especially from Ollama, Hugging Face, etc.) consists of the following main components:&lt;/p&gt;

&lt;h3&gt;
  
  
  ✅ A. Model Weights (Parameters)
&lt;/h3&gt;

&lt;p&gt;Usually large binary files (e.g., .bin, .pt, .safetensors, .ckpt).&lt;/p&gt;

&lt;p&gt;These contain the actual learned values (neurons, weights, biases) from training.&lt;/p&gt;

&lt;p&gt;Cannot run the model without this.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Example:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;pytorch_model.bin – For PyTorch&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;ggml-model-q4_0.bin – Quantized weights used in Ollama and llama.cpp&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  ✅ B. Model Architecture / Config File
&lt;/h3&gt;

&lt;p&gt;Defines the structure of the model (number of layers, hidden units, attention heads, etc.).&lt;/p&gt;

&lt;p&gt;Often in a .json or .yaml file.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Example:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;config.json – Specifies transformer type, vocabulary size, hidden dimensions, etc.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  ✅ C. Tokenizer Files
&lt;/h3&gt;

&lt;p&gt;Preprocessing logic that turns text into tokens and vice versa.&lt;/p&gt;

&lt;p&gt;Includes vocabulary (vocab.json), merges (merges.txt), or tokenizer config.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Example:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;tokenizer.json&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;vocab.txt&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;merges.txt&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;tokenizer_config.json&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  ✅ D. Generation Scripts or Runners
&lt;/h3&gt;

&lt;p&gt;Python or binary files that allow you to run the model (with inference loops, prompts, sampling settings, etc.).&lt;/p&gt;

&lt;p&gt;Ollama wraps this in a unified runtime using Modelfile and its CLI.&lt;/p&gt;

&lt;p&gt;In frameworks like Hugging Face:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;run_generation.py&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;model.py&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  ✅ E. Quantization Information (Optional)
&lt;/h3&gt;

&lt;p&gt;If you're using a quantized model (like from llama.cpp or ggml), there may be metadata about how the weights are compressed.&lt;/p&gt;

&lt;p&gt;Affects performance and memory usage.&lt;/p&gt;

&lt;h3&gt;
  
  
  ✅ F. Prompt Templates / System Instructions (Optional in LLMs)
&lt;/h3&gt;

&lt;p&gt;Ollama models often include template prompts (like system, user, assistant roles).&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;These guide how prompts are injected before inference.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  🔹 2) How You Can Divide and Understand It
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;strong&gt;Component&lt;/strong&gt;&lt;/th&gt;
&lt;th&gt;&lt;strong&gt;Purpose&lt;/strong&gt;&lt;/th&gt;
&lt;th&gt;&lt;strong&gt;Editable?&lt;/strong&gt;&lt;/th&gt;
&lt;th&gt;&lt;strong&gt;Tool Used&lt;/strong&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Model Weights&lt;/td&gt;
&lt;td&gt;Learned knowledge of the model&lt;/td&gt;
&lt;td&gt;❌ Not easily editable&lt;/td&gt;
&lt;td&gt;Python, &lt;code&gt;llama.cpp&lt;/code&gt;, Ollama&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Config/Architecture&lt;/td&gt;
&lt;td&gt;Structure of the neural network&lt;/td&gt;
&lt;td&gt;✅ Yes&lt;/td&gt;
&lt;td&gt;Text editor&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Tokenizer&lt;/td&gt;
&lt;td&gt;Converts words into model-readable format&lt;/td&gt;
&lt;td&gt;✅ Yes&lt;/td&gt;
&lt;td&gt;Hugging Face, &lt;code&gt;tiktoken&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Prompt Templates&lt;/td&gt;
&lt;td&gt;Controls the input prompt formatting&lt;/td&gt;
&lt;td&gt;✅ Yes&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;Modelfile&lt;/code&gt; in Ollama&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Quantization Info&lt;/td&gt;
&lt;td&gt;Enables smaller model sizes and faster runs&lt;/td&gt;
&lt;td&gt;✅ Yes (with tools)&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;llama.cpp&lt;/code&gt;, &lt;code&gt;ggml&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h2&gt;
  
  
  🔹 3) If You're Using Ollama
&lt;/h2&gt;

&lt;p&gt;When you ollama pull llama3, for example, behind the scenes it downloads a model package that contains:&lt;/p&gt;

&lt;p&gt;✅ A quantized binary model file (.bin)&lt;/p&gt;

&lt;p&gt;✅ A Modelfile (like a Dockerfile for models)&lt;/p&gt;

&lt;p&gt;✅ Prompt format templates (like system, user, etc.)&lt;/p&gt;

&lt;p&gt;You can run&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;ollama show llama3

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;To inspect the components and configuration.&lt;/p&gt;




&lt;h2&gt;
  
  
  🔹 4) How to Empower Yourself
&lt;/h2&gt;

&lt;p&gt;Here’s how you can gain deeper control:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;strong&gt;Goal&lt;/strong&gt;&lt;/th&gt;
&lt;th&gt;&lt;strong&gt;What to Learn&lt;/strong&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Fine-tune a model&lt;/td&gt;
&lt;td&gt;Hugging Face Transformers, PyTorch/TF basics&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Quantize for performance&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;ggml&lt;/code&gt;, &lt;code&gt;llama.cpp&lt;/code&gt;, &lt;code&gt;GPTQ&lt;/code&gt;, &lt;code&gt;bitsandbytes&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Build custom prompts&lt;/td&gt;
&lt;td&gt;Prompt engineering, prompt templates in Ollama&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Modify architecture&lt;/td&gt;
&lt;td&gt;Learn model config files (&lt;code&gt;config.json&lt;/code&gt;)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Tokenizer tuning or replacement&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;tokenizers&lt;/code&gt; library, vocab files&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h2&gt;
  
  
  🔹 Summary Diagram
&lt;/h2&gt;

&lt;h4&gt;
  
  
  Downloaded Model
&lt;/h4&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;    ┌──────────────────────┐
    │   Model Weights      │  (.bin, .pt, .safetensors)
    └──────────────────────┘
    ┌──────────────────────┐
    │ Config / Architecture│  (config.json)
    └──────────────────────┘
    ┌──────────────────────┐
    │ Tokenizer Files      │  (vocab.json, merges.txt)
    └──────────────────────┘
    ┌──────────────────────┐
    │ Prompt Templates     │  (system, user format)
    └──────────────────────┘
    ┌──────────────────────┐
    │ Runner / Wrapper     │  (Modelfile, Python scripts)
    └──────────────────────┘
    ┌──────────────────────┐
    │ Quantization Metadata│  (quant-info.json, ggml meta)
    └──────────────────────┘
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

</description>
    </item>
    <item>
      <title>Dumriya Live - AWS Oriented Full Stack Application Infrastructure Overview</title>
      <dc:creator>Janith Disanayake</dc:creator>
      <pubDate>Sun, 22 Dec 2024 16:07:06 +0000</pubDate>
      <link>https://dev.to/janithdisanayake/dumriya-live-aws-oriented-full-stack-application-infrastructure-overview-o9f</link>
      <guid>https://dev.to/janithdisanayake/dumriya-live-aws-oriented-full-stack-application-infrastructure-overview-o9f</guid>
      <description>&lt;h1&gt;
  
  
  Introduction
&lt;/h1&gt;

&lt;ul&gt;
&lt;li&gt;This project is based on &lt;strong&gt;serverless&lt;/strong&gt; architecture with lambda. &lt;/li&gt;
&lt;li&gt;Backend of this application is develop with &lt;strong&gt;express js&lt;/strong&gt;. &lt;/li&gt;
&lt;li&gt;Based on MVC architecture with serverless framework&lt;/li&gt;
&lt;li&gt;Used MongoDB online server as the database.&lt;/li&gt;
&lt;/ul&gt;




&lt;h1&gt;
  
  
  Services and Tools
&lt;/h1&gt;

&lt;h2&gt;
  
  
  Cloud Services
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Lambda&lt;/strong&gt; – Serverless computing service (AWS)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;S3&lt;/strong&gt; – Object storage service (AWS)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;API&lt;/strong&gt; Gateway – Managed service for creating and managing APIs (AWS)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;CloudFront&lt;/strong&gt; – Content delivery network (CDN) (AWS)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;ECR&lt;/strong&gt; – Elastic Container Registry for Docker images (AWS)&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Database
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Atlas MongoDB&lt;/strong&gt; – Cloud-based database service (MongoDB)&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  DevOps &amp;amp; CI/CD
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Github Actions&lt;/strong&gt; – CI/CD automation and workflows&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Development Tools
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;NeoVim&lt;/strong&gt; - Main Editor &lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Swagger UI&lt;/strong&gt;  – Tool for API documentation and interaction&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;JWT&lt;/strong&gt;  – Token-based authentication&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Domain  &amp;amp; DNS Services
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Name.com&lt;/strong&gt;  – Domain registration and DNS services&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Cloudflare&lt;/strong&gt; – DNS Services&lt;/li&gt;
&lt;/ul&gt;




&lt;h1&gt;
  
  
  API
&lt;/h1&gt;

&lt;h2&gt;
  
  
  API Architecture
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fn82cslevyad4x9d2dx8y.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fn82cslevyad4x9d2dx8y.png" alt=" " width="800" height="300"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  API gateway
&lt;/h3&gt;

&lt;p&gt;To handle the load before reach the lambda and provide protection to the each and every endpoint.&lt;/p&gt;

&lt;h3&gt;
  
  
  Lambda function
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Handing all the api that user sends &lt;/li&gt;
&lt;li&gt;Uses &lt;strong&gt;container image&lt;/strong&gt; to create the server &lt;/li&gt;
&lt;li&gt;The image can runs on both lambda as well as normal server (You can configure to run on EC2 instance when setting up environment variable)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;JavaScript&lt;/strong&gt; is the programming language&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Express JS&lt;/strong&gt; is the framework&lt;/li&gt;
&lt;li&gt;Implements with &lt;em&gt;serverless-http&lt;/em&gt; package that helps to run on lambda&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Main Endpoints
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://ymi25x4vfsbxhmrqhdrclmpnci0scxko.lambda-url.us-east-1.on.aws/api-docs/#/Users" rel="noopener noreferrer"&gt;Users&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://ymi25x4vfsbxhmrqhdrclmpnci0scxko.lambda-url.us-east-1.on.aws/api-docs/#/Trains" rel="noopener noreferrer"&gt;Trains&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://ymi25x4vfsbxhmrqhdrclmpnci0scxko.lambda-url.us-east-1.on.aws/api-docs/#/Stations" rel="noopener noreferrer"&gt;Stations&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://ymi25x4vfsbxhmrqhdrclmpnci0scxko.lambda-url.us-east-1.on.aws/api-docs/#/Routes" rel="noopener noreferrer"&gt;Routes&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://ymi25x4vfsbxhmrqhdrclmpnci0scxko.lambda-url.us-east-1.on.aws/api-docs/#/Schedules" rel="noopener noreferrer"&gt;Schedules&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Schemas
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;strong&gt;Model&lt;/strong&gt;&lt;/th&gt;
&lt;th&gt;&lt;strong&gt;Description&lt;/strong&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Train&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Representation of the train that is going through the track.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;TrainInput&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Input model for creating or updating train details.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;TrainLive&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Representation of the live train currently riding. &lt;br&gt; Updated every 5 minutes by a specific Lambda function.&lt;br&gt; Not updated by users or the train directly.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;TrainLiveLog&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Stores the data received from the train's IoT device.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Station&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Representation of a station.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;StationInput&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Input model for creating or updating station details.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Route&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Representation of the route or train track (the pathway of the train).&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;RouteInput&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Input model for creating or updating route details.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Schedule&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Representation of the schedule for when the train is set to run on a specific track at a specific time.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;ScheduleInput&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Input model for creating or updating schedule details.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Device&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Sub-model representing the engine's device and the device authorized users have.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;GeoLocation&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Sub-model used to store location data. This model is shared by the station, route, and other models.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h1&gt;
  
  
  Frontend
&lt;/h1&gt;

&lt;h2&gt;
  
  
  Frontend Architecture
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fua4sg1fmzxt7tr912a32.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fua4sg1fmzxt7tr912a32.png" alt=" " width="800" height="243"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  SvelteKit Overview
&lt;/h2&gt;

&lt;p&gt;SvelteKit is a modern framework for building web applications using Svelte. It features file-based routing and server-side rendering, optimizing performance and user experience.&lt;/p&gt;

&lt;h2&gt;
  
  
  Package Configuration
&lt;/h2&gt;

&lt;p&gt;Defines the project's dependencies and scripts:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Scripts: Key commands for development and testing, such as:

&lt;ul&gt;
&lt;li&gt;dev: Starts the development server.&lt;/li&gt;
&lt;li&gt;build: Compiles the application for production.&lt;/li&gt;
&lt;li&gt;test: Runs unit and integration tests.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;Dependencies:

&lt;ul&gt;
&lt;li&gt;devDependencies: Tools needed during development, including SvelteKit, Vite, ESLint, and Prettier.&lt;/li&gt;
&lt;li&gt;dependencies: Essential for production, including dotenv for managing environment variables.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;h2&gt;
  
  
  Integration with Dumriya-Live API
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;The client-side application makes API calls to api.dumriya.live to fetch real-time data, enabling features like live updates, data visualization, or interactions based on the Dumriya-Live service.&lt;/li&gt;
&lt;li&gt;The application uses environment variables (e.g., API_URL) to securely store and access the Dumriya-Live API endpoint and other sensitive information.&lt;/li&gt;
&lt;/ul&gt;




&lt;h1&gt;
  
  
  CICD Pipeline
&lt;/h1&gt;

&lt;h2&gt;
  
  
  Pipeline Diagram
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fv253bv5t7t3uvxkg5yak.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fv253bv5t7t3uvxkg5yak.png" alt=" " width="800" height="331"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  CI/CD Workflow: Deploying a Dockerized AWS Lambda Function
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Overview
&lt;/h3&gt;

&lt;p&gt;This workflow automates the deployment of a Dockerized AWS Lambda function, triggered on pushes to the prod branch. It utilizes GitHub Actions, AWS services, and Docker to ensure a streamlined, secure, and reliable deployment process.&lt;/p&gt;

&lt;h3&gt;
  
  
  Key Features
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;GitHub Actions: Automates the CI/CD pipeline with a structured sequence triggered on prod branch updates.&lt;/li&gt;
&lt;li&gt;Secure Credential Management: Leverages GitHub Secrets to securely store AWS credentials.&lt;/li&gt;
&lt;li&gt;AWS Elastic Container Registry (ECR): Stores and manages Docker images for the Lambda function.&lt;/li&gt;
&lt;li&gt;Docker Integration: Builds, tags, and pushes Docker images, ensuring consistent runtime environments.&lt;/li&gt;
&lt;li&gt;AWS CLI: Authenticates and interacts with AWS services, such as logging in to ECR.&lt;/li&gt;
&lt;li&gt;Region-Specific Deployment: Operates in the AWS us-east-1 region to ensure environment alignment.&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Workflow Breakdown
&lt;/h3&gt;

&lt;h4&gt;
  
  
  1. Event Trigger
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;Condition: Activated by a push to the &lt;code&gt;qa&lt;/code&gt; branch.&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  2. Steps in the Workflow
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;Checkout Code: Pulls the latest code from the repository using &lt;code&gt;actions/checkout&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Set up Docker Buildx: Configures Docker Buildx for advanced build capabilities.&lt;/li&gt;
&lt;li&gt;Configure AWS Credentials: Authenticates with AWS using secrets for &lt;code&gt;AWS_ACCESS_KEY_ID&lt;/code&gt;, &lt;code&gt;AWS_SECRET_ACCESS_KEY&lt;/code&gt;, and the region &lt;code&gt;us-east-1&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Log in to Amazon ECR: Logs into Amazon Elastic Container Registry (ECR) to allow image pushes.&lt;/li&gt;
&lt;li&gt;Build Docker Image: Builds the Docker image with environment variables from secrets (&lt;code&gt;ENVIRONMENT&lt;/code&gt;, &lt;code&gt;SECRET_KEY&lt;/code&gt;, &lt;code&gt;MONGODB_URI&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;Tag Docker Image: Tags the built image as &lt;code&gt;web-api:latest&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Push Docker Image to ECR: Pushes the tagged image to the specified ECR repository.&lt;/li&gt;
&lt;li&gt;Update Lambda Function: Updates the AWS Lambda function with the new image from ECR.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Benefits
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Automation: Reduces manual intervention by automating key stages like building and deploying Docker images.&lt;/li&gt;
&lt;li&gt;Security: Protects sensitive credentials using GitHub Secrets and applies AWS best practices.&lt;/li&gt;
&lt;li&gt;Consistency: Docker ensures predictable application behavior across environments.&lt;/li&gt;
&lt;li&gt;Scalability: Supports easy scaling and adaptation to different environments or regions.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This workflow integrates essential tools and services to enable secure, fast, and reliable deployment of containerized AWS Lambda functions in production.&lt;/p&gt;

&lt;h2&gt;
  
  
  CI/CD Workflow: Build and Deploy to S3
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Overview
&lt;/h3&gt;

&lt;p&gt;This CI/CD workflow automates the process of building a Node.js project and deploying it to an Amazon S3 bucket. It is triggered by pushes to the prod branch (or a specified branch) and integrates GitHub Actions, AWS S3, and environment variables for a seamless deployment process.&lt;/p&gt;

&lt;h3&gt;
  
  
  Key Features
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;GitHub Actions: Automates the build and deployment pipeline with a defined sequence triggered on prod branch updates.&lt;/li&gt;
&lt;li&gt;Secure Credential Management: Uses GitHub Secrets to securely store sensitive information, such as API keys and AWS credentials.&lt;/li&gt;
&lt;li&gt;Node.js Environment: Sets up and manages the required Node.js runtime and dependencies.&lt;/li&gt;
&lt;li&gt;Build Process:

&lt;ul&gt;
&lt;li&gt;Utilizes environment variables such as MAP_API_KEY and API_URL during the build stage for dynamic configuration.&lt;/li&gt;
&lt;li&gt;Executes the project’s build script using npm run build.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;AWS S3 Integration:

&lt;ul&gt;
&lt;li&gt;Uses AWS CLI to sync the built files to the specified S3 bucket.&lt;/li&gt;
&lt;li&gt;Ensures efficient updates by removing outdated files with the --delete flag.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Workflow Breakdown
&lt;/h3&gt;

&lt;h4&gt;
  
  
  1. Event Trigger
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;Activated by a push to the prod branch (customizable for other branches).&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  2. Steps in the Workflow:
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;Checkout Code: Pulls the latest code from the repository using actions/checkout.&lt;/li&gt;
&lt;li&gt;Set Up Node.js Environment: Configures the specified Node.js version (default is 18).&lt;/li&gt;
&lt;li&gt;Install Dependencies: Installs project dependencies using npm install.&lt;/li&gt;
&lt;li&gt;Build Project:

&lt;ul&gt;
&lt;li&gt;Reads environment variables such as MAP_API_KEY and API_URL from GitHub Secrets.&lt;/li&gt;
&lt;li&gt;Builds the project using the npm run build command.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;Deploy to S3:

&lt;ul&gt;
&lt;li&gt;Authenticates with AWS using credentials from GitHub Secrets.&lt;/li&gt;
&lt;li&gt;Syncs the built project to the configured S3 bucket, ensuring an up-to-date deployment.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;h3&gt;
  
  
  Benefits
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Automation: Eliminates manual tasks for building and deploying the application, improving efficiency.&lt;/li&gt;
&lt;li&gt;Security: Ensures sensitive credentials and environment variables are managed securely via GitHub Secrets.&lt;/li&gt;
&lt;li&gt;Scalability: Easily adaptable to different S3 buckets, environments, or Node.js versions.&lt;/li&gt;
&lt;li&gt;Reliability: Ensures consistency by using a defined build process and removing outdated files from S3.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This workflow provides a secure, automated, and efficient solution for building and deploying Node.js projects to Amazon S3, ensuring seamless updates and reliable performance in production.&lt;/p&gt;




&lt;h1&gt;
  
  
  References
&lt;/h1&gt;

&lt;h2&gt;
  
  
  Links for the applications
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://api.dumriya.live/" rel="noopener noreferrer"&gt;Svelte Client&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://api.dumriya.live/" rel="noopener noreferrer"&gt;API&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://ymi25x4vfsbxhmrqhdrclmpnci0scxko.lambda-url.us-east-1.on.aws/api-docs/" rel="noopener noreferrer"&gt;API Docs&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Repositories
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/JanithDisanayake/Dumriya-Live" rel="noopener noreferrer"&gt;API-Backend&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/JanithDisanayake/Dumriya-Live-client1" rel="noopener noreferrer"&gt;Svelte Client&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/JanithDisanayake/Dumriya-Live-generators" rel="noopener noreferrer"&gt;Generators&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Documents
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://dev.to/janithdisanayake/deploy-a-express-js-app-in-lambda-aws-3f52"&gt;Deploy a Express JS app in Lambda AWS&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://dev.to/janithdisanayake/deploy-express-js-container-image-on-lambda-aws-3ecp"&gt;Deploy Express JS container image on Lambda AWS&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Special Thanks
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/nirangadh" rel="noopener noreferrer"&gt;Nirangha DH (Lecturer)&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>aws</category>
      <category>cicd</category>
      <category>fullstack</category>
      <category>github</category>
    </item>
    <item>
      <title>Deploy Express JS container image on Lambda AWS</title>
      <dc:creator>Janith Disanayake</dc:creator>
      <pubDate>Tue, 24 Sep 2024 22:17:00 +0000</pubDate>
      <link>https://dev.to/janithdisanayake/deploy-express-js-container-image-on-lambda-aws-3ecp</link>
      <guid>https://dev.to/janithdisanayake/deploy-express-js-container-image-on-lambda-aws-3ecp</guid>
      <description>&lt;h1&gt;
  
  
  Introdction
&lt;/h1&gt;

&lt;p&gt;If you want to build a application but you don't want to buy and maintain server the best option is &lt;code&gt;Lambda&lt;/code&gt;. You still can use &lt;code&gt;.zip&lt;/code&gt; file to create a &lt;strong&gt;Expressjs Lambda&lt;/strong&gt; but that is not a best practice to do as a developer. In this scenario you can use &lt;code&gt;Container Image&lt;/code&gt; to create a server.&lt;/p&gt;

&lt;h2&gt;
  
  
  Resources
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://hub.docker.com/r/amazon/aws-lambda-nodejs" rel="noopener noreferrer"&gt;&lt;strong&gt;&lt;code&gt;Base Image&lt;/code&gt;&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://docs.aws.amazon.com/lambda/latest/dg/nodejs-image.html#nodejs-image-clients" rel="noopener noreferrer"&gt;&lt;strong&gt;&lt;code&gt;Documentation&lt;/code&gt;&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h1&gt;
  
  
  Steps 📚
&lt;/h1&gt;

&lt;h2&gt;
  
  
  Create Express app
&lt;/h2&gt;

&lt;p&gt;1) Create Directory for application&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;mkdir &lt;/span&gt;lambda-express
&lt;span class="nb"&gt;cd &lt;/span&gt;lambda-express
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;2) Initialization&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm init
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;3) Install &lt;a href="https://www.npmjs.com/package/express" rel="noopener noreferrer"&gt;Express&lt;/a&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm &lt;span class="nb"&gt;install &lt;/span&gt;express
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;4) Install &lt;a href="https://www.npmjs.com/package/serverless-http" rel="noopener noreferrer"&gt;serverless-http&lt;/a&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm &lt;span class="nb"&gt;install &lt;/span&gt;serverless-http
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Application implementation
&lt;/h2&gt;

&lt;p&gt;1) &lt;strong&gt;app.js file&lt;/strong&gt; =&amp;gt; (&lt;em&gt;lambda-express/app.js&lt;/em&gt;)&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;express&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;require&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;express&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;serverless&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;require&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;serverless-http&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;app&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;express&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

&lt;span class="nx"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;use&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;express&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;());&lt;/span&gt;

&lt;span class="nx"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;/&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;req&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;/ endpoint is reached&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
        &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;send&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Hello World!&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="nx"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;/hello&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;req&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;/ endpoint is reached&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
        &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;send&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Hello from Lambda!&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="nx"&gt;module&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;exports&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;handler&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;serverless&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;app&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;2) &lt;strong&gt;package.json&lt;/strong&gt; =&amp;gt; (&lt;em&gt;lambda-express/package.json&lt;/em&gt;)&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"example"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"version"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"1.0.0"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"main"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"index.js"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"scripts"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"start"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"node app.js"&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"author"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"janith"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"license"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"ISC"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"description"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;""&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"dependencies"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"express"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"^4.19.2"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"serverless-http"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"^3.2.0"&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;3) Check all the npm packages are available or not&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm &lt;span class="nb"&gt;ls&lt;/span&gt; 
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;result&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;example@1.0.0 /home/janith/TEST/example
├── express@4.19.2
└── serverless-http@3.2.0
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Create a docker image
&lt;/h2&gt;

&lt;p&gt;1) Docker file&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight docker"&gt;&lt;code&gt;&lt;span class="c"&gt;# Use the official AWS Lambda Node.js base image&lt;/span&gt;
&lt;span class="k"&gt;FROM&lt;/span&gt;&lt;span class="s"&gt; amazon/aws-lambda-nodejs&lt;/span&gt;

&lt;span class="c"&gt;# Copy function code&lt;/span&gt;
&lt;span class="k"&gt;COPY&lt;/span&gt;&lt;span class="s"&gt; package*.json ${LAMBDA_TASK_ROOT}&lt;/span&gt;
&lt;span class="k"&gt;COPY&lt;/span&gt;&lt;span class="s"&gt; node_modules ${LAMBDA_TASK_ROOT}&lt;/span&gt;
&lt;span class="k"&gt;COPY&lt;/span&gt;&lt;span class="s"&gt; app.js ${LAMBDA_TASK_ROOT}&lt;/span&gt;
&lt;span class="k"&gt;RUN &lt;/span&gt;npm &lt;span class="nb"&gt;install&lt;/span&gt;

&lt;span class="c"&gt;# Command to run the Lambda function&lt;/span&gt;
&lt;span class="k"&gt;CMD&lt;/span&gt;&lt;span class="s"&gt; ["app.handler"]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;2) Confirm installation&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm &lt;span class="nb"&gt;install&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;3) Build the Image&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;make sure you are in the same directory that &lt;code&gt;Dockerfile&lt;/code&gt; file is located
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker build &lt;span class="nt"&gt;-t&lt;/span&gt; lambda-express:latest &lt;span class="nb"&gt;.&lt;/span&gt; 
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fu1b2kblx46fzvq7wasq1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fu1b2kblx46fzvq7wasq1.png" alt=" " width="778" height="307"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Upload Image to ECR
&lt;/h2&gt;

&lt;p&gt;1) Create a &lt;strong&gt;ECR&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;ECR is Elastic Container Registory in AWS&lt;/li&gt;
&lt;li&gt;go to ECR and create a private repository
&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fs8kl0ci56386vlbp530w.png" alt=" " width="800" height="597"&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;2) Upload the Image that you build locally&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;go inside of the repository&lt;/li&gt;
&lt;li&gt;click &lt;em&gt;View push commands&lt;/em&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F67h06nvv3n7r3uk8766o.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F67h06nvv3n7r3uk8766o.png" alt=" " width="800" height="314"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;3) Login first&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;aws ecr get-login-password &lt;span class="nt"&gt;--region&lt;/span&gt; us-east-1 | docker login &lt;span class="nt"&gt;--username&lt;/span&gt; AWS &lt;span class="nt"&gt;--password-stdin&lt;/span&gt; 144901196852.dkr.ecr.us-east-1.amazonaws.com
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fybtfnggmjrcbmzgj0z77.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fybtfnggmjrcbmzgj0z77.png" alt=" " width="778" height="93"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;4) Tag the image&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;you build the image previously no need to build it again if you use another name that different from this repostiry
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker tag lambda-express:latest 144901196852.dkr.ecr.us-east-1.amazonaws.com/lambda-express:latest
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;5) Push the image into ECR&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker push 144901196852.dkr.ecr.us-east-1.amazonaws.com/lambda-express:latest
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fk4jt6f4u91k7c43389pw.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fk4jt6f4u91k7c43389pw.png" alt=" " width="800" height="197"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Deploy Image on Lambda 🚀
&lt;/h2&gt;

&lt;p&gt;1) Create a Lambda function&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fp0ta8dasxhp57yrpm346.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fp0ta8dasxhp57yrpm346.png" alt=" " width="800" height="816"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;2) Select option as Container Image&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F148r43wm3798qn1n3bnz.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F148r43wm3798qn1n3bnz.png" alt=" " width="800" height="230"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;3) Function Name&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2a5w99jst8hf9ncy51it.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2a5w99jst8hf9ncy51it.png" alt=" " width="799" height="186"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;4) Container Image URI&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Click Browse images &lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fua52njlldcdkgrvb5hzl.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fua52njlldcdkgrvb5hzl.png" alt=" " width="800" height="222"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Select your private repository and Image that you created&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2pz3euwfwcg7o1mixf68.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2pz3euwfwcg7o1mixf68.png" alt=" " width="800" height="191"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;5) Keep other settings as default and create the function&lt;/p&gt;

&lt;p&gt;6) Goto configurations and create a &lt;code&gt;Function URL&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fytfsvmks0xxkzhny4m6u.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fytfsvmks0xxkzhny4m6u.png" alt=" " width="800" height="348"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;7) Make sure to select the &lt;code&gt;Auth type&lt;/code&gt; as &lt;code&gt;NONE&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvlzfqsjvguuftapy3ylr.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvlzfqsjvguuftapy3ylr.png" alt=" " width="800" height="480"&gt;&lt;/a&gt;&lt;/p&gt;



&lt;h1&gt; Congratulations 🎉 Just now you deployed your app &lt;/h1&gt;

&lt;p&gt; click your &lt;b&gt;Function URL&lt;b&gt; and enjoy &lt;/b&gt;&lt;/b&gt;&lt;/p&gt;

&lt;p&gt;&lt;b&gt; happy coding ! &lt;/b&gt;&lt;/p&gt;

</description>
      <category>aws</category>
      <category>lambda</category>
      <category>docker</category>
      <category>express</category>
    </item>
    <item>
      <title>Deploy a Express JS app in Lambda AWS</title>
      <dc:creator>Janith Disanayake</dc:creator>
      <pubDate>Sat, 31 Aug 2024 00:00:32 +0000</pubDate>
      <link>https://dev.to/janithdisanayake/deploy-a-express-js-app-in-lambda-aws-3f52</link>
      <guid>https://dev.to/janithdisanayake/deploy-a-express-js-app-in-lambda-aws-3f52</guid>
      <description>&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;Lambda is a AWS service that provides the &lt;strong&gt;&lt;code&gt;server-less&lt;/code&gt;&lt;/strong&gt; application that is easy to run application without maintaining server. It is not expensive and &lt;strong&gt;always free&lt;/strong&gt; under &lt;strong&gt;&lt;code&gt;1000 000&lt;/code&gt;&lt;/strong&gt; requests. There is no need to use any other service in lambda you just can deploy with &lt;strong&gt;&lt;code&gt;Function URL&lt;/code&gt;&lt;/strong&gt;. In this demonstration I will provide the exact steps that you need to follow in order to deploy this application.&lt;/p&gt;




&lt;h2&gt;
  
  
  Steps 📚
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Create a Node JS server
&lt;/h3&gt;

&lt;p&gt;1) Create Directory for application&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;mkdir &lt;/span&gt;lambda-express
&lt;span class="nb"&gt;cd &lt;/span&gt;lambda-express
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;2) Initialization&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm init
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;3) Install Express&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm &lt;span class="nb"&gt;install &lt;/span&gt;express
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Implementing application
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;This is a simple 'Hello World' application here is the code &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;1) Creating the file&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;touch &lt;/span&gt;index.js
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;2) Code of the application&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;express&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;require&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;express&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;serverless&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;require&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;serverless-http&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;app&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;express&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;port&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;3003&lt;/span&gt;

&lt;span class="nx"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;use&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;express&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;());&lt;/span&gt;

&lt;span class="nx"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;/&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;req&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;send&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Hello World!&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;



&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;process&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;env&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;ENVIRONMENT&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;lambda&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;module&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;exports&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;handler&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;serverless&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;app&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;listen&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;port&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;`Example app listening on port &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;port&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="p"&gt;});&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;3) Test it is running on port 3003&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;node index.js
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Deploy on AWS 🚀
&lt;/h2&gt;

&lt;p&gt;1) Create the .zip file&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;zip &lt;span class="nt"&gt;-r&lt;/span&gt; lambda.zip node_modules index.js package.json
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;you can use this command to create the zip file or you can download this file -&amp;gt; &lt;a href="https://github.com/JanithDisanayake/Web-API/raw/dev/lambda.zip" rel="noopener noreferrer"&gt;lambda.zip&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;2) Create a Lambda function&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvkmi2wh5xr7dweh2cpo0.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvkmi2wh5xr7dweh2cpo0.png" alt=" " width="800" height="221"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fc8sr8x4x8in778usdogx.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fc8sr8x4x8in778usdogx.png" alt=" " width="800" height="502"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F67atynoq0ljzye9vvzaz.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F67atynoq0ljzye9vvzaz.png" alt=" " width="800" height="326"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqsobu7ufuc0nlla7vao7.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqsobu7ufuc0nlla7vao7.png" alt=" " width="800" height="541"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fkowu029p84m03h5a7jyd.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fkowu029p84m03h5a7jyd.png" alt=" " width="800" height="423"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;3) Set Environment Variable&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgddrt8zrrtag0dd7e8ft.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgddrt8zrrtag0dd7e8ft.png" alt="set env" width="800" height="351"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;4) Now your App is ready&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3eeqhyf7j40ewhmy5814.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3eeqhyf7j40ewhmy5814.png" alt="final step" width="800" height="353"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;You can click &lt;strong&gt;Function URL&lt;/strong&gt; and check the applications is working &lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Considerations ❗❗
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;This lambda is open to public by Using Public URL&lt;/li&gt;
&lt;li&gt;It might lead to a DDOS attach by someone else &lt;/li&gt;
&lt;li&gt;If you want you can manage lambda by using &lt;code&gt;AWS API Gateway&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;






&lt;h1&gt; Congratulations 🎉 Just now you deployed your app &lt;/h1&gt;

&lt;p&gt; click your &lt;b&gt;Function URL&lt;b&gt; and enjoy &lt;/b&gt;&lt;/b&gt;&lt;/p&gt;

&lt;p&gt;&lt;b&gt; happy coding ! &lt;/b&gt;&lt;/p&gt;

</description>
      <category>express</category>
      <category>aws</category>
      <category>lambda</category>
      <category>serverless</category>
    </item>
  </channel>
</rss>
