{"id":110788,"date":"2024-01-25T09:13:25","date_gmt":"2024-01-25T17:13:25","guid":{"rendered":"https:\/\/www.backblaze.com\/blog\/?p=110788"},"modified":"2024-08-14T11:36:57","modified_gmt":"2024-08-14T18:36:57","slug":"exploring-aws-lite-a-community-driven-javascript-sdk-for-aws","status":"publish","type":"post","link":"https:\/\/www.backblaze.com\/blog\/exploring-aws-lite-a-community-driven-javascript-sdk-for-aws\/","title":{"rendered":"Exploring aws-lite, a Community-Driven JavaScript SDK for AWS"},"content":{"rendered":"\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"583\" src=\"https:\/\/backblaze.com\/blog\/wp-content\/uploads\/2024\/01\/bb-bh-Begin-aws-lite_Design-D1-1024x583.png\" alt=\"A decorative image showing the Backblaze and aws-lite logos. \" class=\"wp-image-110789\" srcset=\"https:\/\/backblazeprod.wpenginepowered.com\/wp-content\/uploads\/2024\/01\/bb-bh-Begin-aws-lite_Design-D1-1024x583.png 1024w, https:\/\/backblazeprod.wpenginepowered.com\/wp-content\/uploads\/2024\/01\/bb-bh-Begin-aws-lite_Design-D1-300x171.png 300w, https:\/\/backblazeprod.wpenginepowered.com\/wp-content\/uploads\/2024\/01\/bb-bh-Begin-aws-lite_Design-D1-768x437.png 768w, https:\/\/backblazeprod.wpenginepowered.com\/wp-content\/uploads\/2024\/01\/bb-bh-Begin-aws-lite_Design-D1.png 1440w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<div style=\"height:15px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">One of the benefits of the <a href=\"https:\/\/www.backblaze.com\/cloud-storage\" target=\"_blank\" rel=\"noreferrer noopener\">Backblaze B2 Storage Cloud<\/a> having an S3 compatible API is that developers can take advantage of the wide range of Amazon Web Services SDKs when building their apps. The AWS team has released over a dozen SDKs covering a broad range of programming languages, including Java, Python, and JavaScript, and the latter supports both frontend (browser) and backend (Node.js) applications.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">With all of this tooling available, you might be surprised to discover <a href=\"https:\/\/aws-lite.org\/\" target=\"_blank\" rel=\"noreferrer noopener\">aws-lite<\/a>. In the words of its creators, it is \u201ca simple, extremely fast, extensible Node.js client for interacting with AWS services.\u201d After meeting <a href=\"https:\/\/www.linkedin.com\/in\/brianleroux\/\" target=\"_blank\" rel=\"noreferrer noopener\">Brian LeRoux<\/a>, cofounder and chief technology officer (CTO) of <a href=\"https:\/\/begin.com\/\" target=\"_blank\" rel=\"noreferrer noopener\">Begin<\/a>, the company that created the aws-lite project, at the AWS re:Invent conference last year, I decided to give aws-lite a try and share the experience. Read on for the learnings I discovered along the way. <\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"936\" height=\"474\" src=\"https:\/\/backblaze.com\/blog\/wp-content\/uploads\/2024\/01\/aws-lite_1_Sticker-Swag.png\" alt=\"A photo showing an aws-lite promotional sticker that says, I've got p99 problems but an SDK ain't one, as well as a Backblaze promotional sticker that says Blaze\/On. \" class=\"wp-image-110790\" srcset=\"https:\/\/backblazeprod.wpenginepowered.com\/wp-content\/uploads\/2024\/01\/aws-lite_1_Sticker-Swag.png 936w, https:\/\/backblazeprod.wpenginepowered.com\/wp-content\/uploads\/2024\/01\/aws-lite_1_Sticker-Swag-300x152.png 300w, https:\/\/backblazeprod.wpenginepowered.com\/wp-content\/uploads\/2024\/01\/aws-lite_1_Sticker-Swag-768x389.png 768w\" sizes=\"auto, (max-width: 936px) 100vw, 936px\" \/><figcaption class=\"wp-element-caption\">Brian bribed me to try out aws-lite with a shiny laptop sticker!<\/figcaption><\/figure>\n<\/div>\n\n\n<div style=\"height:10px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h2 class=\"wp-block-heading\">Why Not Just Use the AWS SDK for JavaScript?<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">The AWS SDK has been through a few iterations. The initial release, way back in May 2013, focused on Node.js, while version 2, released in June 2014, added support for JavaScript running on a web page. We had to wait until December 2020 for the next major revision of the SDK, with version 3 adding TypeScript support and switching to an all-new modular architecture.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">However, not all developers saw version 3 as an improvement. Let\u2019s look at a simple example of the evolution of the SDK. The simplest operation you can perform against an S3 compatible cloud object store, such as <a href=\"https:\/\/www.backblaze.com\/cloud-storage\" target=\"_blank\" rel=\"noreferrer noopener\">Backblaze B2<\/a>, is to list the buckets in an account. Here\u2019s how you would do that in the AWS SDK for JavaScript v2:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">var AWS = require('aws-sdk');\n\nvar client = new AWS.S3({\n  region: 'us-west-004', \n  endpoint: 's3.us-west-004.backblazeb2.com'\n});\n\nclient.listBuckets(function (err, data) {\n  if (err) {\n    console.log(\"Error\", err);\n  } else {\n    console.log(\"Success\", data.Buckets);\n  }\n});<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Looking back from 2023, passing a callback function to the <code>listBuckets()<\/code> method looks quite archaic! Version 2.3.0 of the SDK, released in 2016, added support for JavaScript <a href=\"https:\/\/developer.mozilla.org\/en-US\/docs\/Web\/JavaScript\/Guide\/Using_promises\" target=\"_blank\" rel=\"noreferrer noopener\">promises<\/a>, and, since <a href=\"https:\/\/developer.mozilla.org\/en-US\/docs\/Learn\/JavaScript\/Asynchronous\/Promises#async_and_await\" target=\"_blank\" rel=\"noreferrer noopener\">async\/await<\/a> arrived in JavaScript in 2017, today we can write the above example a little more clearly and concisely:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">const AWS = require('aws-sdk');\n\nconst client = new AWS.S3({\n  region: 'us-west-004', \n  endpoint: 's3.us-west-004.backblazeb2.com'\n});\n\ntry {\n  const data = await client.listBuckets().promise();\n  console.log(\"Success\", data.Buckets);  \n} catch (err) {\n  console.log(\"Error\", err);\n}<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">One major drawback with version 2 of the AWS SDK for JavaScript is that it is a single, monolithic, JavaScript module. The most recent version, 2.1539.0, weighs in at 92.9MB of code and resources. Even the most minimal app using the SDK has to include all that, plus another couple of MB of dependencies, causing performance issues in resource-constrained environments such as internet of things (IoT) devices, or browsers on low-end mobile devices.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Version 3 of the AWS SDK for JavaScript aimed to fix this, taking a modular approach. Rather than a single JavaScript module there are now over 300 packages published under the <code>@aws-sdk\/<\/code> scope on NPM. Now, rather than the entire SDK, an app using S3 need only <code>install @aws-sdk\/client-s3<\/code>, which, with its dependencies, adds up to just 20MB.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">So, What\u2019s the Problem With AWS SDK for JavaScript v3?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">One issue is that, to fully take advantage of modularization, you must adopt an unfamiliar coding style, creating a command object and passing it to the client\u2019s <code>send()<\/code> method. Here is the \u201cnew way\u201d of listing buckets:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">const { S3Client, ListBucketsCommand } = require(\"@aws-sdk\/client-s3\");\n\n\/\/ Since v3.378, S3Client can read region and endpoint, as well as\n\/\/ credentials, from configuration, so no need to pass any arguments\nconst client = new S3Client();\n\ntry {\n  \/\/ Inexplicably, you must pass an empty object to \n  \/\/ ListBucketsCommand() to avoid the SDK throwing an error\n  const data = await client.send(new ListBucketsCommand({}));\n  console.log(\"Success\", data.Buckets);  \n} catch (err) {\n  console.log(\"Error\", err);\n}<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">The second issue is that, to help manage the complexity of keeping the SDK packages in sync with the 200+ services and their APIs, AWS now generates the SDK code from the API specifications. The problem with generated code is that, <a href=\"https:\/\/aws-lite.org\/#why-not-use-aws-sdk-%2F-%40aws-sdk%2F*%3F\" target=\"_blank\" rel=\"noreferrer noopener\">as the aws-lite home page says<\/a>, it can result in \u201clarge dependencies, poor performance, awkward semantics, difficult to understand documentation, and errors without usable stack traces.\u201d<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">A couple of these effects are evident even in the short code sample above. The underlying <code>ListBuckets<\/code> API call does not accept any parameters, so you might expect to be able to call the <code>ListBucketsCommand<\/code> constructor without any arguments. In fact, you have to supply an empty object, otherwise the SDK throws an error. Digging into the error reveals that a module named <code>middleware-sdk-s3<\/code> is validating that, if the object passed to the constructor has a Bucket property, it is a valid bucket name. This is a bit odd since, as I mentioned above, <code>ListBuckets<\/code> doesn\u2019t take <em>any<\/em> parameters, let alone a bucket name. The documentation for <code>ListBucketsCommand<\/code> contains two code samples, one with the empty object, one without. (I filed an issue for the AWS team to fix this.)<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u201cOkay,\u201d you might be thinking, \u201cI\u2019ll just carry on using v2.\u201d After all, the AWS team is still releasing regular updates, right? Not so fast! When you run the v2 code above, you\u2019ll see the following warning before the list of buckets:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">(node:35814) NOTE: We are formalizing our plans to enter AWS SDK for JavaScript (v2) into maintenance mode in 2023.\nPlease migrate your code to use AWS SDK for JavaScript (v3).\nFor more information, check the migration guide at https:\/\/a.co\/7PzMCcy<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">At some (as yet unspecified) time in the future, v2 of the SDK will enter maintenance mode, during which, according to the <a href=\"https:\/\/docs.aws.amazon.com\/sdkref\/latest\/guide\/maint-policy.html\" target=\"_blank\" rel=\"noreferrer noopener\">AWS SDKs and Tools maintenance policy<\/a>, \u201cAWS limits SDK releases to address critical bug fixes and security issues only.\u201d Sometime after that, v2 will reach the end of support, and it will no longer receive <em>any<\/em> updates or releases.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Getting Started With aws-lite<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Faced with a forced migration to what they judged to be an inferior SDK, Brian\u2019s team got to work on <a href=\"https:\/\/aws-lite.org\/\">aws-lite<\/a>, posting the initial code to the <a href=\"https:\/\/github.com\/architect\/aws-lite\">aws-lite GitHub repository<\/a> in September last year, under the Apache 2.0 open source license. At present the project comprises a core client and 13 plugins covering a range of AWS services including S3, Lambda, and DynamoDB.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Following the instructions on the aws-lite site, I installed the client module and the S3 plugin, and implemented the <code>ListBuckets<\/code> sample:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">import awsLite from '@aws-lite\/client';\n\nconst aws = await awsLite();\n\ntry {\n  const data = await aws.S3.ListBuckets();\n  console.log(\"Success\", data.Buckets);\n} catch (err) {\n  console.log(\"Error\", err);\n}<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">For me, this combines the best of both worlds\u2014concise code, like AWS SDK v2, and full support for modern JavaScript features, like v3. Best of all, the aws-lite client, S3 plugin, and their dependencies occupy just 284KB of disk space, which is less than 2% of the modular AWS SDK\u2019s 20MB, and less than 0.5% of the monolith\u2019s 92.9MB!<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Caveat Developer!<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">(Not to kill the punchline here, but for those of you who might not have studied Latin or law, this is a play on the phrase, \u201ccaveat emptor\u201d, meaning \u201cbuyer beware\u201d.)<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">I have to mention, at this point, that aws-lite is still very much under construction. Only a small fraction of AWS services are covered by plugins, although it is possible (with a little extra code) to use the client to call services without a plugin. Also, not all operations are covered by the plugins that do exist. For example, at present, the S3 plugin supports 10 of the most frequently used S3 operations, such as <code>PutObject<\/code>, <code>GetObject<\/code>, and <code>ListObjectsV2<\/code>, leaving the remaining 89 operations TBD.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">That said, it\u2019s straightforward to add more operations and services, and the aws-lite team welcomes pull requests. We\u2019re big believers in being <a href=\"https:\/\/www.backblaze.com\/blog\/new-open-source-tool-for-consistency-in-cassandra-migrations\/\" target=\"_blank\" rel=\"noreferrer noopener\">active participants in the open source community<\/a>, and I\u2019ve already contributed <a href=\"https:\/\/github.com\/architect\/aws-lite\/pull\/51\" target=\"_blank\" rel=\"noreferrer noopener\">the <code>ListBuckets<\/code> operation<\/a>, <a href=\"https:\/\/github.com\/architect\/aws-lite\/pull\/57\" target=\"_blank\" rel=\"noreferrer noopener\">a fix for <code>HeadObject<\/code><\/a>, and <a href=\"https:\/\/github.com\/architect\/aws-lite\/pull\/73\">I\u2019m working on adding tests for the S3 plugin<\/a> using a mock S3 server. If you\u2019re a JavaScript developer working with cloud services, this is a great opportunity to contribute to an open source project that promises to make your coding life better!<\/p>\n","protected":false},"excerpt":{"rendered":"<p>If you&#8217;re a developer using JavaScript on S3 compatible cloud storage, chances are you&#8217;ve run into the limitations of the AWS SDK. Read about how aws-lite provides an open-source alternative, and how Backblazer Pat Patterson is contributing. <\/p>\n","protected":false},"author":174,"featured_media":110789,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"content-type":"","footnotes":"","jetpack_post_was_ever_published":false},"categories":[7,434,483],"tags":[468],"class_list":["post-110788","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-cloud-storage","category-featured-1","category-tech-lab","tag-b2cloud","entry"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.8 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Exploring aws-lite, a Community-Driven JavaScript SDK for AWS<\/title>\n<meta name=\"description\" content=\"Explore the benefits of Backblaze B2&#039;s S3-compatible API and discover aws-lite, a fast Node.js client for seamless AWS integration.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.backblaze.com\/blog\/exploring-aws-lite-a-community-driven-javascript-sdk-for-aws\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Exploring aws-lite, a Community-Driven JavaScript SDK for AWS\" \/>\n<meta property=\"og:description\" content=\"Explore the benefits of Backblaze B2&#039;s S3-compatible API and discover aws-lite, a fast Node.js client for seamless AWS integration.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.backblaze.com\/blog\/exploring-aws-lite-a-community-driven-javascript-sdk-for-aws\/\" \/>\n<meta property=\"og:site_name\" content=\"Backblaze Blog | Cloud Storage &amp; Cloud Backup\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/backblaze\" \/>\n<meta property=\"article:published_time\" content=\"2024-01-25T17:13:25+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2024-08-14T18:36:57+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.backblaze.com\/blog\/wp-content\/uploads\/2024\/01\/bb-bh-Begin-aws-lite_Design-D1.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1440\" \/>\n\t<meta property=\"og:image:height\" content=\"820\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Pat Patterson\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@backblaze\" \/>\n<meta name=\"twitter:site\" content=\"@backblaze\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Pat Patterson\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"7 minutes\" \/>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Exploring aws-lite, a Community-Driven JavaScript SDK for AWS","description":"Explore the benefits of Backblaze B2's S3-compatible API and discover aws-lite, a fast Node.js client for seamless AWS integration.","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:\/\/www.backblaze.com\/blog\/exploring-aws-lite-a-community-driven-javascript-sdk-for-aws\/","og_locale":"en_US","og_type":"article","og_title":"Exploring aws-lite, a Community-Driven JavaScript SDK for AWS","og_description":"Explore the benefits of Backblaze B2's S3-compatible API and discover aws-lite, a fast Node.js client for seamless AWS integration.","og_url":"https:\/\/www.backblaze.com\/blog\/exploring-aws-lite-a-community-driven-javascript-sdk-for-aws\/","og_site_name":"Backblaze Blog | Cloud Storage &amp; Cloud Backup","article_publisher":"https:\/\/www.facebook.com\/backblaze","article_published_time":"2024-01-25T17:13:25+00:00","article_modified_time":"2024-08-14T18:36:57+00:00","og_image":[{"width":1440,"height":820,"url":"https:\/\/www.backblaze.com\/blog\/wp-content\/uploads\/2024\/01\/bb-bh-Begin-aws-lite_Design-D1.png","type":"image\/png"}],"author":"Pat Patterson","twitter_card":"summary_large_image","twitter_creator":"@backblaze","twitter_site":"@backblaze","twitter_misc":{"Written by":"Pat Patterson","Est. reading time":"7 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.backblaze.com\/blog\/exploring-aws-lite-a-community-driven-javascript-sdk-for-aws\/#article","isPartOf":{"@id":"https:\/\/www.backblaze.com\/blog\/exploring-aws-lite-a-community-driven-javascript-sdk-for-aws\/"},"author":{"name":"Pat Patterson","@id":"https:\/\/backblazeprod.wpenginepowered.com\/blog\/#\/schema\/person\/a724a8aee97b6451107442747cd101a4"},"headline":"Exploring aws-lite, a Community-Driven JavaScript SDK for AWS","datePublished":"2024-01-25T17:13:25+00:00","dateModified":"2024-08-14T18:36:57+00:00","mainEntityOfPage":{"@id":"https:\/\/www.backblaze.com\/blog\/exploring-aws-lite-a-community-driven-javascript-sdk-for-aws\/"},"wordCount":1159,"commentCount":0,"publisher":{"@id":"https:\/\/backblazeprod.wpenginepowered.com\/blog\/#organization"},"image":{"@id":"https:\/\/www.backblaze.com\/blog\/exploring-aws-lite-a-community-driven-javascript-sdk-for-aws\/#primaryimage"},"thumbnailUrl":"https:\/\/backblazeprod.wpenginepowered.com\/wp-content\/uploads\/2024\/01\/bb-bh-Begin-aws-lite_Design-D1.png","keywords":["B2Cloud"],"articleSection":["Cloud Storage","Featured","Tech Lab"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.backblaze.com\/blog\/exploring-aws-lite-a-community-driven-javascript-sdk-for-aws\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.backblaze.com\/blog\/exploring-aws-lite-a-community-driven-javascript-sdk-for-aws\/","url":"https:\/\/www.backblaze.com\/blog\/exploring-aws-lite-a-community-driven-javascript-sdk-for-aws\/","name":"Exploring aws-lite, a Community-Driven JavaScript SDK for AWS","isPartOf":{"@id":"https:\/\/backblazeprod.wpenginepowered.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.backblaze.com\/blog\/exploring-aws-lite-a-community-driven-javascript-sdk-for-aws\/#primaryimage"},"image":{"@id":"https:\/\/www.backblaze.com\/blog\/exploring-aws-lite-a-community-driven-javascript-sdk-for-aws\/#primaryimage"},"thumbnailUrl":"https:\/\/backblazeprod.wpenginepowered.com\/wp-content\/uploads\/2024\/01\/bb-bh-Begin-aws-lite_Design-D1.png","datePublished":"2024-01-25T17:13:25+00:00","dateModified":"2024-08-14T18:36:57+00:00","description":"Explore the benefits of Backblaze B2's S3-compatible API and discover aws-lite, a fast Node.js client for seamless AWS integration.","breadcrumb":{"@id":"https:\/\/www.backblaze.com\/blog\/exploring-aws-lite-a-community-driven-javascript-sdk-for-aws\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.backblaze.com\/blog\/exploring-aws-lite-a-community-driven-javascript-sdk-for-aws\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.backblaze.com\/blog\/exploring-aws-lite-a-community-driven-javascript-sdk-for-aws\/#primaryimage","url":"https:\/\/backblazeprod.wpenginepowered.com\/wp-content\/uploads\/2024\/01\/bb-bh-Begin-aws-lite_Design-D1.png","contentUrl":"https:\/\/backblazeprod.wpenginepowered.com\/wp-content\/uploads\/2024\/01\/bb-bh-Begin-aws-lite_Design-D1.png","width":1440,"height":820,"caption":"A decorative image showing the Backblaze and aws-lite logos."},{"@type":"BreadcrumbList","@id":"https:\/\/www.backblaze.com\/blog\/exploring-aws-lite-a-community-driven-javascript-sdk-for-aws\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/backblazeprod.wpenginepowered.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Exploring aws-lite, a Community-Driven JavaScript SDK for AWS"}]},{"@type":"WebSite","@id":"https:\/\/backblazeprod.wpenginepowered.com\/blog\/#website","url":"https:\/\/backblazeprod.wpenginepowered.com\/blog\/","name":"Backblaze Cloud Solutions Blog","description":"Cloud Storage &amp; Cloud Backup","publisher":{"@id":"https:\/\/backblazeprod.wpenginepowered.com\/blog\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/backblazeprod.wpenginepowered.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/backblazeprod.wpenginepowered.com\/blog\/#organization","name":"Backblaze","url":"https:\/\/backblazeprod.wpenginepowered.com\/blog\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/backblazeprod.wpenginepowered.com\/blog\/#\/schema\/logo\/image\/","url":"https:\/\/i0.wp.com\/www.backblaze.com\/blog\/wp-content\/uploads\/2017\/12\/backblaze_icon_transparent.png?fit=512%2C512&ssl=1","contentUrl":"https:\/\/i0.wp.com\/www.backblaze.com\/blog\/wp-content\/uploads\/2017\/12\/backblaze_icon_transparent.png?fit=512%2C512&ssl=1","width":512,"height":512,"caption":"Backblaze"},"image":{"@id":"https:\/\/backblazeprod.wpenginepowered.com\/blog\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/backblaze","https:\/\/x.com\/backblaze","https:\/\/www.youtube.com\/user\/Backblaze","https:\/\/en.wikipedia.org\/wiki\/Backblaze"]},{"@type":"Person","@id":"https:\/\/backblazeprod.wpenginepowered.com\/blog\/#\/schema\/person\/a724a8aee97b6451107442747cd101a4","name":"Pat Patterson","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/backblazeprod.wpenginepowered.com\/wp-content\/uploads\/2022\/01\/PatPatterson1920px-150x150.png","url":"https:\/\/backblazeprod.wpenginepowered.com\/wp-content\/uploads\/2022\/01\/PatPatterson1920px-150x150.png","contentUrl":"https:\/\/backblazeprod.wpenginepowered.com\/wp-content\/uploads\/2022\/01\/PatPatterson1920px-150x150.png","caption":"Pat Patterson"},"description":"Pat Patterson is the former chief technical evangelist at Backblaze. Over his three decades in the industry, Pat has built software and communities at Sun Microsystems, Salesforce, StreamSets, and Citrix. In his role at Backblaze, he creates and delivers content tailored to the needs of the hands-on technical professional, acts as the \u201cvoice of the developer\u201d on the Product team, and actively participates in the wider technical community. Outside the office, Pat runs far, having completed ultramarathons up to the 50 mile distance. Catch up with Pat via Bluesky or LinkedIn.","url":"https:\/\/backblazeprod.wpenginepowered.com\/blog\/author\/pat\/"}]}},"jetpack_featured_media_url":"https:\/\/backblazeprod.wpenginepowered.com\/wp-content\/uploads\/2024\/01\/bb-bh-Begin-aws-lite_Design-D1.png","_links":{"self":[{"href":"https:\/\/backblazeprod.wpenginepowered.com\/blog\/wp-json\/wp\/v2\/posts\/110788","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/backblazeprod.wpenginepowered.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/backblazeprod.wpenginepowered.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/backblazeprod.wpenginepowered.com\/blog\/wp-json\/wp\/v2\/users\/174"}],"replies":[{"embeddable":true,"href":"https:\/\/backblazeprod.wpenginepowered.com\/blog\/wp-json\/wp\/v2\/comments?post=110788"}],"version-history":[{"count":0,"href":"https:\/\/backblazeprod.wpenginepowered.com\/blog\/wp-json\/wp\/v2\/posts\/110788\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/backblazeprod.wpenginepowered.com\/blog\/wp-json\/wp\/v2\/media\/110789"}],"wp:attachment":[{"href":"https:\/\/backblazeprod.wpenginepowered.com\/blog\/wp-json\/wp\/v2\/media?parent=110788"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/backblazeprod.wpenginepowered.com\/blog\/wp-json\/wp\/v2\/categories?post=110788"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/backblazeprod.wpenginepowered.com\/blog\/wp-json\/wp\/v2\/tags?post=110788"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}