{"id":76142,"date":"2024-09-09T01:00:46","date_gmt":"2024-09-08T21:30:46","guid":{"rendered":"https:\/\/nabfollower.com\/blog\/supercharging-your-aws-lambda-functions-with-extensions-a-nodejs-perspective-2em2\/"},"modified":"2024-09-09T01:00:46","modified_gmt":"2024-09-08T21:30:46","slug":"supercharging-your-aws-lambda-functions-with-extensions-a-nodejs-perspective-2em2","status":"publish","type":"post","link":"https:\/\/nabfollower.com\/blog\/supercharging-your-aws-lambda-functions-with-extensions-a-nodejs-perspective-2em2\/","title":{"rendered":"\u0633\u0648\u067e\u0631\u0634\u0627\u0631\u0698 \u06a9\u0631\u062f\u0646 \u0639\u0645\u0644\u06a9\u0631\u062f\u0647\u0627\u06cc AWS Lambda \u0628\u0627 \u0628\u0631\u0646\u0627\u0645\u0647\u200c\u0647\u0627\u06cc \u0627\u0641\u0632\u0648\u062f\u0646\u06cc: \u062f\u06cc\u062f\u06af\u0627\u0647 Node.js"},"content":{"rendered":"<p>Summarize this content to 400 words in Persian Lang \u0633\u0644\u0627\u0645\u060c \u062a\u0648\u0633\u0639\u0647 \u062f\u0647\u0646\u062f\u06af\u0627\u0646 Node.js! \ud83d\udc4b \u0622\u06cc\u0627 \u062a\u0627 \u0628\u0647 \u062d\u0627\u0644 \u0627\u062d\u0633\u0627\u0633 \u06a9\u0631\u062f\u0647 \u0627\u06cc\u062f \u06a9\u0647 \u0628\u0631 AWS Lambda \u062a\u0633\u0644\u0637 \u062f\u0627\u0631\u06cc\u062f\u060c \u0641\u0642\u0637 \u0628\u0631\u0627\u06cc \u0627\u06cc\u0646\u06a9\u0647 \u06a9\u0634\u0641 \u06a9\u0646\u06cc\u062f \u0647\u0645\u06cc\u0634\u0647 \u0686\u06cc\u0632\u0647\u0627\u06cc \u0628\u06cc\u0634\u062a\u0631\u06cc \u0628\u0631\u0627\u06cc \u06cc\u0627\u062f\u06af\u06cc\u0631\u06cc \u0648\u062c\u0648\u062f \u062f\u0627\u0631\u062f\u061f \u062e\u0648\u0628\u060c \u062f\u0633\u062a \u0648 \u067e\u0646\u062c\u0647 \u0646\u0631\u0645 \u06a9\u0646\u06cc\u062f \u0632\u06cc\u0631\u0627 \u0645\u0627 \u062f\u0631 \u0634\u0631\u0641 \u0628\u0631\u0631\u0633\u06cc \u06cc\u06a9\u06cc \u0627\u0632 \u0642\u062f\u0631\u062a\u0645\u0646\u062f\u062a\u0631\u06cc\u0646 \u0648\u06cc\u0698\u06af\u06cc \u0647\u0627\u06cc Lambda \u0647\u0633\u062a\u06cc\u0645: \u0627\u0641\u0632\u0648\u0646\u0647 \u0647\u0627\u06cc Lambda.<\/p>\n<p>  \u0628\u0647 \u0647\u0631 \u062d\u0627\u0644 \u0627\u0641\u0632\u0648\u0646\u0647 \u0647\u0627\u06cc \u0644\u0627\u0645\u0628\u062f\u0627 \u0686\u06cc\u0633\u062a\u061f<\/p>\n<p>\u0639\u0645\u0644\u06a9\u0631\u062f \u0644\u0627\u0645\u0628\u062f\u0627 \u062e\u0648\u062f \u0631\u0627 \u0628\u0647 \u0639\u0646\u0648\u0627\u0646 \u06cc\u06a9 \u0646\u0648\u0627\u0632\u0646\u062f\u0647 \u0627\u0646\u0641\u0631\u0627\u062f\u06cc \u0631\u0648\u06cc \u0635\u062d\u0646\u0647 \u062a\u0635\u0648\u0631 \u06a9\u0646\u06cc\u062f. \u0627\u06a9\u0646\u0648\u0646\u060c \u0627\u0644\u062d\u0627\u0642\u0627\u062a \u0644\u0627\u0645\u0628\u062f\u0627 \u0631\u0627 \u0628\u0647\u200c\u0639\u0646\u0648\u0627\u0646 \u0628\u0627\u0646\u062f \u067e\u0634\u062a\u06cc\u0628\u0627\u0646 \u062a\u0635\u0648\u0631 \u06a9\u0646\u06cc\u062f\u060c \u0628\u062f\u0648\u0646 \u0627\u06cc\u0646\u06a9\u0647 \u062f\u0631 \u06a9\u0627\u0646\u0648\u0646 \u062a\u0648\u062c\u0647 \u0642\u0631\u0627\u0631 \u0628\u06af\u06cc\u0631\u06cc\u062f\u060c \u0639\u0645\u0644\u06a9\u0631\u062f \u0631\u0627 \u0628\u0647\u0628\u0648\u062f \u0645\u06cc\u200c\u0628\u062e\u0634\u062f. \u0628\u0627\u062d\u0627\u0644\u060c \u062f\u0631\u0633\u062a\u0647\u061f<\/p>\n<p>\u067e\u0633\u0648\u0646\u062f\u0647\u0627\u06cc Lambda \u0641\u0631\u0622\u06cc\u0646\u062f\u0647\u0627\u06cc \u0645\u0633\u062a\u0642\u0644\u06cc \u0647\u0633\u062a\u0646\u062f \u06a9\u0647 \u062f\u0631 \u06a9\u0646\u0627\u0631 \u06a9\u062f \u062a\u0627\u0628\u0639 \u0627\u0635\u0644\u06cc \u0634\u0645\u0627 \u0627\u062c\u0631\u0627 \u0645\u06cc \u0634\u0648\u0646\u062f. \u0622\u0646\u0647\u0627 \u0645\u062d\u06cc\u0637 \u0627\u062c\u0631\u0627\u06cc \u06cc\u06a9\u0633\u0627\u0646\u06cc \u0631\u0627 \u0628\u0647 \u0627\u0634\u062a\u0631\u0627\u06a9 \u0645\u06cc \u06af\u0630\u0627\u0631\u0646\u062f\u060c \u0628\u0647 \u0627\u06cc\u0646 \u0645\u0639\u0646\u06cc \u06a9\u0647 \u0628\u0647 \u062d\u0627\u0641\u0638\u0647\u060c \u0645\u0647\u0644\u062a \u0632\u0645\u0627\u0646\u06cc \u0648 \u0630\u062e\u06cc\u0631\u0647 \u0633\u0627\u0632\u06cc \u06cc\u06a9\u0633\u0627\u0646 \u062f\u0633\u062a\u0631\u0633\u06cc \u062f\u0627\u0631\u0646\u062f. \u0627\u0645\u0627 \u0646\u06a9\u062a\u0647 \u0645\u0647\u0645 \u0627\u06cc\u0646\u062c\u0627\u0633\u062a: \u0622\u0646\u0647\u0627 \u0686\u0631\u062e\u0647 \u0632\u0646\u062f\u06af\u06cc \u062e\u0648\u062f \u0631\u0627 \u062f\u0627\u0631\u0646\u062f!<\/p>\n<p>\/\/ Pseudo-code to illustrate the concept<br \/>\nconst mainLambdaFunction = () =&gt; {<br \/>\n  \/\/ Your regular Lambda code<br \/>\n};<\/p>\n<p>const lambdaExtension = {<br \/>\n  init: () =&gt; {<br \/>\n    \/\/ Run before the main function<br \/>\n  },<br \/>\n  execute: () =&gt; {<br \/>\n    \/\/ Run alongside the main function<br \/>\n  },<br \/>\n  cleanup: () =&gt; {<br \/>\n    \/\/ Run after the main function<br \/>\n  }<br \/>\n};<\/p>\n<p>  \u0686\u0631\u0627 \u0628\u0627\u06cc\u062f \u0628\u0647 \u0628\u0631\u0646\u0627\u0645\u0647 \u0647\u0627\u06cc \u0627\u0641\u0632\u0648\u062f\u0646\u06cc \u0644\u0627\u0645\u0628\u062f\u0627 \u0627\u0647\u0645\u06cc\u062a \u062f\u0647\u06cc\u062f\u061f<\/p>\n<p>\u0627\u0646\u0639\u0637\u0627\u0641 \u067e\u0630\u06cc\u0631\u06cc: \u0628\u0631\u0646\u0627\u0645\u0647 \u0647\u0627\u06cc \u0627\u0641\u0632\u0648\u062f\u0646\u06cc \u0645\u06cc \u062a\u0648\u0627\u0646\u0646\u062f \u0628\u0647 \u0632\u0628\u0627\u0646\u06cc \u0645\u062a\u0641\u0627\u0648\u062a \u0627\u0632 \u0639\u0645\u0644\u06a9\u0631\u062f \u0627\u0635\u0644\u06cc \u0634\u0645\u0627 \u0627\u062c\u0631\u0627 \u0634\u0648\u0646\u062f. Node.js \u0628\u0631\u0627\u06cc \u067e\u06cc\u0631\u0648\u0632\u06cc\u060c \u0627\u0645\u0627 \u0634\u0627\u06cc\u062f \u0628\u0647 \u06cc\u06a9 \u067e\u0633\u0648\u0646\u062f \u067e\u0627\u06cc\u062a\u0648\u0646 \u0646\u06cc\u0627\u0632 \u062f\u0627\u0634\u062a\u0647 \u0628\u0627\u0634\u06cc\u062f\u061f \u0645\u0634\u06a9\u0644\u06cc \u0646\u06cc\u0633\u062a!<br \/>\n\u0686\u0631\u062e\u0647 \u0639\u0645\u0631 \u0637\u0648\u0644\u0627\u0646\u06cc: \u0622\u0646\u0647\u0627 \u0645\u06cc \u062a\u0648\u0627\u0646\u0646\u062f \u0642\u0628\u0644 \u0627\u0632 \u0639\u0645\u0644\u06a9\u0631\u062f \u0634\u0645\u0627 \u0634\u0631\u0648\u0639 \u0634\u0648\u0646\u062f \u0648 \u067e\u0633 \u0627\u0632 \u0627\u0646\u062c\u0627\u0645 \u0622\u0646 \u0627\u062f\u0627\u0645\u0647 \u062f\u0647\u0646\u062f. \u0627\u06cc\u062f\u0647 \u0622\u0644 \u0628\u0631\u0627\u06cc \u06a9\u0627\u0631\u0647\u0627\u06cc \u0631\u0627\u0647 \u0627\u0646\u062f\u0627\u0632\u06cc \u0648 \u067e\u0627\u06a9\u0633\u0627\u0632\u06cc!<br \/>\n\u062b\u0628\u062a \u0633\u0641\u0627\u0631\u0634\u06cc: \u0622\u06cc\u0627 \u0645\u06cc \u062e\u0648\u0627\u0647\u06cc\u062f \u06af\u0632\u0627\u0631\u0634 \u0647\u0627\u06cc \u062e\u0648\u062f \u0631\u0627 \u0628\u0647 \u06cc\u06a9 \u0633\u0631\u0648\u06cc\u0633 \u062c\u062f\u06cc\u062f \u0641\u0627\u0646\u062a\u0632\u06cc \u0627\u0631\u0633\u0627\u0644 \u06a9\u0646\u06cc\u062f\u061f \u0628\u0631\u0646\u0627\u0645\u0647 \u0647\u0627\u06cc \u0627\u0641\u0632\u0648\u062f\u0646\u06cc \u0634\u0645\u0627 \u0631\u0627 \u062a\u062d\u062a \u067e\u0648\u0634\u0634 \u0642\u0631\u0627\u0631 \u062f\u0627\u062f\u0647 \u0627\u0646\u062f.<\/p>\n<p>  \u0628\u06cc\u0627\u06cc\u06cc\u062f \u0639\u0645\u0644\u06cc \u0634\u0648\u06cc\u0645: \u067e\u06cc\u0627\u062f\u0647 \u0633\u0627\u0632\u06cc \u06cc\u06a9 \u0627\u0641\u0632\u0648\u0646\u0647 \u062b\u0628\u062a \u0633\u0641\u0627\u0631\u0634\u06cc<\/p>\n<p>\u062e\u0648\u0628\u060c \u0628\u06cc\u0627\u06cc\u06cc\u062f \u0622\u0633\u062a\u06cc\u0646 \u0647\u0627\u06cc\u0645\u0627\u0646 \u0631\u0627 \u0628\u0627\u0644\u0627 \u0628\u0632\u0646\u06cc\u0645 \u0648 \u06cc\u06a9 \u067e\u0633\u0648\u0646\u062f \u0633\u0627\u062f\u0647 \u0628\u0633\u0627\u0632\u06cc\u0645 \u06a9\u0647 \u0644\u0627\u06af \u0647\u0627\u06cc \u0644\u0627\u0645\u0628\u062f\u0627 \u0631\u0627 \u0628\u0647 \u06cc\u06a9 \u0633\u0637\u0644 S3 \u0645\u06cc \u0641\u0631\u0633\u062a\u062f. \u0686\u0631\u0627 \u06a9\u0647 \u0646\u0647\u060c \u062f\u0631\u0633\u062a \u0627\u0633\u062a\u061f<\/p>\n<p>\u0627\u0628\u062a\u062f\u0627 \u0628\u06cc\u0627\u06cc\u06cc\u062f \u0633\u0627\u062e\u062a\u0627\u0631 \u0628\u0631\u0646\u0627\u0645\u0647 \u0627\u0641\u0632\u0648\u062f\u0646\u06cc \u062e\u0648\u062f \u0631\u0627 \u062a\u0646\u0638\u06cc\u0645 \u06a9\u0646\u06cc\u0645:<\/p>\n<p>my-lambda-project\/<br \/>\n\u251c\u2500\u2500 index.js            \/\/ Main Lambda function<br \/>\n\u2514\u2500\u2500 extensions\/<br \/>\n    \u2514\u2500\u2500 logger-extension\/<br \/>\n        \u251c\u2500\u2500 index.js    \/\/ Extension entry point<br \/>\n        \u251c\u2500\u2500 logger.js   \/\/ Logging logic<br \/>\n        \u2514\u2500\u2500 s3-client.js \/\/ S3 interaction<\/p>\n<p>\u062d\u0627\u0644\u0627 \u0628\u06cc\u0627\u06cc\u06cc\u062f \u0627\u0641\u0632\u0648\u0646\u0647 \u062e\u0648\u062f \u0631\u0627 \u067e\u06cc\u0627\u062f\u0647 \u0633\u0627\u0632\u06cc \u06a9\u0646\u06cc\u0645:<\/p>\n<p>\/\/ extensions\/logger-extension\/index.js<br \/>\nconst { register, next } = require(&#8216;.\/lambda-extension-api&#8217;);<br \/>\nconst { initializeLogger, logEvent } = require(&#8216;.\/logger&#8217;);<br \/>\nconst extensionName = &#8216;logger-extension&#8217;;<\/p>\n<p>const eventHandler = async (event) =&gt; {<br \/>\n  if (event.eventType === &#8216;INVOKE&#8217;) {<br \/>\n    await logEvent(event);<br \/>\n  } else if (event.eventType === &#8216;SHUTDOWN&#8217;) {<br \/>\n    \/\/ Clean up if necessary<br \/>\n    process.exit(0);<br \/>\n  }<br \/>\n};<\/p>\n<p>(async function run() {<br \/>\n  process.on(&#8216;SIGINT&#8217;, () =&gt; process.exit(0));<br \/>\n  process.on(&#8216;SIGTERM&#8217;, () =&gt; process.exit(0));<\/p>\n<p>  console.log(&#8216;Logger extension starting&#8230;&#8217;);<\/p>\n<p>  const extensionId = await register(extensionName);<br \/>\n  console.log(&#8216;Extension registered with ID:&#8217;, extensionId);<\/p>\n<p>  await initializeLogger();<\/p>\n<p>  \/\/ Event loop<br \/>\n  while (true) {<br \/>\n    const event = await next(extensionId);<br \/>\n    await eventHandler(event);<br \/>\n  }<br \/>\n})();<\/p>\n<p>\u0648 \u062f\u0631 \u0627\u06cc\u0646\u062c\u0627 \u067e\u06cc\u0627\u062f\u0647 \u0633\u0627\u0632\u06cc \u0644\u0627\u06af\u0631 \u0633\u0627\u062f\u0647 \u0627\u0633\u062a:<\/p>\n<p>\/\/ extensions\/logger-extension\/logger.js<br \/>\nconst { S3Client, PutObjectCommand } = require(&#8216;@aws-sdk\/client-s3&#8217;);<\/p>\n<p>const s3Client = new S3Client({ region: process.env.AWS_REGION });<br \/>\nconst BUCKET_NAME = process.env.LOG_BUCKET_NAME;<\/p>\n<p>async function initializeLogger() {<br \/>\n  \/\/ Any setup logic here<br \/>\n  console.log(&#8216;Logger initialized&#8217;);<br \/>\n}<\/p>\n<p>async function logEvent(event) {<br \/>\n  const logData = JSON.stringify(event);<br \/>\n  const params = {<br \/>\n    Bucket: BUCKET_NAME,<br \/>\n    Key: `logs\/${Date.now()}.json`,<br \/>\n    Body: logData<br \/>\n  };<\/p>\n<p>  try {<br \/>\n    await s3Client.send(new PutObjectCommand(params));<br \/>\n    console.log(&#8216;Log sent to S3&#8217;);<br \/>\n  } catch (error) {<br \/>\n    console.error(&#8216;Failed to send log to S3:&#8217;, error);<br \/>\n  }<br \/>\n}<\/p>\n<p>module.exports = { initializeLogger, logEvent };<\/p>\n<p>  \u0628\u0647\u062a\u0631\u06cc\u0646 \u0631\u0648\u0634\u200c\u0647\u0627 \u0628\u0631\u0627\u06cc \u0628\u0631\u0646\u0627\u0645\u0647\u200c\u0647\u0627\u06cc \u0627\u0641\u0632\u0648\u062f\u0646\u06cc Lambda \u062f\u0631 Node.js<\/p>\n<p>\u0622\u0646 \u0631\u0627 \u0631\u0648\u0634\u0646 \u0646\u06af\u0647 \u062f\u0627\u0631\u06cc\u062f: \u0628\u0631\u0646\u0627\u0645\u0647 \u0647\u0627\u06cc \u0627\u0641\u0632\u0648\u062f\u0646\u06cc \u0645\u0646\u0627\u0628\u0639 \u0631\u0627 \u0628\u0627 \u0639\u0645\u0644\u06a9\u0631\u062f \u0627\u0635\u0644\u06cc \u0634\u0645\u0627 \u0628\u0647 \u0627\u0634\u062a\u0631\u0627\u06a9 \u0645\u06cc \u06af\u0630\u0627\u0631\u0646\u062f. \u0622\u0646\u0647\u0627 \u0631\u0627 \u06a9\u0627\u0631\u0622\u0645\u062f \u0646\u06af\u0647 \u062f\u0627\u0631\u06cc\u062f!<br \/>\n\u0631\u0633\u06cc\u062f\u06af\u06cc \u0628\u0647 \u062e\u0637\u0627: \u0645\u062f\u06cc\u0631\u06cc\u062a \u062e\u0637\u0627\u06cc \u0642\u0648\u06cc \u0628\u0633\u06cc\u0627\u0631 \u0645\u0647\u0645 \u0627\u0633\u062a. \u0634\u0645\u0627 \u0646\u0645\u06cc \u062e\u0648\u0627\u0647\u06cc\u062f \u0628\u0631\u0646\u0627\u0645\u0647 \u0627\u0641\u0632\u0648\u062f\u0646\u06cc \u0634\u0645\u0627 \u0639\u0645\u0644\u06a9\u0631\u062f \u0634\u0645\u0627 \u0631\u0627 \u062e\u0631\u0627\u0628 \u06a9\u0646\u062f.<br \/>\n\u0639\u0645\u0644\u06cc\u0627\u062a \u0646\u0627\u0647\u0645\u0632\u0645\u0627\u0646: \u0627\u0632 async\/wait \u0628\u0631\u0627\u06cc \u06a9\u062f\u0647\u0627\u06cc \u062a\u0645\u06cc\u0632\u062a\u0631 \u0648 \u062e\u0648\u0627\u0646\u0627\u062a\u0631 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u06a9\u0646\u06cc\u062f.<br \/>\n\u0645\u062a\u063a\u06cc\u0631\u0647\u0627\u06cc \u0645\u062d\u06cc\u0637\u06cc: \u0627\u0632 \u0622\u0646\u0647\u0627 \u0628\u0631\u0627\u06cc \u067e\u06cc\u06a9\u0631\u0628\u0646\u062f\u06cc \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u06a9\u0646\u06cc\u062f \u062a\u0627 \u06a9\u062f \u062e\u0648\u062f \u0631\u0627 \u0627\u0646\u0639\u0637\u0627\u0641 \u067e\u0630\u06cc\u0631 \u0646\u06af\u0647 \u062f\u0627\u0631\u06cc\u062f.<br \/>\n\u0648\u0631\u0648\u062f \u0628\u0647 \u0633\u06cc\u0633\u062a\u0645: \u0628\u0644\u0647\u060c \u062d\u062a\u06cc \u0628\u0631\u0646\u0627\u0645\u0647 \u0627\u0641\u0632\u0648\u062f\u0646\u06cc \u0634\u0645\u0627 \u0628\u0627\u06cc\u062f \u0641\u0639\u0627\u0644\u06cc\u062a \u0647\u0627\u06cc \u062e\u0648\u062f \u0631\u0627 \u062b\u0628\u062a \u06a9\u0646\u062f. \u0645\u062a\u0627\u060c \u062f\u0631\u0633\u062a\u0647\u061f<\/p>\n<p>  \u0627\u0633\u062a\u0642\u0631\u0627\u0631 \u0628\u0631\u0646\u0627\u0645\u0647 \u0627\u0641\u0632\u0648\u062f\u0646\u06cc \u0634\u0645\u0627<\/p>\n<p>\u0628\u0631\u0627\u06cc \u062f\u06cc\u062f\u0646 \u0628\u0631\u0646\u0627\u0645\u0647 \u0627\u0641\u0632\u0648\u062f\u0646\u06cc \u062e\u0648\u062f \u0622\u0645\u0627\u062f\u0647 \u0647\u0633\u062a\u06cc\u062f\u061f \u062f\u0631 \u0627\u06cc\u0646\u062c\u0627 \u0646\u062d\u0648\u0647 \u0627\u0633\u062a\u0642\u0631\u0627\u0631 \u0622\u0646 \u0622\u0645\u062f\u0647 \u0627\u0633\u062a:<\/p>\n<p>\u0627\u0641\u0632\u0648\u0646\u0647 \u062e\u0648\u062f \u0631\u0627 \u0632\u06cc\u067e \u06a9\u0646\u06cc\u062f:<\/p>\n<p>   zip -r logger-extension.zip extensions\/logger-extension<\/p>\n<p>\u06cc\u06a9 \u0644\u0627\u06cc\u0647 \u0628\u0627 \u067e\u0633\u0648\u0646\u062f \u062e\u0648\u062f \u0627\u06cc\u062c\u0627\u062f \u06a9\u0646\u06cc\u062f:<\/p>\n<p>   aws lambda publish-layer-version \\<br \/>\n     &#8211;layer-name &#8220;logger-extension&#8221; \\<br \/>\n     &#8211;zip-file &#8220;fileb:\/\/logger-extension.zip&#8221;<\/p>\n<p>\u0644\u0627\u06cc\u0647 \u0631\u0627 \u0628\u0647 \u062a\u0627\u0628\u0639 Lambda \u062e\u0648\u062f \u0627\u0636\u0627\u0641\u0647 \u06a9\u0646\u06cc\u062f:<\/p>\n<p>   aws lambda update-function-configuration \\<br \/>\n     &#8211;function-name YourFunctionName \\<br \/>\n     &#8211;layers arn:aws:lambda:region:account-id:layer:logger-extension:1<\/p>\n<p>\u0648 voil\u00e0! \u062a\u0627\u0628\u0639 Lambda \u0634\u0645\u0627 \u0627\u06a9\u0646\u0648\u0646 \u062f\u0627\u0631\u0627\u06cc \u06cc\u06a9 sidekick \u0627\u0633\u062a \u06a9\u0647 \u06af\u0632\u0627\u0631\u0634\u200c\u0647\u0627 \u0631\u0627 \u0628\u0647 S3 \u0627\u0631\u0633\u0627\u0644 \u0645\u06cc\u200c\u06a9\u0646\u062f.<\/p>\n<p>  \u0628\u0633\u062a\u0647 \u0628\u0646\u062f\u06cc<\/p>\n<p>\u0628\u0631\u0646\u0627\u0645\u0647 \u0647\u0627\u06cc \u0627\u0641\u0632\u0648\u062f\u0646\u06cc Lambda \u062f\u0646\u06cc\u0627\u06cc\u06cc \u0627\u0632 \u0627\u0645\u06a9\u0627\u0646\u0627\u062a \u0631\u0627 \u0628\u0631\u0627\u06cc \u0628\u0647\u0628\u0648\u062f \u0628\u0631\u0646\u0627\u0645\u0647 \u0647\u0627\u06cc \u0628\u062f\u0648\u0646 \u0633\u0631\u0648\u0631 \u0634\u0645\u0627 \u0628\u0627\u0632 \u0645\u06cc \u06a9\u0646\u062f. \u0686\u0647 \u062b\u0628\u062a \u0633\u0641\u0627\u0631\u0634\u06cc\u060c \u0646\u0638\u0627\u0631\u062a \u06cc\u0627 \u0647\u0631 \u067e\u0631\u062f\u0627\u0632\u0634 \u062e\u0627\u0631\u062c \u0627\u0632 \u0628\u0627\u0646\u062f \u062f\u06cc\u06af\u0631\u06cc\u060c \u0628\u0631\u0646\u0627\u0645\u0647 \u0647\u0627\u06cc \u0627\u0641\u0632\u0648\u062f\u0646\u06cc \u0634\u0645\u0627 \u0631\u0627 \u062a\u062d\u062a \u067e\u0648\u0634\u0634 \u0642\u0631\u0627\u0631 \u062f\u0627\u062f\u0647 \u0627\u0646\u062f.<\/p>\n<p>\u0628\u0647 \u06cc\u0627\u062f \u062f\u0627\u0634\u062a\u0647 \u0628\u0627\u0634\u06cc\u062f\u060c \u0628\u0627 \u0642\u062f\u0631\u062a \u0632\u06cc\u0627\u062f\u060c \u0645\u0633\u0626\u0648\u0644\u06cc\u062a \u0628\u0632\u0631\u06af\u06cc \u0628\u0647 \u0647\u0645\u0631\u0627\u0647 \u062f\u0627\u0631\u062f. \u0627\u0632 \u0628\u0631\u0646\u0627\u0645\u0647\u200c\u0647\u0627\u06cc \u0627\u0641\u0632\u0648\u062f\u0646\u06cc \u0647\u0648\u0634\u0645\u0646\u062f\u0627\u0646\u0647 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u06a9\u0646\u06cc\u062f \u0648 \u0647\u0645\u06cc\u0634\u0647 \u062a\u0623\u062b\u06cc\u0631 \u0622\u0646\u0647\u0627 \u0631\u0627 \u0628\u0631 \u0639\u0645\u0644\u06a9\u0631\u062f \u0648 \u0647\u0632\u06cc\u0646\u0647 \u0639\u0645\u0644\u06a9\u0631\u062f \u062e\u0648\u062f \u062f\u0631 \u0646\u0638\u0631 \u0628\u06af\u06cc\u0631\u06cc\u062f.<\/p>\n<p>\u0686\u0647 \u0627\u06cc\u062f\u0647 \u0647\u0627\u06cc \u062c\u0627\u0644\u0628\u06cc \u0628\u0631\u0627\u06cc \u0627\u0641\u0632\u0648\u0646\u0647 \u0647\u0627\u06cc Lambda \u062f\u0627\u0631\u06cc\u062f\u061f \u0646\u0638\u0631 \u062e\u0648\u062f \u0631\u0627 \u062f\u0631 \u0632\u06cc\u0631 \u0628\u0646\u0648\u06cc\u0633\u06cc\u062f \u0648 \u0628\u06cc\u0627\u06cc\u06cc\u062f \u0628\u0627 \u0647\u0645 \u0633\u0631\u06cc \u0628\u0632\u0646\u06cc\u0645! \ud83d\ude80<\/p>\n<p>\u06a9\u062f\u0646\u0648\u06cc\u0633\u06cc \u0645\u0628\u0627\u0631\u06a9\u060c Nodelers! \ud83d\udc68\u200d\ud83d\udcbb\ud83d\udc69\u200d\ud83d\udcbb<\/p>\n<p>\u0633\u0644\u0627\u0645\u060c \u062a\u0648\u0633\u0639\u0647 \u062f\u0647\u0646\u062f\u06af\u0627\u0646 Node.js! \ud83d\udc4b \u0622\u06cc\u0627 \u062a\u0627 \u0628\u0647 \u062d\u0627\u0644 \u0627\u062d\u0633\u0627\u0633 \u06a9\u0631\u062f\u0647 \u0627\u06cc\u062f \u06a9\u0647 \u0628\u0631 AWS Lambda \u062a\u0633\u0644\u0637 \u062f\u0627\u0631\u06cc\u062f\u060c \u0641\u0642\u0637 \u0628\u0631\u0627\u06cc \u0627\u06cc\u0646\u06a9\u0647 \u06a9\u0634\u0641 \u06a9\u0646\u06cc\u062f \u0647\u0645\u06cc\u0634\u0647 \u0686\u06cc\u0632\u0647\u0627\u06cc \u0628\u06cc\u0634\u062a\u0631\u06cc \u0628\u0631\u0627\u06cc \u06cc\u0627\u062f\u06af\u06cc\u0631\u06cc \u0648\u062c\u0648\u062f \u062f\u0627\u0631\u062f\u061f \u062e\u0648\u0628\u060c \u062f\u0633\u062a \u0648 \u067e\u0646\u062c\u0647 \u0646\u0631\u0645 \u06a9\u0646\u06cc\u062f \u0632\u06cc\u0631\u0627 \u0645\u0627 \u062f\u0631 \u0634\u0631\u0641 \u0628\u0631\u0631\u0633\u06cc \u06cc\u06a9\u06cc \u0627\u0632 \u0642\u062f\u0631\u062a\u0645\u0646\u062f\u062a\u0631\u06cc\u0646 \u0648\u06cc\u0698\u06af\u06cc \u0647\u0627\u06cc Lambda \u0647\u0633\u062a\u06cc\u0645: \u0627\u0641\u0632\u0648\u0646\u0647 \u0647\u0627\u06cc Lambda.<\/p>\n<div id=\"ez-toc-container\" class=\"ez-toc-v2_0_84 counter-hierarchy ez-toc-counter-rtl ez-toc-grey ez-toc-container-direction\">\n<div class=\"ez-toc-title-container\">\n<p class=\"ez-toc-title\" style=\"cursor:inherit\">\u0641\u0647\u0631\u0633\u062a \u0645\u0637\u0627\u0644\u0628<\/p>\n<span class=\"ez-toc-title-toggle\"><a href=\"#\" class=\"ez-toc-pull-right ez-toc-btn ez-toc-btn-xs ez-toc-btn-default ez-toc-toggle\" aria-label=\"Toggle Table of Content\"><span class=\"ez-toc-js-icon-con\"><span class=\"\"><span class=\"eztoc-hide\" style=\"display:none;\">Toggle<\/span><span class=\"ez-toc-icon-toggle-span\"><svg style=\"fill: #999;color:#999\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" class=\"list-377408\" width=\"20px\" height=\"20px\" viewBox=\"0 0 24 24\" fill=\"none\"><path d=\"M6 6H4v2h2V6zm14 0H8v2h12V6zM4 11h2v2H4v-2zm16 0H8v2h12v-2zM4 16h2v2H4v-2zm16 0H8v2h12v-2z\" fill=\"currentColor\"><\/path><\/svg><svg style=\"fill: #999;color:#999\" class=\"arrow-unsorted-368013\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"10px\" height=\"10px\" viewBox=\"0 0 24 24\" version=\"1.2\" baseProfile=\"tiny\"><path d=\"M18.2 9.3l-6.2-6.3-6.2 6.3c-.2.2-.3.4-.3.7s.1.5.3.7c.2.2.4.3.7.3h11c.3 0 .5-.1.7-.3.2-.2.3-.5.3-.7s-.1-.5-.3-.7zM5.8 14.7l6.2 6.3 6.2-6.3c.2-.2.3-.5.3-.7s-.1-.5-.3-.7c-.2-.2-.4-.3-.7-.3h-11c-.3 0-.5.1-.7.3-.2.2-.3.5-.3.7s.1.5.3.7z\"\/><\/svg><\/span><\/span><\/span><\/a><\/span><\/div>\n<nav><ul class='ez-toc-list ez-toc-list-level-1 ' ><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-1\" href=\"https:\/\/nabfollower.com\/blog\/supercharging-your-aws-lambda-functions-with-extensions-a-nodejs-perspective-2em2\/#%D8%A8%D9%87_%D9%87%D8%B1_%D8%AD%D8%A7%D9%84_%D8%A7%D9%81%D8%B2%D9%88%D9%86%D9%87_%D9%87%D8%A7%DB%8C_%D9%84%D8%A7%D9%85%D8%A8%D8%AF%D8%A7_%DA%86%DB%8C%D8%B3%D8%AA%D8%9F\" >\u0628\u0647 \u0647\u0631 \u062d\u0627\u0644 \u0627\u0641\u0632\u0648\u0646\u0647 \u0647\u0627\u06cc \u0644\u0627\u0645\u0628\u062f\u0627 \u0686\u06cc\u0633\u062a\u061f<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-2\" href=\"https:\/\/nabfollower.com\/blog\/supercharging-your-aws-lambda-functions-with-extensions-a-nodejs-perspective-2em2\/#%DA%86%D8%B1%D8%A7_%D8%A8%D8%A7%DB%8C%D8%AF_%D8%A8%D9%87_%D8%A8%D8%B1%D9%86%D8%A7%D9%85%D9%87_%D9%87%D8%A7%DB%8C_%D8%A7%D9%81%D8%B2%D9%88%D8%AF%D9%86%DB%8C_%D9%84%D8%A7%D9%85%D8%A8%D8%AF%D8%A7_%D8%A7%D9%87%D9%85%DB%8C%D8%AA_%D8%AF%D9%87%DB%8C%D8%AF%D8%9F\" >\u0686\u0631\u0627 \u0628\u0627\u06cc\u062f \u0628\u0647 \u0628\u0631\u0646\u0627\u0645\u0647 \u0647\u0627\u06cc \u0627\u0641\u0632\u0648\u062f\u0646\u06cc \u0644\u0627\u0645\u0628\u062f\u0627 \u0627\u0647\u0645\u06cc\u062a \u062f\u0647\u06cc\u062f\u061f<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-3\" href=\"https:\/\/nabfollower.com\/blog\/supercharging-your-aws-lambda-functions-with-extensions-a-nodejs-perspective-2em2\/#%D8%A8%DB%8C%D8%A7%DB%8C%DB%8C%D8%AF_%D8%B9%D9%85%D9%84%DB%8C_%D8%B4%D9%88%DB%8C%D9%85_%D9%BE%DB%8C%D8%A7%D8%AF%D9%87_%D8%B3%D8%A7%D8%B2%DB%8C_%DB%8C%DA%A9_%D8%A7%D9%81%D8%B2%D9%88%D9%86%D9%87_%D8%AB%D8%A8%D8%AA_%D8%B3%D9%81%D8%A7%D8%B1%D8%B4%DB%8C\" >\u0628\u06cc\u0627\u06cc\u06cc\u062f \u0639\u0645\u0644\u06cc \u0634\u0648\u06cc\u0645: \u067e\u06cc\u0627\u062f\u0647 \u0633\u0627\u0632\u06cc \u06cc\u06a9 \u0627\u0641\u0632\u0648\u0646\u0647 \u062b\u0628\u062a \u0633\u0641\u0627\u0631\u0634\u06cc<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-4\" href=\"https:\/\/nabfollower.com\/blog\/supercharging-your-aws-lambda-functions-with-extensions-a-nodejs-perspective-2em2\/#%D8%A8%D9%87%D8%AA%D8%B1%DB%8C%D9%86_%D8%B1%D9%88%D8%B4%E2%80%8C%D9%87%D8%A7_%D8%A8%D8%B1%D8%A7%DB%8C_%D8%A8%D8%B1%D9%86%D8%A7%D9%85%D9%87%E2%80%8C%D9%87%D8%A7%DB%8C_%D8%A7%D9%81%D8%B2%D9%88%D8%AF%D9%86%DB%8C_Lambda_%D8%AF%D8%B1_Nodejs\" >\u0628\u0647\u062a\u0631\u06cc\u0646 \u0631\u0648\u0634\u200c\u0647\u0627 \u0628\u0631\u0627\u06cc \u0628\u0631\u0646\u0627\u0645\u0647\u200c\u0647\u0627\u06cc \u0627\u0641\u0632\u0648\u062f\u0646\u06cc Lambda \u062f\u0631 Node.js<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-5\" href=\"https:\/\/nabfollower.com\/blog\/supercharging-your-aws-lambda-functions-with-extensions-a-nodejs-perspective-2em2\/#%D8%A7%D8%B3%D8%AA%D9%82%D8%B1%D8%A7%D8%B1_%D8%A8%D8%B1%D9%86%D8%A7%D9%85%D9%87_%D8%A7%D9%81%D8%B2%D9%88%D8%AF%D9%86%DB%8C_%D8%B4%D9%85%D8%A7\" >\u0627\u0633\u062a\u0642\u0631\u0627\u0631 \u0628\u0631\u0646\u0627\u0645\u0647 \u0627\u0641\u0632\u0648\u062f\u0646\u06cc \u0634\u0645\u0627<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-6\" href=\"https:\/\/nabfollower.com\/blog\/supercharging-your-aws-lambda-functions-with-extensions-a-nodejs-perspective-2em2\/#%D8%A8%D8%B3%D8%AA%D9%87_%D8%A8%D9%86%D8%AF%DB%8C\" >\u0628\u0633\u062a\u0647 \u0628\u0646\u062f\u06cc<\/a><\/li><\/ul><\/nav><\/div>\n<h2><span class=\"ez-toc-section\" id=\"%D8%A8%D9%87_%D9%87%D8%B1_%D8%AD%D8%A7%D9%84_%D8%A7%D9%81%D8%B2%D9%88%D9%86%D9%87_%D9%87%D8%A7%DB%8C_%D9%84%D8%A7%D9%85%D8%A8%D8%AF%D8%A7_%DA%86%DB%8C%D8%B3%D8%AA%D8%9F\"><\/span>\n<p>  \u0628\u0647 \u0647\u0631 \u062d\u0627\u0644 \u0627\u0641\u0632\u0648\u0646\u0647 \u0647\u0627\u06cc \u0644\u0627\u0645\u0628\u062f\u0627 \u0686\u06cc\u0633\u062a\u061f<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>\u0639\u0645\u0644\u06a9\u0631\u062f \u0644\u0627\u0645\u0628\u062f\u0627 \u062e\u0648\u062f \u0631\u0627 \u0628\u0647 \u0639\u0646\u0648\u0627\u0646 \u06cc\u06a9 \u0646\u0648\u0627\u0632\u0646\u062f\u0647 \u0627\u0646\u0641\u0631\u0627\u062f\u06cc \u0631\u0648\u06cc \u0635\u062d\u0646\u0647 \u062a\u0635\u0648\u0631 \u06a9\u0646\u06cc\u062f. \u0627\u06a9\u0646\u0648\u0646\u060c \u0627\u0644\u062d\u0627\u0642\u0627\u062a \u0644\u0627\u0645\u0628\u062f\u0627 \u0631\u0627 \u0628\u0647\u200c\u0639\u0646\u0648\u0627\u0646 \u0628\u0627\u0646\u062f \u067e\u0634\u062a\u06cc\u0628\u0627\u0646 \u062a\u0635\u0648\u0631 \u06a9\u0646\u06cc\u062f\u060c \u0628\u062f\u0648\u0646 \u0627\u06cc\u0646\u06a9\u0647 \u062f\u0631 \u06a9\u0627\u0646\u0648\u0646 \u062a\u0648\u062c\u0647 \u0642\u0631\u0627\u0631 \u0628\u06af\u06cc\u0631\u06cc\u062f\u060c \u0639\u0645\u0644\u06a9\u0631\u062f \u0631\u0627 \u0628\u0647\u0628\u0648\u062f \u0645\u06cc\u200c\u0628\u062e\u0634\u062f. \u0628\u0627\u062d\u0627\u0644\u060c \u062f\u0631\u0633\u062a\u0647\u061f<\/p>\n<p>\u067e\u0633\u0648\u0646\u062f\u0647\u0627\u06cc Lambda \u0641\u0631\u0622\u06cc\u0646\u062f\u0647\u0627\u06cc \u0645\u0633\u062a\u0642\u0644\u06cc \u0647\u0633\u062a\u0646\u062f \u06a9\u0647 \u062f\u0631 \u06a9\u0646\u0627\u0631 \u06a9\u062f \u062a\u0627\u0628\u0639 \u0627\u0635\u0644\u06cc \u0634\u0645\u0627 \u0627\u062c\u0631\u0627 \u0645\u06cc \u0634\u0648\u0646\u062f. \u0622\u0646\u0647\u0627 \u0645\u062d\u06cc\u0637 \u0627\u062c\u0631\u0627\u06cc \u06cc\u06a9\u0633\u0627\u0646\u06cc \u0631\u0627 \u0628\u0647 \u0627\u0634\u062a\u0631\u0627\u06a9 \u0645\u06cc \u06af\u0630\u0627\u0631\u0646\u062f\u060c \u0628\u0647 \u0627\u06cc\u0646 \u0645\u0639\u0646\u06cc \u06a9\u0647 \u0628\u0647 \u062d\u0627\u0641\u0638\u0647\u060c \u0645\u0647\u0644\u062a \u0632\u0645\u0627\u0646\u06cc \u0648 \u0630\u062e\u06cc\u0631\u0647 \u0633\u0627\u0632\u06cc \u06cc\u06a9\u0633\u0627\u0646 \u062f\u0633\u062a\u0631\u0633\u06cc \u062f\u0627\u0631\u0646\u062f. \u0627\u0645\u0627 \u0646\u06a9\u062a\u0647 \u0645\u0647\u0645 \u0627\u06cc\u0646\u062c\u0627\u0633\u062a: \u0622\u0646\u0647\u0627 \u0686\u0631\u062e\u0647 \u0632\u0646\u062f\u06af\u06cc \u062e\u0648\u062f \u0631\u0627 \u062f\u0627\u0631\u0646\u062f!\n<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight javascript\"><code><span class=\"c1\">\/\/ Pseudo-code to illustrate the concept<\/span>\n<span class=\"kd\">const<\/span> <span class=\"nx\">mainLambdaFunction<\/span> <span class=\"o\">=<\/span> <span class=\"p\">()<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"p\">{<\/span>\n  <span class=\"c1\">\/\/ Your regular Lambda code<\/span>\n<span class=\"p\">};<\/span>\n\n<span class=\"kd\">const<\/span> <span class=\"nx\">lambdaExtension<\/span> <span class=\"o\">=<\/span> <span class=\"p\">{<\/span>\n  <span class=\"na\">init<\/span><span class=\"p\">:<\/span> <span class=\"p\">()<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"p\">{<\/span>\n    <span class=\"c1\">\/\/ Run before the main function<\/span>\n  <span class=\"p\">},<\/span>\n  <span class=\"na\">execute<\/span><span class=\"p\">:<\/span> <span class=\"p\">()<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"p\">{<\/span>\n    <span class=\"c1\">\/\/ Run alongside the main function<\/span>\n  <span class=\"p\">},<\/span>\n  <span class=\"na\">cleanup<\/span><span class=\"p\">:<\/span> <span class=\"p\">()<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"p\">{<\/span>\n    <span class=\"c1\">\/\/ Run after the main function<\/span>\n  <span class=\"p\">}<\/span>\n<span class=\"p\">};<\/span>\n<\/code><\/pre>\n<\/div>\n<h2><span class=\"ez-toc-section\" id=\"%DA%86%D8%B1%D8%A7_%D8%A8%D8%A7%DB%8C%D8%AF_%D8%A8%D9%87_%D8%A8%D8%B1%D9%86%D8%A7%D9%85%D9%87_%D9%87%D8%A7%DB%8C_%D8%A7%D9%81%D8%B2%D9%88%D8%AF%D9%86%DB%8C_%D9%84%D8%A7%D9%85%D8%A8%D8%AF%D8%A7_%D8%A7%D9%87%D9%85%DB%8C%D8%AA_%D8%AF%D9%87%DB%8C%D8%AF%D8%9F\"><\/span>\n<p>  \u0686\u0631\u0627 \u0628\u0627\u06cc\u062f \u0628\u0647 \u0628\u0631\u0646\u0627\u0645\u0647 \u0647\u0627\u06cc \u0627\u0641\u0632\u0648\u062f\u0646\u06cc \u0644\u0627\u0645\u0628\u062f\u0627 \u0627\u0647\u0645\u06cc\u062a \u062f\u0647\u06cc\u062f\u061f<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<ol>\n<li>\n<p><strong>\u0627\u0646\u0639\u0637\u0627\u0641 \u067e\u0630\u06cc\u0631\u06cc<\/strong>: \u0628\u0631\u0646\u0627\u0645\u0647 \u0647\u0627\u06cc \u0627\u0641\u0632\u0648\u062f\u0646\u06cc \u0645\u06cc \u062a\u0648\u0627\u0646\u0646\u062f \u0628\u0647 \u0632\u0628\u0627\u0646\u06cc \u0645\u062a\u0641\u0627\u0648\u062a \u0627\u0632 \u0639\u0645\u0644\u06a9\u0631\u062f \u0627\u0635\u0644\u06cc \u0634\u0645\u0627 \u0627\u062c\u0631\u0627 \u0634\u0648\u0646\u062f. Node.js \u0628\u0631\u0627\u06cc \u067e\u06cc\u0631\u0648\u0632\u06cc\u060c \u0627\u0645\u0627 \u0634\u0627\u06cc\u062f \u0628\u0647 \u06cc\u06a9 \u067e\u0633\u0648\u0646\u062f \u067e\u0627\u06cc\u062a\u0648\u0646 \u0646\u06cc\u0627\u0632 \u062f\u0627\u0634\u062a\u0647 \u0628\u0627\u0634\u06cc\u062f\u061f \u0645\u0634\u06a9\u0644\u06cc \u0646\u06cc\u0633\u062a!<\/p>\n<\/li>\n<li>\n<p><strong>\u0686\u0631\u062e\u0647 \u0639\u0645\u0631 \u0637\u0648\u0644\u0627\u0646\u06cc<\/strong>: \u0622\u0646\u0647\u0627 \u0645\u06cc \u062a\u0648\u0627\u0646\u0646\u062f \u0642\u0628\u0644 \u0627\u0632 \u0639\u0645\u0644\u06a9\u0631\u062f \u0634\u0645\u0627 \u0634\u0631\u0648\u0639 \u0634\u0648\u0646\u062f \u0648 \u067e\u0633 \u0627\u0632 \u0627\u0646\u062c\u0627\u0645 \u0622\u0646 \u0627\u062f\u0627\u0645\u0647 \u062f\u0647\u0646\u062f. \u0627\u06cc\u062f\u0647 \u0622\u0644 \u0628\u0631\u0627\u06cc \u06a9\u0627\u0631\u0647\u0627\u06cc \u0631\u0627\u0647 \u0627\u0646\u062f\u0627\u0632\u06cc \u0648 \u067e\u0627\u06a9\u0633\u0627\u0632\u06cc!<\/p>\n<\/li>\n<li>\n<p><strong>\u062b\u0628\u062a \u0633\u0641\u0627\u0631\u0634\u06cc<\/strong>: \u0622\u06cc\u0627 \u0645\u06cc \u062e\u0648\u0627\u0647\u06cc\u062f \u06af\u0632\u0627\u0631\u0634 \u0647\u0627\u06cc \u062e\u0648\u062f \u0631\u0627 \u0628\u0647 \u06cc\u06a9 \u0633\u0631\u0648\u06cc\u0633 \u062c\u062f\u06cc\u062f \u0641\u0627\u0646\u062a\u0632\u06cc \u0627\u0631\u0633\u0627\u0644 \u06a9\u0646\u06cc\u062f\u061f \u0628\u0631\u0646\u0627\u0645\u0647 \u0647\u0627\u06cc \u0627\u0641\u0632\u0648\u062f\u0646\u06cc \u0634\u0645\u0627 \u0631\u0627 \u062a\u062d\u062a \u067e\u0648\u0634\u0634 \u0642\u0631\u0627\u0631 \u062f\u0627\u062f\u0647 \u0627\u0646\u062f.<\/p>\n<\/li>\n<\/ol>\n<h2><span class=\"ez-toc-section\" id=\"%D8%A8%DB%8C%D8%A7%DB%8C%DB%8C%D8%AF_%D8%B9%D9%85%D9%84%DB%8C_%D8%B4%D9%88%DB%8C%D9%85_%D9%BE%DB%8C%D8%A7%D8%AF%D9%87_%D8%B3%D8%A7%D8%B2%DB%8C_%DB%8C%DA%A9_%D8%A7%D9%81%D8%B2%D9%88%D9%86%D9%87_%D8%AB%D8%A8%D8%AA_%D8%B3%D9%81%D8%A7%D8%B1%D8%B4%DB%8C\"><\/span>\n<p>  \u0628\u06cc\u0627\u06cc\u06cc\u062f \u0639\u0645\u0644\u06cc \u0634\u0648\u06cc\u0645: \u067e\u06cc\u0627\u062f\u0647 \u0633\u0627\u0632\u06cc \u06cc\u06a9 \u0627\u0641\u0632\u0648\u0646\u0647 \u062b\u0628\u062a \u0633\u0641\u0627\u0631\u0634\u06cc<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>\u062e\u0648\u0628\u060c \u0628\u06cc\u0627\u06cc\u06cc\u062f \u0622\u0633\u062a\u06cc\u0646 \u0647\u0627\u06cc\u0645\u0627\u0646 \u0631\u0627 \u0628\u0627\u0644\u0627 \u0628\u0632\u0646\u06cc\u0645 \u0648 \u06cc\u06a9 \u067e\u0633\u0648\u0646\u062f \u0633\u0627\u062f\u0647 \u0628\u0633\u0627\u0632\u06cc\u0645 \u06a9\u0647 \u0644\u0627\u06af \u0647\u0627\u06cc \u0644\u0627\u0645\u0628\u062f\u0627 \u0631\u0627 \u0628\u0647 \u06cc\u06a9 \u0633\u0637\u0644 S3 \u0645\u06cc \u0641\u0631\u0633\u062a\u062f. \u0686\u0631\u0627 \u06a9\u0647 \u0646\u0647\u060c \u062f\u0631\u0633\u062a \u0627\u0633\u062a\u061f<\/p>\n<p>\u0627\u0628\u062a\u062f\u0627 \u0628\u06cc\u0627\u06cc\u06cc\u062f \u0633\u0627\u062e\u062a\u0627\u0631 \u0628\u0631\u0646\u0627\u0645\u0647 \u0627\u0641\u0632\u0648\u062f\u0646\u06cc \u062e\u0648\u062f \u0631\u0627 \u062a\u0646\u0638\u06cc\u0645 \u06a9\u0646\u06cc\u0645:\n<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight plaintext\"><code>my-lambda-project\/\n\u251c\u2500\u2500 index.js            \/\/ Main Lambda function\n\u2514\u2500\u2500 extensions\/\n    \u2514\u2500\u2500 logger-extension\/\n        \u251c\u2500\u2500 index.js    \/\/ Extension entry point\n        \u251c\u2500\u2500 logger.js   \/\/ Logging logic\n        \u2514\u2500\u2500 s3-client.js \/\/ S3 interaction\n<\/code><\/pre>\n<\/div>\n<p>\u062d\u0627\u0644\u0627 \u0628\u06cc\u0627\u06cc\u06cc\u062f \u0627\u0641\u0632\u0648\u0646\u0647 \u062e\u0648\u062f \u0631\u0627 \u067e\u06cc\u0627\u062f\u0647 \u0633\u0627\u0632\u06cc \u06a9\u0646\u06cc\u0645:\n<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight javascript\"><code><span class=\"c1\">\/\/ extensions\/logger-extension\/index.js<\/span>\n<span class=\"kd\">const<\/span> <span class=\"p\">{<\/span> <span class=\"nx\">register<\/span><span class=\"p\">,<\/span> <span class=\"nx\">next<\/span> <span class=\"p\">}<\/span> <span class=\"o\">=<\/span> <span class=\"nf\">require<\/span><span class=\"p\">(<\/span><span class=\"dl\">'<\/span><span class=\"s1\">.\/lambda-extension-api<\/span><span class=\"dl\">'<\/span><span class=\"p\">);<\/span>\n<span class=\"kd\">const<\/span> <span class=\"p\">{<\/span> <span class=\"nx\">initializeLogger<\/span><span class=\"p\">,<\/span> <span class=\"nx\">logEvent<\/span> <span class=\"p\">}<\/span> <span class=\"o\">=<\/span> <span class=\"nf\">require<\/span><span class=\"p\">(<\/span><span class=\"dl\">'<\/span><span class=\"s1\">.\/logger<\/span><span class=\"dl\">'<\/span><span class=\"p\">);<\/span>\n<span class=\"kd\">const<\/span> <span class=\"nx\">extensionName<\/span> <span class=\"o\">=<\/span> <span class=\"dl\">'<\/span><span class=\"s1\">logger-extension<\/span><span class=\"dl\">'<\/span><span class=\"p\">;<\/span>\n\n<span class=\"kd\">const<\/span> <span class=\"nx\">eventHandler<\/span> <span class=\"o\">=<\/span> <span class=\"k\">async <\/span><span class=\"p\">(<\/span><span class=\"nx\">event<\/span><span class=\"p\">)<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"p\">{<\/span>\n  <span class=\"k\">if <\/span><span class=\"p\">(<\/span><span class=\"nx\">event<\/span><span class=\"p\">.<\/span><span class=\"nx\">eventType<\/span> <span class=\"o\">===<\/span> <span class=\"dl\">'<\/span><span class=\"s1\">INVOKE<\/span><span class=\"dl\">'<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span>\n    <span class=\"k\">await<\/span> <span class=\"nf\">logEvent<\/span><span class=\"p\">(<\/span><span class=\"nx\">event<\/span><span class=\"p\">);<\/span>\n  <span class=\"p\">}<\/span> <span class=\"k\">else<\/span> <span class=\"k\">if <\/span><span class=\"p\">(<\/span><span class=\"nx\">event<\/span><span class=\"p\">.<\/span><span class=\"nx\">eventType<\/span> <span class=\"o\">===<\/span> <span class=\"dl\">'<\/span><span class=\"s1\">SHUTDOWN<\/span><span class=\"dl\">'<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span>\n    <span class=\"c1\">\/\/ Clean up if necessary<\/span>\n    <span class=\"nx\">process<\/span><span class=\"p\">.<\/span><span class=\"nf\">exit<\/span><span class=\"p\">(<\/span><span class=\"mi\">0<\/span><span class=\"p\">);<\/span>\n  <span class=\"p\">}<\/span>\n<span class=\"p\">};<\/span>\n\n<span class=\"p\">(<\/span><span class=\"k\">async<\/span> <span class=\"kd\">function<\/span> <span class=\"nf\">run<\/span><span class=\"p\">()<\/span> <span class=\"p\">{<\/span>\n  <span class=\"nx\">process<\/span><span class=\"p\">.<\/span><span class=\"nf\">on<\/span><span class=\"p\">(<\/span><span class=\"dl\">'<\/span><span class=\"s1\">SIGINT<\/span><span class=\"dl\">'<\/span><span class=\"p\">,<\/span> <span class=\"p\">()<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"nx\">process<\/span><span class=\"p\">.<\/span><span class=\"nf\">exit<\/span><span class=\"p\">(<\/span><span class=\"mi\">0<\/span><span class=\"p\">));<\/span>\n  <span class=\"nx\">process<\/span><span class=\"p\">.<\/span><span class=\"nf\">on<\/span><span class=\"p\">(<\/span><span class=\"dl\">'<\/span><span class=\"s1\">SIGTERM<\/span><span class=\"dl\">'<\/span><span class=\"p\">,<\/span> <span class=\"p\">()<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"nx\">process<\/span><span class=\"p\">.<\/span><span class=\"nf\">exit<\/span><span class=\"p\">(<\/span><span class=\"mi\">0<\/span><span class=\"p\">));<\/span>\n\n  <span class=\"nx\">console<\/span><span class=\"p\">.<\/span><span class=\"nf\">log<\/span><span class=\"p\">(<\/span><span class=\"dl\">'<\/span><span class=\"s1\">Logger extension starting...<\/span><span class=\"dl\">'<\/span><span class=\"p\">);<\/span>\n\n  <span class=\"kd\">const<\/span> <span class=\"nx\">extensionId<\/span> <span class=\"o\">=<\/span> <span class=\"k\">await<\/span> <span class=\"nf\">register<\/span><span class=\"p\">(<\/span><span class=\"nx\">extensionName<\/span><span class=\"p\">);<\/span>\n  <span class=\"nx\">console<\/span><span class=\"p\">.<\/span><span class=\"nf\">log<\/span><span class=\"p\">(<\/span><span class=\"dl\">'<\/span><span class=\"s1\">Extension registered with ID:<\/span><span class=\"dl\">'<\/span><span class=\"p\">,<\/span> <span class=\"nx\">extensionId<\/span><span class=\"p\">);<\/span>\n\n  <span class=\"k\">await<\/span> <span class=\"nf\">initializeLogger<\/span><span class=\"p\">();<\/span>\n\n  <span class=\"c1\">\/\/ Event loop<\/span>\n  <span class=\"k\">while <\/span><span class=\"p\">(<\/span><span class=\"kc\">true<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span>\n    <span class=\"kd\">const<\/span> <span class=\"nx\">event<\/span> <span class=\"o\">=<\/span> <span class=\"k\">await<\/span> <span class=\"nf\">next<\/span><span class=\"p\">(<\/span><span class=\"nx\">extensionId<\/span><span class=\"p\">);<\/span>\n    <span class=\"k\">await<\/span> <span class=\"nf\">eventHandler<\/span><span class=\"p\">(<\/span><span class=\"nx\">event<\/span><span class=\"p\">);<\/span>\n  <span class=\"p\">}<\/span>\n<span class=\"p\">})();<\/span>\n<\/code><\/pre>\n<\/div>\n<p>\u0648 \u062f\u0631 \u0627\u06cc\u0646\u062c\u0627 \u067e\u06cc\u0627\u062f\u0647 \u0633\u0627\u0632\u06cc \u0644\u0627\u06af\u0631 \u0633\u0627\u062f\u0647 \u0627\u0633\u062a:\n<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight javascript\"><code><span class=\"c1\">\/\/ extensions\/logger-extension\/logger.js<\/span>\n<span class=\"kd\">const<\/span> <span class=\"p\">{<\/span> <span class=\"nx\">S3Client<\/span><span class=\"p\">,<\/span> <span class=\"nx\">PutObjectCommand<\/span> <span class=\"p\">}<\/span> <span class=\"o\">=<\/span> <span class=\"nf\">require<\/span><span class=\"p\">(<\/span><span class=\"dl\">'<\/span><span class=\"s1\">@aws-sdk\/client-s3<\/span><span class=\"dl\">'<\/span><span class=\"p\">);<\/span>\n\n<span class=\"kd\">const<\/span> <span class=\"nx\">s3Client<\/span> <span class=\"o\">=<\/span> <span class=\"k\">new<\/span> <span class=\"nc\">S3Client<\/span><span class=\"p\">({<\/span> <span class=\"na\">region<\/span><span class=\"p\">:<\/span> <span class=\"nx\">process<\/span><span class=\"p\">.<\/span><span class=\"nx\">env<\/span><span class=\"p\">.<\/span><span class=\"nx\">AWS_REGION<\/span> <span class=\"p\">});<\/span>\n<span class=\"kd\">const<\/span> <span class=\"nx\">BUCKET_NAME<\/span> <span class=\"o\">=<\/span> <span class=\"nx\">process<\/span><span class=\"p\">.<\/span><span class=\"nx\">env<\/span><span class=\"p\">.<\/span><span class=\"nx\">LOG_BUCKET_NAME<\/span><span class=\"p\">;<\/span>\n\n<span class=\"k\">async<\/span> <span class=\"kd\">function<\/span> <span class=\"nf\">initializeLogger<\/span><span class=\"p\">()<\/span> <span class=\"p\">{<\/span>\n  <span class=\"c1\">\/\/ Any setup logic here<\/span>\n  <span class=\"nx\">console<\/span><span class=\"p\">.<\/span><span class=\"nf\">log<\/span><span class=\"p\">(<\/span><span class=\"dl\">'<\/span><span class=\"s1\">Logger initialized<\/span><span class=\"dl\">'<\/span><span class=\"p\">);<\/span>\n<span class=\"p\">}<\/span>\n\n<span class=\"k\">async<\/span> <span class=\"kd\">function<\/span> <span class=\"nf\">logEvent<\/span><span class=\"p\">(<\/span><span class=\"nx\">event<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span>\n  <span class=\"kd\">const<\/span> <span class=\"nx\">logData<\/span> <span class=\"o\">=<\/span> <span class=\"nx\">JSON<\/span><span class=\"p\">.<\/span><span class=\"nf\">stringify<\/span><span class=\"p\">(<\/span><span class=\"nx\">event<\/span><span class=\"p\">);<\/span>\n  <span class=\"kd\">const<\/span> <span class=\"nx\">params<\/span> <span class=\"o\">=<\/span> <span class=\"p\">{<\/span>\n    <span class=\"na\">Bucket<\/span><span class=\"p\">:<\/span> <span class=\"nx\">BUCKET_NAME<\/span><span class=\"p\">,<\/span>\n    <span class=\"na\">Key<\/span><span class=\"p\">:<\/span> <span class=\"s2\">`logs\/<\/span><span class=\"p\">${<\/span><span class=\"nb\">Date<\/span><span class=\"p\">.<\/span><span class=\"nf\">now<\/span><span class=\"p\">()}<\/span><span class=\"s2\">.json`<\/span><span class=\"p\">,<\/span>\n    <span class=\"na\">Body<\/span><span class=\"p\">:<\/span> <span class=\"nx\">logData<\/span>\n  <span class=\"p\">};<\/span>\n\n  <span class=\"k\">try<\/span> <span class=\"p\">{<\/span>\n    <span class=\"k\">await<\/span> <span class=\"nx\">s3Client<\/span><span class=\"p\">.<\/span><span class=\"nf\">send<\/span><span class=\"p\">(<\/span><span class=\"k\">new<\/span> <span class=\"nc\">PutObjectCommand<\/span><span class=\"p\">(<\/span><span class=\"nx\">params<\/span><span class=\"p\">));<\/span>\n    <span class=\"nx\">console<\/span><span class=\"p\">.<\/span><span class=\"nf\">log<\/span><span class=\"p\">(<\/span><span class=\"dl\">'<\/span><span class=\"s1\">Log sent to S3<\/span><span class=\"dl\">'<\/span><span class=\"p\">);<\/span>\n  <span class=\"p\">}<\/span> <span class=\"k\">catch <\/span><span class=\"p\">(<\/span><span class=\"nx\">error<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span>\n    <span class=\"nx\">console<\/span><span class=\"p\">.<\/span><span class=\"nf\">error<\/span><span class=\"p\">(<\/span><span class=\"dl\">'<\/span><span class=\"s1\">Failed to send log to S3:<\/span><span class=\"dl\">'<\/span><span class=\"p\">,<\/span> <span class=\"nx\">error<\/span><span class=\"p\">);<\/span>\n  <span class=\"p\">}<\/span>\n<span class=\"p\">}<\/span>\n\n<span class=\"nx\">module<\/span><span class=\"p\">.<\/span><span class=\"nx\">exports<\/span> <span class=\"o\">=<\/span> <span class=\"p\">{<\/span> <span class=\"nx\">initializeLogger<\/span><span class=\"p\">,<\/span> <span class=\"nx\">logEvent<\/span> <span class=\"p\">};<\/span>\n<\/code><\/pre>\n<\/div>\n<h2><span class=\"ez-toc-section\" id=\"%D8%A8%D9%87%D8%AA%D8%B1%DB%8C%D9%86_%D8%B1%D9%88%D8%B4%E2%80%8C%D9%87%D8%A7_%D8%A8%D8%B1%D8%A7%DB%8C_%D8%A8%D8%B1%D9%86%D8%A7%D9%85%D9%87%E2%80%8C%D9%87%D8%A7%DB%8C_%D8%A7%D9%81%D8%B2%D9%88%D8%AF%D9%86%DB%8C_Lambda_%D8%AF%D8%B1_Nodejs\"><\/span>\n<p>  \u0628\u0647\u062a\u0631\u06cc\u0646 \u0631\u0648\u0634\u200c\u0647\u0627 \u0628\u0631\u0627\u06cc \u0628\u0631\u0646\u0627\u0645\u0647\u200c\u0647\u0627\u06cc \u0627\u0641\u0632\u0648\u062f\u0646\u06cc Lambda \u062f\u0631 Node.js<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<ol>\n<li>\n<p><strong>\u0622\u0646 \u0631\u0627 \u0631\u0648\u0634\u0646 \u0646\u06af\u0647 \u062f\u0627\u0631\u06cc\u062f<\/strong>: \u0628\u0631\u0646\u0627\u0645\u0647 \u0647\u0627\u06cc \u0627\u0641\u0632\u0648\u062f\u0646\u06cc \u0645\u0646\u0627\u0628\u0639 \u0631\u0627 \u0628\u0627 \u0639\u0645\u0644\u06a9\u0631\u062f \u0627\u0635\u0644\u06cc \u0634\u0645\u0627 \u0628\u0647 \u0627\u0634\u062a\u0631\u0627\u06a9 \u0645\u06cc \u06af\u0630\u0627\u0631\u0646\u062f. \u0622\u0646\u0647\u0627 \u0631\u0627 \u06a9\u0627\u0631\u0622\u0645\u062f \u0646\u06af\u0647 \u062f\u0627\u0631\u06cc\u062f!<\/p>\n<\/li>\n<li>\n<p><strong>\u0631\u0633\u06cc\u062f\u06af\u06cc \u0628\u0647 \u062e\u0637\u0627<\/strong>: \u0645\u062f\u06cc\u0631\u06cc\u062a \u062e\u0637\u0627\u06cc \u0642\u0648\u06cc \u0628\u0633\u06cc\u0627\u0631 \u0645\u0647\u0645 \u0627\u0633\u062a. \u0634\u0645\u0627 \u0646\u0645\u06cc \u062e\u0648\u0627\u0647\u06cc\u062f \u0628\u0631\u0646\u0627\u0645\u0647 \u0627\u0641\u0632\u0648\u062f\u0646\u06cc \u0634\u0645\u0627 \u0639\u0645\u0644\u06a9\u0631\u062f \u0634\u0645\u0627 \u0631\u0627 \u062e\u0631\u0627\u0628 \u06a9\u0646\u062f.<\/p>\n<\/li>\n<li>\n<p><strong>\u0639\u0645\u0644\u06cc\u0627\u062a \u0646\u0627\u0647\u0645\u0632\u0645\u0627\u0646<\/strong>: \u0627\u0632 async\/wait \u0628\u0631\u0627\u06cc \u06a9\u062f\u0647\u0627\u06cc \u062a\u0645\u06cc\u0632\u062a\u0631 \u0648 \u062e\u0648\u0627\u0646\u0627\u062a\u0631 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u06a9\u0646\u06cc\u062f.<\/p>\n<\/li>\n<li>\n<p><strong>\u0645\u062a\u063a\u06cc\u0631\u0647\u0627\u06cc \u0645\u062d\u06cc\u0637\u06cc<\/strong>: \u0627\u0632 \u0622\u0646\u0647\u0627 \u0628\u0631\u0627\u06cc \u067e\u06cc\u06a9\u0631\u0628\u0646\u062f\u06cc \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u06a9\u0646\u06cc\u062f \u062a\u0627 \u06a9\u062f \u062e\u0648\u062f \u0631\u0627 \u0627\u0646\u0639\u0637\u0627\u0641 \u067e\u0630\u06cc\u0631 \u0646\u06af\u0647 \u062f\u0627\u0631\u06cc\u062f.<\/p>\n<\/li>\n<li>\n<p><strong>\u0648\u0631\u0648\u062f \u0628\u0647 \u0633\u06cc\u0633\u062a\u0645<\/strong>: \u0628\u0644\u0647\u060c \u062d\u062a\u06cc \u0628\u0631\u0646\u0627\u0645\u0647 \u0627\u0641\u0632\u0648\u062f\u0646\u06cc \u0634\u0645\u0627 \u0628\u0627\u06cc\u062f \u0641\u0639\u0627\u0644\u06cc\u062a \u0647\u0627\u06cc \u062e\u0648\u062f \u0631\u0627 \u062b\u0628\u062a \u06a9\u0646\u062f. \u0645\u062a\u0627\u060c \u062f\u0631\u0633\u062a\u0647\u061f<\/p>\n<\/li>\n<\/ol>\n<h2><span class=\"ez-toc-section\" id=\"%D8%A7%D8%B3%D8%AA%D9%82%D8%B1%D8%A7%D8%B1_%D8%A8%D8%B1%D9%86%D8%A7%D9%85%D9%87_%D8%A7%D9%81%D8%B2%D9%88%D8%AF%D9%86%DB%8C_%D8%B4%D9%85%D8%A7\"><\/span>\n<p>  \u0627\u0633\u062a\u0642\u0631\u0627\u0631 \u0628\u0631\u0646\u0627\u0645\u0647 \u0627\u0641\u0632\u0648\u062f\u0646\u06cc \u0634\u0645\u0627<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>\u0628\u0631\u0627\u06cc \u062f\u06cc\u062f\u0646 \u0628\u0631\u0646\u0627\u0645\u0647 \u0627\u0641\u0632\u0648\u062f\u0646\u06cc \u062e\u0648\u062f \u0622\u0645\u0627\u062f\u0647 \u0647\u0633\u062a\u06cc\u062f\u061f \u062f\u0631 \u0627\u06cc\u0646\u062c\u0627 \u0646\u062d\u0648\u0647 \u0627\u0633\u062a\u0642\u0631\u0627\u0631 \u0622\u0646 \u0622\u0645\u062f\u0647 \u0627\u0633\u062a:<\/p>\n<ol>\n<li>\u0627\u0641\u0632\u0648\u0646\u0647 \u062e\u0648\u062f \u0631\u0627 \u0632\u06cc\u067e \u06a9\u0646\u06cc\u062f:\n<\/li>\n<\/ol>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight shell\"><code>   zip <span class=\"nt\">-r<\/span> logger-extension.zip extensions\/logger-extension\n<\/code><\/pre>\n<\/div>\n<ol>\n<li>\u06cc\u06a9 \u0644\u0627\u06cc\u0647 \u0628\u0627 \u067e\u0633\u0648\u0646\u062f \u062e\u0648\u062f \u0627\u06cc\u062c\u0627\u062f \u06a9\u0646\u06cc\u062f:\n<\/li>\n<\/ol>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight shell\"><code>   aws lambda publish-layer-version <span class=\"se\">\\<\/span>\n     <span class=\"nt\">--layer-name<\/span> <span class=\"s2\">\"logger-extension\"<\/span> <span class=\"se\">\\<\/span>\n     <span class=\"nt\">--zip-file<\/span> <span class=\"s2\">\"fileb:\/\/logger-extension.zip\"<\/span>\n<\/code><\/pre>\n<\/div>\n<ol>\n<li>\u0644\u0627\u06cc\u0647 \u0631\u0627 \u0628\u0647 \u062a\u0627\u0628\u0639 Lambda \u062e\u0648\u062f \u0627\u0636\u0627\u0641\u0647 \u06a9\u0646\u06cc\u062f:\n<\/li>\n<\/ol>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight shell\"><code>   aws lambda update-function-configuration <span class=\"se\">\\<\/span>\n     <span class=\"nt\">--function-name<\/span> YourFunctionName <span class=\"se\">\\<\/span>\n     <span class=\"nt\">--layers<\/span> arn:aws:lambda:region:account-id:layer:logger-extension:1\n<\/code><\/pre>\n<\/div>\n<p>\u0648 voil\u00e0! \u062a\u0627\u0628\u0639 Lambda \u0634\u0645\u0627 \u0627\u06a9\u0646\u0648\u0646 \u062f\u0627\u0631\u0627\u06cc \u06cc\u06a9 sidekick \u0627\u0633\u062a \u06a9\u0647 \u06af\u0632\u0627\u0631\u0634\u200c\u0647\u0627 \u0631\u0627 \u0628\u0647 S3 \u0627\u0631\u0633\u0627\u0644 \u0645\u06cc\u200c\u06a9\u0646\u062f.<\/p>\n<h2><span class=\"ez-toc-section\" id=\"%D8%A8%D8%B3%D8%AA%D9%87_%D8%A8%D9%86%D8%AF%DB%8C\"><\/span>\n<p>  \u0628\u0633\u062a\u0647 \u0628\u0646\u062f\u06cc<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>\u0628\u0631\u0646\u0627\u0645\u0647 \u0647\u0627\u06cc \u0627\u0641\u0632\u0648\u062f\u0646\u06cc Lambda \u062f\u0646\u06cc\u0627\u06cc\u06cc \u0627\u0632 \u0627\u0645\u06a9\u0627\u0646\u0627\u062a \u0631\u0627 \u0628\u0631\u0627\u06cc \u0628\u0647\u0628\u0648\u062f \u0628\u0631\u0646\u0627\u0645\u0647 \u0647\u0627\u06cc \u0628\u062f\u0648\u0646 \u0633\u0631\u0648\u0631 \u0634\u0645\u0627 \u0628\u0627\u0632 \u0645\u06cc \u06a9\u0646\u062f. \u0686\u0647 \u062b\u0628\u062a \u0633\u0641\u0627\u0631\u0634\u06cc\u060c \u0646\u0638\u0627\u0631\u062a \u06cc\u0627 \u0647\u0631 \u067e\u0631\u062f\u0627\u0632\u0634 \u062e\u0627\u0631\u062c \u0627\u0632 \u0628\u0627\u0646\u062f \u062f\u06cc\u06af\u0631\u06cc\u060c \u0628\u0631\u0646\u0627\u0645\u0647 \u0647\u0627\u06cc \u0627\u0641\u0632\u0648\u062f\u0646\u06cc \u0634\u0645\u0627 \u0631\u0627 \u062a\u062d\u062a \u067e\u0648\u0634\u0634 \u0642\u0631\u0627\u0631 \u062f\u0627\u062f\u0647 \u0627\u0646\u062f.<\/p>\n<p>\u0628\u0647 \u06cc\u0627\u062f \u062f\u0627\u0634\u062a\u0647 \u0628\u0627\u0634\u06cc\u062f\u060c \u0628\u0627 \u0642\u062f\u0631\u062a \u0632\u06cc\u0627\u062f\u060c \u0645\u0633\u0626\u0648\u0644\u06cc\u062a \u0628\u0632\u0631\u06af\u06cc \u0628\u0647 \u0647\u0645\u0631\u0627\u0647 \u062f\u0627\u0631\u062f. \u0627\u0632 \u0628\u0631\u0646\u0627\u0645\u0647\u200c\u0647\u0627\u06cc \u0627\u0641\u0632\u0648\u062f\u0646\u06cc \u0647\u0648\u0634\u0645\u0646\u062f\u0627\u0646\u0647 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u06a9\u0646\u06cc\u062f \u0648 \u0647\u0645\u06cc\u0634\u0647 \u062a\u0623\u062b\u06cc\u0631 \u0622\u0646\u0647\u0627 \u0631\u0627 \u0628\u0631 \u0639\u0645\u0644\u06a9\u0631\u062f \u0648 \u0647\u0632\u06cc\u0646\u0647 \u0639\u0645\u0644\u06a9\u0631\u062f \u062e\u0648\u062f \u062f\u0631 \u0646\u0638\u0631 \u0628\u06af\u06cc\u0631\u06cc\u062f.<\/p>\n<p>\u0686\u0647 \u0627\u06cc\u062f\u0647 \u0647\u0627\u06cc \u062c\u0627\u0644\u0628\u06cc \u0628\u0631\u0627\u06cc \u0627\u0641\u0632\u0648\u0646\u0647 \u0647\u0627\u06cc Lambda \u062f\u0627\u0631\u06cc\u062f\u061f \u0646\u0638\u0631 \u062e\u0648\u062f \u0631\u0627 \u062f\u0631 \u0632\u06cc\u0631 \u0628\u0646\u0648\u06cc\u0633\u06cc\u062f \u0648 \u0628\u06cc\u0627\u06cc\u06cc\u062f \u0628\u0627 \u0647\u0645 \u0633\u0631\u06cc \u0628\u0632\u0646\u06cc\u0645! \ud83d\ude80<\/p>\n<p>\u06a9\u062f\u0646\u0648\u06cc\u0633\u06cc \u0645\u0628\u0627\u0631\u06a9\u060c Nodelers! \ud83d\udc68\u200d\ud83d\udcbb\ud83d\udc69\u200d\ud83d\udcbb<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Summarize this content to 400 words in Persian Lang \u0633\u0644\u0627\u0645\u060c \u062a\u0648\u0633\u0639\u0647 \u062f\u0647\u0646\u062f\u06af\u0627\u0646 Node.js! \ud83d\udc4b \u0622\u06cc\u0627 \u062a\u0627 \u0628\u0647 \u062d\u0627\u0644 \u0627\u062d\u0633\u0627\u0633 \u06a9\u0631\u062f\u0647 \u0627\u06cc\u062f \u06a9\u0647 \u0628\u0631 AWS Lambda \u062a\u0633\u0644\u0637 \u062f\u0627\u0631\u06cc\u062f\u060c \u0641\u0642\u0637 \u0628\u0631\u0627\u06cc \u0627\u06cc\u0646\u06a9\u0647 \u06a9\u0634\u0641 \u06a9\u0646\u06cc\u062f \u0647\u0645\u06cc\u0634\u0647 \u0686\u06cc\u0632\u0647\u0627\u06cc \u0628\u06cc\u0634\u062a\u0631\u06cc \u0628\u0631\u0627\u06cc \u06cc\u0627\u062f\u06af\u06cc\u0631\u06cc \u0648\u062c\u0648\u062f \u062f\u0627\u0631\u062f\u061f \u062e\u0648\u0628\u060c \u062f\u0633\u062a \u0648 \u067e\u0646\u062c\u0647 \u0646\u0631\u0645 \u06a9\u0646\u06cc\u062f \u0632\u06cc\u0631\u0627 \u0645\u0627 \u062f\u0631 \u0634\u0631\u0641 \u0628\u0631\u0631\u0633\u06cc \u06cc\u06a9\u06cc \u0627\u0632 \u0642\u062f\u0631\u062a\u0645\u0646\u062f\u062a\u0631\u06cc\u0646 \u0648\u06cc\u0698\u06af\u06cc \u0647\u0627\u06cc &hellip;<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"fifu_image_url":"","fifu_image_alt":"","footnotes":""},"categories":[339],"tags":[],"class_list":["post-76142","post","type-post","status-publish","format-standard","hentry","category-dev"],"_links":{"self":[{"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/posts\/76142","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/comments?post=76142"}],"version-history":[{"count":0,"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/posts\/76142\/revisions"}],"wp:attachment":[{"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/media?parent=76142"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/categories?post=76142"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/tags?post=76142"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}