{"id":2339,"date":"2020-01-08T11:25:20","date_gmt":"2020-01-08T10:25:20","guid":{"rendered":"https:\/\/www.codemotion.com\/magazine\/uncategorized\/azure-functions-azure-durable-functions\/"},"modified":"2021-12-23T14:25:02","modified_gmt":"2021-12-23T13:25:02","slug":"azure-functions-azure-durable-functions","status":"publish","type":"post","link":"https:\/\/www.codemotion.com\/magazine\/devops\/cloud\/azure-functions-azure-durable-functions\/","title":{"rendered":"Azure functions &#038; Azure Durable functions"},"content":{"rendered":"<p>In the Serverless world, Azure Functions are a complete solution to create a small piece of code that runs without worrying about preparing a whole infrastructure to host it. In this article, we will talk about <strong><span id=\"urn:enhancement-5ac556e1\" class=\"textannotation disambiguated wl-other\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/microsoft_azure\">Microsoft Azure<\/span> Functions<\/strong> and <strong><span id=\"urn:enhancement-5b27bb17\" class=\"textannotation disambiguated wl-other\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/microsoft_azure\">Microsoft Azure<\/span> Durable Functions<\/strong> &#8211; that is an extension to it.<\/p>\n<h2 id=\"b4nd3\">What are Microsoft Azure Functions?<\/h2>\n<p>The term <strong>serverless computing<\/strong> indicates an evolution of a paradigm named Platform as a Service (PasS). Generally, cloud providers run and manage servers which are dynamically allocated resources to executed code. Often, serverless computing is also referred to as <strong>Functions as a Service (FasS)<\/strong>.<\/p>\n<p>Azure Functions is the service in <span id=\"urn:enhancement-c3e7536\" class=\"textannotation disambiguated wl-other\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/microsoft_azure\">Microsoft Azure<\/span> that allows users to create an event-driven FasS. As <span id=\"urn:enhancement-49cd262\" class=\"textannotation disambiguated wl-thing\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/software_developer\">developers<\/span>, we can create an Azure Function using a programming language of our choice from many available.<\/p>\n<p>Also, Azure Functions have a straightforward pricing model:<\/p>\n<ul>\n<li><strong>Consumption plan<\/strong>: we only pay for the time that code runs;<\/li>\n<li><strong><span id=\"urn:enhancement-578b8aa5\" class=\"textannotation disambiguated wl-other\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/mobile_app\">App<\/span> Service plan<\/strong>: we only pay for the <span id=\"urn:enhancement-4f9d8d31\" class=\"textannotation disambiguated wl-other\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/mobile_app\">App<\/span> Service\u2019s monthly fee;<\/li>\n<li><strong>Premium plan<\/strong>: right now in preview, promising maximum performances.<\/li>\n<\/ul>\n<p>Depending on what pricing model we choose, we can quickly scale our functions using an event-driven or manual mechanism.<\/p>\n<p>Let&#8217;s see the first example of Azure Function. First of all, we need to have an active <span id=\"urn:enhancement-49313645\" class=\"textannotation disambiguated wl-other\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/microsoft_azure\">Microsoft Azure<\/span> subscription. We can register for a free account <u><a href=\"https:\/\/azure.microsoft.com\/en-us\/free\/\">here<\/a><\/u>. Then, we can log into our account and select &#8220;Create a resource&#8221; button. Next, let&#8217;s follow these steps: type &#8220;Functions&#8221; inside the search box, select &#8220;Functions <span id=\"urn:enhancement-8e91260a\" class=\"textannotation disambiguated wl-other\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/mobile_app\">App<\/span>&#8221; and press the create button.<\/p>\n<p>For the Function <span id=\"urn:enhancement-594015c1\" class=\"textannotation disambiguated wl-other\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/mobile_app\">App<\/span>, we need to specify the following fields:<\/p>\n<ul>\n<li>an app name;<\/li>\n<li>a resource group;<\/li>\n<li>an <span id=\"urn:enhancement-f1da2fec\" class=\"textannotation disambiguated wl-thing\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/operating_system\">OS<\/span>;<\/li>\n<li>a <span id=\"urn:enhancement-edabf7a0\" class=\"textannotation disambiguated wl-thing\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/web_hosting_service\">hosting<\/span> plan type;<\/li>\n<li>allocation type;<\/li>\n<li>a runtime stack;<\/li>\n<li>Storage.<\/li>\n<\/ul>\n<p>Once created, we can go to the resource, and we can see a window that shows us different types of triggers for our function, like in the following image:<\/p>\n<figure class=\"image regular \"><picture><source srcset=\"https:\/\/codemotion.com\/magazine\/wp-content\/uploads\/2020\/01\/1_69000dcb2b82db9007893d9c3467b6d9_800.png 1x\" media=\"(max-width: 768px)\" \/><source srcset=\"https:\/\/codemotion.com\/magazine\/wp-content\/uploads\/2020\/01\/1_69000dcb2b82db9007893d9c3467b6d9_800.png 1x\" media=\"(min-width: 769px)\" \/><img decoding=\"async\" src=\"https:\/\/codemotion.com\/magazine\/wp-content\/uploads\/2020\/01\/1_69000dcb2b82db9007893d9c3467b6d9_800.png\" alt=\"\" \/><\/picture><\/figure>\n<p>In this page, we can add a new function choosing what development environment we want to use and what type of trigger we need. A <strong>trigger <\/strong>is a mechanism that starts our function execution. There are many triggers available such as <span id=\"urn:enhancement-1896f43d\" class=\"textannotation disambiguated wl-other\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/hypertext_transfer_protocol\">HTTP<\/span>, Timer, Azure Queue Storage, Azure Service Bus, Azure Event Hub, Azure Blob Storage, and so on.<\/p>\n<p>Let&#8217;s choose a simple one for this example, an <span id=\"urn:enhancement-784f2834\" class=\"textannotation disambiguated wl-other\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/hypertext_transfer_protocol\">HTTP<\/span> Trigger. First, we type a name and select the authentication type (i.e.: &#8220;Function&#8221;). Then Microsoft Azure will generate for us the function code and open the editor window:<\/p>\n<figure class=\"image regular \"><picture><source srcset=\"https:\/\/codemotion.com\/magazine\/wp-content\/uploads\/2020\/01\/2_23f55478cd43eb050345a0b10d8a597b_800.png 1x\" media=\"(max-width: 768px)\" \/><source srcset=\"https:\/\/codemotion.com\/magazine\/wp-content\/uploads\/2020\/01\/2_23f55478cd43eb050345a0b10d8a597b_800.png 1x\" media=\"(min-width: 769px)\" \/><img decoding=\"async\" src=\"https:\/\/codemotion.com\/magazine\/wp-content\/uploads\/2020\/01\/2_23f55478cd43eb050345a0b10d8a597b_800.png\" alt=\"\" \/><\/picture><\/figure>\n<p>From this point onwards, we can edit the function code as we need to and, in the end, we can run it pressing the button <strong>Run<\/strong>. Once running, we can use the test console on the left side to try calls and see the expected output.<\/p>\n<figure class=\"image regular \"><picture><source srcset=\"https:\/\/codemotion.com\/magazine\/wp-content\/uploads\/2020\/01\/3_91ccc33f0ea6b166ff1b169700013c3a_800.png 1x\" media=\"(max-width: 768px)\" \/><source srcset=\"https:\/\/codemotion.com\/magazine\/wp-content\/uploads\/2020\/01\/3_91ccc33f0ea6b166ff1b169700013c3a_800.png 1x\" media=\"(min-width: 769px)\" \/><img decoding=\"async\" src=\"https:\/\/codemotion.com\/magazine\/wp-content\/uploads\/2020\/01\/3_91ccc33f0ea6b166ff1b169700013c3a_800.png\" alt=\"\" \/><\/picture><\/figure>\n<p>This brief overview of Azure Functions gives an indication of how powerful they are: they offer a practical way to create lots of functions that will work on <em>boring<\/em> tasks that would need a lot of time just to prepare the infrastructure. The next section looks at how to use Microsoft Azure Functions such as <strong>orchestration<\/strong> to accomplish advanced tasks.<\/p>\n<h2 id=\"7jhkg\">What are Microsoft Azure Durable Functions?<\/h2>\n<p>In some cases, where there&#8217;s a workflow involved that requires some stored state, we need to involve more complex scenarios . Unfortunately, Azure Functions are stateless, so Microsoft Azure Durable Functions came into play to cover such situations: in fact, this is an extension that allows you to write stateful functions that manage state, checkpoints, and restarts.<\/p>\n<p>Since Durable functions offer a way to orchestrate other functions, they can help to create workflows in which status is saved automatically using storage. Oh, and they have a history too!<\/p>\n<p>These kinds of functions can be used for the following patterns:<\/p>\n<ul>\n<li><strong>Chaining<\/strong>: to chain a sequence of functions in a specific order;<\/li>\n<li><strong>Fan-Out\/Fan-In<\/strong>: to execute multiple long-running tasks without a particular order and without waiting for them to complete;<\/li>\n<li><strong>Async <span id=\"urn:enhancement-126663b0\" class=\"textannotation disambiguated wl-other\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/hypertext_transfer_protocol\">HTTP<\/span> <span id=\"urn:enhancement-c7df0be6\" class=\"textannotation disambiguated wl-other\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/application_programming_interface\">APIs<\/span><\/strong>: usually implemented for long-running jobs;<\/li>\n<li><strong>Monitoring<\/strong>: to monitor <span id=\"urn:enhancement-44cc4990\" class=\"textannotation disambiguated wl-thing\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/process_computing\">processes<\/span> or operations;<\/li>\n<li><strong>Human interaction<\/strong>: to create a <span id=\"urn:enhancement-9eba86bc\" class=\"textannotation disambiguated wl-thing\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/process_computing\">process<\/span> that needs human intervention to be completed.<\/li>\n<\/ul>\n<p>From the point of view of pricing, the durable functions extension follows the same pricing model as Azure functions (more info <u><a href=\"https:\/\/azure.microsoft.com\/it-it\/pricing\/details\/functions\/\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">here<\/a><\/u>).<\/p>\n<p>Let&#8217;s look at an example of Azure Durable function using the<strong> Fan-Out\/Fan-In pattern<\/strong>. We will use <strong><span id=\"urn:enhancement-dbbca596\" class=\"textannotation disambiguated wl-creative-work\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/microsoft_visual_studio\">Visual Studio<\/span> Code<\/strong> and its extension for Azure Functions (you can download this from <u><a href=\"https:\/\/github.com\/Microsoft\/vscode-azurefunctions\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">GitHub<\/a><\/u>). Once installed, pressing F1 inside VS code will open the command palette where we can <span id=\"urn:enhancement-23a9d269\" class=\"textannotation disambiguated wl-other\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/search_engine_technology\">search<\/span> for &#8220;functions&#8221; and select &#8220;Azure functions: create new project&#8221;, then choose a directory and a programming language. In this situation, we select:<\/p>\n<ul>\n<li>&#8220;DurableFunctionsOrchestration&#8221; as a template<\/li>\n<li>a name and a namespace for our function;<\/li>\n<li>an Azure Web Jobs Storage to help run our function.<\/li>\n<\/ul>\n<p>We also need to install <strong>Azure Functions Core Tools<\/strong> as explained <u><a href=\"https:\/\/docs.microsoft.com\/en-us\/azure\/azure-functions\/functions-run-local#install-the-azure-functions-core-tools\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">here<\/a><\/u>.<\/p>\n<p>Once the project functionhas been created, we have a first Durable Function that has three <span id=\"urn:enhancement-f64e01ed\" class=\"textannotation disambiguated wl-other\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/method_computer_programming\">methods<\/span>:<\/p>\n<ol>\n<li>RunOrchestrator<\/li>\n<li>SayHello<\/li>\n<li>HttpStart<\/li>\n<\/ol>\n<p>Each <span id=\"urn:enhancement-6260c1d9\" class=\"textannotation disambiguated wl-other\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/method_computer_programming\">method<\/span> has an Attribute in its parameters signature:<\/p>\n<ul>\n<li><strong>OrchestrationTrigger<\/strong> (1) does the orchestration between different functions. It launches and retrieves data;<\/li>\n<li><strong>ActivityTrigger<\/strong> (2) represents the functions called by the orchestrator and handles that work.<\/li>\n<li><strong>OrchestrationClient<\/strong> (3) starts or ends the functions and let us query their status.<\/li>\n<\/ul>\n<p>Let&#8217;s replace the code in our RunOrchestrator <span id=\"urn:enhancement-41fc4852\" class=\"textannotation disambiguated wl-other\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/method_computer_programming\">method<\/span> to implement the Fan-Out pattern with the snippet below:<\/p>\n<pre>[FunctionName(\"CodemotionDurableFunction\")]<br \/>public static async Task&lt;List&lt;string&gt;&gt; RunOrchestrator(<br \/>   [OrchestrationTrigger] DurableOrchestrationContext context)<br \/>{<br \/>   var inputs = new List&lt;string&gt;() { \"Tokyo\", \"Seattle\", \"London\" };<br \/><br \/>    \/\/ Fan-out<br \/>    var tasks = new Task&lt;string&gt;[inputs.Count];<br \/>    for(int i = 0; i &lt; inputs.Count; i++)<br \/>    {<br \/>        tasks[i] = context.CallActivityAsync&lt;string&gt;(<br \/>\"CodemotionDurableFunction_Hello\", inputs[i]);<br \/>    }<br \/><br \/>    await Task.WhenAll(tasks);<br \/> <br \/>    return tasks.Select(t =&gt; t.Result).ToList();<br \/>}<\/pre>\n<p>Before running, let&#8217;s have a look at the code. The <span id=\"urn:enhancement-671204a8\" class=\"textannotation disambiguated wl-other\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/method_computer_programming\">method<\/span> <strong>HttpStart<\/strong> will start our orchestrator using the name in the <strong>FunctionName<\/strong> attribute (the previous snippet is named <em>CodemotionDurableFunction<\/em>).<\/p>\n<p>The <span id=\"urn:enhancement-37ac4780\" class=\"textannotation disambiguated wl-other\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/method_computer_programming\">method<\/span> <strong>SayHello<\/strong> prints out a welcome string based on the input parameter. Finally, <strong>RunOrchestrator<\/strong> is where the Fan-Out happens. First, we create a loop based on the input parameters, and inside the loop, consecutively call in the function SayHello with a specific input.<\/p>\n<p>After the loop, an await Task.WhenAll(tasks) awaits the completion of all tasks.<\/p>\n<p>In the latest <span id=\"urn:enhancement-617d98a4\" class=\"textannotation disambiguated wl-other\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/statement_computer_science\">statement<\/span>, we retrieve the outputs from each task.<\/p>\n<p>To run the function in <strong>VS Code<\/strong>, we could press F5 on the keyboard to start the debugger. Once started, the console shows us an endpoint at which to start our orchestration:<\/p>\n<figure class=\"image regular \"><picture><source srcset=\"https:\/\/codemotion.com\/magazine\/wp-content\/uploads\/2020\/01\/4_b2ea128f7233051e09926037c81f6af7_800.png 1x\" media=\"(max-width: 768px)\" \/><source srcset=\"https:\/\/codemotion.com\/magazine\/wp-content\/uploads\/2020\/01\/4_b2ea128f7233051e09926037c81f6af7_800.png 1x\" media=\"(min-width: 769px)\" \/><img decoding=\"async\" src=\"https:\/\/codemotion.com\/magazine\/wp-content\/uploads\/2020\/01\/4_b2ea128f7233051e09926037c81f6af7_800.png\" alt=\"\" \/><\/picture><\/figure>\n<p>Copy and paste the <span id=\"urn:enhancement-fe105986\" class=\"textannotation disambiguated wl-other\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/uniform_resource_locator\">URL<\/span> into the browser. The call responds with a payload with many fields: we need to use <strong>statusQueryGetUri<\/strong> to check the status and get the results.\u00a0 The output from this call looks like this:<\/p>\n<pre>[\"Hello Tokyo!\",\"Hello Seattle!\",\"Hello London!\"]<\/pre>\n<h2 id=\"fkr4r\">Conclusion<\/h2>\n<p>As we have seen, Azure Durable Functions is a potent tool that offers us the opportunity to create complex workflows for any task. This article only offers a short introduction, so if this sounds appealing we advise checking out the complete documentation <u><a href=\"https:\/\/docs.microsoft.com\/en-us\/azure\/azure-functions\/functions-overview\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">here<\/a><\/u>.<\/p>\n<p><!-- strchf script --><script>        if(window.strchfSettings === undefined) window.strchfSettings = {};    window.strchfSettings.stats = {url: \"https:\/\/codemotion.storychief.io\/azure-functions-azure-durable-functions?id=1183545400&type=2\",title: \"Azure functions &amp; Azure Durable functions\",id: \"66543c6c-96d5-4792-a44b-49339654b7a1\"};            (function(d, s, id) {      var js, sjs = d.getElementsByTagName(s)[0];      if (d.getElementById(id)) {window.strchf.update(); return;}      js = d.createElement(s); js.id = id;      js.src = \"https:\/\/d37oebn0w9ir6a.cloudfront.net\/scripts\/v0\/strchf.js\";      js.async = true;      sjs.parentNode.insertBefore(js, sjs);    }(document, 'script', 'storychief-jssdk'))    <\/script><!-- End strchf script --><\/p>\n\n\n\n\n<p class=\" eplus-hQz0Si\"><\/p>\n","protected":false},"excerpt":{"rendered":"<p>In this article, we will talk about Microsoft Azure Functions and Microsoft Azure Durable Functions &#8211; that is an extension of them.<\/p>\n","protected":false},"author":9,"featured_media":2340,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_editorskit_title_hidden":false,"_editorskit_reading_time":4,"_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":[75],"collections":[],"class_list":{"0":"post-2339","1":"post","2":"type-post","3":"status-publish","4":"format-standard","5":"has-post-thumbnail","7":"category-cloud","8":"tag-serverless","9":"entry"},"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v26.9 (Yoast SEO v26.9) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>Azure functions &amp; Azure Durable functions - Codemotion Magazine<\/title>\n<meta name=\"description\" content=\"An introduction to Microsoft Azure Functions and the extension, Microsoft Azure Durable Functions.\" \/>\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\/azure-functions-azure-durable-functions\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Azure functions &amp; Azure Durable functions\" \/>\n<meta property=\"og:description\" content=\"An introduction to Microsoft Azure Functions and the extension, Microsoft Azure Durable Functions.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.codemotion.com\/magazine\/devops\/cloud\/azure-functions-azure-durable-functions\/\" \/>\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-01-08T10:25:20+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2021-12-23T13:25:02+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2020\/01\/sky-1867902_1280_c3e50973dfdb83f43870c1d60bc1e973_2000.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"1013\" \/>\n\t<meta property=\"og:image:height\" content=\"675\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Antonio Turibbio Liccardi\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@turibbio\" \/>\n<meta name=\"twitter:site\" content=\"@CodemotionIT\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Antonio Turibbio Liccardi\" \/>\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\/azure-functions-azure-durable-functions\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.codemotion.com\/magazine\/devops\/cloud\/azure-functions-azure-durable-functions\/\"},\"author\":{\"name\":\"Antonio Turibbio Liccardi\",\"@id\":\"https:\/\/www.codemotion.com\/magazine\/#\/schema\/person\/7e8f9aade09a4e3ba0ba01c0eaa1a0a0\"},\"headline\":\"Azure functions &#038; Azure Durable functions\",\"datePublished\":\"2020-01-08T10:25:20+00:00\",\"dateModified\":\"2021-12-23T13:25:02+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.codemotion.com\/magazine\/devops\/cloud\/azure-functions-azure-durable-functions\/\"},\"wordCount\":1099,\"publisher\":{\"@id\":\"https:\/\/www.codemotion.com\/magazine\/#organization\"},\"image\":{\"@id\":\"https:\/\/www.codemotion.com\/magazine\/devops\/cloud\/azure-functions-azure-durable-functions\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2020\/01\/sky-1867902_1280_c3e50973dfdb83f43870c1d60bc1e973_2000.jpg\",\"keywords\":[\"Serverless\"],\"articleSection\":[\"Cloud\"],\"inLanguage\":\"en-US\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.codemotion.com\/magazine\/devops\/cloud\/azure-functions-azure-durable-functions\/\",\"url\":\"https:\/\/www.codemotion.com\/magazine\/devops\/cloud\/azure-functions-azure-durable-functions\/\",\"name\":\"Azure functions & Azure Durable functions - Codemotion Magazine\",\"isPartOf\":{\"@id\":\"https:\/\/www.codemotion.com\/magazine\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.codemotion.com\/magazine\/devops\/cloud\/azure-functions-azure-durable-functions\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.codemotion.com\/magazine\/devops\/cloud\/azure-functions-azure-durable-functions\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2020\/01\/sky-1867902_1280_c3e50973dfdb83f43870c1d60bc1e973_2000.jpg\",\"datePublished\":\"2020-01-08T10:25:20+00:00\",\"dateModified\":\"2021-12-23T13:25:02+00:00\",\"description\":\"An introduction to Microsoft Azure Functions and the extension, Microsoft Azure Durable Functions.\",\"breadcrumb\":{\"@id\":\"https:\/\/www.codemotion.com\/magazine\/devops\/cloud\/azure-functions-azure-durable-functions\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.codemotion.com\/magazine\/devops\/cloud\/azure-functions-azure-durable-functions\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.codemotion.com\/magazine\/devops\/cloud\/azure-functions-azure-durable-functions\/#primaryimage\",\"url\":\"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2020\/01\/sky-1867902_1280_c3e50973dfdb83f43870c1d60bc1e973_2000.jpg\",\"contentUrl\":\"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2020\/01\/sky-1867902_1280_c3e50973dfdb83f43870c1d60bc1e973_2000.jpg\",\"width\":1013,\"height\":675,\"caption\":\"Azure functions & Azure Durable functions\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.codemotion.com\/magazine\/devops\/cloud\/azure-functions-azure-durable-functions\/#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\":\"Azure functions &#038; Azure Durable functions\"}]},{\"@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\/7e8f9aade09a4e3ba0ba01c0eaa1a0a0\",\"name\":\"Antonio Turibbio Liccardi\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.codemotion.com\/magazine\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/71a132e506f96e21890c26c9f5a2c7c95e1650374779bf23a824e7adf5448868?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/71a132e506f96e21890c26c9f5a2c7c95e1650374779bf23a824e7adf5448868?s=96&d=mm&r=g\",\"caption\":\"Antonio Turibbio Liccardi\"},\"description\":\"I'm a book author and trainer working as Cloud Developer and DevOps Engineer at Blexin. I love sharing, so I co-founded \u201cDotNetCampania\u201d (an Italian .NET community), to help other developers to improve their knowledge about .NET Ecosystem and coding in general. I'm also a frequent speaker at conferences, and I've been awared by Microsoft as MVP for Visual Studio Developer Technologies since 2015.\",\"sameAs\":[\"https:\/\/x.com\/turibbio\"],\"url\":\"https:\/\/www.codemotion.com\/magazine\/author\/antonio-turibbio-liccardi\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Azure functions & Azure Durable functions - Codemotion Magazine","description":"An introduction to Microsoft Azure Functions and the extension, Microsoft Azure Durable Functions.","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\/azure-functions-azure-durable-functions\/","og_locale":"en_US","og_type":"article","og_title":"Azure functions & Azure Durable functions","og_description":"An introduction to Microsoft Azure Functions and the extension, Microsoft Azure Durable Functions.","og_url":"https:\/\/www.codemotion.com\/magazine\/devops\/cloud\/azure-functions-azure-durable-functions\/","og_site_name":"Codemotion Magazine","article_publisher":"https:\/\/www.facebook.com\/Codemotion.Italy\/","article_published_time":"2020-01-08T10:25:20+00:00","article_modified_time":"2021-12-23T13:25:02+00:00","og_image":[{"width":1013,"height":675,"url":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2020\/01\/sky-1867902_1280_c3e50973dfdb83f43870c1d60bc1e973_2000.jpg","type":"image\/jpeg"}],"author":"Antonio Turibbio Liccardi","twitter_card":"summary_large_image","twitter_creator":"@turibbio","twitter_site":"@CodemotionIT","twitter_misc":{"Written by":"Antonio Turibbio Liccardi","Est. reading time":"6 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.codemotion.com\/magazine\/devops\/cloud\/azure-functions-azure-durable-functions\/#article","isPartOf":{"@id":"https:\/\/www.codemotion.com\/magazine\/devops\/cloud\/azure-functions-azure-durable-functions\/"},"author":{"name":"Antonio Turibbio Liccardi","@id":"https:\/\/www.codemotion.com\/magazine\/#\/schema\/person\/7e8f9aade09a4e3ba0ba01c0eaa1a0a0"},"headline":"Azure functions &#038; Azure Durable functions","datePublished":"2020-01-08T10:25:20+00:00","dateModified":"2021-12-23T13:25:02+00:00","mainEntityOfPage":{"@id":"https:\/\/www.codemotion.com\/magazine\/devops\/cloud\/azure-functions-azure-durable-functions\/"},"wordCount":1099,"publisher":{"@id":"https:\/\/www.codemotion.com\/magazine\/#organization"},"image":{"@id":"https:\/\/www.codemotion.com\/magazine\/devops\/cloud\/azure-functions-azure-durable-functions\/#primaryimage"},"thumbnailUrl":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2020\/01\/sky-1867902_1280_c3e50973dfdb83f43870c1d60bc1e973_2000.jpg","keywords":["Serverless"],"articleSection":["Cloud"],"inLanguage":"en-US"},{"@type":"WebPage","@id":"https:\/\/www.codemotion.com\/magazine\/devops\/cloud\/azure-functions-azure-durable-functions\/","url":"https:\/\/www.codemotion.com\/magazine\/devops\/cloud\/azure-functions-azure-durable-functions\/","name":"Azure functions & Azure Durable functions - Codemotion Magazine","isPartOf":{"@id":"https:\/\/www.codemotion.com\/magazine\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.codemotion.com\/magazine\/devops\/cloud\/azure-functions-azure-durable-functions\/#primaryimage"},"image":{"@id":"https:\/\/www.codemotion.com\/magazine\/devops\/cloud\/azure-functions-azure-durable-functions\/#primaryimage"},"thumbnailUrl":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2020\/01\/sky-1867902_1280_c3e50973dfdb83f43870c1d60bc1e973_2000.jpg","datePublished":"2020-01-08T10:25:20+00:00","dateModified":"2021-12-23T13:25:02+00:00","description":"An introduction to Microsoft Azure Functions and the extension, Microsoft Azure Durable Functions.","breadcrumb":{"@id":"https:\/\/www.codemotion.com\/magazine\/devops\/cloud\/azure-functions-azure-durable-functions\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.codemotion.com\/magazine\/devops\/cloud\/azure-functions-azure-durable-functions\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.codemotion.com\/magazine\/devops\/cloud\/azure-functions-azure-durable-functions\/#primaryimage","url":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2020\/01\/sky-1867902_1280_c3e50973dfdb83f43870c1d60bc1e973_2000.jpg","contentUrl":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2020\/01\/sky-1867902_1280_c3e50973dfdb83f43870c1d60bc1e973_2000.jpg","width":1013,"height":675,"caption":"Azure functions & Azure Durable functions"},{"@type":"BreadcrumbList","@id":"https:\/\/www.codemotion.com\/magazine\/devops\/cloud\/azure-functions-azure-durable-functions\/#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":"Azure functions &#038; Azure Durable functions"}]},{"@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\/7e8f9aade09a4e3ba0ba01c0eaa1a0a0","name":"Antonio Turibbio Liccardi","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.codemotion.com\/magazine\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/71a132e506f96e21890c26c9f5a2c7c95e1650374779bf23a824e7adf5448868?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/71a132e506f96e21890c26c9f5a2c7c95e1650374779bf23a824e7adf5448868?s=96&d=mm&r=g","caption":"Antonio Turibbio Liccardi"},"description":"I'm a book author and trainer working as Cloud Developer and DevOps Engineer at Blexin. I love sharing, so I co-founded \u201cDotNetCampania\u201d (an Italian .NET community), to help other developers to improve their knowledge about .NET Ecosystem and coding in general. I'm also a frequent speaker at conferences, and I've been awared by Microsoft as MVP for Visual Studio Developer Technologies since 2015.","sameAs":["https:\/\/x.com\/turibbio"],"url":"https:\/\/www.codemotion.com\/magazine\/author\/antonio-turibbio-liccardi\/"}]}},"featured_image_src":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2020\/01\/sky-1867902_1280_c3e50973dfdb83f43870c1d60bc1e973_2000-600x400.jpg","featured_image_src_square":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2020\/01\/sky-1867902_1280_c3e50973dfdb83f43870c1d60bc1e973_2000-600x600.jpg","author_info":{"display_name":"Antonio Turibbio Liccardi","author_link":"https:\/\/www.codemotion.com\/magazine\/author\/antonio-turibbio-liccardi\/"},"uagb_featured_image_src":{"full":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2020\/01\/sky-1867902_1280_c3e50973dfdb83f43870c1d60bc1e973_2000.jpg",1013,675,false],"thumbnail":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2020\/01\/sky-1867902_1280_c3e50973dfdb83f43870c1d60bc1e973_2000-150x150.jpg",150,150,true],"medium":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2020\/01\/sky-1867902_1280_c3e50973dfdb83f43870c1d60bc1e973_2000-300x200.jpg",300,200,true],"medium_large":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2020\/01\/sky-1867902_1280_c3e50973dfdb83f43870c1d60bc1e973_2000-768x512.jpg",768,512,true],"large":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2020\/01\/sky-1867902_1280_c3e50973dfdb83f43870c1d60bc1e973_2000.jpg",1013,675,false],"1536x1536":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2020\/01\/sky-1867902_1280_c3e50973dfdb83f43870c1d60bc1e973_2000.jpg",1013,675,false],"2048x2048":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2020\/01\/sky-1867902_1280_c3e50973dfdb83f43870c1d60bc1e973_2000.jpg",1013,675,false],"small-home-featured":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2020\/01\/sky-1867902_1280_c3e50973dfdb83f43870c1d60bc1e973_2000.jpg",100,67,false],"sidebar-featured":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2020\/01\/sky-1867902_1280_c3e50973dfdb83f43870c1d60bc1e973_2000-180x128.jpg",180,128,true],"genesis-singular-images":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2020\/01\/sky-1867902_1280_c3e50973dfdb83f43870c1d60bc1e973_2000-896x504.jpg",896,504,true],"archive-featured":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2020\/01\/sky-1867902_1280_c3e50973dfdb83f43870c1d60bc1e973_2000-400x225.jpg",400,225,true],"gb-block-post-grid-landscape":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2020\/01\/sky-1867902_1280_c3e50973dfdb83f43870c1d60bc1e973_2000-600x400.jpg",600,400,true],"gb-block-post-grid-square":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2020\/01\/sky-1867902_1280_c3e50973dfdb83f43870c1d60bc1e973_2000-600x600.jpg",600,600,true]},"uagb_author_info":{"display_name":"Antonio Turibbio Liccardi","author_link":"https:\/\/www.codemotion.com\/magazine\/author\/antonio-turibbio-liccardi\/"},"uagb_comment_info":0,"uagb_excerpt":"In this article, we will talk about Microsoft Azure Functions and Microsoft Azure Durable Functions - that is an extension of them.","lang":"en","_links":{"self":[{"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/posts\/2339","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\/9"}],"replies":[{"embeddable":true,"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/comments?post=2339"}],"version-history":[{"count":5,"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/posts\/2339\/revisions"}],"predecessor-version":[{"id":11486,"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/posts\/2339\/revisions\/11486"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/media\/2340"}],"wp:attachment":[{"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/media?parent=2339"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/categories?post=2339"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/tags?post=2339"},{"taxonomy":"collections","embeddable":true,"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/collections?post=2339"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}