{"id":708,"date":"2021-04-09T03:43:00","date_gmt":"2021-04-08T14:43:00","guid":{"rendered":"https:\/\/blog.wiseowls.co.nz\/?p=708"},"modified":"2026-03-08T00:49:21","modified_gmt":"2026-03-07T11:49:21","slug":"serverless-face-off-aws-lambda","status":"publish","type":"post","link":"https:\/\/blog.wiseowls.co.nz\/index.php\/2021\/04\/09\/serverless-face-off-aws-lambda\/","title":{"rendered":"Serverless face-off: AWS Lambda"},"content":{"rendered":"<p>We have discussed some high-level approach <a href=\"https:\/\/blog.wiseowls.co.nz\/index.php\/2021\/02\/28\/serverless-face-off-azure-vs-aws-overview\/\">differences between Azure and AWS<\/a> with regards to Lambda. <\/p>\n<p>This time round we will expand on our scenario a bit and attempt to get our static site to call a serverless endpoint.<\/p>\n<p>This article aims to cover brief step by step process of creating a simple backend for our static website to call.<\/p>\n<p>There are a few things we&#8217;d have to keep in mind while going through this exercise:<\/p>\n<ul class=\"wp-block-list\" id=\"block-22e1fdd9-c7c0-499b-95f2-0e783a1fa86c\">\n<li>no custom domains &#8211; setting HTTPS up with our own domain is a whole different topic &#8211; watch this space<\/li>\n<li>even though we primarily develop on .NET platform, we&#8217;d resort to Node.JS here. Main reason for this choice being &#8211; inconsistencies between platform features: for example, cloud console built-in editor is only available for interpreted languages with AWS, while with Azure, .NET is a first-class citizen and gets full editing support.<\/li>\n<li>no CI\/CD &#8211; we want something very simple to get the point across.<\/li>\n<li>online portal only &#8211; again, it&#8217;s best practice to codify infrastructure and deployment, but we set something up quick and dirty. Think Startup Weekend<\/li>\n<\/ul>\n<h2 class=\"wp-block-heading\">Hosting static website on AWS<\/h2>\n<p>Starting with the frontend, we&#8217;d <a href=\"https:\/\/blog.wiseowls.co.nz\/index.php\/2021\/01\/06\/cloud-face-off-hosting-static-website\/\">throw a small front page up into the cloud<\/a>. Upload the files to S3 and make sure to enable read-only public access to the files in bucket as we&#8217;d not go through more fine-grained ACLs here.<\/p>\n<h2 class=\"wp-block-heading\">Creating a quick Lambda<\/h2>\n<div class=\"wp-block-columns is-layout-flex wp-container-core-columns-is-layout-9d6595d7 wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\" style=\"flex-basis:66.66%\">\n<p>Now onto the main attraction. We&#8217;d head over to <code>Lambda<\/code> and proceed to &#8220;Author from scratch&#8221;. As <a href=\"https:\/\/blog.wiseowls.co.nz\/index.php\/2021\/02\/28\/serverless-face-off-azure-vs-aws-overview\/\">we&#8217;ve already established<\/a>, choice of runtime would impact our ability to move quickly and code it on the portal. So, we&#8217;d venture onto totally unknown Node.js territory here. <\/p>\n<p>To get a response we need to define a <a href=\"https:\/\/docs.aws.amazon.com\/lambda\/latest\/dg\/nodejs-handler.html\">function<\/a> named <code>handler<\/code> and export it. In fact, the name is configurable, but we&#8217;ll stick to the default. <\/p>\n<p>Since we don&#8217;t need to change a lot, here&#8217;s our complete test code:<\/p>\n<pre class=\"wp-block-code\"><code lang=\"javascript\" class=\"language-javascript\">exports.handler = async (event, context) =&gt; {\n     const response = {\n         statusCode: 200,\n         isBase64Encoded: false,\n         body: JSON.stringify({event, context}),\n         headers: {\n             \"Content-Type\": \"application\/json\",\n             \"Access-Control-Allow-Headers\" : \"<em>\",             \"Access-Control-Allow-Origin\": \"<\/em>\",\n             \"Access-Control-Allow-Methods\": \"OPTIONS,POST,GET\"\n         }\n     };\n     return response;\n };<\/code><\/pre>\n<p>Notice how we add a bunch of headers for CORS? Well, that&#8217;s a requirement for ELB to work. Can skip it if going API Gateway path. Deploy it, and let&#8217;s move on to defining how our function can get called.<\/p>\n<\/div>\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\" style=\"flex-basis:33.33%\">\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"446\" height=\"891\" src=\"https:\/\/blog.wiseowls.co.nz\/wp-content\/uploads\/2021\/04\/image-9.png\" alt=\"AWS Lambda function creation page in management console\" class=\"wp-image-746\" srcset=\"https:\/\/blog.wiseowls.co.nz\/wp-content\/uploads\/2021\/04\/image-9.png 446w, https:\/\/blog.wiseowls.co.nz\/wp-content\/uploads\/2021\/04\/image-9-150x300.png 150w\" sizes=\"auto, (max-width: 446px) 85vw, 446px\" \/><\/figure>\n<\/div>\n<\/div>\n<h2 class=\"wp-block-heading\">Defining a trigger<\/h2>\n<div class=\"wp-block-columns is-layout-flex wp-container-core-columns-is-layout-9d6595d7 wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\" style=\"flex-basis:66.66%\">\n<p>There quite are quite a few ways this function can get invoked, but we only care about HTTP. Two obvious options for this would be to either stand up an API Gateway or use Elastic Load Balancer. Shall we try both?<\/p>\n<h3 class=\"wp-block-heading\">API Gateway<\/h3>\n<p>API Gateway has been the preferred method of fronting lambdas since the beginning of time. It supports authentication and allows great control over the process. Since API Gateway is specifically designed to serve HTTP requests and forward them along, we only need to make a few choices like <\/p>\n<ul class=\"wp-block-list\">\n<li>whether we want full control over REST or simple HTTP will do and<\/li>\n<li>what kind of authentication we&#8217;d like on the endpoints.<\/li>\n<\/ul>\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"397\" height=\"685\" src=\"https:\/\/blog.wiseowls.co.nz\/wp-content\/uploads\/2021\/04\/image-11.png\" alt=\"AWS Lambda code editor for Node.js runtime\" class=\"wp-image-748\" srcset=\"https:\/\/blog.wiseowls.co.nz\/wp-content\/uploads\/2021\/04\/image-11.png 397w, https:\/\/blog.wiseowls.co.nz\/wp-content\/uploads\/2021\/04\/image-11-174x300.png 174w\" sizes=\"auto, (max-width: 397px) 85vw, 397px\" \/><\/figure>\n<\/div>\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\" style=\"flex-basis:33.33%\">\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"424\" height=\"845\" src=\"https:\/\/blog.wiseowls.co.nz\/wp-content\/uploads\/2021\/04\/image-10.png\" alt=\"AWS Lambda function configuration showing runtime and handler settings\" class=\"wp-image-747\" srcset=\"https:\/\/blog.wiseowls.co.nz\/wp-content\/uploads\/2021\/04\/image-10.png 424w, https:\/\/blog.wiseowls.co.nz\/wp-content\/uploads\/2021\/04\/image-10-151x300.png 151w\" sizes=\"auto, (max-width: 424px) 85vw, 424px\" \/><\/figure>\n<\/div>\n<\/div>\n<h2 class=\"wp-block-heading\">Elastic Load Balancer<\/h2>\n<p>As of late 2018, AWS also supports a more &#8220;lightweight&#8221; option of having ELB target a lambda when called on a predefined path. On the surface setting up ELB looks more involved as we&#8217;d have to configure a lot of networking. Don&#8217;t forget to open inbound port 80 in your security group!<\/p>\n<figure class=\"wp-block-gallery columns-3 is-cropped wp-block-gallery-1 is-layout-flex wp-block-gallery-is-layout-flex\">\n<ul class=\"blocks-gallery-grid\">\n<li class=\"blocks-gallery-item\">\n<figure><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"795\" src=\"https:\/\/blog.wiseowls.co.nz\/wp-content\/uploads\/2021\/04\/aws-configure-elb-step1-1024x795.png\" alt=\"Adding API Gateway trigger to AWS Lambda function\" data-id=\"753\" data-full-url=\"https:\/\/blog.wiseowls.co.nz\/wp-content\/uploads\/2021\/04\/aws-configure-elb-step1.png\" data-link=\"https:\/\/blog.wiseowls.co.nz\/?attachment_id=753\" class=\"wp-image-753\" srcset=\"https:\/\/blog.wiseowls.co.nz\/wp-content\/uploads\/2021\/04\/aws-configure-elb-step1-1024x795.png 1024w, https:\/\/blog.wiseowls.co.nz\/wp-content\/uploads\/2021\/04\/aws-configure-elb-step1-300x233.png 300w, https:\/\/blog.wiseowls.co.nz\/wp-content\/uploads\/2021\/04\/aws-configure-elb-step1-768x596.png 768w, https:\/\/blog.wiseowls.co.nz\/wp-content\/uploads\/2021\/04\/aws-configure-elb-step1.png 1078w\" sizes=\"auto, (max-width: 709px) 85vw, (max-width: 909px) 67vw, (max-width: 1362px) 62vw, 840px\" \/><figcaption class=\"blocks-gallery-item__caption\">Networking<\/figcaption><\/figure>\n<\/li>\n<li class=\"blocks-gallery-item\">\n<figure><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"242\" src=\"https:\/\/blog.wiseowls.co.nz\/wp-content\/uploads\/2021\/04\/aws-configure-elb-step3-1024x242.png\" alt=\"API Gateway endpoint URL configuration for Lambda\" data-id=\"754\" data-full-url=\"https:\/\/blog.wiseowls.co.nz\/wp-content\/uploads\/2021\/04\/aws-configure-elb-step3.png\" data-link=\"https:\/\/blog.wiseowls.co.nz\/?attachment_id=754\" class=\"wp-image-754\" srcset=\"https:\/\/blog.wiseowls.co.nz\/wp-content\/uploads\/2021\/04\/aws-configure-elb-step3-1024x242.png 1024w, https:\/\/blog.wiseowls.co.nz\/wp-content\/uploads\/2021\/04\/aws-configure-elb-step3-300x71.png 300w, https:\/\/blog.wiseowls.co.nz\/wp-content\/uploads\/2021\/04\/aws-configure-elb-step3-768x182.png 768w, https:\/\/blog.wiseowls.co.nz\/wp-content\/uploads\/2021\/04\/aws-configure-elb-step3.png 1180w\" sizes=\"auto, (max-width: 709px) 85vw, (max-width: 909px) 67vw, (max-width: 1362px) 62vw, 840px\" \/><figcaption class=\"blocks-gallery-item__caption\">Security Group<\/figcaption><\/figure>\n<\/li>\n<li class=\"blocks-gallery-item\">\n<figure><img loading=\"lazy\" decoding=\"async\" width=\"701\" height=\"430\" src=\"https:\/\/blog.wiseowls.co.nz\/wp-content\/uploads\/2021\/04\/aws-configure-elb-step4.png\" alt=\"API Gateway CORS settings for cross-origin requests\" data-id=\"752\" data-full-url=\"https:\/\/blog.wiseowls.co.nz\/wp-content\/uploads\/2021\/04\/aws-configure-elb-step4.png\" data-link=\"https:\/\/blog.wiseowls.co.nz\/?attachment_id=752\" class=\"wp-image-752\" srcset=\"https:\/\/blog.wiseowls.co.nz\/wp-content\/uploads\/2021\/04\/aws-configure-elb-step4.png 701w, https:\/\/blog.wiseowls.co.nz\/wp-content\/uploads\/2021\/04\/aws-configure-elb-step4-300x184.png 300w\" sizes=\"auto, (max-width: 709px) 85vw, (max-width: 909px) 67vw, (max-width: 984px) 61vw, (max-width: 1362px) 45vw, 600px\" \/><figcaption class=\"blocks-gallery-item__caption\">Target<\/figcaption><\/figure>\n<\/li>\n<li class=\"blocks-gallery-item\">\n<figure><img loading=\"lazy\" decoding=\"async\" width=\"834\" height=\"327\" src=\"https:\/\/blog.wiseowls.co.nz\/wp-content\/uploads\/2021\/04\/aws-configure-elb-step5.png\" alt=\"Testing Lambda function invocation through API Gateway\" data-id=\"751\" data-full-url=\"https:\/\/blog.wiseowls.co.nz\/wp-content\/uploads\/2021\/04\/aws-configure-elb-step5.png\" data-link=\"https:\/\/blog.wiseowls.co.nz\/?attachment_id=751\" class=\"wp-image-751\" srcset=\"https:\/\/blog.wiseowls.co.nz\/wp-content\/uploads\/2021\/04\/aws-configure-elb-step5.png 834w, https:\/\/blog.wiseowls.co.nz\/wp-content\/uploads\/2021\/04\/aws-configure-elb-step5-300x118.png 300w, https:\/\/blog.wiseowls.co.nz\/wp-content\/uploads\/2021\/04\/aws-configure-elb-step5-768x301.png 768w\" sizes=\"auto, (max-width: 709px) 85vw, (max-width: 909px) 67vw, (max-width: 984px) 61vw, (max-width: 1362px) 45vw, 600px\" \/><figcaption class=\"blocks-gallery-item__caption\">Lambda<\/figcaption><\/figure>\n<\/li>\n<\/ul>\n<\/figure>\n<h2 class=\"wp-block-heading\">Conclusion<\/h2>\n<p>Creating a lambda with AWS is extremely easy if you pick the right runtime. A choice of triggers makes it a bit harder to pick one that suits better. Here&#8217;s a list of points to consider:<\/p>\n<figure class=\"wp-block-table\">\n<table>\n<tbody>\n<tr>\n<td><\/td>\n<td>API Gateway<\/td>\n<td>ELB<\/td>\n<\/tr>\n<tr>\n<td>CORS<\/td>\n<td>yes, can edit on the portal<\/td>\n<td>no, but need to modify lambda to return correct headers<\/td>\n<\/tr>\n<tr>\n<td>SSL<\/td>\n<td>HTTPS only<\/td>\n<td>HTTP\/HTTPS or both<\/td>\n<\/tr>\n<tr>\n<td>AuthN<\/td>\n<td>yes (IAM)<\/td>\n<td>no<\/td>\n<\/tr>\n<tr>\n<td>Throttling<\/td>\n<td>yes<\/td>\n<td>no<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/figure>\n<p>and sample responses FYI:<\/p>\n<div class=\"wp-block-columns is-layout-flex wp-container-core-columns-is-layout-9d6595d7 wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"725\" height=\"970\" src=\"https:\/\/blog.wiseowls.co.nz\/wp-content\/uploads\/2021\/04\/image-14.png\" alt=\"Browser console showing successful API call to Lambda endpoint\" class=\"wp-image-758\" srcset=\"https:\/\/blog.wiseowls.co.nz\/wp-content\/uploads\/2021\/04\/image-14.png 725w, https:\/\/blog.wiseowls.co.nz\/wp-content\/uploads\/2021\/04\/image-14-224x300.png 224w\" sizes=\"auto, (max-width: 709px) 85vw, (max-width: 909px) 67vw, (max-width: 984px) 61vw, (max-width: 1362px) 45vw, 600px\" \/><figcaption>API Gateway<\/figcaption><\/figure>\n<\/div>\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"929\" height=\"714\" src=\"https:\/\/blog.wiseowls.co.nz\/wp-content\/uploads\/2021\/04\/image-15.png\" alt=\"Static website calling serverless Lambda endpoint via fetch API\" class=\"wp-image-759\" srcset=\"https:\/\/blog.wiseowls.co.nz\/wp-content\/uploads\/2021\/04\/image-15.png 929w, https:\/\/blog.wiseowls.co.nz\/wp-content\/uploads\/2021\/04\/image-15-300x231.png 300w, https:\/\/blog.wiseowls.co.nz\/wp-content\/uploads\/2021\/04\/image-15-768x590.png 768w\" sizes=\"auto, (max-width: 709px) 85vw, (max-width: 909px) 67vw, (max-width: 1362px) 62vw, 840px\" \/><figcaption>ELB<\/figcaption><\/figure>\n<\/div>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>We have discussed some high-level approach differences between Azure and AWS with regards to Lambda. This time round we will expand on our scenario a bit and attempt to get our static site to call a serverless endpoint. This article aims to cover brief step by step process of creating a simple backend for our &hellip; <a href=\"https:\/\/blog.wiseowls.co.nz\/index.php\/2021\/04\/09\/serverless-face-off-aws-lambda\/\" class=\"more-link\">Continue reading<span class=\"screen-reader-text\"> &#8220;Serverless face-off: AWS Lambda&#8221;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":674,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"inline_featured_image":false,"footnotes":""},"categories":[50],"tags":[47],"class_list":["post-708","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-cloud","tag-aws"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.4 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Serverless face-off: AWS Lambda - Timur and associates<\/title>\n<meta name=\"description\" content=\"In this article we&#039;ll look how to create AWS Lambda and connect it to HTTP triggers\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/blog.wiseowls.co.nz\/index.php\/2021\/04\/09\/serverless-face-off-aws-lambda\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Serverless face-off: AWS Lambda - Timur and associates\" \/>\n<meta property=\"og:description\" content=\"In this article we&#039;ll look how to create AWS Lambda and connect it to HTTP triggers\" \/>\n<meta property=\"og:url\" content=\"https:\/\/blog.wiseowls.co.nz\/index.php\/2021\/04\/09\/serverless-face-off-aws-lambda\/\" \/>\n<meta property=\"og:site_name\" content=\"Timur and associates\" \/>\n<meta property=\"article:published_time\" content=\"2021-04-08T14:43:00+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2026-03-07T11:49:21+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/blog.wiseowls.co.nz\/wp-content\/uploads\/2021\/02\/cloud-computing-2001090_1920.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"1500\" \/>\n\t<meta property=\"og:image:height\" content=\"396\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"timur\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@TimurKh\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/blog.wiseowls.co.nz\\\/index.php\\\/2021\\\/04\\\/09\\\/serverless-face-off-aws-lambda\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/blog.wiseowls.co.nz\\\/index.php\\\/2021\\\/04\\\/09\\\/serverless-face-off-aws-lambda\\\/\"},\"author\":{\"name\":\"timur\",\"@id\":\"https:\\\/\\\/blog.wiseowls.co.nz\\\/#\\\/schema\\\/person\\\/34d0ed30d573b5bc317ea990bd2e0c59\"},\"headline\":\"Serverless face-off: AWS Lambda\",\"datePublished\":\"2021-04-08T14:43:00+00:00\",\"dateModified\":\"2026-03-07T11:49:21+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/blog.wiseowls.co.nz\\\/index.php\\\/2021\\\/04\\\/09\\\/serverless-face-off-aws-lambda\\\/\"},\"wordCount\":627,\"image\":{\"@id\":\"https:\\\/\\\/blog.wiseowls.co.nz\\\/index.php\\\/2021\\\/04\\\/09\\\/serverless-face-off-aws-lambda\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/blog.wiseowls.co.nz\\\/wp-content\\\/uploads\\\/2021\\\/02\\\/cloud-computing-2001090_1920.jpg\",\"keywords\":[\"aws\"],\"articleSection\":[\"Cloud\"],\"inLanguage\":\"en-US\"},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/blog.wiseowls.co.nz\\\/index.php\\\/2021\\\/04\\\/09\\\/serverless-face-off-aws-lambda\\\/\",\"url\":\"https:\\\/\\\/blog.wiseowls.co.nz\\\/index.php\\\/2021\\\/04\\\/09\\\/serverless-face-off-aws-lambda\\\/\",\"name\":\"Serverless face-off: AWS Lambda - Timur and associates\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/blog.wiseowls.co.nz\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/blog.wiseowls.co.nz\\\/index.php\\\/2021\\\/04\\\/09\\\/serverless-face-off-aws-lambda\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/blog.wiseowls.co.nz\\\/index.php\\\/2021\\\/04\\\/09\\\/serverless-face-off-aws-lambda\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/blog.wiseowls.co.nz\\\/wp-content\\\/uploads\\\/2021\\\/02\\\/cloud-computing-2001090_1920.jpg\",\"datePublished\":\"2021-04-08T14:43:00+00:00\",\"dateModified\":\"2026-03-07T11:49:21+00:00\",\"author\":{\"@id\":\"https:\\\/\\\/blog.wiseowls.co.nz\\\/#\\\/schema\\\/person\\\/34d0ed30d573b5bc317ea990bd2e0c59\"},\"description\":\"In this article we'll look how to create AWS Lambda and connect it to HTTP triggers\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/blog.wiseowls.co.nz\\\/index.php\\\/2021\\\/04\\\/09\\\/serverless-face-off-aws-lambda\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/blog.wiseowls.co.nz\\\/index.php\\\/2021\\\/04\\\/09\\\/serverless-face-off-aws-lambda\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/blog.wiseowls.co.nz\\\/index.php\\\/2021\\\/04\\\/09\\\/serverless-face-off-aws-lambda\\\/#primaryimage\",\"url\":\"https:\\\/\\\/blog.wiseowls.co.nz\\\/wp-content\\\/uploads\\\/2021\\\/02\\\/cloud-computing-2001090_1920.jpg\",\"contentUrl\":\"https:\\\/\\\/blog.wiseowls.co.nz\\\/wp-content\\\/uploads\\\/2021\\\/02\\\/cloud-computing-2001090_1920.jpg\",\"width\":1500,\"height\":396,\"caption\":\"header image, cloud computing\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/blog.wiseowls.co.nz\\\/index.php\\\/2021\\\/04\\\/09\\\/serverless-face-off-aws-lambda\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/blog.wiseowls.co.nz\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Serverless face-off: AWS Lambda\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/blog.wiseowls.co.nz\\\/#website\",\"url\":\"https:\\\/\\\/blog.wiseowls.co.nz\\\/\",\"name\":\"Timur and associates\",\"description\":\"Notes of an IT contractor\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/blog.wiseowls.co.nz\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/blog.wiseowls.co.nz\\\/#\\\/schema\\\/person\\\/34d0ed30d573b5bc317ea990bd2e0c59\",\"name\":\"timur\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/23d55e17d4f0990ee4d12bc6e5dcfb58a292934efd62a185756876379e780b16?s=96&r=pg\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/23d55e17d4f0990ee4d12bc6e5dcfb58a292934efd62a185756876379e780b16?s=96&r=pg\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/23d55e17d4f0990ee4d12bc6e5dcfb58a292934efd62a185756876379e780b16?s=96&r=pg\",\"caption\":\"timur\"},\"sameAs\":[\"https:\\\/\\\/x.com\\\/TimurKh\"]}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Serverless face-off: AWS Lambda - Timur and associates","description":"In this article we'll look how to create AWS Lambda and connect it to HTTP triggers","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:\/\/blog.wiseowls.co.nz\/index.php\/2021\/04\/09\/serverless-face-off-aws-lambda\/","og_locale":"en_US","og_type":"article","og_title":"Serverless face-off: AWS Lambda - Timur and associates","og_description":"In this article we'll look how to create AWS Lambda and connect it to HTTP triggers","og_url":"https:\/\/blog.wiseowls.co.nz\/index.php\/2021\/04\/09\/serverless-face-off-aws-lambda\/","og_site_name":"Timur and associates","article_published_time":"2021-04-08T14:43:00+00:00","article_modified_time":"2026-03-07T11:49:21+00:00","og_image":[{"width":1500,"height":396,"url":"https:\/\/blog.wiseowls.co.nz\/wp-content\/uploads\/2021\/02\/cloud-computing-2001090_1920.jpg","type":"image\/jpeg"}],"author":"timur","twitter_card":"summary_large_image","twitter_creator":"@TimurKh","schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/blog.wiseowls.co.nz\/index.php\/2021\/04\/09\/serverless-face-off-aws-lambda\/#article","isPartOf":{"@id":"https:\/\/blog.wiseowls.co.nz\/index.php\/2021\/04\/09\/serverless-face-off-aws-lambda\/"},"author":{"name":"timur","@id":"https:\/\/blog.wiseowls.co.nz\/#\/schema\/person\/34d0ed30d573b5bc317ea990bd2e0c59"},"headline":"Serverless face-off: AWS Lambda","datePublished":"2021-04-08T14:43:00+00:00","dateModified":"2026-03-07T11:49:21+00:00","mainEntityOfPage":{"@id":"https:\/\/blog.wiseowls.co.nz\/index.php\/2021\/04\/09\/serverless-face-off-aws-lambda\/"},"wordCount":627,"image":{"@id":"https:\/\/blog.wiseowls.co.nz\/index.php\/2021\/04\/09\/serverless-face-off-aws-lambda\/#primaryimage"},"thumbnailUrl":"https:\/\/blog.wiseowls.co.nz\/wp-content\/uploads\/2021\/02\/cloud-computing-2001090_1920.jpg","keywords":["aws"],"articleSection":["Cloud"],"inLanguage":"en-US"},{"@type":"WebPage","@id":"https:\/\/blog.wiseowls.co.nz\/index.php\/2021\/04\/09\/serverless-face-off-aws-lambda\/","url":"https:\/\/blog.wiseowls.co.nz\/index.php\/2021\/04\/09\/serverless-face-off-aws-lambda\/","name":"Serverless face-off: AWS Lambda - Timur and associates","isPartOf":{"@id":"https:\/\/blog.wiseowls.co.nz\/#website"},"primaryImageOfPage":{"@id":"https:\/\/blog.wiseowls.co.nz\/index.php\/2021\/04\/09\/serverless-face-off-aws-lambda\/#primaryimage"},"image":{"@id":"https:\/\/blog.wiseowls.co.nz\/index.php\/2021\/04\/09\/serverless-face-off-aws-lambda\/#primaryimage"},"thumbnailUrl":"https:\/\/blog.wiseowls.co.nz\/wp-content\/uploads\/2021\/02\/cloud-computing-2001090_1920.jpg","datePublished":"2021-04-08T14:43:00+00:00","dateModified":"2026-03-07T11:49:21+00:00","author":{"@id":"https:\/\/blog.wiseowls.co.nz\/#\/schema\/person\/34d0ed30d573b5bc317ea990bd2e0c59"},"description":"In this article we'll look how to create AWS Lambda and connect it to HTTP triggers","breadcrumb":{"@id":"https:\/\/blog.wiseowls.co.nz\/index.php\/2021\/04\/09\/serverless-face-off-aws-lambda\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/blog.wiseowls.co.nz\/index.php\/2021\/04\/09\/serverless-face-off-aws-lambda\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/blog.wiseowls.co.nz\/index.php\/2021\/04\/09\/serverless-face-off-aws-lambda\/#primaryimage","url":"https:\/\/blog.wiseowls.co.nz\/wp-content\/uploads\/2021\/02\/cloud-computing-2001090_1920.jpg","contentUrl":"https:\/\/blog.wiseowls.co.nz\/wp-content\/uploads\/2021\/02\/cloud-computing-2001090_1920.jpg","width":1500,"height":396,"caption":"header image, cloud computing"},{"@type":"BreadcrumbList","@id":"https:\/\/blog.wiseowls.co.nz\/index.php\/2021\/04\/09\/serverless-face-off-aws-lambda\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/blog.wiseowls.co.nz\/"},{"@type":"ListItem","position":2,"name":"Serverless face-off: AWS Lambda"}]},{"@type":"WebSite","@id":"https:\/\/blog.wiseowls.co.nz\/#website","url":"https:\/\/blog.wiseowls.co.nz\/","name":"Timur and associates","description":"Notes of an IT contractor","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/blog.wiseowls.co.nz\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Person","@id":"https:\/\/blog.wiseowls.co.nz\/#\/schema\/person\/34d0ed30d573b5bc317ea990bd2e0c59","name":"timur","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/23d55e17d4f0990ee4d12bc6e5dcfb58a292934efd62a185756876379e780b16?s=96&r=pg","url":"https:\/\/secure.gravatar.com\/avatar\/23d55e17d4f0990ee4d12bc6e5dcfb58a292934efd62a185756876379e780b16?s=96&r=pg","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/23d55e17d4f0990ee4d12bc6e5dcfb58a292934efd62a185756876379e780b16?s=96&r=pg","caption":"timur"},"sameAs":["https:\/\/x.com\/TimurKh"]}]}},"_links":{"self":[{"href":"https:\/\/blog.wiseowls.co.nz\/index.php\/wp-json\/wp\/v2\/posts\/708","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blog.wiseowls.co.nz\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.wiseowls.co.nz\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.wiseowls.co.nz\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.wiseowls.co.nz\/index.php\/wp-json\/wp\/v2\/comments?post=708"}],"version-history":[{"count":13,"href":"https:\/\/blog.wiseowls.co.nz\/index.php\/wp-json\/wp\/v2\/posts\/708\/revisions"}],"predecessor-version":[{"id":1371,"href":"https:\/\/blog.wiseowls.co.nz\/index.php\/wp-json\/wp\/v2\/posts\/708\/revisions\/1371"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/blog.wiseowls.co.nz\/index.php\/wp-json\/wp\/v2\/media\/674"}],"wp:attachment":[{"href":"https:\/\/blog.wiseowls.co.nz\/index.php\/wp-json\/wp\/v2\/media?parent=708"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.wiseowls.co.nz\/index.php\/wp-json\/wp\/v2\/categories?post=708"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.wiseowls.co.nz\/index.php\/wp-json\/wp\/v2\/tags?post=708"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}