{"id":25,"date":"2019-12-06T16:00:00","date_gmt":"2019-12-06T15:00:00","guid":{"rendered":"https:\/\/www.codemotion.com\/magazine\/config-management-and-cost-optimisation-for-serverless-computing\/"},"modified":"2021-12-23T14:25:36","modified_gmt":"2021-12-23T13:25:36","slug":"config-management-and-cost-optimisation-for-serverless-computing","status":"publish","type":"post","link":"https:\/\/www.codemotion.com\/magazine\/devops\/cloud\/config-management-and-cost-optimisation-for-serverless-computing\/","title":{"rendered":"Config management and cost optimisation for serverless computing"},"content":{"rendered":"<p><strong>Serverless <span id=\"urn:enhancement-43c73545\" class=\"textannotation disambiguated wl-other\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/computing\">computing<\/span><\/strong> is growing in popularity. In a serverless setup, you no longer run your own virtual <span id=\"urn:enhancement-200710e6\" class=\"textannotation disambiguated wl-other\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/server_computing\">servers<\/span>. Instead, you compose your <span id=\"urn:enhancement-69781ef2\" class=\"textannotation disambiguated wl-other\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/application_software\">application<\/span> using services such as databases and <span id=\"urn:enhancement-10550175\" class=\"textannotation disambiguated wl-other\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/computing\">compute<\/span>. The result is a more streamlined and reactive <span id=\"urn:enhancement-6bece7ee\" class=\"textannotation disambiguated wl-other\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/application_software\">application<\/span>.<\/p>\n<p>Serverless will be one of the many interesting themes covered by <strong><a href=\"https:\/\/events.codemotion.com\/conferences\/madrid\/2019\/\">Codemotion Madrid 2019<\/a><\/strong> talks. Among them, Vicen\u00e7 Garc\u00eda Alt\u00e9s will deliver a speech about operational serverless, with many practical examples on how to use such technology (check talk&#8217;s info <a href=\"https:\/\/events.codemotion.com\/conferences\/madrid\/2019\/speaker\/3883\/\">here<\/a>).<\/p>\n<p>Although the basic idea behind serverless <span id=\"urn:enhancement-43714cb0\" class=\"textannotation disambiguated wl-other\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/computing\">computing<\/span> seems quite straightforward, it is easy to get things wrong. So, during <strong>Codemotion Amsterdam 2019<\/strong> Alex Casalboni shared some of his experiences with security, <span id=\"urn:enhancement-961fb188\" class=\"textannotation disambiguated wl-other\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/configuration_management\">configuration management<\/span> and cost optimisation.<\/p>\n<h2>Serverless security<\/h2>\n<p>Security is always crucial in any <span id=\"urn:enhancement-3ec02f62\" class=\"textannotation disambiguated wl-other\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/application_software\">application<\/span>. Access control is especially important. Using the <a href=\"https:\/\/docs.aws.amazon.com\/lambda\/latest\/dg\/lambda-permissions.html\" target=\"_blank\" rel=\"noopener nofollow noreferrer\">Lambda Permission Model<\/a>, <span id=\"urn:enhancement-eebebfff\" class=\"textannotation disambiguated wl-creative-work\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/amazon_web_services\">AWS<\/span> offers fine-grained security controls for both execution and invocation.<\/p>\n<p><b>Execution policies<\/b> are used to define what resources a given function is allowed to access. For example, \u201c<i><span id=\"urn:enhancement-194d3e40\" class=\"textannotation disambiguated wl-other\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/anonymous_function\">Lambda<\/span> function A can read from <span id=\"urn:enhancement-1e942f66\" class=\"textannotation disambiguated wl-creative-work\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/amazon_dynamodb\">DynamoDB<\/span> users table<\/i>\u201d.<\/p>\n<p><b>Function policies<\/b> are used for controlling invocations. They can allow for access across accounts. For example, \u201c<i>Actions on bucket X can invoke <span id=\"urn:enhancement-dc45a70e\" class=\"textannotation disambiguated wl-other\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/anonymous_function\">Lambda<\/span> function Z<\/i>\u201d.<\/p>\n<p>However, you have to be really careful not to grant unlimited access rights! As Alex put it, things like Action: \u201cs3.*\u201d, Action: \u201cdynamodb:*\u201d and Action: \u201csns:*\u201d make puppies cry! Instead, you should use very fine-grained <a href=\"https:\/\/aws.amazon.com\/iam\/\">IAM<\/a> (<span id=\"urn:enhancement-86c76f18\" class=\"textannotation disambiguated wl-other\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/identity_management\">Identity and Access Management<\/span>) policies using the <a href=\"https:\/\/aws.amazon.com\/serverless\/sam\/\">AWS Serverless Application Model<\/a> (SAM).<\/p>\n<p><script src=\"https:\/\/pastebin.com\/embed_js\/ZP32GQpB\"><\/script><\/p>\n<p>The next warning Alex gave us is to avoid the use of hard-coded secrets within your <span id=\"urn:enhancement-d9e4763c\" class=\"textannotation disambiguated wl-other\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/application_software\">application<\/span>. Instead, you should use one of the tools provided by <span id=\"urn:enhancement-fbb5edab\" class=\"textannotation disambiguated wl-creative-work\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/amazon_web_services\">AWS<\/span>.<\/p>\n<h3>AWS Lambda Environment Variables<\/h3>\n<p><a href=\"https:\/\/docs.aws.amazon.com\/lambda\/latest\/dg\/env_variables.html\" target=\"_blank\" rel=\"noopener nofollow noreferrer\">AWS Lambda Environment Variables<\/a> are <span id=\"urn:enhancement-1da75e18\" class=\"textannotation disambiguated wl-other\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/attribute-value_pair\">key-value pairs<\/span> that work just like <span id=\"urn:enhancement-227399f7\" class=\"textannotation disambiguated wl-creative-work\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/unix\">Unix<\/span> environment <span id=\"urn:enhancement-9351513b\" class=\"textannotation disambiguated wl-other\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/variable_computer_science\">variables<\/span>. They are easily accessible via the standard <span id=\"urn:enhancement-db2cb897\" class=\"textannotation disambiguated wl-other\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/application_programming_interface\">APIs<\/span> (which depend on your <span id=\"urn:enhancement-a38e4dfe\" class=\"textannotation disambiguated wl-other\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/runtime_system\">runtime<\/span>). They can also be optionally encrypted using the <a href=\"https:\/\/aws.amazon.com\/kms\/\">AWS Key Management Service<\/a> (KMS). This allows you to control which roles are allowed access to each <span id=\"urn:enhancement-3cb46347\" class=\"textannotation disambiguated wl-other\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/variable_computer_science\">variable<\/span>. This approach is particularly useful for creating multiple environments (e.g. dev, test and production).<\/p>\n<h3>AWS Systems Manager Parameter Store<\/h3>\n<p>The <a href=\"https:\/\/docs.aws.amazon.com\/systems-manager\/latest\/userguide\/systems-manager-paramstore.html\" target=\"_blank\" rel=\"noopener nofollow noreferrer\">AWS Systems Manager Parameter Store<\/a> is a free centralised store designed to manage all your configuration data. It is ideal for things like centralised environment <span id=\"urn:enhancement-8c9753fd\" class=\"textannotation disambiguated wl-other\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/variable_computer_science\">variables<\/span> (e.g. for 3rd party services), secrets management and feature flags. It supports hierarchies (<code>\/app\/function\/\u2026<\/code>) and data can be in plaintext or encrypted with <span id=\"urn:enhancement-c73e4961\" class=\"textannotation disambiguated wl-creative-work\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/amazon_web_services\">AWS<\/span> KMS. You can send notifications of changes to the <a href=\"https:\/\/aws.amazon.com\/sns\/\" target=\"_blank\" rel=\"noopener nofollow noreferrer\">Amazon Simple Notification Service<\/a> (SNS) or to a <span id=\"urn:enhancement-f105ca05\" class=\"textannotation disambiguated wl-other\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/anonymous_function\">Lambda<\/span> function. The store can be secured using IAM and calls can be recorded in <span id=\"urn:enhancement-4f0e3f29\" class=\"textannotation disambiguated wl-creative-work\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/amazon_web_services\">AWS<\/span> CloudTrail. Parameters can be tagged and the parameter store is available via an <span id=\"urn:enhancement-c197b0e0\" class=\"textannotation disambiguated wl-other\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/application_programming_interface\">API<\/span> and <span id=\"urn:enhancement-adbfa397\" class=\"textannotation disambiguated wl-other\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/software_development_kit\">SDKs<\/span>.<\/p>\n<p><script src=\"https:\/\/pastebin.com\/embed_js\/vj7VXsfQ\"><\/script><\/p>\n<p>Alex also introduced us to one of his own projects called <a href=\"https:\/\/github.com\/alexcasalboni\/ssm-cache-python\" target=\"_blank\" rel=\"noopener nofollow noreferrer\">ssm_cache<\/a>.<\/p>\n<p><script src=\"https:\/\/pastebin.com\/embed_js\/b792zv6M\"><\/script><\/p>\n<h3>AWS Secrets Manager<\/h3>\n<p>Another alternative is to use the <a href=\"https:\/\/aws.amazon.com\/secrets-manager\/\" target=\"_blank\" rel=\"noopener nofollow noreferrer\">AWS Secrets Manager<\/a> service. This makes it easy to manage, retrieve and rotate credentials. Secrets can be automatically rotated without breaking stuff. It will keep track of password versions. It implements proper <span id=\"urn:enhancement-247598a4\" class=\"textannotation disambiguated wl-other\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/security_controls\">security controls<\/span> for credential management and it offers built-in support for <a href=\"https:\/\/aws.amazon.com\/rds\/\" target=\"_blank\" rel=\"noopener nofollow noreferrer\">Amazon RDS<\/a>.<\/p>\n<p>Combining <span id=\"urn:enhancement-8b4b4057\" class=\"textannotation disambiguated wl-creative-work\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/amazon_web_services\">AWS<\/span> Secrets Manager and Parameter Store<\/p>\n<p>By combining the <span id=\"urn:enhancement-f1e31bf0\" class=\"textannotation disambiguated wl-creative-work\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/amazon_web_services\">AWS<\/span> Secrets Manager and Parameter Store you get several benefits. You can reference the secrets in the Secrets Manager using the Parameter Store <span id=\"urn:enhancement-bf8cca1f\" class=\"textannotation disambiguated wl-other\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/application_programming_interface\">APIs<\/span> and you can delegate rotation and refresh of secrets to the <span id=\"urn:enhancement-9ec2cc14\" class=\"textannotation disambiguated wl-other\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/client_computing\">client<\/span>. Doing this is as simple as using a prefix: <code>\/aws\/reference\/secretsmanager<\/code>.<\/p>\n<p><script src=\"https:\/\/pastebin.com\/embed_js\/6nhM3pTT\"><\/script><\/p>\n<p>You can even use <code>ssm_cache<\/code> to achieve the same thing:<\/p>\n<p><script src=\"https:\/\/pastebin.com\/embed_js\/ciLK9eLX\"><\/script><\/p>\n<p>The final thing Alex showed us with <code>ssm_cache<\/code> is how to group parameters and secrets.<\/p>\n<p><script src=\"https:\/\/pastebin.com\/embed_js\/qTEa8VmN\"><\/script><\/p>\n<p>If you want to play with this you can use the <a href=\"https:\/\/amzn.to\/serverless-security\" target=\"_blank\" rel=\"noopener nofollow noreferrer\">AWS Serverless Security training<\/a>.<\/p>\n<h2>Serverless cost optimisation techniques<\/h2>\n<p>The next thing Alex showed us was how to <strong>optimise the costs of your serverless setup<\/strong>. Your serverless function has a complex anatomy. The function itself is wrapped in a language runtime. These are then packaged in a container which sits on top of a compute substrate. When you make a new request to the function there are several stages that have to happen as shown below. You only have control over some of these, and so this is where you should focus your optimisation efforts.<\/p>\n<p>\u00a0<\/p>\n<p>\u00a0<\/p>\n<center><br \/><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-1205\" src=\"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/08\/image2-1-1024x436.png\" alt=\"\" width=\"1024\" height=\"436\" srcset=\"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/08\/image2-1-1024x436.png 1024w, https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/08\/image2-1-1024x436-300x128.png 300w, https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/08\/image2-1-1024x436-768x327.png 768w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/center>\n<p>\u00a0<\/p>\n<p>You can also see something this in <span id=\"urn:enhancement-8a979f5\" class=\"textannotation disambiguated wl-creative-work\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/amazon_web_services\">AWS<\/span> X-Ray:<\/p>\n<p>\u00a0<\/p>\n<p>\u00a0<\/p>\n<center><br \/><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-1205\" src=\"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/08\/image2-1-1024x436.png\" alt=\"\" width=\"1024\" height=\"436\" srcset=\"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/08\/image2-1-1024x436.png 1024w, https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/08\/image2-1-1024x436-300x128.png 300w, https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/08\/image2-1-1024x436-768x327.png 768w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/> <img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-large wp-image-1207\" src=\"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/08\/image4-1024x387.png\" alt=\"\" width=\"1024\" height=\"387\" srcset=\"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/08\/image4-1024x387.png 1024w, https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/08\/image4-1024x387-300x113.png 300w, https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/08\/image4-1024x387-768x290.png 768w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/center>\n<p>\u00a0<\/p>\n<h3>Writing efficient functions<\/h3>\n<p>There are a few ways you can <strong>improve the efficiency of your code<\/strong>.<\/p>\n<ol>\n<li>Avoid large monolithic functions.<\/li>\n<li>Make sure you keep control of the dependencies in the function\u2019s deployment environment. More dependencies = larger package.<\/li>\n<li>Make sure you use an optimisation tool suitable for your language. E.g. for Node.js you can try Browserfy, <span id=\"urn:enhancement-c11606e3\" class=\"textannotation disambiguated wl-other\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/minification_programming\">Minify<\/span> or Webpack.<\/li>\n<\/ol>\n<p>You also need to remember that <a href=\"https:\/\/www.codemotion.com\/magazine\/uncategorized\/aws-kinesis-serverless-event-processing\/\" target=\"_blank\" rel=\"noopener\">Lambda processes a single event<\/a> for each container. You don\u2019t need to implement non-blocking execution on the frontend. But since containers are reused, there are two things Alex highlighted:<\/p>\n<ul>\n<li>Lazily load <span id=\"urn:enhancement-f4ddbd7a\" class=\"textannotation disambiguated wl-other\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/variable_computer_science\">variables<\/span> in the global state<\/li>\n<li>Don\u2019t load something if you don\u2019t actually need it<\/li>\n<\/ul>\n<p>Here\u2019s an example of lazy initialisation using <span id=\"urn:enhancement-722356fe\" class=\"textannotation disambiguated wl-creative-work\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/python_programming_language\">Python<\/span> and boto3.<\/p>\n<p><script src=\"https:\/\/pastebin.com\/embed_js\/sc4gSn0r\"><\/script><\/p>\n<p>And here are examples of how to optimise dependencies using the Node.js <span id=\"urn:enhancement-eae3fe\" class=\"textannotation disambiguated wl-other\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/software_development_kit\">SDK<\/span> and X-Ray.<\/p>\n<p><script src=\"https:\/\/pastebin.com\/embed_js\/0Tbx3erE\"><\/script><\/p>\n<p>While a few milliseconds might not seem a big saving, remember that you are billed in units of 100ms. If your function takes 104ms to run and you can save 5ms, you are halving the cost!<\/p>\n<h3>Concise function logic<\/h3>\n<p>You can make your code more efficient by separating the <span id=\"urn:enhancement-7c85cbdc\" class=\"textannotation disambiguated wl-other\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/anonymous_function\">Lambda<\/span> handler from the core logic. Try to only use functions to transform the data, not to transport it. And only read in the data you need by using Query filters in Amazon Aurora or using Amazon S3 select.<\/p>\n<p><script src=\"https:\/\/pastebin.com\/embed_js\/H1dREv5v\"><\/script><\/p>\n<p>Even small changes can save a lot of money, as the following example shows.<\/p>\n<p>\u00a0<\/p>\n<p>\u00a0<\/p>\n<center><br \/><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-1208\" src=\"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/08\/image3-1024x344.png\" alt=\"\" width=\"1024\" height=\"344\" srcset=\"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/08\/image3-1024x344.png 1024w, https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/08\/image3-1024x344-300x101.png 300w, https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/08\/image3-1024x344-768x258.png 768w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/center>\n<p>\u00a0<\/p>\n<p>It is also really important to carefully match the resources you allocate. While more resources may cost more, the saving in time can, confusingly, lead to a lower overall bill!<\/p>\n<p>\u00a0<\/p>\n<p>\u00a0<\/p>\n<center><br \/><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-1209\" src=\"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/08\/image6-1024x385.png\" alt=\"\" width=\"1024\" height=\"385\" srcset=\"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/08\/image6-1024x385.png 1024w, https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/08\/image6-1024x385-300x113.png 300w, https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/08\/image6-1024x385-768x289.png 768w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/center>\n<p>\u00a0<\/p>\n<h3>Improved orchestration<\/h3>\n<p>Alex\u2019s next piece of advice for cost optimisation is to <strong>avoid using orchestration within your code<\/strong>. If you use the <code>time.sleep()<\/code> function to wait for an event to complete, you are going to be charged for this time, even though nothing is happening. Better to use <a href=\"https:\/\/www.codemotion.com\/magazine\/dev-hub\/backend-dev\/multisystem-interaction-consistency-with-aws-step-functions\/\" target=\"_blank\" rel=\"noopener\">AWS Step Functions<\/a> (which are effectively state machines). Here, you are only charged for each state transition.<\/p>\n<p>\u00a0<\/p>\n<p>\u00a0<\/p>\n<center><br \/><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-1210\" src=\"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/08\/image5.png\" alt=\"\" width=\"656\" height=\"678\" srcset=\"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/08\/image5.png 656w, https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/08\/image5-290x300.png 290w\" sizes=\"auto, (max-width: 656px) 100vw, 656px\" \/><\/center>\n<p>\u00a0<\/p>\n<h3>Other optimisations<\/h3>\n<p>There are numerous other optimisations you can make. For instance, if you have a single client, why use an <span id=\"urn:enhancement-2b38fa2d\" class=\"textannotation disambiguated wl-other\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/application_programming_interface\">API<\/span>? If your code is all internal (e.g. not customer facing) use one of the <span id=\"urn:enhancement-26589e7b\" class=\"textannotation disambiguated wl-creative-work\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/amazon_web_services\">AWS<\/span> regional endpoints. Make sure you discard events that aren\u2019t needed. Make sure you really understand about retry policies (especially as they relate to asynchronous operations). Each time a function is retried, you are billed for a new invocation. Finally, you should consider whether you need to use a VPC or not. Alex shared a very simple flowchart to help us determine this:<\/p>\n<p>\u00a0<\/p>\n<p>\u00a0<\/p>\n<center><br \/><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-1211\" src=\"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/08\/image1-1.png\" alt=\"\" width=\"479\" height=\"237\" srcset=\"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/08\/image1-1.png 479w, https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/08\/image1-1-300x148.png 300w\" sizes=\"auto, (max-width: 479px) 100vw, 479px\" \/><\/center>\n<p>\u00a0<\/p>\n<h2>Conclusions<\/h2>\n<p>Security is essential in any system. By using <span id=\"urn:enhancement-1b03b5dd\" class=\"textannotation disambiguated wl-creative-work\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/amazon_web_services\">AWS<\/span> tools, you can make it much easier to secure your function. If you are using <span id=\"urn:enhancement-1282c13f\" class=\"textannotation disambiguated wl-creative-work\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/python_programming_language\">Python<\/span>, then Alex\u2019s ssm_cache project offers a really easy way to use both the Secrets Manager and the Parameter Store. Then by optimising your serverless functions, you can save a significant amount of money. At times, it\u2019s not obvious how to achieve this. However, the advice Alex gave should be a great help.<\/p>\n<p>If you want to learn more about serverless <span id=\"urn:enhancement-53e14b1c\" class=\"textannotation disambiguated wl-other\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/computing\">computing<\/span>, in <strong>Codemotion <span id=\"urn:enhancement-39d29650\" class=\"textannotation disambiguated wl-place\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/madrid\">Madrid<\/span> 2019<\/strong> you will have the opportunity to learn how far we are from using serverless in real products. Check the <a href=\"https:\/\/events.codemotion.com\/conferences\/madrid\/2019\/wp-content\/themes\/event\/detail-talk.php?detail=12480\">Vicen\u00e7 Garc\u00eda Alt\u00e9s&#8217;s talk<\/a> and the whole <a href=\"https:\/\/events.codemotion.com\/conferences\/madrid\/2019\/agenda\/\">Codemotion Madrid 2019 agenda<\/a>. And do not forget to buy your ticked and attend the conference!<\/p>\n\n","protected":false},"excerpt":{"rendered":"<p>Serverless computing is growing in popularity. In a serverless setup, you no longer run your own virtual servers. Instead, you compose your application using services such as databases and compute. The result is a more streamlined and reactive application. Serverless will be one of the many interesting themes covered by Codemotion Madrid 2019 talks. Among&#8230; <a class=\"more-link\" href=\"https:\/\/www.codemotion.com\/magazine\/devops\/cloud\/config-management-and-cost-optimisation-for-serverless-computing\/\">Read more<\/a><\/p>\n","protected":false},"author":7,"featured_media":26,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_editorskit_title_hidden":false,"_editorskit_reading_time":0,"_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,77,75],"collections":[],"class_list":{"0":"post-25","1":"post","2":"type-post","3":"status-publish","4":"format-standard","5":"has-post-thumbnail","7":"category-cloud","8":"tag-aws","9":"tag-codemotion-amsterdam","10":"tag-serverless","11":"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>Config management and cost optimisation for serverless computing - Codemotion Magazine<\/title>\n<meta name=\"description\" content=\"During Codemotion Amsterdam 2019, AWS technical evangelist Alex Casalboni gave us some insider tips for using serverless computing securely and efficiently.\" \/>\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\/config-management-and-cost-optimisation-for-serverless-computing\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Config management and cost optimisation for serverless computing\" \/>\n<meta property=\"og:description\" content=\"During Codemotion Amsterdam 2019, AWS technical evangelist Alex Casalboni gave us some insider tips for using serverless computing securely and efficiently.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.codemotion.com\/magazine\/devops\/cloud\/config-management-and-cost-optimisation-for-serverless-computing\/\" \/>\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=\"2019-12-06T15:00:00+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2021-12-23T13:25:36+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/08\/server-scaled.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"1012\" \/>\n\t<meta property=\"og:image:height\" content=\"675\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Toby Moncaster\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@tobym76\" \/>\n<meta name=\"twitter:site\" content=\"@CodemotionIT\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Toby Moncaster\" \/>\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\\\/config-management-and-cost-optimisation-for-serverless-computing\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/devops\\\/cloud\\\/config-management-and-cost-optimisation-for-serverless-computing\\\/\"},\"author\":{\"name\":\"Toby Moncaster\",\"@id\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/#\\\/schema\\\/person\\\/8b9f025e7d76754fb3d4ffd428b0813b\"},\"headline\":\"Config management and cost optimisation for serverless computing\",\"datePublished\":\"2019-12-06T15:00:00+00:00\",\"dateModified\":\"2021-12-23T13:25:36+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/devops\\\/cloud\\\/config-management-and-cost-optimisation-for-serverless-computing\\\/\"},\"wordCount\":1292,\"publisher\":{\"@id\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/devops\\\/cloud\\\/config-management-and-cost-optimisation-for-serverless-computing\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/wp-content\\\/uploads\\\/2019\\\/08\\\/server-scaled.jpg\",\"keywords\":[\"AWS\",\"Codemotion Amsterdam\",\"Serverless\"],\"articleSection\":[\"Cloud\"],\"inLanguage\":\"en-US\"},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/devops\\\/cloud\\\/config-management-and-cost-optimisation-for-serverless-computing\\\/\",\"url\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/devops\\\/cloud\\\/config-management-and-cost-optimisation-for-serverless-computing\\\/\",\"name\":\"Config management and cost optimisation for serverless computing - Codemotion Magazine\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/devops\\\/cloud\\\/config-management-and-cost-optimisation-for-serverless-computing\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/devops\\\/cloud\\\/config-management-and-cost-optimisation-for-serverless-computing\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/wp-content\\\/uploads\\\/2019\\\/08\\\/server-scaled.jpg\",\"datePublished\":\"2019-12-06T15:00:00+00:00\",\"dateModified\":\"2021-12-23T13:25:36+00:00\",\"description\":\"During Codemotion Amsterdam 2019, AWS technical evangelist Alex Casalboni gave us some insider tips for using serverless computing securely and efficiently.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/devops\\\/cloud\\\/config-management-and-cost-optimisation-for-serverless-computing\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/devops\\\/cloud\\\/config-management-and-cost-optimisation-for-serverless-computing\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/devops\\\/cloud\\\/config-management-and-cost-optimisation-for-serverless-computing\\\/#primaryimage\",\"url\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/wp-content\\\/uploads\\\/2019\\\/08\\\/server-scaled.jpg\",\"contentUrl\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/wp-content\\\/uploads\\\/2019\\\/08\\\/server-scaled.jpg\",\"width\":1012,\"height\":675},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/devops\\\/cloud\\\/config-management-and-cost-optimisation-for-serverless-computing\\\/#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\":\"Config management and cost optimisation for serverless computing\"}]},{\"@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\\\/8b9f025e7d76754fb3d4ffd428b0813b\",\"name\":\"Toby Moncaster\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/126cc1a8360e8cfbfa77aefe9160c4cd916e20f2c3a849d91e1df00c48423ccc?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/126cc1a8360e8cfbfa77aefe9160c4cd916e20f2c3a849d91e1df00c48423ccc?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/126cc1a8360e8cfbfa77aefe9160c4cd916e20f2c3a849d91e1df00c48423ccc?s=96&d=mm&r=g\",\"caption\":\"Toby Moncaster\"},\"description\":\"I am an experienced freelance writer. I specialise in making complex topics accessible to wider audiences. My interests include TCP\\\/IP, data protection and AI. I currently work with B2B startups across the world. I hold 5 patents, edited 3 RFCs and received a PhD in computer science from the University of Cambridge.\",\"sameAs\":[\"https:\\\/\\\/www.linkedin.com\\\/in\\\/tobymoncaster\\\/\",\"https:\\\/\\\/x.com\\\/tobym76\"],\"url\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/author\\\/toby-moncaster\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Config management and cost optimisation for serverless computing - Codemotion Magazine","description":"During Codemotion Amsterdam 2019, AWS technical evangelist Alex Casalboni gave us some insider tips for using serverless computing securely and efficiently.","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\/config-management-and-cost-optimisation-for-serverless-computing\/","og_locale":"en_US","og_type":"article","og_title":"Config management and cost optimisation for serverless computing","og_description":"During Codemotion Amsterdam 2019, AWS technical evangelist Alex Casalboni gave us some insider tips for using serverless computing securely and efficiently.","og_url":"https:\/\/www.codemotion.com\/magazine\/devops\/cloud\/config-management-and-cost-optimisation-for-serverless-computing\/","og_site_name":"Codemotion Magazine","article_publisher":"https:\/\/www.facebook.com\/Codemotion.Italy\/","article_published_time":"2019-12-06T15:00:00+00:00","article_modified_time":"2021-12-23T13:25:36+00:00","og_image":[{"width":1012,"height":675,"url":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/08\/server-scaled.jpg","type":"image\/jpeg"}],"author":"Toby Moncaster","twitter_card":"summary_large_image","twitter_creator":"@tobym76","twitter_site":"@CodemotionIT","twitter_misc":{"Written by":"Toby Moncaster","Est. reading time":"6 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.codemotion.com\/magazine\/devops\/cloud\/config-management-and-cost-optimisation-for-serverless-computing\/#article","isPartOf":{"@id":"https:\/\/www.codemotion.com\/magazine\/devops\/cloud\/config-management-and-cost-optimisation-for-serverless-computing\/"},"author":{"name":"Toby Moncaster","@id":"https:\/\/www.codemotion.com\/magazine\/#\/schema\/person\/8b9f025e7d76754fb3d4ffd428b0813b"},"headline":"Config management and cost optimisation for serverless computing","datePublished":"2019-12-06T15:00:00+00:00","dateModified":"2021-12-23T13:25:36+00:00","mainEntityOfPage":{"@id":"https:\/\/www.codemotion.com\/magazine\/devops\/cloud\/config-management-and-cost-optimisation-for-serverless-computing\/"},"wordCount":1292,"publisher":{"@id":"https:\/\/www.codemotion.com\/magazine\/#organization"},"image":{"@id":"https:\/\/www.codemotion.com\/magazine\/devops\/cloud\/config-management-and-cost-optimisation-for-serverless-computing\/#primaryimage"},"thumbnailUrl":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/08\/server-scaled.jpg","keywords":["AWS","Codemotion Amsterdam","Serverless"],"articleSection":["Cloud"],"inLanguage":"en-US"},{"@type":"WebPage","@id":"https:\/\/www.codemotion.com\/magazine\/devops\/cloud\/config-management-and-cost-optimisation-for-serverless-computing\/","url":"https:\/\/www.codemotion.com\/magazine\/devops\/cloud\/config-management-and-cost-optimisation-for-serverless-computing\/","name":"Config management and cost optimisation for serverless computing - Codemotion Magazine","isPartOf":{"@id":"https:\/\/www.codemotion.com\/magazine\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.codemotion.com\/magazine\/devops\/cloud\/config-management-and-cost-optimisation-for-serverless-computing\/#primaryimage"},"image":{"@id":"https:\/\/www.codemotion.com\/magazine\/devops\/cloud\/config-management-and-cost-optimisation-for-serverless-computing\/#primaryimage"},"thumbnailUrl":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/08\/server-scaled.jpg","datePublished":"2019-12-06T15:00:00+00:00","dateModified":"2021-12-23T13:25:36+00:00","description":"During Codemotion Amsterdam 2019, AWS technical evangelist Alex Casalboni gave us some insider tips for using serverless computing securely and efficiently.","breadcrumb":{"@id":"https:\/\/www.codemotion.com\/magazine\/devops\/cloud\/config-management-and-cost-optimisation-for-serverless-computing\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.codemotion.com\/magazine\/devops\/cloud\/config-management-and-cost-optimisation-for-serverless-computing\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.codemotion.com\/magazine\/devops\/cloud\/config-management-and-cost-optimisation-for-serverless-computing\/#primaryimage","url":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/08\/server-scaled.jpg","contentUrl":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/08\/server-scaled.jpg","width":1012,"height":675},{"@type":"BreadcrumbList","@id":"https:\/\/www.codemotion.com\/magazine\/devops\/cloud\/config-management-and-cost-optimisation-for-serverless-computing\/#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":"Config management and cost optimisation for serverless computing"}]},{"@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\/8b9f025e7d76754fb3d4ffd428b0813b","name":"Toby Moncaster","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/126cc1a8360e8cfbfa77aefe9160c4cd916e20f2c3a849d91e1df00c48423ccc?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/126cc1a8360e8cfbfa77aefe9160c4cd916e20f2c3a849d91e1df00c48423ccc?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/126cc1a8360e8cfbfa77aefe9160c4cd916e20f2c3a849d91e1df00c48423ccc?s=96&d=mm&r=g","caption":"Toby Moncaster"},"description":"I am an experienced freelance writer. I specialise in making complex topics accessible to wider audiences. My interests include TCP\/IP, data protection and AI. I currently work with B2B startups across the world. I hold 5 patents, edited 3 RFCs and received a PhD in computer science from the University of Cambridge.","sameAs":["https:\/\/www.linkedin.com\/in\/tobymoncaster\/","https:\/\/x.com\/tobym76"],"url":"https:\/\/www.codemotion.com\/magazine\/author\/toby-moncaster\/"}]}},"featured_image_src":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/08\/server-scaled-600x400.jpg","featured_image_src_square":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/08\/server-scaled-600x600.jpg","author_info":{"display_name":"Toby Moncaster","author_link":"https:\/\/www.codemotion.com\/magazine\/author\/toby-moncaster\/"},"uagb_featured_image_src":{"full":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/08\/server-scaled.jpg",1012,675,false],"thumbnail":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/08\/server-scaled-150x150.jpg",150,150,true],"medium":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/08\/server-scaled-300x200.jpg",300,200,true],"medium_large":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/08\/server-scaled-768x512.jpg",768,512,true],"large":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/08\/server-scaled.jpg",1012,675,false],"1536x1536":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/08\/server-scaled.jpg",1012,675,false],"2048x2048":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/08\/server-scaled.jpg",1012,675,false],"small-home-featured":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/08\/server-scaled.jpg",100,67,false],"sidebar-featured":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/08\/server-scaled-180x128.jpg",180,128,true],"genesis-singular-images":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/08\/server-scaled-896x504.jpg",896,504,true],"archive-featured":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/08\/server-scaled-400x225.jpg",400,225,true],"gb-block-post-grid-landscape":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/08\/server-scaled-600x400.jpg",600,400,true],"gb-block-post-grid-square":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/08\/server-scaled-600x600.jpg",600,600,true]},"uagb_author_info":{"display_name":"Toby Moncaster","author_link":"https:\/\/www.codemotion.com\/magazine\/author\/toby-moncaster\/"},"uagb_comment_info":0,"uagb_excerpt":"Serverless computing is growing in popularity. In a serverless setup, you no longer run your own virtual servers. Instead, you compose your application using services such as databases and compute. The result is a more streamlined and reactive application. Serverless will be one of the many interesting themes covered by Codemotion Madrid 2019 talks. Among&#8230;&hellip;","lang":"en","_links":{"self":[{"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/posts\/25","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\/7"}],"replies":[{"embeddable":true,"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/comments?post=25"}],"version-history":[{"count":10,"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/posts\/25\/revisions"}],"predecessor-version":[{"id":15568,"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/posts\/25\/revisions\/15568"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/media\/26"}],"wp:attachment":[{"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/media?parent=25"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/categories?post=25"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/tags?post=25"},{"taxonomy":"collections","embeddable":true,"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/collections?post=25"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}