{"id":12196,"date":"2020-11-27T12:56:40","date_gmt":"2020-11-27T11:56:40","guid":{"rendered":"https:\/\/www.codemotion.com\/magazine\/?p=12196"},"modified":"2022-01-05T20:06:46","modified_gmt":"2022-01-05T19:06:46","slug":"cloud-nimbella-aws","status":"publish","type":"post","link":"https:\/\/www.codemotion.com\/magazine\/devops\/cloud\/cloud-nimbella-aws\/","title":{"rendered":"Building a Stateful Cloud App on Nimbella or AWS"},"content":{"rendered":"\t\t\t\t<div class=\"wp-block-uagb-table-of-contents uagb-toc__align-left uagb-toc__columns-1  uagb-block-97d5ac69      \"\n\t\t\t\t\tdata-scroll= \"1\"\n\t\t\t\t\tdata-offset= \"30\"\n\t\t\t\t\tstyle=\"\"\n\t\t\t\t>\n\t\t\t\t<div class=\"uagb-toc__wrap\">\n\t\t\t\t\t\t<div class=\"uagb-toc__title\">\n\t\t\t\t\t\t\tTable Of Contents\t\t\t\t\t\t<\/div>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<div class=\"uagb-toc__list-wrap \">\n\t\t\t\t\t\t<ol class=\"uagb-toc__list\"><li class=\"uagb-toc__list\"><a href=\"#what-sort-of-stateful-serverless-cloud-app-am-i-going-to-build\" class=\"uagb-toc-link__trigger\">What sort of Stateful Serverless Cloud App am I going to build?<\/a><li class=\"uagb-toc__list\"><a href=\"#how-should-the-code-files-be-arranged\" class=\"uagb-toc-link__trigger\">How should the code files be arranged?<\/a><li class=\"uagb-toc__list\"><a href=\"#how-can-an-app-be-made-stateful-for-the-cloud\" class=\"uagb-toc-link__trigger\">How can an App be made Stateful for the Cloud?<\/a><li class=\"uagb-toc__list\"><a href=\"#static-assetshow-can-a-stateful-app-that-has-these-be-deployed-to-the-cloud\" class=\"uagb-toc-link__trigger\">Static Assets\u2026how can a Stateful App that has these be deployed to the Cloud?<\/a><li class=\"uagb-toc__list\"><a href=\"#so-what-does-that-mean-for-me\" class=\"uagb-toc-link__trigger\">So, what does that mean for me?<\/a><\/ol>\t\t\t\t\t<\/div>\n\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\n\n\n<p>Building <a href=\"https:\/\/www.codemotion.com\/magazine\/dev-hub\/cloud-manager\/going-serverless-the-easy-way\/\" class=\"ek-link\">serverless<\/a> cloud <span id=\"urn:enhancement-f81d5889\" class=\"textannotation disambiguated wl-thing\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/application_software\">applications<\/span>? There&#8217;s a simple way to do that! This article compares the <span id=\"urn:enhancement-4a3cd87a\" class=\"textannotation disambiguated wl-thing\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/user_computing\">user<\/span> experience of <strong>Nimbella<\/strong> and <a href=\"https:\/\/www.codemotion.com\/magazine\/dev-hub\/cloud-manager\/terraform-aws\/\" class=\"ek-link\">Amazon Web Services<\/a> when creating a voting <span id=\"urn:enhancement-ebb020a2\" class=\"textannotation disambiguated wl-thing\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/mobile_app\">app<\/span>, from a <span id=\"urn:enhancement-b8c4e53\" class=\"textannotation disambiguated wl-thing\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/software_developer\">developer<\/span>&#8216;s point of view.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-what-sort-of-stateful-serverless-cloud-app-am-i-going-to-build\">What sort of Stateful Serverless Cloud App am I going to build?<\/h2>\n\n\n\n<p>For the purposes of writing this article, I built a voting <span id=\"urn:enhancement-5906a510\" class=\"textannotation disambiguated wl-thing\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/mobile_app\">app<\/span> that allows <span id=\"urn:enhancement-49a75f15\" class=\"textannotation disambiguated wl-thing\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/user_computing\">users<\/span> to say whether they prefer cats or dogs. Because the data input by the <span id=\"urn:enhancement-d3f2b81e\" class=\"textannotation disambiguated wl-thing\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/user_computing\">user<\/span> needs to be saved between <span id=\"urn:enhancement-daa3ec6d\" class=\"textannotation disambiguated wl-thing\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/session_computer_science\">sessions<\/span> for later re-use, this needs to be a <span id=\"urn:enhancement-b8c7bbf5\" class=\"textannotation disambiguated wl-thing\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/state_computer_science\">stateful<\/span> <span id=\"urn:enhancement-31ef8aef\" class=\"textannotation disambiguated wl-thing\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/mobile_app\">app<\/span>.<\/p>\n\n\n\n<p>Building this <span id=\"urn:enhancement-db568696\" class=\"textannotation disambiguated wl-thing\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/mobile_app\">app<\/span> requires two things.<\/p>\n\n\n\n<ol class=\"wp-block-list\" type=\"1\"><li>A frontend that displays two voting buttons.<\/li><li>Two cloud functions that save the application\u2019s \u201cstate\u201d by calling on key-value storage<\/li><\/ol>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"798\" height=\"459\" src=\"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2020\/11\/Screenshot-2020-11-19-at-14.05.39.png\" alt=\"A cat and a dog in a voting app\" class=\"wp-image-12199\" srcset=\"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2020\/11\/Screenshot-2020-11-19-at-14.05.39.png 798w, https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2020\/11\/Screenshot-2020-11-19-at-14.05.39-300x173.png 300w, https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2020\/11\/Screenshot-2020-11-19-at-14.05.39-768x442.png 768w\" sizes=\"auto, (max-width: 798px) 100vw, 798px\" \/><figcaption>Dogs or Cats?  Which do you prefer?<\/figcaption><\/figure><\/div>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-how-should-the-code-files-be-arranged\">How should the code files be arranged?<\/h2>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"790\" height=\"454\" src=\"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2020\/11\/Screenshot-2020-11-19-at-14.05.52.png\" alt=\"Code file arrangements in Nimbella and AWS\" class=\"wp-image-12198\" srcset=\"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2020\/11\/Screenshot-2020-11-19-at-14.05.52.png 790w, https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2020\/11\/Screenshot-2020-11-19-at-14.05.52-300x172.png 300w, https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2020\/11\/Screenshot-2020-11-19-at-14.05.52-768x441.png 768w\" sizes=\"auto, (max-width: 790px) 100vw, 790px\" \/><figcaption>Code file arrangements for Nimbella and AWS<\/figcaption><\/figure><\/div>\n\n\n\n<p>First things first: let\u2019s look at how to organise the <span id=\"urn:enhancement-34fee4da\" class=\"textannotation disambiguated wl-thing\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/source_code\">code<\/span> before we look at the practical elements of launching the <span id=\"urn:enhancement-45ecc3a9\" class=\"textannotation disambiguated wl-thing\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/source_code\">code<\/span> in the <span id=\"urn:enhancement-c3350589\" class=\"textannotation disambiguated wl-thing\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/cloud_computing\">Cloud<\/span>.<\/p>\n\n\n\n<p>Each of the <span id=\"urn:enhancement-ffaf71f3\" class=\"textannotation disambiguated wl-thing\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/system\">systems<\/span> illustrated above includes two folders for this <span id=\"urn:enhancement-9464ebbd\" class=\"textannotation disambiguated wl-thing\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/project\">project<\/span>; one contains static content (Web) and the second stores cloud <span id=\"urn:enhancement-7cef91e6\" class=\"textannotation disambiguated wl-thing\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/subroutine\">functions<\/span> (Packages). The primary difference between the two systems lies in how they arrange the cloud <span id=\"urn:enhancement-db405041\" class=\"textannotation disambiguated wl-thing\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/subroutine\">functions<\/span>.<\/p>\n\n\n\n<p>In <strong>Nimbella<\/strong>, I simply create the cloud <span id=\"urn:enhancement-5892f895\" class=\"textannotation disambiguated wl-thing\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/subroutine\">functions<\/span> as two <span id=\"urn:enhancement-d31a4a36\" class=\"textannotation disambiguated wl-thing\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/computer_file\">files<\/span> (<em>addVotes.js<\/em> and <em>getVotes.js<\/em>).<\/p>\n\n\n\n<p>If I use<strong><em> <\/em>Amazon <span id=\"urn:enhancement-5ca8bbb6\" class=\"textannotation disambiguated wl-thing\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/web_service\">Web Services<\/span><\/strong>, the <span id=\"urn:enhancement-a33894f3\" class=\"textannotation disambiguated wl-thing\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/process_computing\">process<\/span> is a little more complex. The first step is the creation of separate folders for each cloud function.&nbsp; Next, the <a href=\"https:\/\/www.codemotion.com\/magazine\/tag\/javascript\/\" class=\"ek-link\"><span id=\"urn:local-annotation-345782\" class=\"textannotation disambiguated\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/javascript\">JS<\/span><\/a> <span id=\"urn:enhancement-c79c50ea\" class=\"textannotation disambiguated wl-thing\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/computer_file\">files<\/span> are added, and their dependencies are included in each folder. Finally, the zip <span id=\"urn:enhancement-cc919c11\" class=\"textannotation disambiguated wl-thing\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/computer_file\">file<\/span> with its node-<span id=\"urn:enhancement-867dc136\" class=\"textannotation disambiguated wl-thing\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/modular_programming\">modules<\/span> folder, the JS <span id=\"urn:enhancement-790407f7\" class=\"textannotation disambiguated wl-thing\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/computer_file\">file<\/span>, and the package.json are added to complete the <span id=\"urn:enhancement-da660912\" class=\"textannotation disambiguated wl-thing\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/process_computing\">process<\/span>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-how-can-an-app-be-made-stateful-for-the-cloud\">How can an App be made Stateful for the Cloud?<\/h2>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"633\" height=\"371\" src=\"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2020\/11\/Screenshot-2020-11-19-at-14.08.50.png\" alt=\"Making an app stateful - the process in Nimbella and AWS\" class=\"wp-image-12200\" srcset=\"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2020\/11\/Screenshot-2020-11-19-at-14.08.50.png 633w, https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2020\/11\/Screenshot-2020-11-19-at-14.08.50-300x176.png 300w\" sizes=\"auto, (max-width: 633px) 100vw, 633px\" \/><figcaption>Making an app stateful: diagrams for Nimbella and AWS<\/figcaption><\/figure><\/div>\n\n\n\n<p><span id=\"urn:enhancement-ad5fb7d5\" class=\"textannotation disambiguated wl-thing\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/attribute-value_pair\">Key-value<\/span> storage is necessary to make a <span id=\"urn:enhancement-7d281912\" class=\"textannotation disambiguated wl-thing\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/state_computer_science\">stateful<\/span> <span id=\"urn:enhancement-3f5ac234\" class=\"textannotation disambiguated wl-thing\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/mobile_app\">app<\/span> &#8211; it saves the votes already cast, and presents the running totals when the page is refreshed. Again, Nimbella and <span id=\"urn:enhancement-4f23232a\" class=\"textannotation disambiguated wl-creative-work\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/amazon_web_services\">AWS<\/span> achieve this in different ways.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"h-nimbella\">Nimbella<\/h3>\n\n\n\n<ol class=\"wp-block-list\"><li><strong>Add <span id=\"urn:local-annotation-494984\" class=\"textannotation disambiguated\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/redis\">Redis<\/span> (key-value storage) to the project<\/strong>. To this end, create a new project template by running the following command:<br><code>nim project create ProjectName<\/code><\/li><li><strong>Call Redis from your functions<\/strong>. To this end, first import <strong>nim<\/strong>, and then import Redis from it within the function. Finally, add the code logic that makes Redis either update the vote totals, or return the current voting numbers (see image below)<\/li><li><strong>Deploy stateful functions to the Cloud<\/strong>. Ensure your functions are properly located within the Packages folder, then run the following command:<br><code>nim project deploy ProjectName<\/code><\/li><\/ol>\n\n\n\n<p>The <span id=\"urn:enhancement-88289c2b\" class=\"textannotation disambiguated wl-thing\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/server_computing\">services<\/span> I need to achieve a <span id=\"urn:enhancement-5a6bf8a3\" class=\"textannotation disambiguated wl-thing\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/state_computer_science\">stateful<\/span> <span id=\"urn:enhancement-a0fff482\" class=\"textannotation disambiguated wl-thing\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/mobile_app\">app<\/span> are all readily available and in place in this <span id=\"urn:enhancement-a838d905\" class=\"textannotation disambiguated wl-thing\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/system\">system<\/span>. Because of this, there&#8217;s no service set-up to carry out \u2013 all I have to do is call the required <span id=\"urn:enhancement-21086e38\" class=\"textannotation disambiguated wl-thing\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/server_computing\">services<\/span> using code logic.<\/p>\n\n\n\n<p>To increment voting numbers, I used <span id=\"urn:enhancement-78c1867\" class=\"textannotation disambiguated wl-thing\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/source_code\">code<\/span> similar to the following:<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"629\" height=\"267\" src=\"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2020\/11\/Screenshot-2020-11-19-at-14.10.26-1.png\" alt=\"Code for incrementing voting numbers\" class=\"wp-image-12202\" srcset=\"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2020\/11\/Screenshot-2020-11-19-at-14.10.26-1.png 629w, https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2020\/11\/Screenshot-2020-11-19-at-14.10.26-1-300x127.png 300w\" sizes=\"auto, (max-width: 629px) 100vw, 629px\" \/><figcaption>Code used to increment voting numbers<\/figcaption><\/figure><\/div>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"h-amazon-web-services\">Amazon Web Services<\/h3>\n\n\n\n<p>Making a <span id=\"urn:enhancement-80af6031\" class=\"textannotation disambiguated wl-thing\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/state_computer_science\">stateful<\/span> <span id=\"urn:enhancement-ac1c1fbb\" class=\"textannotation disambiguated wl-thing\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/application_software\">application<\/span> in <span id=\"urn:enhancement-b154f960\" class=\"textannotation disambiguated wl-creative-work\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/amazon_web_services\">AWS<\/span> involves a number of steps. Using this <span id=\"urn:enhancement-1127f859\" class=\"textannotation disambiguated wl-thing\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/system\">system<\/span>, I created <span id=\"urn:enhancement-f0ad21e8\" class=\"textannotation disambiguated wl-thing\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/state_computer_science\">stateful<\/span> <span id=\"urn:enhancement-efeac6b\" class=\"textannotation disambiguated wl-thing\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/attribute-value_pair\">key-value<\/span> <span id=\"urn:enhancement-ce3d860a\" class=\"textannotation disambiguated wl-thing\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/storage_memory\">storage<\/span> like this:<\/p>\n\n\n\n<ol class=\"wp-block-list\"><li><strong>Deploy a Redis (key-value storage) cluster on Amazon Web Services<\/strong>:<ol><li>Select Redis from the AWS ElastiCache service<\/li><li>Input name, version, port, parameter group, node type, and the number of replicas desired in the Redis settings<\/li><li>Nominate the VPC your Redis cluster should be connected to<\/li><li>When this process is complete, keep the Primary Endpoint &#8211; it&#8217;s important in the next step<\/li><\/ol><\/li><li><strong>Deploying EC2 on Amazon Web Services<\/strong>:<ol><li>Use the service tab to look for EC2. Don\u2019t forget to choose your region;<\/li><li>Open \u201cLaunch Instance\u201d<\/li><li>Select the type of instance you need<\/li><li>Configure your instance (N.B., always use the same VPC that you used for ElastiCache)<\/li><li>Add your Storage<\/li><li>Attach tags<\/li><li>Configure the Security Group &amp; check what you have done so far<\/li><li>Connect the SSH to your EC2 instance before installing the Redis CLI<\/li><li>Connect the Redis instance via Redis CLI. Don&#8217;t forget to include the primary endpoint of Redis (as previously mentioned, this is important!)<\/li><\/ol><\/li><li><strong>Deploy <span id=\"urn:local-annotation-543678\" class=\"textannotation disambiguated\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/lambda_calculus\">Lambda<\/span> functions on Amazon Web Services, then connect it to API Gateway:<\/strong><ol><li>Find <a href=\"https:\/\/www.codemotion.com\/magazine\/dev-hub\/cloud-manager\/when-lambdas-take-control-the-service-of-serverless\/\" class=\"ek-link\"><span id=\"urn:local-annotation-24331\" class=\"textannotation disambiguated\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/anonymous_function\">Lambda<\/span><\/a> by using the service tab. Ensure the correct region is identified<\/li><li>Create functions methodically. Working one by one, select \u201cAuthor from Scratch\u201d, the function\u2019s name, and what type of code it uses (<span id=\"urn:local-annotation-608977\" class=\"textannotation disambiguated\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/node-js\">NodeJS<\/span>, <span id=\"urn:local-annotation-844375\" class=\"textannotation disambiguated\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/python_programming_language\">Python<\/span>, etc)<\/li><li>Using the same VPC as Redis, connect your functions. Check each one to be sure the correct ports have been chosen<\/li><li>Connect your functions to <span id=\"urn:local-annotation-301737\" class=\"textannotation disambiguated\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/application_programming_interface\">API<\/span> Gateway. Choose a trigger for the function, requesting an HTTP API as the trigger type. This will provide you with a URL that can be used to call your functions through your code<\/li><\/ol><\/li><\/ol>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-static-assets-how-can-a-stateful-app-that-has-these-be-deployed-to-the-cloud\">Static Assets\u2026how can a Stateful App that has these be deployed to the Cloud?<\/h2>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"648\" height=\"332\" src=\"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2020\/11\/Screenshot-2020-11-19-at-14.18.37.png\" alt=\"Cloud deployment in Nimbella and AWS\" class=\"wp-image-12203\" srcset=\"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2020\/11\/Screenshot-2020-11-19-at-14.18.37.png 648w, https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2020\/11\/Screenshot-2020-11-19-at-14.18.37-300x154.png 300w\" sizes=\"auto, (max-width: 648px) 100vw, 648px\" \/><figcaption>Deployment to the Cloud with Nimbella or AWS<\/figcaption><\/figure><\/div>\n\n\n\n<p>With your static web assets and cloud <span id=\"urn:enhancement-17110434\" class=\"textannotation disambiguated wl-thing\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/subroutine\">functions<\/span> complete, you can finally deploy the entire <span id=\"urn:enhancement-36080663\" class=\"textannotation disambiguated wl-thing\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/mobile_app\">app<\/span> to the <span id=\"urn:enhancement-658756ff\" class=\"textannotation disambiguated wl-thing\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/cloud_computing\">Cloud<\/span>!<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"h-deploying-to-the-cloud-with-nimbella\">Deploying to the Cloud with Nimbella<\/h3>\n\n\n\n<p>If you\u2019re using Nimbella, there\u2019s no need to <span id=\"urn:enhancement-2248253b\" class=\"textannotation disambiguated wl-thing\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/configure_script\">configure<\/span> cloud storage for any <span id=\"urn:enhancement-88394068\" class=\"textannotation disambiguated wl-thing\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/front_and_back_ends\">front-end<\/span> static assets, nor to <span id=\"urn:enhancement-e661bff5\" class=\"textannotation disambiguated wl-thing\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/configure_script\">configure<\/span> a content delivery network (<span id=\"urn:enhancement-9e3d5f25\" class=\"textannotation disambiguated wl-thing\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/content_delivery_network\">CDN<\/span>) that will serve the <span id=\"urn:enhancement-5fdf1359\" class=\"textannotation disambiguated wl-thing\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/mobile_app\">app<\/span> from the <span id=\"urn:enhancement-760d541a\" class=\"textannotation disambiguated wl-thing\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/cloud_computing\">Cloud<\/span>. This is because the <span id=\"urn:enhancement-e780128e\" class=\"textannotation disambiguated wl-thing\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/computer_configuration\">configuration<\/span> will be done for you &#8211;  just issue the <span id=\"urn:enhancement-9e2096d8\" class=\"textannotation disambiguated wl-thing\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/instruction_set\">instruction<\/span> that your code logic should be sent to the <span id=\"urn:enhancement-2e214e1e\" class=\"textannotation disambiguated wl-thing\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/cloud_computing\">Cloud<\/span>, like this:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>Open your Command Prompt and run:<br><code>nim project deploy ProjectName<\/code><\/li><li>Paste the URL that appears in your browser<\/li><\/ul>\n\n\n\n<p><strong><span id=\"urn:enhancement-b381a366\" class=\"textannotation disambiguated wl-thing\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/source_code\">Code<\/span> needs updating in Nimbella?<\/strong> Another simple <span id=\"urn:enhancement-e89c7dd3\" class=\"textannotation disambiguated wl-thing\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/process_computing\">process<\/span>: you just need to update the <span id=\"urn:enhancement-286d3957\" class=\"textannotation disambiguated wl-thing\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/source_code\">code<\/span>, then run the following <span id=\"urn:enhancement-91443d96\" class=\"textannotation disambiguated wl-thing\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/command_computing\">command<\/span>:<\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">nim project deploy ProjectName<\/code><\/span><\/pre>\n\n\n<h3 class=\"wp-block-heading\" id=\"h-deploying-to-the-cloud-with-aws\">Deploying to the cloud with AWS<\/h3>\n\n\n\n<ol class=\"wp-block-list\"><li>Choose AWS S3 in Service to begin creating an S3 bucket<\/li><li>Click on the \u201cCreate Bucket\u201d button and add the bucket\u2019s name and region<\/li><li>Add relevant files and folders to the S3 bucket<\/li><li>After the files have completed uploading, click on \u201cStatic Website Hosting\u201d<\/li><li>Paste the Endpoint into your browser<\/li><\/ol>\n\n\n\n<p><strong>Code updating in <span id=\"urn:enhancement-394a5e8d\" class=\"textannotation disambiguated wl-creative-work\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/amazon_web_services\">AWS<\/span>? <\/strong>A little more <span id=\"urn:enhancement-fd3f899f\" class=\"textannotation disambiguated wl-thing\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/cost\">time consuming<\/span>:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>&nbsp;Start from scratch and rebuild the code<\/li><li>&nbsp;Empty the bucket of all files before uploading your new version<\/li><li>Double-check that the static web host tab includes index.html<\/li><\/ul>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-so-what-does-that-mean-for-me\">So, what does that mean for me?<\/h2>\n\n\n\n<p>Nimbella has made developing a <span id=\"urn:enhancement-d4fb854d\" class=\"textannotation disambiguated wl-thing\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/state_computer_science\">stateful<\/span> <span id=\"urn:enhancement-2ef48dd4\" class=\"textannotation disambiguated wl-thing\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/cloud_computing\">cloud<\/span> <span id=\"urn:enhancement-edaa551e\" class=\"textannotation disambiguated wl-thing\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/mobile_app\">app<\/span> a lot easier by minimising architectural complexity and offering ready-to-go <span id=\"urn:enhancement-4fc6c572\" class=\"textannotation disambiguated wl-thing\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/attribute-value_pair\">key-value<\/span> and object storage as part of its <span id=\"urn:enhancement-3047cf2c\" class=\"textannotation disambiguated wl-thing\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/system\">system<\/span>. This frees you and the <span id=\"urn:enhancement-da24997a\" class=\"textannotation disambiguated wl-thing\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/software_developer\">developer<\/span> up to centre your attention on code logic instead.<\/p>\n\n\n\n<p>If you already have a <span id=\"urn:enhancement-7cff2222\" class=\"textannotation disambiguated wl-thing\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/state_computer_science\">stateful<\/span> <span id=\"urn:enhancement-8686142f\" class=\"textannotation disambiguated wl-thing\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/mobile_app\">app<\/span> that you would like to deploy to the <span id=\"urn:enhancement-ff617ddb\" class=\"textannotation disambiguated wl-thing\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/cloud_computing\">cloud<\/span>, you can try Nimbella out for free. <a class=\"ek-link ek-link ek-link\" rel=\"noreferrer noopener\" href=\"https:\/\/nimbella.com\/slack\" target=\"_blank\">Nimbella also has a Community Slack channel<\/a> where you can get your questions answered and share your <span id=\"urn:enhancement-850c9f06\" class=\"textannotation disambiguated wl-thing\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/project\">project<\/span> with a <span id=\"urn:enhancement-f11f1967\" class=\"textannotation disambiguated wl-thing\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/community\">community<\/span> of fellow-enthusiasts.<\/p>\n\n\n\n<p>To see the <span id=\"urn:enhancement-e680bc57\" class=\"textannotation disambiguated wl-thing\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/source_code\">code<\/span> used for this article, you can click <a rel=\"noreferrer noopener\" class=\"ek-link ek-link ek-link\" href=\"https:\/\/github.com\/JamieDawson\/Dog_or_cat\/tree\/master\/picture\" target=\"_blank\">here for Nimbella<\/a> or <a rel=\"noreferrer noopener\" class=\"ek-link ek-link\" href=\"https:\/\/github.com\/JamieDawson\/dog_or_cat_for_aws\" target=\"_blank\">here for the Amazon Web Services version.<\/a><\/p>\n\n\n","protected":false},"excerpt":{"rendered":"<p>Building serverless cloud applications? There&#8217;s a simple way to do that! This article compares the user experience of Nimbella and Amazon Web Services when creating a voting app, from a developer&#8216;s point of view. What sort of Stateful Serverless Cloud App am I going to build? For the purposes of writing this article, I built&#8230; <a class=\"more-link\" href=\"https:\/\/www.codemotion.com\/magazine\/devops\/cloud\/cloud-nimbella-aws\/\">Read more<\/a><\/p>\n","protected":false},"author":108,"featured_media":12318,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_editorskit_title_hidden":false,"_editorskit_reading_time":5,"_editorskit_is_block_options_detached":false,"_editorskit_block_options_position":"{}","_uag_custom_page_level_css":"","_genesis_hide_title":false,"_genesis_hide_breadcrumbs":false,"_genesis_hide_singular_image":false,"_genesis_hide_footer_widgets":false,"_genesis_custom_body_class":"","_genesis_custom_post_class":"","_genesis_layout":"","footnotes":""},"categories":[5244],"tags":[71],"collections":[],"class_list":{"0":"post-12196","1":"post","2":"type-post","3":"status-publish","4":"format-standard","5":"has-post-thumbnail","7":"category-cloud","8":"tag-aws","9":"entry"},"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v26.9 (Yoast SEO v27.5) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>Building a Stateful Cloud App on Nimbella or AWS - Codemotion Magazine<\/title>\n<meta name=\"description\" content=\"Building a stateful Cloud App; here&#039;s a comparison of the user experience in Nimbella and AWS, with a handy How-to guide.\" \/>\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.codemotion.com\/magazine\/devops\/cloud\/cloud-nimbella-aws\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Building a Stateful Cloud App on Nimbella or AWS\" \/>\n<meta property=\"og:description\" content=\"Building a stateful Cloud App; here&#039;s a comparison of the user experience in Nimbella and AWS, with a handy How-to guide.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.codemotion.com\/magazine\/devops\/cloud\/cloud-nimbella-aws\/\" \/>\n<meta property=\"og:site_name\" content=\"Codemotion Magazine\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/Codemotion.Italy\/\" \/>\n<meta property=\"article:published_time\" content=\"2020-11-27T11:56:40+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2022-01-05T19:06:46+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2020\/11\/Cloud-Computing-.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"1200\" \/>\n\t<meta property=\"og:image:height\" content=\"675\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Michele Sciabarra\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@CodemotionIT\" \/>\n<meta name=\"twitter:site\" content=\"@CodemotionIT\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Michele Sciabarra\" \/>\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:\\\/\\\/www.codemotion.com\\\/magazine\\\/devops\\\/cloud\\\/cloud-nimbella-aws\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/devops\\\/cloud\\\/cloud-nimbella-aws\\\/\"},\"author\":{\"name\":\"Michele Sciabarra\",\"@id\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/#\\\/schema\\\/person\\\/33dc64bc338d201f84fad786a26c49a7\"},\"headline\":\"Building a Stateful Cloud App on Nimbella or AWS\",\"datePublished\":\"2020-11-27T11:56:40+00:00\",\"dateModified\":\"2022-01-05T19:06:46+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/devops\\\/cloud\\\/cloud-nimbella-aws\\\/\"},\"wordCount\":1191,\"publisher\":{\"@id\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/devops\\\/cloud\\\/cloud-nimbella-aws\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/wp-content\\\/uploads\\\/2020\\\/11\\\/Cloud-Computing-.jpg\",\"keywords\":[\"AWS\"],\"articleSection\":[\"Cloud\"],\"inLanguage\":\"en-US\"},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/devops\\\/cloud\\\/cloud-nimbella-aws\\\/\",\"url\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/devops\\\/cloud\\\/cloud-nimbella-aws\\\/\",\"name\":\"Building a Stateful Cloud App on Nimbella or AWS - Codemotion Magazine\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/devops\\\/cloud\\\/cloud-nimbella-aws\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/devops\\\/cloud\\\/cloud-nimbella-aws\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/wp-content\\\/uploads\\\/2020\\\/11\\\/Cloud-Computing-.jpg\",\"datePublished\":\"2020-11-27T11:56:40+00:00\",\"dateModified\":\"2022-01-05T19:06:46+00:00\",\"description\":\"Building a stateful Cloud App; here's a comparison of the user experience in Nimbella and AWS, with a handy How-to guide.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/devops\\\/cloud\\\/cloud-nimbella-aws\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/devops\\\/cloud\\\/cloud-nimbella-aws\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/devops\\\/cloud\\\/cloud-nimbella-aws\\\/#primaryimage\",\"url\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/wp-content\\\/uploads\\\/2020\\\/11\\\/Cloud-Computing-.jpg\",\"contentUrl\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/wp-content\\\/uploads\\\/2020\\\/11\\\/Cloud-Computing-.jpg\",\"width\":1200,\"height\":675,\"caption\":\"Cloud Computing\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/devops\\\/cloud\\\/cloud-nimbella-aws\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"DevOps\",\"item\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/devops\\\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Cloud\",\"item\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/devops\\\/cloud\\\/\"},{\"@type\":\"ListItem\",\"position\":4,\"name\":\"Building a Stateful Cloud App on Nimbella or AWS\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/#website\",\"url\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/\",\"name\":\"Codemotion Magazine\",\"description\":\"We code the future. Together\",\"publisher\":{\"@id\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/#organization\",\"name\":\"Codemotion\",\"url\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/wp-content\\\/uploads\\\/2019\\\/11\\\/codemotionlogo.png\",\"contentUrl\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/wp-content\\\/uploads\\\/2019\\\/11\\\/codemotionlogo.png\",\"width\":225,\"height\":225,\"caption\":\"Codemotion\"},\"image\":{\"@id\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/#\\\/schema\\\/logo\\\/image\\\/\"},\"sameAs\":[\"https:\\\/\\\/www.facebook.com\\\/Codemotion.Italy\\\/\",\"https:\\\/\\\/x.com\\\/CodemotionIT\"]},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/#\\\/schema\\\/person\\\/33dc64bc338d201f84fad786a26c49a7\",\"name\":\"Michele Sciabarra\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/11c9a9613504cf98fd6a63fa1562f07dbb128c45bccb1b4ca2bc0ec30ed1f6e9?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/11c9a9613504cf98fd6a63fa1562f07dbb128c45bccb1b4ca2bc0ec30ed1f6e9?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/11c9a9613504cf98fd6a63fa1562f07dbb128c45bccb1b4ca2bc0ec30ed1f6e9?s=96&d=mm&r=g\",\"caption\":\"Michele Sciabarra\"},\"sameAs\":[\"https:\\\/\\\/sciabarra.com\\\/\"],\"url\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/author\\\/michele-sciabarra\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Building a Stateful Cloud App on Nimbella or AWS - Codemotion Magazine","description":"Building a stateful Cloud App; here's a comparison of the user experience in Nimbella and AWS, with a handy How-to guide.","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.codemotion.com\/magazine\/devops\/cloud\/cloud-nimbella-aws\/","og_locale":"en_US","og_type":"article","og_title":"Building a Stateful Cloud App on Nimbella or AWS","og_description":"Building a stateful Cloud App; here's a comparison of the user experience in Nimbella and AWS, with a handy How-to guide.","og_url":"https:\/\/www.codemotion.com\/magazine\/devops\/cloud\/cloud-nimbella-aws\/","og_site_name":"Codemotion Magazine","article_publisher":"https:\/\/www.facebook.com\/Codemotion.Italy\/","article_published_time":"2020-11-27T11:56:40+00:00","article_modified_time":"2022-01-05T19:06:46+00:00","og_image":[{"width":1200,"height":675,"url":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2020\/11\/Cloud-Computing-.jpg","type":"image\/jpeg"}],"author":"Michele Sciabarra","twitter_card":"summary_large_image","twitter_creator":"@CodemotionIT","twitter_site":"@CodemotionIT","twitter_misc":{"Written by":"Michele Sciabarra","Est. reading time":"6 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.codemotion.com\/magazine\/devops\/cloud\/cloud-nimbella-aws\/#article","isPartOf":{"@id":"https:\/\/www.codemotion.com\/magazine\/devops\/cloud\/cloud-nimbella-aws\/"},"author":{"name":"Michele Sciabarra","@id":"https:\/\/www.codemotion.com\/magazine\/#\/schema\/person\/33dc64bc338d201f84fad786a26c49a7"},"headline":"Building a Stateful Cloud App on Nimbella or AWS","datePublished":"2020-11-27T11:56:40+00:00","dateModified":"2022-01-05T19:06:46+00:00","mainEntityOfPage":{"@id":"https:\/\/www.codemotion.com\/magazine\/devops\/cloud\/cloud-nimbella-aws\/"},"wordCount":1191,"publisher":{"@id":"https:\/\/www.codemotion.com\/magazine\/#organization"},"image":{"@id":"https:\/\/www.codemotion.com\/magazine\/devops\/cloud\/cloud-nimbella-aws\/#primaryimage"},"thumbnailUrl":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2020\/11\/Cloud-Computing-.jpg","keywords":["AWS"],"articleSection":["Cloud"],"inLanguage":"en-US"},{"@type":"WebPage","@id":"https:\/\/www.codemotion.com\/magazine\/devops\/cloud\/cloud-nimbella-aws\/","url":"https:\/\/www.codemotion.com\/magazine\/devops\/cloud\/cloud-nimbella-aws\/","name":"Building a Stateful Cloud App on Nimbella or AWS - Codemotion Magazine","isPartOf":{"@id":"https:\/\/www.codemotion.com\/magazine\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.codemotion.com\/magazine\/devops\/cloud\/cloud-nimbella-aws\/#primaryimage"},"image":{"@id":"https:\/\/www.codemotion.com\/magazine\/devops\/cloud\/cloud-nimbella-aws\/#primaryimage"},"thumbnailUrl":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2020\/11\/Cloud-Computing-.jpg","datePublished":"2020-11-27T11:56:40+00:00","dateModified":"2022-01-05T19:06:46+00:00","description":"Building a stateful Cloud App; here's a comparison of the user experience in Nimbella and AWS, with a handy How-to guide.","breadcrumb":{"@id":"https:\/\/www.codemotion.com\/magazine\/devops\/cloud\/cloud-nimbella-aws\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.codemotion.com\/magazine\/devops\/cloud\/cloud-nimbella-aws\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.codemotion.com\/magazine\/devops\/cloud\/cloud-nimbella-aws\/#primaryimage","url":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2020\/11\/Cloud-Computing-.jpg","contentUrl":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2020\/11\/Cloud-Computing-.jpg","width":1200,"height":675,"caption":"Cloud Computing"},{"@type":"BreadcrumbList","@id":"https:\/\/www.codemotion.com\/magazine\/devops\/cloud\/cloud-nimbella-aws\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.codemotion.com\/magazine\/"},{"@type":"ListItem","position":2,"name":"DevOps","item":"https:\/\/www.codemotion.com\/magazine\/devops\/"},{"@type":"ListItem","position":3,"name":"Cloud","item":"https:\/\/www.codemotion.com\/magazine\/devops\/cloud\/"},{"@type":"ListItem","position":4,"name":"Building a Stateful Cloud App on Nimbella or AWS"}]},{"@type":"WebSite","@id":"https:\/\/www.codemotion.com\/magazine\/#website","url":"https:\/\/www.codemotion.com\/magazine\/","name":"Codemotion Magazine","description":"We code the future. Together","publisher":{"@id":"https:\/\/www.codemotion.com\/magazine\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.codemotion.com\/magazine\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/www.codemotion.com\/magazine\/#organization","name":"Codemotion","url":"https:\/\/www.codemotion.com\/magazine\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.codemotion.com\/magazine\/#\/schema\/logo\/image\/","url":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/11\/codemotionlogo.png","contentUrl":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/11\/codemotionlogo.png","width":225,"height":225,"caption":"Codemotion"},"image":{"@id":"https:\/\/www.codemotion.com\/magazine\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/Codemotion.Italy\/","https:\/\/x.com\/CodemotionIT"]},{"@type":"Person","@id":"https:\/\/www.codemotion.com\/magazine\/#\/schema\/person\/33dc64bc338d201f84fad786a26c49a7","name":"Michele Sciabarra","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/11c9a9613504cf98fd6a63fa1562f07dbb128c45bccb1b4ca2bc0ec30ed1f6e9?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/11c9a9613504cf98fd6a63fa1562f07dbb128c45bccb1b4ca2bc0ec30ed1f6e9?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/11c9a9613504cf98fd6a63fa1562f07dbb128c45bccb1b4ca2bc0ec30ed1f6e9?s=96&d=mm&r=g","caption":"Michele Sciabarra"},"sameAs":["https:\/\/sciabarra.com\/"],"url":"https:\/\/www.codemotion.com\/magazine\/author\/michele-sciabarra\/"}]}},"featured_image_src":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2020\/11\/Cloud-Computing--600x400.jpg","featured_image_src_square":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2020\/11\/Cloud-Computing--600x600.jpg","author_info":{"display_name":"Michele Sciabarra","author_link":"https:\/\/www.codemotion.com\/magazine\/author\/michele-sciabarra\/"},"uagb_featured_image_src":{"full":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2020\/11\/Cloud-Computing-.jpg",1200,675,false],"thumbnail":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2020\/11\/Cloud-Computing--150x150.jpg",150,150,true],"medium":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2020\/11\/Cloud-Computing--300x169.jpg",300,169,true],"medium_large":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2020\/11\/Cloud-Computing--768x432.jpg",768,432,true],"large":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2020\/11\/Cloud-Computing--1024x576.jpg",1024,576,true],"1536x1536":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2020\/11\/Cloud-Computing-.jpg",1200,675,false],"2048x2048":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2020\/11\/Cloud-Computing-.jpg",1200,675,false],"small-home-featured":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2020\/11\/Cloud-Computing-.jpg",100,56,false],"sidebar-featured":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2020\/11\/Cloud-Computing--180x128.jpg",180,128,true],"genesis-singular-images":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2020\/11\/Cloud-Computing--896x504.jpg",896,504,true],"archive-featured":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2020\/11\/Cloud-Computing--400x225.jpg",400,225,true],"gb-block-post-grid-landscape":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2020\/11\/Cloud-Computing--600x400.jpg",600,400,true],"gb-block-post-grid-square":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2020\/11\/Cloud-Computing--600x600.jpg",600,600,true]},"uagb_author_info":{"display_name":"Michele Sciabarra","author_link":"https:\/\/www.codemotion.com\/magazine\/author\/michele-sciabarra\/"},"uagb_comment_info":0,"uagb_excerpt":"Building serverless cloud applications? There&#8217;s a simple way to do that! This article compares the user experience of Nimbella and Amazon Web Services when creating a voting app, from a developer&#8216;s point of view. What sort of Stateful Serverless Cloud App am I going to build? For the purposes of writing this article, I built&#8230;&hellip;","lang":"en","_links":{"self":[{"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/posts\/12196","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/users\/108"}],"replies":[{"embeddable":true,"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/comments?post=12196"}],"version-history":[{"count":10,"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/posts\/12196\/revisions"}],"predecessor-version":[{"id":12391,"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/posts\/12196\/revisions\/12391"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/media\/12318"}],"wp:attachment":[{"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/media?parent=12196"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/categories?post=12196"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/tags?post=12196"},{"taxonomy":"collections","embeddable":true,"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/collections?post=12196"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}