{"componentChunkName":"component---src-templates-blog-post-js","path":"/lambda-training/","result":{"data":{"site":{"siteMetadata":{"title":"Nans' blogs"}},"markdownRemark":{"id":"afa18240-3db5-5fba-b3ab-4343c31dfc2c","excerpt":"Learn AWS Lambda and see real world example with serverless main documentation : https://serverless.com/ What is lambda functions\nlimited by time\nrun on demand…","html":"<h1>Learn AWS Lambda and see real world example with serverless</h1>\n<p>main documentation : <a href=\"https://serverless.com/\">https://serverless.com/</a></p>\n<h2>What is lambda</h2>\n<p>functions\nlimited by time\nrun on demand\nscaling is automated -> that’s why we call it “Serverless”</p>\n<h2>Pricing</h2>\n<ul>\n<li>pay per request</li>\n<li>pay per compute time</li>\n</ul>\n<h2>AWS Lambda integrations</h2>\n<ul>\n<li>API Gateway -> to build a REST API</li>\n<li>Kinesis -> processing data in streams</li>\n<li>DynamoDB -> Managed NoSQL database</li>\n<li>…</li>\n</ul>\n<h2>Example : Thumbnail creation</h2>\n<p>“Database Trigger-like” behavior for S3\nNew image in S3 -> trigger -> AWS Lambda function creates a thumbnail and push it to S3</p>\n<p>/!\\ the handler is the name of function that will be called in lambda\nThe instructor only did a “hello world”.</p>\n<h2>The Serverless Framework</h2>\n<p>Aims to ease the pain of creating, deploying, managing and debugging lambda functions.\nIntegrates with CI/CD tools.\nCloudFormation support (templates for deploying).</p>\n<div class=\"gatsby-highlight\" data-language=\"bash\"><pre class=\"language-bash\"><code class=\"language-bash\"><span class=\"token function\">npm</span> <span class=\"token function\">install</span> -g serverless</code></pre></div>\n<p>IAM => Create a serverless-admin (new user). Programmatic access, and give administrator access. (not best practice though …)</p>\n<div class=\"gatsby-highlight\" data-language=\"bash\"><pre class=\"language-bash\"><code class=\"language-bash\">serverless config credentials --provider aws --key XXX --secret YYY --profile serverless-admin</code></pre></div>\n<h2>Hello world using the Serverless framework</h2>\n<p><code class=\"language-text\">serverless</code> or <code class=\"language-text\">sls</code> => list of commands.</p>\n<div class=\"gatsby-highlight\" data-language=\"text\"><pre class=\"language-text\"><code class=\"language-text\">sls create --template aws-python --path hello-world-python</code></pre></div>\n<p>serverless.yml add</p>\n<div class=\"gatsby-highlight\" data-language=\"yml\"><pre class=\"language-yml\"><code class=\"language-yml\"><span class=\"token key atrule\">profile</span><span class=\"token punctuation\">:</span> serverless<span class=\"token punctuation\">-</span>admin\n<span class=\"token key atrule\">region</span><span class=\"token punctuation\">:</span> eu<span class=\"token punctuation\">-</span>west<span class=\"token punctuation\">-</span><span class=\"token number\">3</span></code></pre></div>\n<div class=\"gatsby-highlight\" data-language=\"bash\"><pre class=\"language-bash\"><code class=\"language-bash\">sls deploy -v</code></pre></div>\n<p>the code is uploaded to s3, and then CloudFront is configured. IAM role is created for us.</p>\n<h2>Running a function from the command line</h2>\n<div class=\"gatsby-highlight\" data-language=\"bash\"><pre class=\"language-bash\"><code class=\"language-bash\">sls invoke -f hello -l</code></pre></div>\n<h2> Updating the function</h2>\n<p>change the <code class=\"language-text\">print</code> statement.</p>\n<div class=\"gatsby-highlight\" data-language=\"bash\"><pre class=\"language-bash\"><code class=\"language-bash\">sls deploy <span class=\"token keyword\">function</span> -f hello</code></pre></div>\n<p>=> how to integrate that with a proper CI/CD system ?</p>\n<h2>Fetching function logs</h2>\n<div class=\"gatsby-highlight\" data-language=\"bash\"><pre class=\"language-bash\"><code class=\"language-bash\">sls logs -f hello -t</code></pre></div>\n<p>enables to stream function logs as they happen !</p>\n<h2> Remove the function</h2>\n<div class=\"gatsby-highlight\" data-language=\"bash\"><pre class=\"language-bash\"><code class=\"language-bash\">sls remove</code></pre></div>\n<h2>add an IAM role statement to a function</h2>\n<div class=\"gatsby-highlight\" data-language=\"yaml\"><pre class=\"language-yaml\"><code class=\"language-yaml\"><span class=\"token key atrule\">iamRoleStatements</span><span class=\"token punctuation\">:</span>\n  <span class=\"token punctuation\">-</span> <span class=\"token key atrule\">Effect</span><span class=\"token punctuation\">:</span> <span class=\"token string\">\"Allow\"</span>\n    <span class=\"token key atrule\">Action</span><span class=\"token punctuation\">:</span>\n    <span class=\"token punctuation\">-</span> <span class=\"token string\">\"lambda\"</span>\n    <span class=\"token key atrule\">Resource</span><span class=\"token punctuation\">:</span>\n    <span class=\"token punctuation\">-</span> <span class=\"token string\">\"*\"</span></code></pre></div>\n<h2>VPC for lambda functions</h2>\n<p>can launch a lambda in a VPC so that they can access EC2 instances or RDS instances.\n<span\n      class=\"gatsby-resp-image-wrapper\"\n      style=\"position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 590px; \"\n    >\n      <a\n    class=\"gatsby-resp-image-link\"\n    href=\"/static/476c69b5b3a4417a66582a1433c7ff75/cd7c1/2020-03-12-11-14-30.png\"\n    style=\"display: block\"\n    target=\"_blank\"\n    rel=\"noopener\"\n  >\n    <span\n    class=\"gatsby-resp-image-background-image\"\n    style=\"padding-bottom: 37.83783783783784%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAICAYAAAD5nd/tAAAACXBIWXMAAAsTAAALEwEAmpwYAAABsUlEQVQoz11SyW7UQBD1VyHBGXHlwAnBryDgAkeQEBKXAEKIcIAv4EJCSAYCUTSXwTMDGtvtZRy73YuXtmd5VHeIFFFSya/eUt2W7QFbXK7tdguzWmOgtsXLAkGwcHizIW1YY7Xe4P8aiLO692ep4ScKs1RjwiTSqnWGnhb+XjY4nkTYP5liEisUyjitMSv8onlKmSllfcK87u114N1+doLrj0a48/wnrt7/iocffReKihY3Ho9w88kP3H1xiiv3DvDqc+C0b3PuvLeeHru+9uAQn8ZLp3kfvqd4/YXh/SjBzj7D3qR0guxWeHsY480Bw+5RjJ09htNQOY3xjuYI74jfPUrwknKzTJ8vNLWA0Ry1OENDrWWJIIyQpgk64o2uIMsMirrIM8RJgoqX6OsKmucQRUq+EqZrzhf60xl03aASEryShGtwziGEgJAKUmniBUpe0SyhlELTtlC6xllROt5m+2H4t9D3sVgs6EsGSOh021mWYT6fOy4MQ8RxjDzP3Wyx1W3GeqMoAmOM3ih1f4g3Ho+dYaATuq6DMQZ936OlW1h80Za7jK3XZi54+7QL/wJQKEvMrdVs5gAAAABJRU5ErkJggg=='); background-size: cover; display: block;\"\n  ></span>\n  <img\n        class=\"gatsby-resp-image-image\"\n        alt=\"2020 03 12 11 14 30\"\n        title=\"2020 03 12 11 14 30\"\n        src=\"/static/476c69b5b3a4417a66582a1433c7ff75/fcda8/2020-03-12-11-14-30.png\"\n        srcset=\"/static/476c69b5b3a4417a66582a1433c7ff75/12f09/2020-03-12-11-14-30.png 148w,\n/static/476c69b5b3a4417a66582a1433c7ff75/e4a3f/2020-03-12-11-14-30.png 295w,\n/static/476c69b5b3a4417a66582a1433c7ff75/fcda8/2020-03-12-11-14-30.png 590w,\n/static/476c69b5b3a4417a66582a1433c7ff75/efc66/2020-03-12-11-14-30.png 885w,\n/static/476c69b5b3a4417a66582a1433c7ff75/c83ae/2020-03-12-11-14-30.png 1180w,\n/static/476c69b5b3a4417a66582a1433c7ff75/cd7c1/2020-03-12-11-14-30.png 1547w\"\n        sizes=\"(max-width: 590px) 100vw, 590px\"\n        style=\"width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;\"\n        loading=\"lazy\"\n      />\n  </a>\n    </span>\ncan specify securityGroupIds and subnetsId in the serverless.yml file.</p>\n<h2>Real world example : Service to create S3 image thumbnails</h2>\n<p><span\n      class=\"gatsby-resp-image-wrapper\"\n      style=\"position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 590px; \"\n    >\n      <a\n    class=\"gatsby-resp-image-link\"\n    href=\"/static/b6876527bbb55d54e53bf1a89db4e260/4597d/2020-03-12-11-20-44.png\"\n    style=\"display: block\"\n    target=\"_blank\"\n    rel=\"noopener\"\n  >\n    <span\n    class=\"gatsby-resp-image-background-image\"\n    style=\"padding-bottom: 55.4054054054054%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAALCAYAAAB/Ca1DAAAACXBIWXMAAAsTAAALEwEAmpwYAAAB+0lEQVQoz31Ru47TQBT1d1DR09DyAUjbIdFQQIXEL9AulKyQeEgIhJBAoqBCERJQ0KDEdsRuh7SY2ImdOORBluDY47Ezfh7uzOKVQQtXOvad+zhz7h2t0+mg3++j2+3CMAwF0zTR6/Wg67qKS7/JyVgDVUu9pqHD/PgBPd2AFgQB8jzHYDCAP5nAcRxM6O/7PjzPU/6Xw0O4rqtqbNvGaDSCSxhSbVGUUDbbp08BTRZkQiBiDPF2izAMFRidoygCTwXFC4Tkh+FG5WQ8TlMwzhHHMRK2AV84iI7m0KQKaQmLEPkeqrJEVVXHqCm+XmBjGaiKjGI1SpmnOFvOwVffya9JZQGpU2Q5NH88VoTO0wd4de4MAtsi4UCw/gHqw/D5TXy6cRZi/hV8myNJuFqRcWUHb69dUr11LSvlZTSy3Ju01UEfn/duYxv8REn5lBqlhZaO5Zs9IIuVsqoqUZD60YvHsF4+axFCKdWm06k6CJGgKAXKLEVjy8UClj3EwPUxcr2TRrnDdcQU5O4bU4Tz2TdwUeLyPQMXdt/j6qMe8kyogoxGi6mBxwR+rLj6TXqrc4CH7/aVX5LiE8LFbIZY5Lh4v4Pzd17j+t0nEEmE00wqbFSOVyvMj5b/HpmFUxR8jJr56oXbBG2iNsHfl/xBeJqa/ymUozfjtwl/AVHVMOc8bTJwAAAAAElFTkSuQmCC'); background-size: cover; display: block;\"\n  ></span>\n  <img\n        class=\"gatsby-resp-image-image\"\n        alt=\"image thumbnail workflow\"\n        title=\"image thumbnail workflow\"\n        src=\"/static/b6876527bbb55d54e53bf1a89db4e260/fcda8/2020-03-12-11-20-44.png\"\n        srcset=\"/static/b6876527bbb55d54e53bf1a89db4e260/12f09/2020-03-12-11-20-44.png 148w,\n/static/b6876527bbb55d54e53bf1a89db4e260/e4a3f/2020-03-12-11-20-44.png 295w,\n/static/b6876527bbb55d54e53bf1a89db4e260/fcda8/2020-03-12-11-20-44.png 590w,\n/static/b6876527bbb55d54e53bf1a89db4e260/4597d/2020-03-12-11-20-44.png 631w\"\n        sizes=\"(max-width: 590px) 100vw, 590px\"\n        style=\"width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;\"\n        loading=\"lazy\"\n      />\n  </a>\n    </span></p>\n<ul>\n<li>S3 events</li>\n<li>plugins to deploy python dependencies (docker needed)</li>\n</ul>\n<p>Triggering a function from an s3 event :\n<span\n      class=\"gatsby-resp-image-wrapper\"\n      style=\"position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 537px; \"\n    >\n      <a\n    class=\"gatsby-resp-image-link\"\n    href=\"/static/dc0405749be0341f90a42e30afb5d368/b1cde/2020-03-12-11-27-59.png\"\n    style=\"display: block\"\n    target=\"_blank\"\n    rel=\"noopener\"\n  >\n    <span\n    class=\"gatsby-resp-image-background-image\"\n    style=\"padding-bottom: 52.02702702702703%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAKCAYAAAC0VX7mAAAACXBIWXMAAAsTAAALEwEAmpwYAAABt0lEQVQoz31S226jMBTMh6QJ+AbY2IAJt4TmtpsmVaVK+7La//+R2WNyUSpVfRidY2MPM2c805nGWuboucaGG2yVRZqliAUHlwIxgd3AhYCU8kfMMp2hlCn2IsdBWLyrEoekQM1T1FGKdWTQMo02pnPKgHGJKGKIGZ8QRVTjKxgTgVBDKIlSJHjlOU7M4kjoTY6PscafscGucjj6AoehwjgW2G1LdG2OtsnxSuuutVgPDrU3mGkiDFJTpfCv6PHXtTi3HXzr0Q85ms7AVaTOZ6gIQx9IHJqVmbClvm0MOkJZpE+EUuG3r/HpG1zWA0zp8LKMJ3vR8gayt6A6f4mxpBown8dYLNhXy4rUCRp4pAS0TDCoHJZGUMsMhgKqqvB3jcJlcATvr+uAZmUnq0rdQtFPhErIKd1OaLxxh5MsMTQVLmdSfWpw3HucT9f+8rbC+/m6N3R2IgscXwjDZngqQdkvbtGmFp4U9HRhvy0wbiiAxmJcF1MYGwoiSeRk9/FsviMsyO6OEt+lBfIkg6TZcC4mW+EcY/yB+71Qv1V4/5jQ+9xIQ0op1dTBOkMWV6Qwf5A/n7/3/wEfdy27/6pabwAAAABJRU5ErkJggg=='); background-size: cover; display: block;\"\n  ></span>\n  <img\n        class=\"gatsby-resp-image-image\"\n        alt=\"2020 03 12 11 27 59\"\n        title=\"2020 03 12 11 27 59\"\n        src=\"/static/dc0405749be0341f90a42e30afb5d368/b1cde/2020-03-12-11-27-59.png\"\n        srcset=\"/static/dc0405749be0341f90a42e30afb5d368/12f09/2020-03-12-11-27-59.png 148w,\n/static/dc0405749be0341f90a42e30afb5d368/e4a3f/2020-03-12-11-27-59.png 295w,\n/static/dc0405749be0341f90a42e30afb5d368/b1cde/2020-03-12-11-27-59.png 537w\"\n        sizes=\"(max-width: 537px) 100vw, 537px\"\n        style=\"width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;\"\n        loading=\"lazy\"\n      />\n  </a>\n    </span></p>\n<p>plugin :\nserverless-python-requirements\nit installs what’s written in requirements.txt file.\nPillow => import PIL</p>\n<h2>Real world example : REST API with API Gateway and DynamoDB</h2>\n<p><span\n      class=\"gatsby-resp-image-wrapper\"\n      style=\"position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 590px; \"\n    >\n      <a\n    class=\"gatsby-resp-image-link\"\n    href=\"/static/b5b41995e89f79dca6fd564651c701c0/374ac/2020-03-12-11-54-44.png\"\n    style=\"display: block\"\n    target=\"_blank\"\n    rel=\"noopener\"\n  >\n    <span\n    class=\"gatsby-resp-image-background-image\"\n    style=\"padding-bottom: 56.08108108108109%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAALCAYAAAB/Ca1DAAAACXBIWXMAAAsTAAALEwEAmpwYAAABzklEQVQoz4VTTW+bQBDlX/Zv9A/0YFU9VOo9h1x7aFUpbVWp19wSOZYCpVjYWIAhxgbLdsF8LrB+3VlsN8iqMtKIYffx5s3bRZlMJrBtG4ZhgGrTNDGdTjEej2VNOXp4gKaq0DQNw+FQYlXxPp/P8bRYwHdtBFMV6i8dCmMMeZ5LMtd1JQEBqZ7NZvBErQmgaXbNiMhxHIk/HA6Q0ZaAf4dtuICyWq1QlqXMoih6z6qqRDJkG4FJEzBWo67ZeS/LMplpvEORbODMJlD2+71swnkrO56SgohZXcO6fo3Uuu9w7T9cy3lXdzoRrddQkiTB8ziPIYJUtPwA7+sH5L5x3OcXOM67tTAMhcI0FV1rjH68RbbznqnlaJpGdnc/DZC7j2eFJ4IvtwasxZ8zsSRM0wysKnD3/R3itQMhSHgllIkPSSER2h/fIHceZV2VhfSS4tXgBj9HXp+QPKST3sUFsrzsjUPmNy2Hf/Mehad3e0d11DCKQuy22z5hHMc9D2kcfjSbTrAsKzhi5Mzpj0zZNLW05WQB3RiFTvJ/UdfdaP7nAdiTjpdiK9QqlmVJqcvl8iI9zxN/QoDf367g6fdYrTdYBsEFLhBrURRB13X8BRA8PodA16+ZAAAAAElFTkSuQmCC'); background-size: cover; display: block;\"\n  ></span>\n  <img\n        class=\"gatsby-resp-image-image\"\n        alt=\"2020 03 12 11 54 44\"\n        title=\"2020 03 12 11 54 44\"\n        src=\"/static/b5b41995e89f79dca6fd564651c701c0/fcda8/2020-03-12-11-54-44.png\"\n        srcset=\"/static/b5b41995e89f79dca6fd564651c701c0/12f09/2020-03-12-11-54-44.png 148w,\n/static/b5b41995e89f79dca6fd564651c701c0/e4a3f/2020-03-12-11-54-44.png 295w,\n/static/b5b41995e89f79dca6fd564651c701c0/fcda8/2020-03-12-11-54-44.png 590w,\n/static/b5b41995e89f79dca6fd564651c701c0/374ac/2020-03-12-11-54-44.png 634w\"\n        sizes=\"(max-width: 590px) 100vw, 590px\"\n        style=\"width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;\"\n        loading=\"lazy\"\n      />\n  </a>\n    </span></p>\n<p>Lambda functions are stateless, they don’t keep anything in memory, so they will write to DynamoDB.</p>\n<p>package.json => like requirements.txt</p>\n<div class=\"gatsby-highlight\" data-language=\"yaml\"><pre class=\"language-yaml\"><code class=\"language-yaml\"><span class=\"token key atrule\">environment</span> <span class=\"token punctuation\">:</span>\n  <span class=\"token key atrule\">DYNAMODB_TABLE</span><span class=\"token punctuation\">:</span> $<span class=\"token punctuation\">{</span>self<span class=\"token punctuation\">:</span>service<span class=\"token punctuation\">}</span><span class=\"token punctuation\">-</span>$<span class=\"token punctuation\">{</span>opt<span class=\"token punctuation\">:</span>stage<span class=\"token punctuation\">,</span> self<span class=\"token punctuation\">:</span>provider.stage<span class=\"token punctuation\">}</span></code></pre></div>\n<p><span\n      class=\"gatsby-resp-image-wrapper\"\n      style=\"position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 590px; \"\n    >\n      <a\n    class=\"gatsby-resp-image-link\"\n    href=\"/static/26777e86bb8e1c783800d5c64bb36040/ee515/2020-03-12-13-56-44.png\"\n    style=\"display: block\"\n    target=\"_blank\"\n    rel=\"noopener\"\n  >\n    <span\n    class=\"gatsby-resp-image-background-image\"\n    style=\"padding-bottom: 27.7027027027027%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAGCAYAAADDl76dAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAvklEQVQY05WR/QqCQBDEfRX11tTUO88zKfrAyLR6/+eZXPUsKqL++DEzyzIsrHP1JRqS0EGMPI+hZIRcxdC9Z+Usp5nNQggQ0cCzZ5xGZKgpwzZNEUULhGHQ6wPO82zyXwslhdhXCtUmQZaG8H0xLLFa/5qJPheydygI0DYGt67EYafeLviXsbA1uPR05xLrKoPr+vC8Eb7K+l9wNEWojUJ9yHGsCzQnM5QWOoEpEqj+EYVeDp5nllWZzjtWmTtlSrLx7eY+FgAAAABJRU5ErkJggg=='); background-size: cover; display: block;\"\n  ></span>\n  <img\n        class=\"gatsby-resp-image-image\"\n        alt=\"2020 03 12 13 56 44\"\n        title=\"2020 03 12 13 56 44\"\n        src=\"/static/26777e86bb8e1c783800d5c64bb36040/fcda8/2020-03-12-13-56-44.png\"\n        srcset=\"/static/26777e86bb8e1c783800d5c64bb36040/12f09/2020-03-12-13-56-44.png 148w,\n/static/26777e86bb8e1c783800d5c64bb36040/e4a3f/2020-03-12-13-56-44.png 295w,\n/static/26777e86bb8e1c783800d5c64bb36040/fcda8/2020-03-12-13-56-44.png 590w,\n/static/26777e86bb8e1c783800d5c64bb36040/efc66/2020-03-12-13-56-44.png 885w,\n/static/26777e86bb8e1c783800d5c64bb36040/c83ae/2020-03-12-13-56-44.png 1180w,\n/static/26777e86bb8e1c783800d5c64bb36040/ee515/2020-03-12-13-56-44.png 1269w\"\n        sizes=\"(max-width: 590px) 100vw, 590px\"\n        style=\"width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;\"\n        loading=\"lazy\"\n      />\n  </a>\n    </span></p>\n<p><span\n      class=\"gatsby-resp-image-wrapper\"\n      style=\"position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 590px; \"\n    >\n      <a\n    class=\"gatsby-resp-image-link\"\n    href=\"/static/04f26bead323c0d75b7ad011887be5cb/43fbc/2020-03-12-13-58-10.png\"\n    style=\"display: block\"\n    target=\"_blank\"\n    rel=\"noopener\"\n  >\n    <span\n    class=\"gatsby-resp-image-background-image\"\n    style=\"padding-bottom: 60.810810810810814%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAMCAYAAABiDJ37AAAACXBIWXMAAAsTAAALEwEAmpwYAAACDklEQVQoz1WSa5LbIBCEfYxY9tqSACGEQG/r4VpHzia1lb3/fToz2HJtfkxRQsxHTze7fRRhvPRYLh2SJMXb2xuOx2NYD4cDqqpCWZbopMFNWMy6hMoypKlAQsWrEPK17n7sDyh1jK+fHYz1iM/nFzCiy263BdfrBbnOcBcl7lkFm+cYBodlbjH0Dm1jcaFv7w0BowO8Efi7DogT8YJtwGUeaYIOIpPoSeVnVqMxFkWpUXlL6vNQzuUojH4oZODX2kMojdPp9N/IdV1Tg4OUEplS6LIC78rB5A+Qoj0eNRSd2UXUXKUxxraGJa++A1lh3/fBRyVVgCqq38Lhw9T4/NPTqBYpwRjMtYtIRUmHa2rixjN5yMo2YNe1YV8qMl6KAB5p9C53aPwUlIaLNmCSphhorGWesSwLrKUbaY8PJUlCwA7Oe2gCNcogo4T5H18gn6of9QRqrXGdJkrIU3JDaGB1cRyHtW3b8I+bbqoM/vm8wDRSypND11r03SOc8GwYOBLQGBPU8ZvbAtnv9wRsKE2PlBS1Mn+knFtITeoIkGUKmp4Uq+NLA3CmcRnGifI3+8jFAfV9Rx764J0gaEEv4S7Jv4Ie+exgCx2Uyc1DHnF6KmTzi6II0K04ZefcSwGDf/EDz2t8rCO8MwH4UsigdV3DqNzcNE1Qto08DH1QvpnPjTx6RWM7S56T4u8p/wM5LmGs3lBmMAAAAABJRU5ErkJggg=='); background-size: cover; display: block;\"\n  ></span>\n  <img\n        class=\"gatsby-resp-image-image\"\n        alt=\"2020 03 12 13 58 10\"\n        title=\"2020 03 12 13 58 10\"\n        src=\"/static/04f26bead323c0d75b7ad011887be5cb/fcda8/2020-03-12-13-58-10.png\"\n        srcset=\"/static/04f26bead323c0d75b7ad011887be5cb/12f09/2020-03-12-13-58-10.png 148w,\n/static/04f26bead323c0d75b7ad011887be5cb/e4a3f/2020-03-12-13-58-10.png 295w,\n/static/04f26bead323c0d75b7ad011887be5cb/fcda8/2020-03-12-13-58-10.png 590w,\n/static/04f26bead323c0d75b7ad011887be5cb/43fbc/2020-03-12-13-58-10.png 797w\"\n        sizes=\"(max-width: 590px) 100vw, 590px\"\n        style=\"width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;\"\n        loading=\"lazy\"\n      />\n  </a>\n    </span></p>\n<p>POST on /todos => call create function\nthis is wired to the API gateway</p>\n<p>under resources, you can specify the cloud formation template</p>\n<p><span\n      class=\"gatsby-resp-image-wrapper\"\n      style=\"position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 590px; \"\n    >\n      <a\n    class=\"gatsby-resp-image-link\"\n    href=\"/static/a67310fb16b163e9cc3aea7c78bfc8b0/41d3b/2020-03-12-14-04-26.png\"\n    style=\"display: block\"\n    target=\"_blank\"\n    rel=\"noopener\"\n  >\n    <span\n    class=\"gatsby-resp-image-background-image\"\n    style=\"padding-bottom: 68.91891891891892%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAOCAYAAAAvxDzwAAAACXBIWXMAAAsTAAALEwEAmpwYAAABt0lEQVQ4y51T23KbMBT0pzjoSEiAhAwpGBzHGF/a5qGP7XT6/9+xXeg4nSbTCcnDjo4YsTq7e7Ty1qGTDPfKwhuLtSgk6g+UCLTWzxDu5cW3l1jZNMXJBHzzDZ6qLdoQUWUedRGQ8bIkIXki8wVLSFc6Ncidw/d2jx/9gJ/jAb/OEwZ8Pe7gg0VdFYgxX9ihtbijzF5ynCRgCAGnTYldHXD9XONyrnBfZwjevkn2TDh59UkczuIxJh6POiAkKUpKjuxei6ZkWSZ5IpwOGP601Tlanc3dtgyqYlBN4uAYlmiZiRd1eLt1bQQb7VCJxY6ke0XvfD77KOptuf92yE0mBgNJLvTyTNmXJKAtAwr6p95LmFJObwp0lN2YHInRWE+zOOOvf++SfEfJkZI3k2RdYDAeG19QsvuYZDdJlgJfVIkxj3h6qNDSQ8dZlQVkr1LuGMSRo3MiDiQe2OXkZXSeo6XmlG9q/oeZULNQHIsp3auUMwbtcSHZIfUI7DZNOY88Y+jtDZadW2vmOmX9SvI0f1fF10KiXcO1K7Hnuu9L9B0Tbxja1mN4jHM9HiOufEkPfcA4RASO1288Lp9GYr73zAAAAABJRU5ErkJggg=='); background-size: cover; display: block;\"\n  ></span>\n  <img\n        class=\"gatsby-resp-image-image\"\n        alt=\"2020 03 12 14 04 26\"\n        title=\"2020 03 12 14 04 26\"\n        src=\"/static/a67310fb16b163e9cc3aea7c78bfc8b0/fcda8/2020-03-12-14-04-26.png\"\n        srcset=\"/static/a67310fb16b163e9cc3aea7c78bfc8b0/12f09/2020-03-12-14-04-26.png 148w,\n/static/a67310fb16b163e9cc3aea7c78bfc8b0/e4a3f/2020-03-12-14-04-26.png 295w,\n/static/a67310fb16b163e9cc3aea7c78bfc8b0/fcda8/2020-03-12-14-04-26.png 590w,\n/static/a67310fb16b163e9cc3aea7c78bfc8b0/41d3b/2020-03-12-14-04-26.png 774w\"\n        sizes=\"(max-width: 590px) 100vw, 590px\"\n        style=\"width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;\"\n        loading=\"lazy\"\n      />\n  </a>\n    </span></p>\n<p><span\n      class=\"gatsby-resp-image-wrapper\"\n      style=\"position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 590px; \"\n    >\n      <a\n    class=\"gatsby-resp-image-link\"\n    href=\"/static/67b3e455d99c8110313a6ea2e5826264/748f4/2020-03-12-14-05-12.png\"\n    style=\"display: block\"\n    target=\"_blank\"\n    rel=\"noopener\"\n  >\n    <span\n    class=\"gatsby-resp-image-background-image\"\n    style=\"padding-bottom: 5.405405405405405%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAABCAYAAADeko4lAAAACXBIWXMAAAsTAAALEwEAmpwYAAAATElEQVQI1y3I4QpAMBRAYQ8zpdTukqlhG4sik/d/mmPFr9N3KlENu9IcSgi1xjkhLYZp1AQvrNHgZ/lcuqWO+P8nW+7LFhvy2TPYlhcSPCEq6lNFjAAAAABJRU5ErkJggg=='); background-size: cover; display: block;\"\n  ></span>\n  <img\n        class=\"gatsby-resp-image-image\"\n        alt=\"2020 03 12 14 05 12\"\n        title=\"2020 03 12 14 05 12\"\n        src=\"/static/67b3e455d99c8110313a6ea2e5826264/fcda8/2020-03-12-14-05-12.png\"\n        srcset=\"/static/67b3e455d99c8110313a6ea2e5826264/12f09/2020-03-12-14-05-12.png 148w,\n/static/67b3e455d99c8110313a6ea2e5826264/e4a3f/2020-03-12-14-05-12.png 295w,\n/static/67b3e455d99c8110313a6ea2e5826264/fcda8/2020-03-12-14-05-12.png 590w,\n/static/67b3e455d99c8110313a6ea2e5826264/748f4/2020-03-12-14-05-12.png 656w\"\n        sizes=\"(max-width: 590px) 100vw, 590px\"\n        style=\"width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;\"\n        loading=\"lazy\"\n      />\n  </a>\n    </span></p>\n<p>response should always have a statusCode and a body.</p>\n<p><span\n      class=\"gatsby-resp-image-wrapper\"\n      style=\"position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 590px; \"\n    >\n      <a\n    class=\"gatsby-resp-image-link\"\n    href=\"/static/a7519a94a5908f513899302f06d78fe7/47aef/2020-03-12-14-06-51.png\"\n    style=\"display: block\"\n    target=\"_blank\"\n    rel=\"noopener\"\n  >\n    <span\n    class=\"gatsby-resp-image-background-image\"\n    style=\"padding-bottom: 67.56756756756756%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAOCAYAAAAvxDzwAAAACXBIWXMAAAsTAAALEwEAmpwYAAABqklEQVQ4y41T2Y7bMAz0r8S27sOW5ENJnAabLRboPmz//2umtBMUteFN+jCQLYFDcoYsbDvAqxYqJPjUoes9+qGFcQ5KKxhr7jAKSgloJZdTLaeE1vLxJsE5Q2HjgM5d0KoIe6ggmgQRO+hhgKIEC1p68x6srlER6icopusN19M7xjQg54wQAqI7IdgzGpspq0JZVairewBj7CkKR+0476gtDakYrDGw1sNI8QCDU5zeFJHzFened3E8ZpzPJ3SkW4gWfYoYh4i+kchBIziFaEkzoyGEeE04jqRhH9AmhSO17L0lAg6nBYLhUNahZhzV3PYjaHuuCJ2QuL2/IU9nKHI2hJac0yuhGftHu1cVGrL94+eIyzQgBqp2mqjSFrG1aBqNFA3dG/Td/O9fV6hIF3Ng4PNIlCXKQ7kK2MPTChk5V/H7pZTkphTfEmyDdwktDe719oHbj184pQs86cgowezojO2o7BGvCHMe8PvrE+lyRSC340h6jREdJcp5JNf94vB/EzaJBjvVsNrTntq/2zKTbEdlW+m+KbTUy1hQa4zmbV5wxr+v5BXhH1fTnkHX9F3TAAAAAElFTkSuQmCC'); background-size: cover; display: block;\"\n  ></span>\n  <img\n        class=\"gatsby-resp-image-image\"\n        alt=\"2020 03 12 14 06 51\"\n        title=\"2020 03 12 14 06 51\"\n        src=\"/static/a7519a94a5908f513899302f06d78fe7/fcda8/2020-03-12-14-06-51.png\"\n        srcset=\"/static/a7519a94a5908f513899302f06d78fe7/12f09/2020-03-12-14-06-51.png 148w,\n/static/a7519a94a5908f513899302f06d78fe7/e4a3f/2020-03-12-14-06-51.png 295w,\n/static/a7519a94a5908f513899302f06d78fe7/fcda8/2020-03-12-14-06-51.png 590w,\n/static/a7519a94a5908f513899302f06d78fe7/efc66/2020-03-12-14-06-51.png 885w,\n/static/a7519a94a5908f513899302f06d78fe7/47aef/2020-03-12-14-06-51.png 1063w\"\n        sizes=\"(max-width: 590px) 100vw, 590px\"\n        style=\"width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;\"\n        loading=\"lazy\"\n      />\n  </a>\n    </span></p>\n<h2> Personal investigation : creating a full stack app</h2>\n<p>If you want to build an app that can leverage that rest API that is written in Lambda, you can use aws-amplify : <a href=\"https://aws-amplify.github.io/docs/js/api\">https://aws-amplify.github.io/docs/js/api</a>.</p>","frontmatter":{"title":"Lambda training","date":"March 11, 2020","description":"Notes taken during AWS lambda training"}}},"pageContext":{"slug":"/lambda-training/","previous":{"fields":{"slug":"/aws-training/"},"frontmatter":{"title":"Formation AWS 09-10/03/2020","tags":["AWS","training","cloud","devOps"]}},"next":{"fields":{"slug":"/docker-training/"},"frontmatter":{"title":"Docker training","tags":["training","devOps"]}}}},"staticQueryHashes":["2841359383","3145232782"]}