{"id":1137,"date":"2025-08-21T12:16:43","date_gmt":"2025-08-21T12:16:43","guid":{"rendered":"https:\/\/tooldech.com\/?p=1137"},"modified":"2025-08-21T14:20:25","modified_gmt":"2025-08-21T14:20:25","slug":"serverless-su-aws","status":"publish","type":"post","link":"https:\/\/tooldech.com\/en\/serverless-su-aws\/","title":{"rendered":"Serverless on AWS: A Practical Guide with Lambda, API Gateway, and DynamoDB"},"content":{"rendered":"<p>Good morning everyone and welcome back to a new Tooldech article. Today we\u2019ll be talking about Serverless.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">What is Serverless on AWS<\/h2>\n\n\n\n<p>The model <a href=\"https:\/\/aws.amazon.com\/serverless\/\"><strong>Serverless<\/strong> in AWS<\/a> It allows you to run code without having to manage physical or virtual servers. By using services such as <strong>AWS Lambda<\/strong>, <strong>API Gateway<\/strong> and <strong>DynamoDB<\/strong>, you can build scalable and low-cost applications, where AWS takes care of the infrastructure.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Why Choose Serverless<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>No server management<\/strong>: you don\u2019t need to worry about provisioning, patching, or scalability.<\/li>\n\n\n\n<li><strong>Automatic scalability<\/strong>: the application adapts to the load in real time.<\/li>\n\n\n\n<li><strong>Pay-per-use<\/strong>: you only pay for the actual use of resources.<\/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\">Project Goal<\/h2>\n\n\n\n<p>We will create a serverless application capable of:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Expose a REST API through <strong>API Gateway<\/strong>.<\/li>\n\n\n\n<li>Trigger a function <strong>AWS Lambda<\/strong> upon receiving HTTP requests.<\/li>\n\n\n\n<li>Store the received data in a table <strong>DynamoDB<\/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\">Prerequisites<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li>AWS account active<\/li>\n\n\n\n<li>Install and configure AWS CLI<code>aws configure<\/code>)<\/li>\n\n\n\n<li>Node.js installato (per il codice Lambda)<\/li>\n\n\n\n<li>IAM user with permissions for Lambda, API Gateway, and DynamoDB<\/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\">Step 1: Creating the DynamoDB Table<\/h2>\n\n\n\n<p>Open the terminal and create a DynamoDB table named <code>Contacts<\/code>:<\/p>\n\n\n\n<pre class=\"wp-block-code has-cyan-bluish-gray-background-color has-background\"><code>aws dynamodb create-table \\\n  --table-name Contacts \\\n  --attribute-definitions AttributeName=id,AttributeType=S \\\n  --key-schema AttributeName=id,KeyType=HASH \\\n  --billing-mode PAY_PER_REQUEST\n<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">Explanation<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><code>AttributeName=id,AttributeType=S<\/code>: defines a primary key <code>id<\/code> of type string<\/li>\n\n\n\n<li><code>PAY_PER_REQUEST<\/code>: a billing model that scales automatically.<\/li>\n<\/ul>\n\n\n\n<figure class=\"wp-block-image size-large\"><img data-dominant-color=\"1b1b1b\" data-has-transparency=\"false\" style=\"--dominant-color: #1b1b1b;\" loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"411\" src=\"https:\/\/tooldech.com\/wp-content\/uploads\/2025\/08\/createdb-1024x411.webp\" alt=\"\" class=\"wp-image-1170 not-transparent\" srcset=\"https:\/\/tooldech.com\/wp-content\/uploads\/2025\/08\/createdb-1024x411.webp 1024w, https:\/\/tooldech.com\/wp-content\/uploads\/2025\/08\/createdb-300x120.webp 300w, https:\/\/tooldech.com\/wp-content\/uploads\/2025\/08\/createdb-768x308.webp 768w, https:\/\/tooldech.com\/wp-content\/uploads\/2025\/08\/createdb-1536x616.webp 1536w, https:\/\/tooldech.com\/wp-content\/uploads\/2025\/08\/createdb-18x7.webp 18w, https:\/\/tooldech.com\/wp-content\/uploads\/2025\/08\/createdb.webp 1620w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Step 2: Creating the Lambda Function<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">1. Create a folder for the project<\/h3>\n\n\n\n<pre class=\"wp-block-code has-cyan-bluish-gray-background-color has-background\"><code>mkdir lambda-contact-api<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code has-cyan-bluish-gray-background-color has-background\"><code>cd lambda-contact-api<\/code><\/pre>\n\n\n\n<figure class=\"wp-block-image size-full\"><img data-dominant-color=\"1e1e1e\" data-has-transparency=\"false\" style=\"--dominant-color: #1e1e1e;\" loading=\"lazy\" decoding=\"async\" width=\"783\" height=\"233\" src=\"https:\/\/tooldech.com\/wp-content\/uploads\/2025\/08\/crfolderlambda.webp\" alt=\"\" class=\"wp-image-1171 not-transparent\" srcset=\"https:\/\/tooldech.com\/wp-content\/uploads\/2025\/08\/crfolderlambda.webp 783w, https:\/\/tooldech.com\/wp-content\/uploads\/2025\/08\/crfolderlambda-300x89.webp 300w, https:\/\/tooldech.com\/wp-content\/uploads\/2025\/08\/crfolderlambda-768x229.webp 768w, https:\/\/tooldech.com\/wp-content\/uploads\/2025\/08\/crfolderlambda-18x5.webp 18w\" sizes=\"auto, (max-width: 783px) 100vw, 783px\" \/><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\">2. Initialize a Node.js project and install the AWS SDK<\/h3>\n\n\n\n<pre class=\"wp-block-code has-cyan-bluish-gray-background-color has-background\"><code>npm init -y<\/code><\/pre>\n\n\n\n<figure class=\"wp-block-image size-full\"><img data-dominant-color=\"1d1d1d\" data-has-transparency=\"false\" style=\"--dominant-color: #1d1d1d;\" loading=\"lazy\" decoding=\"async\" width=\"882\" height=\"441\" src=\"https:\/\/tooldech.com\/wp-content\/uploads\/2025\/08\/npminit.webp\" alt=\"\" class=\"wp-image-1173 not-transparent\" srcset=\"https:\/\/tooldech.com\/wp-content\/uploads\/2025\/08\/npminit.webp 882w, https:\/\/tooldech.com\/wp-content\/uploads\/2025\/08\/npminit-300x150.webp 300w, https:\/\/tooldech.com\/wp-content\/uploads\/2025\/08\/npminit-768x384.webp 768w, https:\/\/tooldech.com\/wp-content\/uploads\/2025\/08\/npminit-18x9.webp 18w\" sizes=\"auto, (max-width: 882px) 100vw, 882px\" \/><\/figure>\n\n\n\n<pre class=\"wp-block-code has-cyan-bluish-gray-background-color has-background\"><code>npm install aws-sdk<\/code><\/pre>\n\n\n\n<figure class=\"wp-block-image size-large\"><img data-dominant-color=\"1f1f1f\" data-has-transparency=\"false\" style=\"--dominant-color: #1f1f1f;\" loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"180\" src=\"https:\/\/tooldech.com\/wp-content\/uploads\/2025\/08\/awssdk-1024x180.webp\" alt=\"\" class=\"wp-image-1172 not-transparent\" srcset=\"https:\/\/tooldech.com\/wp-content\/uploads\/2025\/08\/awssdk-1024x180.webp 1024w, https:\/\/tooldech.com\/wp-content\/uploads\/2025\/08\/awssdk-300x53.webp 300w, https:\/\/tooldech.com\/wp-content\/uploads\/2025\/08\/awssdk-768x135.webp 768w, https:\/\/tooldech.com\/wp-content\/uploads\/2025\/08\/awssdk-18x3.webp 18w, https:\/\/tooldech.com\/wp-content\/uploads\/2025\/08\/awssdk.webp 1352w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\">3. Create the file <code>index.js<\/code> with the following content:<\/h3>\n\n\n\n<pre class=\"wp-block-code has-cyan-bluish-gray-background-color has-background\"><code>const AWS = require('aws-sdk');\nconst dynamo = new AWS.DynamoDB.DocumentClient();\nconst { v4: uuidv4 } = require('uuid');\n\nexports.handler = async (event) =&gt; {\n  const body = JSON.parse(event.body);\n  const id = uuidv4();\n\n  const params = {\n    TableName: 'Contacts',\n    Item: {\n      id: id,\n      name: body.name,\n      email: body.email\n    }\n  };\n\n  await dynamo.put(params).promise();\n\n  return {\n    statusCode: 200,\n    body: JSON.stringify({ message: 'Contatto salvato con successo', id })\n  };\n};\n<\/code><\/pre>\n\n\n\n<p>N.B. It must be placed in the \u201clambda-contact-api\u201d folder.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">4. Install <code>uuid<\/code> and create a zip file<\/h3>\n\n\n\n<pre class=\"wp-block-code has-cyan-bluish-gray-background-color has-background\"><code>npm install uuid<\/code><\/pre>\n\n\n\n<figure class=\"wp-block-image size-full\"><img data-dominant-color=\"222222\" data-has-transparency=\"false\" style=\"--dominant-color: #222222;\" loading=\"lazy\" decoding=\"async\" width=\"817\" height=\"210\" src=\"https:\/\/tooldech.com\/wp-content\/uploads\/2025\/08\/uuid.webp\" alt=\"\" class=\"wp-image-1174 not-transparent\" srcset=\"https:\/\/tooldech.com\/wp-content\/uploads\/2025\/08\/uuid.webp 817w, https:\/\/tooldech.com\/wp-content\/uploads\/2025\/08\/uuid-300x77.webp 300w, https:\/\/tooldech.com\/wp-content\/uploads\/2025\/08\/uuid-768x197.webp 768w, https:\/\/tooldech.com\/wp-content\/uploads\/2025\/08\/uuid-18x5.webp 18w\" sizes=\"auto, (max-width: 817px) 100vw, 817px\" \/><\/figure>\n\n\n\n<pre class=\"wp-block-code has-cyan-bluish-gray-background-color has-background\"><code>zip -r function.zip .<\/code><\/pre>\n\n\n\n<p>This command is used and works on Unix\/Linux\/macOS, but <strong>on Windows PowerShell<\/strong> it is not natively supported in the same way. I\u2019m including it anyway in case you are using other operating systems.<\/p>\n\n\n\n<p>There are other ways, but the one I found is this, if <strong>YOU ARE USING WINDOWS<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-code has-cyan-bluish-gray-background-color has-background\"><code>Compress-Archive -Path * -DestinationPath function.zip<\/code><\/pre>\n\n\n\n<figure class=\"wp-block-image size-large\"><img data-dominant-color=\"166b7e\" data-has-transparency=\"false\" style=\"--dominant-color: #166b7e;\" loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"170\" src=\"https:\/\/tooldech.com\/wp-content\/uploads\/2025\/08\/zip-1024x170.webp\" alt=\"\" class=\"wp-image-1175 not-transparent\" srcset=\"https:\/\/tooldech.com\/wp-content\/uploads\/2025\/08\/zip-1024x170.webp 1024w, https:\/\/tooldech.com\/wp-content\/uploads\/2025\/08\/zip-300x50.webp 300w, https:\/\/tooldech.com\/wp-content\/uploads\/2025\/08\/zip-768x127.webp 768w, https:\/\/tooldech.com\/wp-content\/uploads\/2025\/08\/zip-18x3.webp 18w, https:\/\/tooldech.com\/wp-content\/uploads\/2025\/08\/zip.webp 1267w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<figure class=\"wp-block-image size-large\"><img data-dominant-color=\"212121\" data-has-transparency=\"false\" style=\"--dominant-color: #212121;\" loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"169\" src=\"https:\/\/tooldech.com\/wp-content\/uploads\/2025\/08\/CREATEZIP-1024x169.webp\" alt=\"\" class=\"wp-image-1176 not-transparent\" srcset=\"https:\/\/tooldech.com\/wp-content\/uploads\/2025\/08\/CREATEZIP-1024x169.webp 1024w, https:\/\/tooldech.com\/wp-content\/uploads\/2025\/08\/CREATEZIP-300x49.webp 300w, https:\/\/tooldech.com\/wp-content\/uploads\/2025\/08\/CREATEZIP-768x126.webp 768w, https:\/\/tooldech.com\/wp-content\/uploads\/2025\/08\/CREATEZIP-18x3.webp 18w, https:\/\/tooldech.com\/wp-content\/uploads\/2025\/08\/CREATEZIP.webp 1251w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\">5. Create the Lambda function<\/h3>\n\n\n\n<pre class=\"wp-block-code has-cyan-bluish-gray-background-color has-background\"><code>aws lambda create-function \\\n  --function-name SaveContact \\\n  --runtime nodejs18.x \\\n  --role arn:aws:iam::&lt;ACCOUNT_ID&gt;:role\/&lt;ROLE_NAME&gt; \\\n  --handler index.handler \\\n  --zip-file fileb:\/\/function.zip\n<\/code><\/pre>\n\n\n\n<figure class=\"wp-block-image size-large\"><img data-dominant-color=\"1e1e1e\" data-has-transparency=\"false\" style=\"--dominant-color: #1e1e1e;\" loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"424\" src=\"https:\/\/tooldech.com\/wp-content\/uploads\/2025\/08\/crlambda-1024x424.webp\" alt=\"\" class=\"wp-image-1177 not-transparent\" srcset=\"https:\/\/tooldech.com\/wp-content\/uploads\/2025\/08\/crlambda-1024x424.webp 1024w, https:\/\/tooldech.com\/wp-content\/uploads\/2025\/08\/crlambda-300x124.webp 300w, https:\/\/tooldech.com\/wp-content\/uploads\/2025\/08\/crlambda-768x318.webp 768w, https:\/\/tooldech.com\/wp-content\/uploads\/2025\/08\/crlambda-1536x637.webp 1536w, https:\/\/tooldech.com\/wp-content\/uploads\/2025\/08\/crlambda-18x7.webp 18w, https:\/\/tooldech.com\/wp-content\/uploads\/2025\/08\/crlambda.webp 1561w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p>Replace <code>&lt;ACCOUNT_ID&gt;<\/code> and <code>&lt;ROLE_NAME&gt;<\/code> with the actual values of your account and the IAM role with permissions for DynamoDB.<\/p>\n<\/blockquote>\n\n\n\n<p>Note: if you don\u2019t have a role ready, you need to create one. Here\u2019s a link on how to create a <a href=\"https:\/\/www.youtube.com\/watch?v=-zzkE47JWnA\">IAM ROLE<\/a>.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Step 3: Configuring API Gateway<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">1. Crea una nuova REST API<\/h3>\n\n\n\n<pre class=\"wp-block-code has-cyan-bluish-gray-background-color has-background\"><code>aws apigateway create-rest-api \\\n  --name \"ContactAPI\"\n<\/code><\/pre>\n\n\n\n<p>Write down the returned API ID (e.g. <code>abc123<\/code>).<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img data-dominant-color=\"201d1d\" data-has-transparency=\"false\" style=\"--dominant-color: #201d1d;\" loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"313\" src=\"https:\/\/tooldech.com\/wp-content\/uploads\/2025\/08\/confapi-1024x313.webp\" alt=\"\" class=\"wp-image-1178 not-transparent\" srcset=\"https:\/\/tooldech.com\/wp-content\/uploads\/2025\/08\/confapi-1024x313.webp 1024w, https:\/\/tooldech.com\/wp-content\/uploads\/2025\/08\/confapi-300x92.webp 300w, https:\/\/tooldech.com\/wp-content\/uploads\/2025\/08\/confapi-768x235.webp 768w, https:\/\/tooldech.com\/wp-content\/uploads\/2025\/08\/confapi-18x6.webp 18w, https:\/\/tooldech.com\/wp-content\/uploads\/2025\/08\/confapi.webp 1131w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\">2. Retrieve the root resource ID<\/h3>\n\n\n\n<pre class=\"wp-block-code has-cyan-bluish-gray-background-color has-background\"><code>aws apigateway get-resources --rest-api-id abc123\n<\/code><\/pre>\n\n\n\n<figure class=\"wp-block-image size-large\"><img data-dominant-color=\"1c1c1c\" data-has-transparency=\"false\" style=\"--dominant-color: #1c1c1c;\" loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"257\" src=\"https:\/\/tooldech.com\/wp-content\/uploads\/2025\/08\/idroot-1-1024x257.webp\" alt=\"\" class=\"wp-image-1180 not-transparent\" srcset=\"https:\/\/tooldech.com\/wp-content\/uploads\/2025\/08\/idroot-1-1024x257.webp 1024w, https:\/\/tooldech.com\/wp-content\/uploads\/2025\/08\/idroot-1-300x75.webp 300w, https:\/\/tooldech.com\/wp-content\/uploads\/2025\/08\/idroot-1-768x193.webp 768w, https:\/\/tooldech.com\/wp-content\/uploads\/2025\/08\/idroot-1-18x5.webp 18w, https:\/\/tooldech.com\/wp-content\/uploads\/2025\/08\/idroot-1.webp 1058w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>Write down the <code>id<\/code> della root (<code>\/<\/code>) which in this case is \u201clhuytjg3pa\u201d.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">3. Create the resource <code>\/contact<\/code><\/h3>\n\n\n\n<pre class=\"wp-block-code has-cyan-bluish-gray-background-color has-background\"><code>aws apigateway create-resource \\\n  --rest-api-id abc123 \\\n  --parent-id &lt;root_id&gt; \\\n  --path-part contact\n<\/code><\/pre>\n\n\n\n<figure class=\"wp-block-image size-large\"><img data-dominant-color=\"1d1d1d\" data-has-transparency=\"false\" style=\"--dominant-color: #1d1d1d;\" loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"150\" src=\"https:\/\/tooldech.com\/wp-content\/uploads\/2025\/08\/rescontact-1024x150.webp\" alt=\"\" class=\"wp-image-1181 not-transparent\" srcset=\"https:\/\/tooldech.com\/wp-content\/uploads\/2025\/08\/rescontact-1024x150.webp 1024w, https:\/\/tooldech.com\/wp-content\/uploads\/2025\/08\/rescontact-300x44.webp 300w, https:\/\/tooldech.com\/wp-content\/uploads\/2025\/08\/rescontact-768x113.webp 768w, https:\/\/tooldech.com\/wp-content\/uploads\/2025\/08\/rescontact-18x3.webp 18w, https:\/\/tooldech.com\/wp-content\/uploads\/2025\/08\/rescontact.webp 1481w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\">4. Add POST method<\/h3>\n\n\n\n<pre class=\"wp-block-code has-cyan-bluish-gray-background-color has-background\"><code>aws apigateway put-method \\\n  --rest-api-id abc123 \\\n  --resource-id &lt;contact_id&gt; \\\n  --http-method POST \\\n  --authorization-type NONE\n<\/code><\/pre>\n\n\n\n<figure class=\"wp-block-image size-large\"><img data-dominant-color=\"1d1d1d\" data-has-transparency=\"false\" style=\"--dominant-color: #1d1d1d;\" loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"135\" src=\"https:\/\/tooldech.com\/wp-content\/uploads\/2025\/08\/methodpost-1024x135.webp\" alt=\"\" class=\"wp-image-1182 not-transparent\" srcset=\"https:\/\/tooldech.com\/wp-content\/uploads\/2025\/08\/methodpost-1024x135.webp 1024w, https:\/\/tooldech.com\/wp-content\/uploads\/2025\/08\/methodpost-300x39.webp 300w, https:\/\/tooldech.com\/wp-content\/uploads\/2025\/08\/methodpost-768x101.webp 768w, https:\/\/tooldech.com\/wp-content\/uploads\/2025\/08\/methodpost-1536x202.webp 1536w, https:\/\/tooldech.com\/wp-content\/uploads\/2025\/08\/methodpost-18x2.webp 18w, https:\/\/tooldech.com\/wp-content\/uploads\/2025\/08\/methodpost.webp 1565w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\">5. Connect Lambda as the integration<\/h3>\n\n\n\n<pre class=\"wp-block-code has-cyan-bluish-gray-background-color has-background\"><code>aws apigateway put-integration \\\n  --rest-api-id abc123 \\\n  --resource-id &lt;contact_id&gt; \\\n  --http-method POST \\\n  --type AWS_PROXY \\\n  --integration-http-method POST \\\n  --uri arn:aws:apigateway:&lt;region&gt;:lambda:path\/2015-03-31\/functions\/arn:aws:lambda:&lt;region&gt;:&lt;account_id&gt;:function:SaveContact\/invocations\n<\/code><\/pre>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p>Remember to replace <code>&lt;region&gt;<\/code> and <code>&lt;account_id&gt;<\/code> with your actual values.<\/p>\n<\/blockquote>\n\n\n\n<figure class=\"wp-block-image size-large\"><img data-dominant-color=\"212020\" data-has-transparency=\"false\" style=\"--dominant-color: #212020;\" loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"212\" src=\"https:\/\/tooldech.com\/wp-content\/uploads\/2025\/08\/linklambda-1024x212.webp\" alt=\"\" class=\"wp-image-1183 not-transparent\" srcset=\"https:\/\/tooldech.com\/wp-content\/uploads\/2025\/08\/linklambda-1024x212.webp 1024w, https:\/\/tooldech.com\/wp-content\/uploads\/2025\/08\/linklambda-300x62.webp 300w, https:\/\/tooldech.com\/wp-content\/uploads\/2025\/08\/linklambda-768x159.webp 768w, https:\/\/tooldech.com\/wp-content\/uploads\/2025\/08\/linklambda-1536x318.webp 1536w, https:\/\/tooldech.com\/wp-content\/uploads\/2025\/08\/linklambda-18x4.webp 18w, https:\/\/tooldech.com\/wp-content\/uploads\/2025\/08\/linklambda.webp 1575w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\">6. Grant API Gateway permission to invoke Lambda<\/h3>\n\n\n\n<pre class=\"wp-block-code has-cyan-bluish-gray-background-color has-background\"><code>aws lambda add-permission \\\n  --function-name SaveContact \\\n  --statement-id apigateway-access \\\n  --action lambda:InvokeFunction \\\n  --principal apigateway.amazonaws.com \\\n  --source-arn arn:aws:execute-api:&lt;region&gt;:&lt;account_id&gt;:&lt;api_id&gt;\/*\/POST\/contact\n<\/code><\/pre>\n\n\n\n<figure class=\"wp-block-image size-large\"><img data-dominant-color=\"252525\" data-has-transparency=\"false\" style=\"--dominant-color: #252525;\" loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"138\" src=\"https:\/\/tooldech.com\/wp-content\/uploads\/2025\/08\/invokelambdapermission-1024x138.webp\" alt=\"\" class=\"wp-image-1184 not-transparent\" srcset=\"https:\/\/tooldech.com\/wp-content\/uploads\/2025\/08\/invokelambdapermission-1024x138.webp 1024w, https:\/\/tooldech.com\/wp-content\/uploads\/2025\/08\/invokelambdapermission-300x40.webp 300w, https:\/\/tooldech.com\/wp-content\/uploads\/2025\/08\/invokelambdapermission-768x104.webp 768w, https:\/\/tooldech.com\/wp-content\/uploads\/2025\/08\/invokelambdapermission-1536x207.webp 1536w, https:\/\/tooldech.com\/wp-content\/uploads\/2025\/08\/invokelambdapermission-18x2.webp 18w, https:\/\/tooldech.com\/wp-content\/uploads\/2025\/08\/invokelambdapermission.webp 1572w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>Note: api-id is always our nvjqmw8ywd.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">7. Deploy the API<\/h3>\n\n\n\n<pre class=\"wp-block-code has-cyan-bluish-gray-background-color has-background\"><code>aws apigateway create-deployment \\\n  --rest-api-id abc123 \\\n  --stage-name prod\n<\/code><\/pre>\n\n\n\n<figure class=\"wp-block-image size-large\"><img data-dominant-color=\"1e1e1e\" data-has-transparency=\"false\" style=\"--dominant-color: #1e1e1e;\" loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"137\" src=\"https:\/\/tooldech.com\/wp-content\/uploads\/2025\/08\/deploy-1024x137.webp\" alt=\"\" class=\"wp-image-1185 not-transparent\" srcset=\"https:\/\/tooldech.com\/wp-content\/uploads\/2025\/08\/deploy-1024x137.webp 1024w, https:\/\/tooldech.com\/wp-content\/uploads\/2025\/08\/deploy-300x40.webp 300w, https:\/\/tooldech.com\/wp-content\/uploads\/2025\/08\/deploy-768x103.webp 768w, https:\/\/tooldech.com\/wp-content\/uploads\/2025\/08\/deploy-18x2.webp 18w, https:\/\/tooldech.com\/wp-content\/uploads\/2025\/08\/deploy.webp 1326w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>Great, now that we have deployed, we need to check if everything is working correctly.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Step 4: Testing the Application<\/h2>\n\n\n\n<p>Now let\u2019s try a test! Let\u2019s send a POST request using <code>curl<\/code>:<\/p>\n\n\n\n<pre class=\"wp-block-code has-cyan-bluish-gray-background-color has-background\"><code>curl -X POST https:\/\/&lt;api_id&gt;.execute-api.&lt;region&gt;.amazonaws.com\/prod\/contact \\\n  -H \"Content-Type: application\/json\" \\\n  -d '{\"name\":\"Mario Rossi\", \"email\":\"mario@example.com\"}'\n<\/code><\/pre>\n\n\n\n<p>If the test fails with this error<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img data-dominant-color=\"221e1e\" data-has-transparency=\"false\" style=\"--dominant-color: #221e1e;\" loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"118\" src=\"https:\/\/tooldech.com\/wp-content\/uploads\/2025\/08\/errordeploy-1024x118.webp\" alt=\"\" class=\"wp-image-1187 not-transparent\" srcset=\"https:\/\/tooldech.com\/wp-content\/uploads\/2025\/08\/errordeploy-1024x118.webp 1024w, https:\/\/tooldech.com\/wp-content\/uploads\/2025\/08\/errordeploy-300x34.webp 300w, https:\/\/tooldech.com\/wp-content\/uploads\/2025\/08\/errordeploy-768x88.webp 768w, https:\/\/tooldech.com\/wp-content\/uploads\/2025\/08\/errordeploy-1536x177.webp 1536w, https:\/\/tooldech.com\/wp-content\/uploads\/2025\/08\/errordeploy-18x2.webp 18w, https:\/\/tooldech.com\/wp-content\/uploads\/2025\/08\/errordeploy.webp 1575w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>Some configurations are missing, don\u2019t worry, and the reasons for the error can be three:<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">A. The package <code>uuid<\/code> is not included in the <code>.zip<\/code><\/h4>\n\n\n\n<p>You used <code>require('uuid')<\/code>, but it might not have been included in the package. Check that in the <code>function.zip<\/code> there is <code>node_modules\/uuid<\/code>.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">B. The DynamoDB table does not exist or the name is incorrect<\/h4>\n\n\n\n<p>Check that it exists <strong>exactly<\/strong> table named <code>Contacts<\/code>.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">C. The IAM role does not have permission <code>dynamodb:PutItem<\/code><\/h4>\n\n\n\n<p>Make sure you have <strong>attached the policy<\/strong> <code>AmazonDynamoDBFullAccess<\/code> the role of lambda<\/p>\n\n\n\n<p>In my case, it\u2019s because I didn\u2019t attach the DynamoDB policy to the Lambda role.<\/p>\n\n\n\n<p>With this command<\/p>\n\n\n\n<pre class=\"wp-block-code has-cyan-bluish-gray-background-color has-background\"><code>aws iam attach-role-policy --role-name LambdaDynamoDBRole --policy-arn arn:aws:iam::aws:policy\/AmazonDynamoDBFullAccess<\/code><\/pre>\n\n\n\n<p>You can attach the policy to the Lambda role, wait a few seconds, and then rerun the deploy command.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img data-dominant-color=\"252525\" data-has-transparency=\"false\" style=\"--dominant-color: #252525;\" loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"41\" src=\"https:\/\/tooldech.com\/wp-content\/uploads\/2025\/08\/attachpolicy-1024x41.webp\" alt=\"\" class=\"wp-image-1188 not-transparent\" srcset=\"https:\/\/tooldech.com\/wp-content\/uploads\/2025\/08\/attachpolicy-1024x41.webp 1024w, https:\/\/tooldech.com\/wp-content\/uploads\/2025\/08\/attachpolicy-300x12.webp 300w, https:\/\/tooldech.com\/wp-content\/uploads\/2025\/08\/attachpolicy-768x31.webp 768w, https:\/\/tooldech.com\/wp-content\/uploads\/2025\/08\/attachpolicy-1536x62.webp 1536w, https:\/\/tooldech.com\/wp-content\/uploads\/2025\/08\/attachpolicy-18x1.webp 18w, https:\/\/tooldech.com\/wp-content\/uploads\/2025\/08\/attachpolicy.webp 1571w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\">Expected response:<\/h3>\n\n\n\n<pre class=\"wp-block-code has-cyan-bluish-gray-background-color has-background\"><code>{\n  \"message\": \"Contatto salvato con successo\",\n  \"id\": \"d91f...\"\n}\n<\/code><\/pre>\n\n\n\n<figure class=\"wp-block-image size-large\"><img data-dominant-color=\"1c1e1e\" data-has-transparency=\"false\" style=\"--dominant-color: #1c1e1e;\" loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"134\" src=\"https:\/\/tooldech.com\/wp-content\/uploads\/2025\/08\/deploysuccess-1024x134.webp\" alt=\"\" class=\"wp-image-1189 not-transparent\" srcset=\"https:\/\/tooldech.com\/wp-content\/uploads\/2025\/08\/deploysuccess-1024x134.webp 1024w, https:\/\/tooldech.com\/wp-content\/uploads\/2025\/08\/deploysuccess-300x39.webp 300w, https:\/\/tooldech.com\/wp-content\/uploads\/2025\/08\/deploysuccess-768x101.webp 768w, https:\/\/tooldech.com\/wp-content\/uploads\/2025\/08\/deploysuccess-1536x202.webp 1536w, https:\/\/tooldech.com\/wp-content\/uploads\/2025\/08\/deploysuccess-18x2.webp 18w, https:\/\/tooldech.com\/wp-content\/uploads\/2025\/08\/deploysuccess.webp 1577w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>Check in the DynamoDB console that the data has been saved correctly.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img data-dominant-color=\"f9f9f9\" data-has-transparency=\"false\" style=\"--dominant-color: #f9f9f9;\" loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"515\" src=\"https:\/\/tooldech.com\/wp-content\/uploads\/2025\/08\/dynamo-1024x515.webp\" alt=\"\" class=\"wp-image-1190 not-transparent\" srcset=\"https:\/\/tooldech.com\/wp-content\/uploads\/2025\/08\/dynamo-1024x515.webp 1024w, https:\/\/tooldech.com\/wp-content\/uploads\/2025\/08\/dynamo-300x151.webp 300w, https:\/\/tooldech.com\/wp-content\/uploads\/2025\/08\/dynamo-768x386.webp 768w, https:\/\/tooldech.com\/wp-content\/uploads\/2025\/08\/dynamo-18x9.webp 18w, https:\/\/tooldech.com\/wp-content\/uploads\/2025\/08\/dynamo.webp 1237w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>As we can see from the DynamoDB screen, our POST call was successful.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Conclusion<\/h2>\n\n\n\n<p>You have just built a <strong>completely serverless web API<\/strong> with <strong>Lambda, API Gateway e DynamoDB<\/strong>, without having to manage any server!<\/p>\n\n\n\n<p>We\u2019ve reached the end of this tutorial. I hope it helped you better understand the topic or solve other related problems. Thank you for making it this far, and see you in the next tutorial. See you soon!!<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Start your Serverless journey now!<\/h2>\n\n\n\n<p>Hai trovato utile questa guida? Condividila o visita <a href=\"https:\/\/tooldech.com\">tooldech.com<\/a> for more practical tutorials on DevOps, Cloud, and Automation!<\/p>\n\n\n\n<div style=\"height:100px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<div style=\"height:100px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<div style=\"height:100px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p>Follow us on our social media!<\/p>\n\n\n\n<ul class=\"wp-block-social-links has-huge-icon-size is-content-justification-center is-layout-flex wp-container-core-social-links-is-layout-a89b3969 wp-block-social-links-is-layout-flex\"><li class=\"wp-social-link wp-social-link-pinterest  wp-block-social-link\"><a href=\"https:\/\/pin.it\/2Bk2aTtDW\" class=\"wp-block-social-link-anchor\"><svg width=\"24\" height=\"24\" viewbox=\"0 0 24 24\" version=\"1.1\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" aria-hidden=\"true\" focusable=\"false\"><path d=\"M12.289,2C6.617,2,3.606,5.648,3.606,9.622c0,1.846,1.025,4.146,2.666,4.878c0.25,0.111,0.381,0.063,0.439-0.169 c0.044-0.175,0.267-1.029,0.365-1.428c0.032-0.128,0.017-0.237-0.091-0.362C6.445,11.911,6.01,10.75,6.01,9.668 c0-2.777,2.194-5.464,5.933-5.464c3.23,0,5.49,2.108,5.49,5.122c0,3.407-1.794,5.768-4.13,5.768c-1.291,0-2.257-1.021-1.948-2.277 c0.372-1.495,1.089-3.112,1.089-4.191c0-0.967-0.542-1.775-1.663-1.775c-1.319,0-2.379,1.309-2.379,3.059 c0,1.115,0.394,1.869,0.394,1.869s-1.302,5.279-1.54,6.261c-0.405,1.666,0.053,4.368,0.094,4.604 c0.021,0.126,0.167,0.169,0.25,0.063c0.129-0.165,1.699-2.419,2.142-4.051c0.158-0.59,0.817-2.995,0.817-2.995 c0.43,0.784,1.681,1.446,3.013,1.446c3.963,0,6.822-3.494,6.822-7.833C20.394,5.112,16.849,2,12.289,2\"><\/path><\/svg><span class=\"wp-block-social-link-label screen-reader-text\">Pinterest<\/span><\/a><\/li>\n\n<li class=\"wp-social-link wp-social-link-instagram  wp-block-social-link\"><a href=\"https:\/\/www.instagram.com\/tooldech\/\" class=\"wp-block-social-link-anchor\"><svg width=\"24\" height=\"24\" viewbox=\"0 0 24 24\" version=\"1.1\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" aria-hidden=\"true\" focusable=\"false\"><path d=\"M12,4.622c2.403,0,2.688,0.009,3.637,0.052c0.877,0.04,1.354,0.187,1.671,0.31c0.42,0.163,0.72,0.358,1.035,0.673 c0.315,0.315,0.51,0.615,0.673,1.035c0.123,0.317,0.27,0.794,0.31,1.671c0.043,0.949,0.052,1.234,0.052,3.637 s-0.009,2.688-0.052,3.637c-0.04,0.877-0.187,1.354-0.31,1.671c-0.163,0.42-0.358,0.72-0.673,1.035 c-0.315,0.315-0.615,0.51-1.035,0.673c-0.317,0.123-0.794,0.27-1.671,0.31c-0.949,0.043-1.233,0.052-3.637,0.052 s-2.688-0.009-3.637-0.052c-0.877-0.04-1.354-0.187-1.671-0.31c-0.42-0.163-0.72-0.358-1.035-0.673 c-0.315-0.315-0.51-0.615-0.673-1.035c-0.123-0.317-0.27-0.794-0.31-1.671C4.631,14.688,4.622,14.403,4.622,12 s0.009-2.688,0.052-3.637c0.04-0.877,0.187-1.354,0.31-1.671c0.163-0.42,0.358-0.72,0.673-1.035 c0.315-0.315,0.615-0.51,1.035-0.673c0.317-0.123,0.794-0.27,1.671-0.31C9.312,4.631,9.597,4.622,12,4.622 M12,3 C9.556,3,9.249,3.01,8.289,3.054C7.331,3.098,6.677,3.25,6.105,3.472C5.513,3.702,5.011,4.01,4.511,4.511 c-0.5,0.5-0.808,1.002-1.038,1.594C3.25,6.677,3.098,7.331,3.054,8.289C3.01,9.249,3,9.556,3,12c0,2.444,0.01,2.751,0.054,3.711 c0.044,0.958,0.196,1.612,0.418,2.185c0.23,0.592,0.538,1.094,1.038,1.594c0.5,0.5,1.002,0.808,1.594,1.038 c0.572,0.222,1.227,0.375,2.185,0.418C9.249,20.99,9.556,21,12,21s2.751-0.01,3.711-0.054c0.958-0.044,1.612-0.196,2.185-0.418 c0.592-0.23,1.094-0.538,1.594-1.038c0.5-0.5,0.808-1.002,1.038-1.594c0.222-0.572,0.375-1.227,0.418-2.185 C20.99,14.751,21,14.444,21,12s-0.01-2.751-0.054-3.711c-0.044-0.958-0.196-1.612-0.418-2.185c-0.23-0.592-0.538-1.094-1.038-1.594 c-0.5-0.5-1.002-0.808-1.594-1.038c-0.572-0.222-1.227-0.375-2.185-0.418C14.751,3.01,14.444,3,12,3L12,3z M12,7.378 c-2.552,0-4.622,2.069-4.622,4.622S9.448,16.622,12,16.622s4.622-2.069,4.622-4.622S14.552,7.378,12,7.378z M12,15 c-1.657,0-3-1.343-3-3s1.343-3,3-3s3,1.343,3,3S13.657,15,12,15z M16.804,6.116c-0.596,0-1.08,0.484-1.08,1.08 s0.484,1.08,1.08,1.08c0.596,0,1.08-0.484,1.08-1.08S17.401,6.116,16.804,6.116z\"><\/path><\/svg><span class=\"wp-block-social-link-label screen-reader-text\">Instagram<\/span><\/a><\/li>\n\n<li class=\"wp-social-link wp-social-link-github  wp-block-social-link\"><a href=\"https:\/\/github.com\/Matteo29-mar\" class=\"wp-block-social-link-anchor\"><svg width=\"24\" height=\"24\" viewbox=\"0 0 24 24\" version=\"1.1\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" aria-hidden=\"true\" focusable=\"false\"><path d=\"M12,2C6.477,2,2,6.477,2,12c0,4.419,2.865,8.166,6.839,9.489c0.5,0.09,0.682-0.218,0.682-0.484 c0-0.236-0.009-0.866-0.014-1.699c-2.782,0.602-3.369-1.34-3.369-1.34c-0.455-1.157-1.11-1.465-1.11-1.465 c-0.909-0.62,0.069-0.608,0.069-0.608c1.004,0.071,1.532,1.03,1.532,1.03c0.891,1.529,2.341,1.089,2.91,0.833 c0.091-0.647,0.349-1.086,0.635-1.337c-2.22-0.251-4.555-1.111-4.555-4.943c0-1.091,0.39-1.984,1.03-2.682 C6.546,8.54,6.202,7.524,6.746,6.148c0,0,0.84-0.269,2.75,1.025C10.295,6.95,11.15,6.84,12,6.836 c0.85,0.004,1.705,0.114,2.504,0.336c1.909-1.294,2.748-1.025,2.748-1.025c0.546,1.376,0.202,2.394,0.1,2.646 c0.64,0.699,1.026,1.591,1.026,2.682c0,3.841-2.337,4.687-4.565,4.935c0.359,0.307,0.679,0.917,0.679,1.852 c0,1.335-0.012,2.415-0.012,2.741c0,0.269,0.18,0.579,0.688,0.481C19.138,20.161,22,16.416,22,12C22,6.477,17.523,2,12,2z\"><\/path><\/svg><span class=\"wp-block-social-link-label screen-reader-text\">GitHub<\/span><\/a><\/li>\n\n<li class=\"wp-social-link wp-social-link-etsy  wp-block-social-link\"><a href=\"https:\/\/www.etsy.com\/shop\/tooldech\" class=\"wp-block-social-link-anchor\"><svg width=\"24\" height=\"24\" viewbox=\"0 0 24 24\" version=\"1.1\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" aria-hidden=\"true\" focusable=\"false\"><path d=\"M9.16033,4.038c0-.27174.02717-.43478.48913-.43478h6.22283c1.087,0,1.68478.92391,2.11957,2.663l.35326,1.38587h1.05978C19.59511,3.712,19.75815,2,19.75815,2s-2.663.29891-4.23913.29891h-7.962L3.29076,2.163v1.1413L4.731,3.57609c1.00543.19022,1.25.40761,1.33152,1.33152,0,0,.08152,2.71739.08152,7.20109s-.08152,7.17391-.08152,7.17391c0,.81522-.32609,1.11413-1.33152,1.30435l-1.44022.27174V22l4.2663-.13587h7.11957c1.60326,0,5.32609.13587,5.32609.13587.08152-.97826.625-5.40761.70652-5.89674H19.7038L18.644,18.52174c-.84239,1.90217-2.06522,2.038-3.42391,2.038H11.1712c-1.3587,0-2.01087-.54348-2.01087-1.712V12.65217s3.0163,0,3.99457.08152c.76087.05435,1.22283.27174,1.46739,1.33152l.32609,1.413h1.16848l-.08152-3.55978.163-3.587H15.02989l-.38043,1.57609c-.24457,1.03261-.40761,1.22283-1.46739,1.33152-1.38587.13587-4.02174.1087-4.02174.1087Z\"><\/path><\/svg><span class=\"wp-block-social-link-label screen-reader-text\">Etsy<\/span><\/a><\/li><\/ul>\n\n\n\n<p><\/p>","protected":false},"excerpt":{"rendered":"<p>Buongiorno a tutti e bentornati in nuovo articolo di tooldech, oggi parleremo di Serverless. Cos&#8217;\u00e8 il Serverless su AWS Il modello Serverless su AWS permette di eseguire codice senza dover gestire server fisici o virtuali. Utilizzando servizi come AWS Lambda, API Gateway e DynamoDB, puoi costruire applicazioni scalabili e a basso costo, dove AWS si [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":1193,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_jetpack_memberships_contains_paid_content":false,"footnotes":""},"categories":[3],"tags":[],"class_list":["post-1137","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-cloud"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.5 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Serverless su AWS: Guida Pratica con Lambda, API Gateway e DynamoDB - tooldech<\/title>\n<meta name=\"description\" content=\"Impara con tooldech a creare un infrastruttura Serverless su AWS: Guida Pratica con Lambda, API Gateway e DynamoDB\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/tooldech.com\/en\/serverless-su-aws\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Serverless su AWS: Guida Pratica con Lambda, API Gateway e DynamoDB - tooldech\" \/>\n<meta property=\"og:description\" content=\"Impara con tooldech a creare un infrastruttura Serverless su AWS: Guida Pratica con Lambda, API Gateway e DynamoDB\" \/>\n<meta property=\"og:url\" content=\"https:\/\/tooldech.com\/en\/serverless-su-aws\/\" \/>\n<meta property=\"og:site_name\" content=\"tooldech\" \/>\n<meta property=\"article:published_time\" content=\"2025-08-21T12:16:43+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2025-08-21T14:20:25+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/tooldech.com\/wp-content\/uploads\/2025\/08\/immevi.webp\" \/>\n\t<meta property=\"og:image:width\" content=\"1024\" \/>\n\t<meta property=\"og:image:height\" content=\"1024\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"tooldech\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"tooldech\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"15 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/tooldech.com\\\/serverless-su-aws\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/tooldech.com\\\/serverless-su-aws\\\/\"},\"author\":{\"name\":\"tooldech\",\"@id\":\"https:\\\/\\\/tooldech.com\\\/#\\\/schema\\\/person\\\/4a554644f96951080896bbb327febe3b\"},\"headline\":\"Serverless su AWS: Guida Pratica con Lambda, API Gateway e DynamoDB\",\"datePublished\":\"2025-08-21T12:16:43+00:00\",\"dateModified\":\"2025-08-21T14:20:25+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/tooldech.com\\\/serverless-su-aws\\\/\"},\"wordCount\":646,\"commentCount\":17,\"publisher\":{\"@id\":\"https:\\\/\\\/tooldech.com\\\/#\\\/schema\\\/person\\\/4a554644f96951080896bbb327febe3b\"},\"image\":{\"@id\":\"https:\\\/\\\/tooldech.com\\\/serverless-su-aws\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/tooldech.com\\\/wp-content\\\/uploads\\\/2025\\\/08\\\/immevi.webp\",\"articleSection\":[\"Cloud\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/tooldech.com\\\/serverless-su-aws\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/tooldech.com\\\/serverless-su-aws\\\/\",\"url\":\"https:\\\/\\\/tooldech.com\\\/serverless-su-aws\\\/\",\"name\":\"Serverless su AWS: Guida Pratica con Lambda, API Gateway e DynamoDB - tooldech\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/tooldech.com\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/tooldech.com\\\/serverless-su-aws\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/tooldech.com\\\/serverless-su-aws\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/tooldech.com\\\/wp-content\\\/uploads\\\/2025\\\/08\\\/immevi.webp\",\"datePublished\":\"2025-08-21T12:16:43+00:00\",\"dateModified\":\"2025-08-21T14:20:25+00:00\",\"description\":\"Impara con tooldech a creare un infrastruttura Serverless su AWS: Guida Pratica con Lambda, API Gateway e DynamoDB\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/tooldech.com\\\/serverless-su-aws\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/tooldech.com\\\/serverless-su-aws\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/tooldech.com\\\/serverless-su-aws\\\/#primaryimage\",\"url\":\"https:\\\/\\\/tooldech.com\\\/wp-content\\\/uploads\\\/2025\\\/08\\\/immevi.webp\",\"contentUrl\":\"https:\\\/\\\/tooldech.com\\\/wp-content\\\/uploads\\\/2025\\\/08\\\/immevi.webp\",\"width\":1024,\"height\":1024},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/tooldech.com\\\/serverless-su-aws\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/tooldech.com\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Serverless su AWS: Guida Pratica con Lambda, API Gateway e DynamoDB\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/tooldech.com\\\/#website\",\"url\":\"https:\\\/\\\/tooldech.com\\\/\",\"name\":\"tooldech\",\"description\":\"\",\"publisher\":{\"@id\":\"https:\\\/\\\/tooldech.com\\\/#\\\/schema\\\/person\\\/4a554644f96951080896bbb327febe3b\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/tooldech.com\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\\\/\\\/tooldech.com\\\/#\\\/schema\\\/person\\\/4a554644f96951080896bbb327febe3b\",\"name\":\"tooldech\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/tooldech.com\\\/wp-content\\\/uploads\\\/2025\\\/06\\\/logo.png\",\"url\":\"https:\\\/\\\/tooldech.com\\\/wp-content\\\/uploads\\\/2025\\\/06\\\/logo.png\",\"contentUrl\":\"https:\\\/\\\/tooldech.com\\\/wp-content\\\/uploads\\\/2025\\\/06\\\/logo.png\",\"width\":1024,\"height\":1024,\"caption\":\"tooldech\"},\"logo\":{\"@id\":\"https:\\\/\\\/tooldech.com\\\/wp-content\\\/uploads\\\/2025\\\/06\\\/logo.png\"},\"sameAs\":[\"https:\\\/\\\/tooldech.com\"],\"url\":\"https:\\\/\\\/tooldech.com\\\/en\\\/author\\\/tooldech\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Serverless su AWS: Guida Pratica con Lambda, API Gateway e DynamoDB - tooldech","description":"Impara con tooldech a creare un infrastruttura Serverless su AWS: Guida Pratica con Lambda, API Gateway e DynamoDB","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/tooldech.com\/en\/serverless-su-aws\/","og_locale":"en_US","og_type":"article","og_title":"Serverless su AWS: Guida Pratica con Lambda, API Gateway e DynamoDB - tooldech","og_description":"Impara con tooldech a creare un infrastruttura Serverless su AWS: Guida Pratica con Lambda, API Gateway e DynamoDB","og_url":"https:\/\/tooldech.com\/en\/serverless-su-aws\/","og_site_name":"tooldech","article_published_time":"2025-08-21T12:16:43+00:00","article_modified_time":"2025-08-21T14:20:25+00:00","og_image":[{"width":1024,"height":1024,"url":"https:\/\/tooldech.com\/wp-content\/uploads\/2025\/08\/immevi.webp","type":"image\/png"}],"author":"tooldech","twitter_card":"summary_large_image","twitter_misc":{"Written by":"tooldech","Est. reading time":"15 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/tooldech.com\/serverless-su-aws\/#article","isPartOf":{"@id":"https:\/\/tooldech.com\/serverless-su-aws\/"},"author":{"name":"tooldech","@id":"https:\/\/tooldech.com\/#\/schema\/person\/4a554644f96951080896bbb327febe3b"},"headline":"Serverless su AWS: Guida Pratica con Lambda, API Gateway e DynamoDB","datePublished":"2025-08-21T12:16:43+00:00","dateModified":"2025-08-21T14:20:25+00:00","mainEntityOfPage":{"@id":"https:\/\/tooldech.com\/serverless-su-aws\/"},"wordCount":646,"commentCount":17,"publisher":{"@id":"https:\/\/tooldech.com\/#\/schema\/person\/4a554644f96951080896bbb327febe3b"},"image":{"@id":"https:\/\/tooldech.com\/serverless-su-aws\/#primaryimage"},"thumbnailUrl":"https:\/\/tooldech.com\/wp-content\/uploads\/2025\/08\/immevi.webp","articleSection":["Cloud"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/tooldech.com\/serverless-su-aws\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/tooldech.com\/serverless-su-aws\/","url":"https:\/\/tooldech.com\/serverless-su-aws\/","name":"Serverless su AWS: Guida Pratica con Lambda, API Gateway e DynamoDB - tooldech","isPartOf":{"@id":"https:\/\/tooldech.com\/#website"},"primaryImageOfPage":{"@id":"https:\/\/tooldech.com\/serverless-su-aws\/#primaryimage"},"image":{"@id":"https:\/\/tooldech.com\/serverless-su-aws\/#primaryimage"},"thumbnailUrl":"https:\/\/tooldech.com\/wp-content\/uploads\/2025\/08\/immevi.webp","datePublished":"2025-08-21T12:16:43+00:00","dateModified":"2025-08-21T14:20:25+00:00","description":"Impara con tooldech a creare un infrastruttura Serverless su AWS: Guida Pratica con Lambda, API Gateway e DynamoDB","breadcrumb":{"@id":"https:\/\/tooldech.com\/serverless-su-aws\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/tooldech.com\/serverless-su-aws\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/tooldech.com\/serverless-su-aws\/#primaryimage","url":"https:\/\/tooldech.com\/wp-content\/uploads\/2025\/08\/immevi.webp","contentUrl":"https:\/\/tooldech.com\/wp-content\/uploads\/2025\/08\/immevi.webp","width":1024,"height":1024},{"@type":"BreadcrumbList","@id":"https:\/\/tooldech.com\/serverless-su-aws\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/tooldech.com\/"},{"@type":"ListItem","position":2,"name":"Serverless su AWS: Guida Pratica con Lambda, API Gateway e DynamoDB"}]},{"@type":"WebSite","@id":"https:\/\/tooldech.com\/#website","url":"https:\/\/tooldech.com\/","name":"tooldech","description":"","publisher":{"@id":"https:\/\/tooldech.com\/#\/schema\/person\/4a554644f96951080896bbb327febe3b"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/tooldech.com\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":["Person","Organization"],"@id":"https:\/\/tooldech.com\/#\/schema\/person\/4a554644f96951080896bbb327febe3b","name":"tooldech","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/tooldech.com\/wp-content\/uploads\/2025\/06\/logo.png","url":"https:\/\/tooldech.com\/wp-content\/uploads\/2025\/06\/logo.png","contentUrl":"https:\/\/tooldech.com\/wp-content\/uploads\/2025\/06\/logo.png","width":1024,"height":1024,"caption":"tooldech"},"logo":{"@id":"https:\/\/tooldech.com\/wp-content\/uploads\/2025\/06\/logo.png"},"sameAs":["https:\/\/tooldech.com"],"url":"https:\/\/tooldech.com\/en\/author\/tooldech\/"}]}},"jetpack_featured_media_url":"https:\/\/tooldech.com\/wp-content\/uploads\/2025\/08\/immevi.webp","jetpack_sharing_enabled":true,"jetpack-related-posts":[{"id":1009,"url":"https:\/\/tooldech.com\/en\/deployare-su-aws-ecs-con-load-balancer-guida-passo-passo\/","url_meta":{"origin":1137,"position":0},"title":"Deploying on AWS ECS with Load Balancer: Step-by-Step Guide","author":"tooldech","date":"June 29, 2025","format":false,"excerpt":"Buongiorno a tutti e benvenuti in un nuovo articolo di tooldech oggi parleremo di AWS ECS! Sei pronto a portare la tua applicazione Python online in modo scalabile e sicuro? In questo articolo ti guider\u00f2 passo dopo passo nel deployment di una web app Python su AWS ECS (Elastic Container\u2026","rel":"","context":"In &quot;Cloud&quot;","block_context":{"text":"Cloud","link":"https:\/\/tooldech.com\/en\/category\/cloud\/"},"img":{"alt_text":"","src":"https:\/\/i0.wp.com\/tooldech.com\/wp-content\/uploads\/2025\/06\/logo-1.png?resize=350%2C200&ssl=1","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/tooldech.com\/wp-content\/uploads\/2025\/06\/logo-1.png?resize=350%2C200&ssl=1 1x, https:\/\/i0.wp.com\/tooldech.com\/wp-content\/uploads\/2025\/06\/logo-1.png?resize=525%2C300&ssl=1 1.5x, https:\/\/i0.wp.com\/tooldech.com\/wp-content\/uploads\/2025\/06\/logo-1.png?resize=700%2C400&ssl=1 2x, https:\/\/i0.wp.com\/tooldech.com\/wp-content\/uploads\/2025\/06\/logo-1.png?resize=1050%2C600&ssl=1 3x, https:\/\/i0.wp.com\/tooldech.com\/wp-content\/uploads\/2025\/06\/logo-1.png?resize=1400%2C800&ssl=1 4x"},"classes":[]},{"id":806,"url":"https:\/\/tooldech.com\/en\/guida-alla-cloud-migration-con-aws-mgn\/","url_meta":{"origin":1137,"position":1},"title":"Guide to Cloud Migration with AWS MGN","author":"tooldech","date":"May 5, 2025","format":false,"excerpt":"Salve a tutti e benvenuti in un nuovo articolo di tooldech! Oggi parleremo di come effettuare una cloud migration. La migrazione di infrastrutture IT dal data center locale al cloud \u00e8 essenziale per le aziende. Esse cercano scalabilit\u00e0, resilienza e ottimizzazione dei costi. In questo articolo esploreremo come effettuare una\u2026","rel":"","context":"In &quot;Cloud&quot;","block_context":{"text":"Cloud","link":"https:\/\/tooldech.com\/en\/category\/cloud\/"},"img":{"alt_text":"","src":"https:\/\/i0.wp.com\/tooldech.com\/wp-content\/uploads\/2025\/05\/ChatGPT-Image-May-26-2025-08_41_01-AM.png?resize=350%2C200&ssl=1","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/tooldech.com\/wp-content\/uploads\/2025\/05\/ChatGPT-Image-May-26-2025-08_41_01-AM.png?resize=350%2C200&ssl=1 1x, https:\/\/i0.wp.com\/tooldech.com\/wp-content\/uploads\/2025\/05\/ChatGPT-Image-May-26-2025-08_41_01-AM.png?resize=525%2C300&ssl=1 1.5x, https:\/\/i0.wp.com\/tooldech.com\/wp-content\/uploads\/2025\/05\/ChatGPT-Image-May-26-2025-08_41_01-AM.png?resize=700%2C400&ssl=1 2x"},"classes":[]},{"id":775,"url":"https:\/\/tooldech.com\/en\/creare-una-rete-vpc-scalabile-su-aws\/","url_meta":{"origin":1137,"position":2},"title":"Creating a Scalable VPC Network on AWS","author":"tooldech","date":"March 20, 2025","format":false,"excerpt":"Introduzione Buongiorno e benvenuti in un nuovo articolo di toodech, andiamo a parlare di un'argomento molto interessante. Quando si lavora con ambienti AWS complessi, spesso \u00e8 necessario connettere pi\u00f9 Virtual Private Cloud (VPC). Questo permette la comunicazione tra servizi distribuiti su diverse reti. Due delle soluzioni principali offerte da AWS\u2026","rel":"","context":"In &quot;Cloud&quot;","block_context":{"text":"Cloud","link":"https:\/\/tooldech.com\/en\/category\/cloud\/"},"img":{"alt_text":"logoarticolo","src":"https:\/\/i0.wp.com\/tooldech.com\/wp-content\/uploads\/2025\/03\/logo.jpg?resize=350%2C200&ssl=1","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/tooldech.com\/wp-content\/uploads\/2025\/03\/logo.jpg?resize=350%2C200&ssl=1 1x, https:\/\/i0.wp.com\/tooldech.com\/wp-content\/uploads\/2025\/03\/logo.jpg?resize=525%2C300&ssl=1 1.5x, https:\/\/i0.wp.com\/tooldech.com\/wp-content\/uploads\/2025\/03\/logo.jpg?resize=700%2C400&ssl=1 2x"},"classes":[]},{"id":549,"url":"https:\/\/tooldech.com\/en\/creare-uninfrastruttura-aws-con-terraform-per-una-web-app\/","url_meta":{"origin":1137,"position":3},"title":"Creating an AWS Infrastructure with Terraform for a Web App","author":"tooldech","date":"January 16, 2025","format":false,"excerpt":"Buongiorno a tutti cari lettori, iniziamo l'anno a bomba con nuovi articoli e una nuova categoria Cloud, questa categoria sar\u00e0 incentrata sul mondo del cloud computing, nell'articolo di oggi configureremo un'infrastruttura AWS utilizzando Terraform per ospitare una web app su un'istanza EC2. Questa guida include la configurazione della rete, il\u2026","rel":"","context":"In &quot;Cloud&quot;","block_context":{"text":"Cloud","link":"https:\/\/tooldech.com\/en\/category\/cloud\/"},"img":{"alt_text":"","src":"https:\/\/i0.wp.com\/tooldech.com\/wp-content\/uploads\/2025\/01\/copertina.jpg?resize=350%2C200&ssl=1","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/tooldech.com\/wp-content\/uploads\/2025\/01\/copertina.jpg?resize=350%2C200&ssl=1 1x, https:\/\/i0.wp.com\/tooldech.com\/wp-content\/uploads\/2025\/01\/copertina.jpg?resize=525%2C300&ssl=1 1.5x, https:\/\/i0.wp.com\/tooldech.com\/wp-content\/uploads\/2025\/01\/copertina.jpg?resize=700%2C400&ssl=1 2x"},"classes":[]},{"id":1314,"url":"https:\/\/tooldech.com\/en\/project-web-app-from-local-docker-to-production-enviroment-on-cloud\/","url_meta":{"origin":1137,"position":4},"title":"Project web app from local docker to production enviroment on cloud.","author":"tooldech","date":"March 12, 2026","format":false,"excerpt":"Buongiorno a tutti e benvenuti in nuovo articolo di tooldech! Oggi vedremo come realizzare una migrazione di un progetto di una web app in locale e portarlo in produzione sul cloud di AWS. In questo tutorial verranno spiegati i passaggi e i procedimenti necessari per spostare una web app locale\u2026","rel":"","context":"In &quot;Applicativi Vari&quot;","block_context":{"text":"Applicativi Vari","link":"https:\/\/tooldech.com\/en\/category\/applicativi-vari\/"},"img":{"alt_text":"","src":"https:\/\/i0.wp.com\/tooldech.com\/wp-content\/uploads\/2026\/03\/webappCloud.webp?resize=350%2C200&ssl=1","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/tooldech.com\/wp-content\/uploads\/2026\/03\/webappCloud.webp?resize=350%2C200&ssl=1 1x, https:\/\/i0.wp.com\/tooldech.com\/wp-content\/uploads\/2026\/03\/webappCloud.webp?resize=525%2C300&ssl=1 1.5x, https:\/\/i0.wp.com\/tooldech.com\/wp-content\/uploads\/2026\/03\/webappCloud.webp?resize=700%2C400&ssl=1 2x, https:\/\/i0.wp.com\/tooldech.com\/wp-content\/uploads\/2026\/03\/webappCloud.webp?resize=1050%2C600&ssl=1 3x, https:\/\/i0.wp.com\/tooldech.com\/wp-content\/uploads\/2026\/03\/webappCloud.webp?resize=1400%2C800&ssl=1 4x"},"classes":[]},{"id":1095,"url":"https:\/\/tooldech.com\/en\/docker-compose-guida-semplice\/","url_meta":{"origin":1137,"position":5},"title":"Docker Compose: simple guide","author":"tooldech","date":"August 1, 2025","format":false,"excerpt":"Cos'\u00e8 Docker Compose e perch\u00e9 usarlo Buongiorno a tutti e benvenuti in nuovo articolo di tooldech, in questo articolo parleremo di uno strumento utile quando si usa Docker, ti sarai accorto che avviare pi\u00f9 container con docker run pu\u00f2 diventare rapidamente complicato. Immagina di dover far partire un\u2019applicazione web con\u2026","rel":"","context":"In &quot;Docker&quot;","block_context":{"text":"Docker","link":"https:\/\/tooldech.com\/en\/category\/docker\/"},"img":{"alt_text":"","src":"https:\/\/i0.wp.com\/tooldech.com\/wp-content\/uploads\/2025\/08\/ChatGPT-Image-1-ago-2025-08_54_11.webp?resize=350%2C200&ssl=1","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/tooldech.com\/wp-content\/uploads\/2025\/08\/ChatGPT-Image-1-ago-2025-08_54_11.webp?resize=350%2C200&ssl=1 1x, https:\/\/i0.wp.com\/tooldech.com\/wp-content\/uploads\/2025\/08\/ChatGPT-Image-1-ago-2025-08_54_11.webp?resize=525%2C300&ssl=1 1.5x, https:\/\/i0.wp.com\/tooldech.com\/wp-content\/uploads\/2025\/08\/ChatGPT-Image-1-ago-2025-08_54_11.webp?resize=700%2C400&ssl=1 2x, https:\/\/i0.wp.com\/tooldech.com\/wp-content\/uploads\/2025\/08\/ChatGPT-Image-1-ago-2025-08_54_11.webp?resize=1050%2C600&ssl=1 3x, https:\/\/i0.wp.com\/tooldech.com\/wp-content\/uploads\/2025\/08\/ChatGPT-Image-1-ago-2025-08_54_11.webp?resize=1400%2C800&ssl=1 4x"},"classes":[]}],"_links":{"self":[{"href":"https:\/\/tooldech.com\/en\/wp-json\/wp\/v2\/posts\/1137","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/tooldech.com\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/tooldech.com\/en\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/tooldech.com\/en\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/tooldech.com\/en\/wp-json\/wp\/v2\/comments?post=1137"}],"version-history":[{"count":4,"href":"https:\/\/tooldech.com\/en\/wp-json\/wp\/v2\/posts\/1137\/revisions"}],"predecessor-version":[{"id":1191,"href":"https:\/\/tooldech.com\/en\/wp-json\/wp\/v2\/posts\/1137\/revisions\/1191"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/tooldech.com\/en\/wp-json\/wp\/v2\/media\/1193"}],"wp:attachment":[{"href":"https:\/\/tooldech.com\/en\/wp-json\/wp\/v2\/media?parent=1137"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/tooldech.com\/en\/wp-json\/wp\/v2\/categories?post=1137"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/tooldech.com\/en\/wp-json\/wp\/v2\/tags?post=1137"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}