{"id":29346,"date":"2022-11-25T18:36:24","date_gmt":"2022-11-25T13:06:24","guid":{"rendered":"https:\/\/blazeclan.com\/smart-dependency-management-with-lambda-layers\/"},"modified":"2023-03-11T17:24:31","modified_gmt":"2023-03-11T11:54:31","slug":"smart-dependency-management-with-lambda-layers","status":"publish","type":"post","link":"https:\/\/blazeclan.com\/anz\/blog\/smart-dependency-management-with-lambda-layers\/","title":{"rendered":"Smart Dependency Management with Lambda Layers"},"content":{"rendered":"<h3><span>We\u2019ve heard this story before!<\/span><\/h3>\n<p>We\u2019re all thoroughly familiar with the <em>serverless<\/em> compute service of AWS &#8212; the AWS Lambda! We\u2019ve been using it heavily for various kinds of tasks &#8212; from event-based invocations to stream processing to scheduled runs &#8212; we\u2019ve seen it all!<\/p>\n<p>One of the challenges, however, has been the dependency management. For example &#8212; suppose we have a Lambda function that parses a JSON, and then uses that data to update the DB &#8212; say a MySQL RDS instance. For a Java-based Lambda, apart from the core libs &#8212; what we\u2019d need to bundle with the Lambda function archive (jar or zip), are the JSON parsing jars as well as the Database connection (say, MySQL connector) jars. For a Python-based Lambda, the corresponding libs would need to be added, and likewise, for other run-times.<\/p>\n<h3>&nbsp;<span>Cold starts<\/span><\/h3>\n<p>Now imagine that we have several such Lambda functions (Handlers), all performing various kinds of operations, and hence referring to all kinds of libraries or jars.<\/p>\n<p>So the \u2018uber\u2019 jar for our Lambda would consist of <em>all<\/em> the dependencies which the functions (handlers) would need upon their individual\/simultaneous invocations. Such Lambda functions suffer from what is known as a \u201ccold start\u201d especially in compiler-based run-times &#8212; wherein the function bootstrapping takes some time.<\/p>\n<div class=\"text-center mt-1 mb-1\"><img decoding=\"async\" src=\"https:\/\/blazeclan.com\/wp-content\/uploads\/2019\/05\/Fig1-1.png\"><\/div>\n<p>What this also results in, is a big blob of an archive (see Fig.1), whose deployment is both time and resource consuming. Furthermore, over time, dependency management becomes an involved task! The issue is compounded by the fact that there could be multiple versions of the libs &#8212; say new ones according to the runtime versions or with security fixes. Now, modifying these dependencies in the original Lambda \u201cbundles\u201d could be a breaking operation &#8212; as we may not always be able to predict the run-time behaviour.<\/p>\n<h3><span>Layers to the rescue!<\/span><\/h3>\n<p>A new feature of AWS Lambda services, Lambda layers comes-in handy to address the issue of dependency management &#8212; and hence helping in smarter bundling of jars and quicker deployments. The dependency version management is another byproduct of <em>layers<\/em>, as we shall see later in this post.<\/p>\n<div class=\"text-center mt-1 mb-1\"><img decoding=\"async\" src=\"https:\/\/blazeclan.com\/wp-content\/uploads\/2019\/05\/Fig2-1.png\"><\/div>\n<p>Refer to Fig.2, which depicts how the previous dependency scenario (Fig.1), can be broken down in Layers, with each of the <em>handler<\/em> referencing just the <em>layer<\/em>(s) having relevant dependencies. The Lambda .jar (or archive), thus created is a lightweight one, with only the handler code.<\/p>\n<h4><span>Everybody loves SAM!<\/span><\/h4>\n<p>Let\u2019s further concretize our understanding with the help of a simple example. We\u2019ll be using <a href=\"https:\/\/docs.aws.amazon.com\/serverless-application-model\/latest\/developerguide\/serverless-sam-template-basics.html\">SAM templates<\/a> to define, and subsequently deploy, the stack for this project.<\/p>\n<p>Consider a Maven-based Java Hello World Lambda project (hello-world-project), which returns a JSON string with some random data. For generating the JSON string, we\u2019d be using Google\u2019s <a href=\"https:\/\/code.google.com\/archive\/p\/json-simple\">JSON-simple<\/a> library. In a conventional (non-layered) approach, the classes from this jar would end-up getting bundled within the Lambda uber jar, as an outcome of the <strong>mvn package<\/strong> command.<\/p>\n<p>The corresponding SAM-template defines an AWS API Gateway-based resource URL, and the Lambda function that caters it, with a very simple format:<\/p>\n<div class=\"text-center mt-1 mb-1\"><img decoding=\"async\" src=\"https:\/\/blazeclan.com\/wp-content\/uploads\/2019\/05\/Fig3-1.png\"><\/div>\n<p>Note that the HelloWorld-1.0.jar shown above, would be having the handler classes, along with all the dependencies.<\/p>\n<h4><span>Breaking free!<\/span><\/h4>\n<p>Now, let\u2019s take an alternate approach, and separate out these (and related) dependencies in a <em>layer<\/em> of their own! Although one doesn\u2019t have to, but one can utilise SAM-template based deployment for this as well. This would help us in tracking (CloudWatch logs) as well as maintenance of the <em>layer<\/em> in future.<\/p>\n<p>For Java, a Lambda <em>layer<\/em> expects the following folder structure:<\/p>\n<div>\n<p class=\"text-left\"><strong>java<\/strong><\/p>\n<p class=\"text-left\">\u2514\u2500\u2500 <strong>lib<\/strong><\/p>\n<p class=\"text-left\">\u251c\u2500\u2500 dependency1.jar<\/p>\n<p class=\"text-left\">\u2514\u2500\u2500 dependency2.jar<\/p>\n<p class=\"text-left\">\u2514\u2500\u2500 &#8230;<\/p>\n<\/div>\n<p>In a new Maven-based Java project (library-layer-project), we define all the dependencies we want bundled in the target <em>layer<\/em>. For our simple example, we\u2019d define, the dependency for JSON-simple in the pom.xml.<\/p>\n<p>Moreover, the corresponding SAM-template defines this <em>layer<\/em> like so:<\/p>\n<div class=\"text-center mt-1 mb-1\"><img decoding=\"async\" src=\"https:\/\/blazeclan.com\/wp-content\/uploads\/2019\/05\/Fig4-1.png\"><\/div>\n<p>Upon successful deployment, this Lambda <em>layer<\/em> is available to be <em>referenced<\/em> in any Lambda function, via its ARN.<\/p>\n<p>So, the next step for us would be to modify the original project\u2019s SAM template, to provide the ARN of the Lambda <em>layer<\/em> we would want it to access. The resulting SAM-template definition, thus, looks like:<\/p>\n<div class=\"text-center mt-1 mb-1\"><img decoding=\"async\" src=\"https:\/\/blazeclan.com\/wp-content\/uploads\/2019\/05\/Fig5-1.png\"><\/div>\n<p>Notice the \u2018Layers:\u2019 parameter added, which now references the core-lib-lambda-layer that we deployed. As of this day, AWS Lambda service supports up to five <em>layers<\/em> being referenced from within a given function (handler). So imagine scenarios where a bunch of your Lambda functions perform only DB operations &#8212; they can reference <em>only<\/em> Database lib layer, and similarly, the Lambda functions that help in authentication refer to only the layer with those jars.<\/p>\n<h3>&nbsp;<span>Layers in other (non-Java) runtimes<\/span><\/h3>\n<p>Note that we followed a particular directory pattern for the Java-based dependency <em>layer<\/em> under discussion. Analogous to this, there are specific directory patterns to be followed while <a href=\"https:\/\/docs.aws.amazon.com\/lambda\/latest\/dg\/configuration-layers.html#configuration-layers-path\">creating layers for other runtimes<\/a>.<\/p>\n<p>For instance: a solution that has multiple Node.js-based Lambda functions, can make use of <em>layers<\/em> to share the libraries amongst them. A <em>layer<\/em> structure, thus, would be something like:<\/p>\n<div>\n<p class=\"text-left\"><strong>parser-layer.zip<\/strong><\/p>\n<p class=\"text-left\">\u2514\u2500\u2500 <strong>nodejs<\/strong>\/<strong>node_modules<\/strong>\/parse-json<\/p>\n<p class=\"text-left\">\u2514\u2500\u2500 <strong>nodejs<\/strong>\/<strong>node_modules<\/strong>\/xml2js<\/p>\n<h3><\/h3>\n<h3><span>Layer versions<\/span><\/h3>\n<p>Another feature of Lambda layers is the automatic versioning. Notice the \u2018:1\u2019 in the ARN for Layer in the above image. Any subsequent deployment of the same <em>layer<\/em> automatically bumps-up this number.<\/p>\n<h4><span>Utility of Layer versioning<\/span><\/h4>\n<p>Versioning is very useful in cases where you would want to update or test your Lambda functions with new library versions &#8212; be it third-party or your own! So, continuing with our example &#8212; suppose Simple JSON comes-up with a new version, which has security patches, but not all features are backward compatible. Another way to look at it is: suppose there\u2019s a new library that works only with the latest run-time of the platform you\u2019re working on.<\/p>\n<p>In such cases, you can deploy a Lambda function, and make it refer to the newer (latest) dependencies, by using the corresponding ARN suffix (:4 in the sample ARN below):<\/p>\n<pre>arn:aws:lambda:ap-southeast-1:427892070773:layer:core-lib-lambda-layer<strong>:4<\/strong><\/pre>\n<p>Internally, the Lambda ecosystem kind of \u2018flattens\u2019 your dependencies along with the function definition. Thus, any future invocations of a given Lambda function are always tied-to the version of the layer it was bound to.<\/p>\n<p>Sounds like fun? It is! Go ahead and start using the Lambda layers to manage your dependencies better, and considerably reduce your Lambda function footprint.<\/p>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>We\u2019ve heard this story before! We\u2019re all thoroughly familiar with the serverless compute service of AWS &#8212; the AWS Lambda! We\u2019ve been using it heavily for various kinds of tasks &#8212; from event-based invocations to stream processing to scheduled runs &#8212; we\u2019ve seen it all! One of the challenges, however, has been the dependency management. [&hellip;]<\/p>\n","protected":false},"author":192,"featured_media":19759,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[1706],"tags":[1957,1501,1157,1738],"class_list":["post-29346","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-aws-cloud-computing-anz","tag-amazon-cloud-anz","tag-aws-lambda-anz","tag-cloud-computing-anz","tag-serverless-deployment-and-containerization-anz"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v25.5 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Smart Dependency Management with Lambda Layers - Blazeclan<\/title>\n<meta name=\"description\" content=\"AWS Lambda layers offer an innovative solution to the problem of dependency management - enabling smarter bundling of jars and faster deployment of applications with AWS Lambda services\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/blazeclan.com\/anz\/blog\/smart-dependency-management-with-lambda-layers\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Smart Dependency Management with Lambda Layers - Blazeclan\" \/>\n<meta property=\"og:description\" content=\"AWS Lambda layers offer an innovative solution to the problem of dependency management - enabling smarter bundling of jars and faster deployment of applications with AWS Lambda services\" \/>\n<meta property=\"og:url\" content=\"https:\/\/blazeclan.com\/blog\/smart-dependency-management-with-lambda-layers\/\" \/>\n<meta property=\"og:site_name\" content=\"Blazeclan\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/blazeclan.hq\/\" \/>\n<meta property=\"article:published_time\" content=\"2022-11-25T13:06:24+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2023-03-11T11:54:31+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/blazeclan.com\/wp-content\/uploads\/2019\/03\/Lambda-Layers-803x340-7.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"803\" \/>\n\t<meta property=\"og:image:height\" content=\"340\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Team Blazeclan\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@blazeclan_hq\" \/>\n<meta name=\"twitter:site\" content=\"@blazeclan_hq\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Team Blazeclan\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"6 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/blazeclan.com\/blog\/smart-dependency-management-with-lambda-layers\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/blazeclan.com\/anz\/blog\/smart-dependency-management-with-lambda-layers\/\"},\"author\":{\"name\":\"Team Blazeclan\",\"@id\":\"https:\/\/blazeclan.com\/anz\/#\/schema\/person\/779910eccddff4a1ea6663b6bfb271e8\"},\"headline\":\"Smart Dependency Management with Lambda Layers\",\"datePublished\":\"2022-11-25T13:06:24+00:00\",\"dateModified\":\"2023-03-11T11:54:31+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/blazeclan.com\/anz\/blog\/smart-dependency-management-with-lambda-layers\/\"},\"wordCount\":1067,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/blazeclan.com\/anz\/#organization\"},\"image\":{\"@id\":\"https:\/\/blazeclan.com\/blog\/smart-dependency-management-with-lambda-layers\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/blazeclan.com\/wp-content\/uploads\/2019\/03\/Lambda-Layers-803x340-7.jpg\",\"keywords\":[\"Amazon Cloud\",\"AWS Lambda\",\"Cloud Computing\",\"Serverless deployment and Containerization\"],\"articleSection\":[\"AWS Cloud Computing\"],\"inLanguage\":\"en\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/blazeclan.com\/blog\/smart-dependency-management-with-lambda-layers\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/blazeclan.com\/anz\/blog\/smart-dependency-management-with-lambda-layers\/\",\"url\":\"https:\/\/blazeclan.com\/blog\/smart-dependency-management-with-lambda-layers\/\",\"name\":\"Smart Dependency Management with Lambda Layers - Blazeclan\",\"isPartOf\":{\"@id\":\"https:\/\/blazeclan.com\/anz\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/blazeclan.com\/blog\/smart-dependency-management-with-lambda-layers\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/blazeclan.com\/blog\/smart-dependency-management-with-lambda-layers\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/blazeclan.com\/wp-content\/uploads\/2019\/03\/Lambda-Layers-803x340-7.jpg\",\"datePublished\":\"2022-11-25T13:06:24+00:00\",\"dateModified\":\"2023-03-11T11:54:31+00:00\",\"description\":\"AWS Lambda layers offer an innovative solution to the problem of dependency management - enabling smarter bundling of jars and faster deployment of applications with AWS Lambda services\",\"breadcrumb\":{\"@id\":\"https:\/\/blazeclan.com\/blog\/smart-dependency-management-with-lambda-layers\/#breadcrumb\"},\"inLanguage\":\"en\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/blazeclan.com\/blog\/smart-dependency-management-with-lambda-layers\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en\",\"@id\":\"https:\/\/blazeclan.com\/blog\/smart-dependency-management-with-lambda-layers\/#primaryimage\",\"url\":\"https:\/\/blazeclan.com\/wp-content\/uploads\/2019\/03\/Lambda-Layers-803x340-7.jpg\",\"contentUrl\":\"https:\/\/blazeclan.com\/wp-content\/uploads\/2019\/03\/Lambda-Layers-803x340-7.jpg\",\"width\":803,\"height\":340},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/blazeclan.com\/blog\/smart-dependency-management-with-lambda-layers\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/blazeclan.com\/anz\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Smart Dependency Management with Lambda Layers\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/blazeclan.com\/anz\/#website\",\"url\":\"https:\/\/blazeclan.com\/anz\/\",\"name\":\"Blazeclan\",\"description\":\"\",\"publisher\":{\"@id\":\"https:\/\/blazeclan.com\/anz\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/blazeclan.com\/anz\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/blazeclan.com\/anz\/#organization\",\"name\":\"Blazeclan\",\"url\":\"https:\/\/blazeclan.com\/anz\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en\",\"@id\":\"https:\/\/blazeclan.com\/anz\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/blazeclan.com\/wp-content\/uploads\/2024\/10\/ITCI-Blazeclan_logo.svg\",\"contentUrl\":\"https:\/\/blazeclan.com\/wp-content\/uploads\/2024\/10\/ITCI-Blazeclan_logo.svg\",\"caption\":\"Blazeclan\"},\"image\":{\"@id\":\"https:\/\/blazeclan.com\/anz\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/www.facebook.com\/blazeclan.hq\/\",\"https:\/\/x.com\/blazeclan_hq\",\"https:\/\/www.instagram.com\/blazeclantechnologies\/\",\"https:\/\/www.linkedin.com\/company\/blazeclan-technologies\/\",\"https:\/\/www.youtube.com\/channel\/UCCKF4Lcbtus-pUoZr7Lxrow\"]},{\"@type\":\"Person\",\"@id\":\"https:\/\/blazeclan.com\/anz\/#\/schema\/person\/779910eccddff4a1ea6663b6bfb271e8\",\"name\":\"Team Blazeclan\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en\",\"@id\":\"https:\/\/blazeclan.com\/anz\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/a43c1fa01bb3c7e839254c9084bf11ed422d7e633231f9e935096045af416ba2?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/a43c1fa01bb3c7e839254c9084bf11ed422d7e633231f9e935096045af416ba2?s=96&d=mm&r=g\",\"caption\":\"Team Blazeclan\"},\"sameAs\":[\"http:\/\/localhost\/ps-local-wp\"]}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Smart Dependency Management with Lambda Layers - Blazeclan","description":"AWS Lambda layers offer an innovative solution to the problem of dependency management - enabling smarter bundling of jars and faster deployment of applications with AWS Lambda services","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:\/\/blazeclan.com\/anz\/blog\/smart-dependency-management-with-lambda-layers\/","og_locale":"en_US","og_type":"article","og_title":"Smart Dependency Management with Lambda Layers - Blazeclan","og_description":"AWS Lambda layers offer an innovative solution to the problem of dependency management - enabling smarter bundling of jars and faster deployment of applications with AWS Lambda services","og_url":"https:\/\/blazeclan.com\/blog\/smart-dependency-management-with-lambda-layers\/","og_site_name":"Blazeclan","article_publisher":"https:\/\/www.facebook.com\/blazeclan.hq\/","article_published_time":"2022-11-25T13:06:24+00:00","article_modified_time":"2023-03-11T11:54:31+00:00","og_image":[{"width":803,"height":340,"url":"https:\/\/blazeclan.com\/wp-content\/uploads\/2019\/03\/Lambda-Layers-803x340-7.jpg","type":"image\/jpeg"}],"author":"Team Blazeclan","twitter_card":"summary_large_image","twitter_creator":"@blazeclan_hq","twitter_site":"@blazeclan_hq","twitter_misc":{"Written by":"Team Blazeclan","Est. reading time":"6 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/blazeclan.com\/blog\/smart-dependency-management-with-lambda-layers\/#article","isPartOf":{"@id":"https:\/\/blazeclan.com\/anz\/blog\/smart-dependency-management-with-lambda-layers\/"},"author":{"name":"Team Blazeclan","@id":"https:\/\/blazeclan.com\/anz\/#\/schema\/person\/779910eccddff4a1ea6663b6bfb271e8"},"headline":"Smart Dependency Management with Lambda Layers","datePublished":"2022-11-25T13:06:24+00:00","dateModified":"2023-03-11T11:54:31+00:00","mainEntityOfPage":{"@id":"https:\/\/blazeclan.com\/anz\/blog\/smart-dependency-management-with-lambda-layers\/"},"wordCount":1067,"commentCount":0,"publisher":{"@id":"https:\/\/blazeclan.com\/anz\/#organization"},"image":{"@id":"https:\/\/blazeclan.com\/blog\/smart-dependency-management-with-lambda-layers\/#primaryimage"},"thumbnailUrl":"https:\/\/blazeclan.com\/wp-content\/uploads\/2019\/03\/Lambda-Layers-803x340-7.jpg","keywords":["Amazon Cloud","AWS Lambda","Cloud Computing","Serverless deployment and Containerization"],"articleSection":["AWS Cloud Computing"],"inLanguage":"en","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/blazeclan.com\/blog\/smart-dependency-management-with-lambda-layers\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/blazeclan.com\/anz\/blog\/smart-dependency-management-with-lambda-layers\/","url":"https:\/\/blazeclan.com\/blog\/smart-dependency-management-with-lambda-layers\/","name":"Smart Dependency Management with Lambda Layers - Blazeclan","isPartOf":{"@id":"https:\/\/blazeclan.com\/anz\/#website"},"primaryImageOfPage":{"@id":"https:\/\/blazeclan.com\/blog\/smart-dependency-management-with-lambda-layers\/#primaryimage"},"image":{"@id":"https:\/\/blazeclan.com\/blog\/smart-dependency-management-with-lambda-layers\/#primaryimage"},"thumbnailUrl":"https:\/\/blazeclan.com\/wp-content\/uploads\/2019\/03\/Lambda-Layers-803x340-7.jpg","datePublished":"2022-11-25T13:06:24+00:00","dateModified":"2023-03-11T11:54:31+00:00","description":"AWS Lambda layers offer an innovative solution to the problem of dependency management - enabling smarter bundling of jars and faster deployment of applications with AWS Lambda services","breadcrumb":{"@id":"https:\/\/blazeclan.com\/blog\/smart-dependency-management-with-lambda-layers\/#breadcrumb"},"inLanguage":"en","potentialAction":[{"@type":"ReadAction","target":["https:\/\/blazeclan.com\/blog\/smart-dependency-management-with-lambda-layers\/"]}]},{"@type":"ImageObject","inLanguage":"en","@id":"https:\/\/blazeclan.com\/blog\/smart-dependency-management-with-lambda-layers\/#primaryimage","url":"https:\/\/blazeclan.com\/wp-content\/uploads\/2019\/03\/Lambda-Layers-803x340-7.jpg","contentUrl":"https:\/\/blazeclan.com\/wp-content\/uploads\/2019\/03\/Lambda-Layers-803x340-7.jpg","width":803,"height":340},{"@type":"BreadcrumbList","@id":"https:\/\/blazeclan.com\/blog\/smart-dependency-management-with-lambda-layers\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/blazeclan.com\/anz\/"},{"@type":"ListItem","position":2,"name":"Smart Dependency Management with Lambda Layers"}]},{"@type":"WebSite","@id":"https:\/\/blazeclan.com\/anz\/#website","url":"https:\/\/blazeclan.com\/anz\/","name":"Blazeclan","description":"","publisher":{"@id":"https:\/\/blazeclan.com\/anz\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/blazeclan.com\/anz\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en"},{"@type":"Organization","@id":"https:\/\/blazeclan.com\/anz\/#organization","name":"Blazeclan","url":"https:\/\/blazeclan.com\/anz\/","logo":{"@type":"ImageObject","inLanguage":"en","@id":"https:\/\/blazeclan.com\/anz\/#\/schema\/logo\/image\/","url":"https:\/\/blazeclan.com\/wp-content\/uploads\/2024\/10\/ITCI-Blazeclan_logo.svg","contentUrl":"https:\/\/blazeclan.com\/wp-content\/uploads\/2024\/10\/ITCI-Blazeclan_logo.svg","caption":"Blazeclan"},"image":{"@id":"https:\/\/blazeclan.com\/anz\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/blazeclan.hq\/","https:\/\/x.com\/blazeclan_hq","https:\/\/www.instagram.com\/blazeclantechnologies\/","https:\/\/www.linkedin.com\/company\/blazeclan-technologies\/","https:\/\/www.youtube.com\/channel\/UCCKF4Lcbtus-pUoZr7Lxrow"]},{"@type":"Person","@id":"https:\/\/blazeclan.com\/anz\/#\/schema\/person\/779910eccddff4a1ea6663b6bfb271e8","name":"Team Blazeclan","image":{"@type":"ImageObject","inLanguage":"en","@id":"https:\/\/blazeclan.com\/anz\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/a43c1fa01bb3c7e839254c9084bf11ed422d7e633231f9e935096045af416ba2?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/a43c1fa01bb3c7e839254c9084bf11ed422d7e633231f9e935096045af416ba2?s=96&d=mm&r=g","caption":"Team Blazeclan"},"sameAs":["http:\/\/localhost\/ps-local-wp"]}]}},"_links":{"self":[{"href":"https:\/\/blazeclan.com\/anz\/wp-json\/wp\/v2\/posts\/29346","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blazeclan.com\/anz\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blazeclan.com\/anz\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blazeclan.com\/anz\/wp-json\/wp\/v2\/users\/192"}],"replies":[{"embeddable":true,"href":"https:\/\/blazeclan.com\/anz\/wp-json\/wp\/v2\/comments?post=29346"}],"version-history":[{"count":0,"href":"https:\/\/blazeclan.com\/anz\/wp-json\/wp\/v2\/posts\/29346\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/blazeclan.com\/anz\/wp-json\/wp\/v2\/media\/19759"}],"wp:attachment":[{"href":"https:\/\/blazeclan.com\/anz\/wp-json\/wp\/v2\/media?parent=29346"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blazeclan.com\/anz\/wp-json\/wp\/v2\/categories?post=29346"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blazeclan.com\/anz\/wp-json\/wp\/v2\/tags?post=29346"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}