Statistics
4
Views
0
Downloads
0
Donations
Support
Share
Uploader

高宏飞

Shared on 2026-03-02

AuthorAkshat Paul, Mahesh Haldar

No description

Tags
No tags
Publisher: Apress
Publish Year: 2023
Language: 英文
File Format: PDF
File Size: 13.0 MB
Support Statistics
¥.00 · 0times
Text Preview (First 20 pages)
Registered users can read the full content for free

Register as a Gaohf Library member to read the complete e-book online for free and enjoy a better reading experience.

(This page has no text content)
Serverless Web Applications with AWS Amplify: Build Full-Stack Serverless Applications Using Amazon Web Services ISBN-13 (pbk): 978-1-4842-8706-4 ISBN-13 (electronic): 978-1-4842-8707-1 https://doi.org/10.1007/978-1-4842-8707-1 Copyright © 2023 by Akshat Paul, Mahesh Haldar This work is subject to copyright. All rights are reserved by the Publisher, whether the whole or part of the material is concerned, specifically the rights of translation, reprinting, reuse of illustrations, recitation, broadcasting, reproduction on microfilms or in any other physical way, and transmission or information storage and retrieval, electronic adaptation, computer software, or by similar or dissimilar methodology now known or hereafter developed. Trademarked names, logos, and images may appear in this book. Rather than use a trademark symbol with every occurrence of a trademarked name, logo, or image we use the names, logos, and images only in an editorial fashion and to the benefit of the trademark owner, with no intention of infringement of the trademark. The use in this publication of trade names, trademarks, service marks, and similar terms, even if they are not identified as such, is not to be taken as an expression of opinion as to whether or not they are subject to proprietary rights. While the advice and information in this book are believed to be true and accurate at the date of publication, neither the authors nor the editors nor the publisher can accept any legal responsibility for any errors or omissions that may be made. The publisher makes no warranty, express or implied, with respect to the material contained herein. Managing Director, Apress Media LLC: Welmoed Spahr Acquisitions Editor: James Robinson-Prior Development Editor: James Markham Coordinating Editor: Jessica Vakili Distributed to the book trade worldwide by Springer Science+Business Media New York, 233 Spring Street, 6th Floor, New York, NY 10013. Phone 1-800-SPRINGER, fax (201) 348-4505, e-mail orders-ny@springer- sbm.com, or visit www.springeronline.com. Apress Media, LLC is a California LLC and the sole member (owner) is Springer Science + Business Media Finance Inc (SSBM Finance Inc). SSBM Finance Inc is a Delaware corporation. For information on translations, please e-mail booktranslations@springernature.com; for reprint, paperback, or audio rights, please e-mail bookpermissions@springernature.com. Apress titles may be purchased in bulk for academic, corporate, or promotional use. eBook versions and licenses are also available for most titles. For more information, reference our Print and eBook Bulk Sales web page at http://www.apress.com/bulk-sales. Any source code or other supplementary material referenced by the author in this book is available to readers on the Github repository: https://github.com/haldarmahesh/amplify-book. For more detailed information, please visit http://www.apress.com/source-code. Printed on acid-free paper Akshat Paul Gurgaon, Haryana, India Mahesh Haldar Bahraich, Uttar Pradesh, India
iii Table of Contents About the Authors ���������������������������������������������������������������������������������������������������� ix Acknowledgments ��������������������������������������������������������������������������������������������������� xi Introduction ����������������������������������������������������������������������������������������������������������� xiii Chapter 1: Introduction to Serverless����������������������������������������������������������������������� 1 A Little Background ����������������������������������������������������������������������������������������������������������������������� 1 Rise of Cloud Computing ��������������������������������������������������������������������������������������������������������������� 3 Key Advantages of Cloud Environments ���������������������������������������������������������������������������������� 4 The Emergence of Serverless Computing: A Game- Changer for Cloud Development������������������� 5 Backend As a Service (BaaS)��������������������������������������������������������������������������������������������������� 6 Function As a Service/Serverless Computing �������������������������������������������������������������������������� 8 Benefits and Weaknesses of a Serverless Architecture �������������������������������������������������������� 10 Benefits of Serverless Architecture ��������������������������������������������������������������������������������������� 10 Weaknesses of Serverless ���������������������������������������������������������������������������������������������������� 12 AWS Amplify Introduction ������������������������������������������������������������������������������������������������������������ 13 Local Setup ��������������������������������������������������������������������������������������������������������������������������������� 14 Setting Up AWS Amplify CLI ��������������������������������������������������������������������������������������������������� 15 Summary������������������������������������������������������������������������������������������������������������������������������������� 22 Chapter 2: UI Component and Authentication ��������������������������������������������������������� 23 Authentication Basics ����������������������������������������������������������������������������������������������������������������� 23 What Is Authentication? ��������������������������������������������������������������������������������������������������������� 24 How Can Users Prove Credibility? ����������������������������������������������������������������������������������������� 24 What Is Authorization? ���������������������������������������������������������������������������������������������������������������� 25 Broken Authentication ����������������������������������������������������������������������������������������������������������� 27 Types of Authentication ��������������������������������������������������������������������������������������������������������� 28 Why MFA Is Important ����������������������������������������������������������������������������������������������������������� 30
iv Types of MFA ������������������������������������������������������������������������������������������������������������������������� 31 JSON Web Tokens ������������������������������������������������������������������������������������������������������������������ 32 JWT Authentication Flow ������������������������������������������������������������������������������������������������������� 33 JWT Structure ������������������������������������������������������������������������������������������������������������������������ 34 Setting Up Authentication Using AWS Amplify ���������������������������������������������������������������������������� 35 Creating Our React App ��������������������������������������������������������������������������������������������������������� 36 Configuring the Backend for Our React Application �������������������������������������������������������������� 37 Setting Up Authentication ����������������������������������������������������������������������������������������������������������� 41 Creating an Auth Service ������������������������������������������������������������������������������������������������������� 42 Amplify UI React Components ����������������������������������������������������������������������������������������������� 43 Integrating Auth with React App �������������������������������������������������������������������������������������������� 45 Logging In and Logging Out ��������������������������������������������������������������������������������������������������� 51 OAuth Social Login ���������������������������������������������������������������������������������������������������������������������� 57 What Is OAuth? ���������������������������������������������������������������������������������������������������������������������� 58 Setting Up React App ������������������������������������������������������������������������������������������������������������� 71 Summary������������������������������������������������������������������������������������������������������������������������������������� 72 Chapter 3: CRUD and REST APIs – Pillars of Efficient Data Exchange �������������������� 75 API Overview ������������������������������������������������������������������������������������������������������������������������������� 75 Why Do We Need an API? ������������������������������������������������������������������������������������������������������ 77 API Design ����������������������������������������������������������������������������������������������������������������������������� 78 Types of APIs ������������������������������������������������������������������������������������������������������������������������� 79 API Specifications and Protocols ������������������������������������������������������������������������������������������� 79 Introduction to Lambda ��������������������������������������������������������������������������������������������������������������� 80 Lambda Functions – The Serverless Functions ��������������������������������������������������������������������� 80 Lambda Functions ����������������������������������������������������������������������������������������������������������������� 81 Use Cases of Lambda Functions ������������������������������������������������������������������������������������������� 82 Cons of Using Lambda Functions ������������������������������������������������������������������������������������������ 82 How Lambda Function Works ������������������������������������������������������������������������������������������������ 82 What Is the Lambda Layer? ��������������������������������������������������������������������������������������������������� 83 Table of ConTenTs
v Working with REST APIs �������������������������������������������������������������������������������������������������������������� 85 Saving the File ����������������������������������������������������������������������������������������������������������������������� 92 PUT API to Update Items �������������������������������������������������������������������������������������������������������� 97 Using the Delete API to Delete an Item by ID ������������������������������������������������������������������������� 99 Summary����������������������������������������������������������������������������������������������������������������������������������� 100 Chapter 4: Integrating REST APIs with a Frontend React App ������������������������������ 101 Creating a Basic React ToDo App ���������������������������������������������������������������������������������������������� 101 Adding a New Item �������������������������������������������������������������������������������������������������������������� 105 Enhancing the User Experience ������������������������������������������������������������������������������������������������ 108 Enhancement 1 �������������������������������������������������������������������������������������������������������������������� 108 Enhancement 2 �������������������������������������������������������������������������������������������������������������������� 109 Do It Yourself (DIY): Deleting and Updating ������������������������������������������������������������������������������� 111 GraphQL API ������������������������������������������������������������������������������������������������������������������������� 111 Custom Resolver������������������������������������������������������������������������������������������������������������������ 118 Modifying the Lambda Handler ������������������������������������������������������������������������������������������� 119 Testing the API ��������������������������������������������������������������������������������������������������������������������� 121 Creating New Item – Mutation Query ���������������������������������������������������������������������������������� 122 Testing the Mutation ������������������������������������������������������������������������������������������������������������ 124 Updating the Item by ID – Mutation Query �������������������������������������������������������������������������� 125 Integrating GraphQL API in React ���������������������������������������������������������������������������������������������� 130 Integrating GraphQL Mutation API ��������������������������������������������������������������������������������������� 133 Do It Yourself (DIY): Modifying the React App ���������������������������������������������������������������������������� 134 Subscription API ������������������������������������������������������������������������������������������������������������������ 134 Integrating Subscription API with React ����������������������������������������������������������������������������������� 139 Why APIs Throw 401 Error ��������������������������������������������������������������������������������������������������������� 142 Summary����������������������������������������������������������������������������������������������������������������������������������� 144 Table of ConTenTs
vi Chapter 5: Offline-First App ���������������������������������������������������������������������������������� 145 Benefits of the Client-Server Model ������������������������������������������������������������������������������������������ 145 Use Cases of Offline Apps ��������������������������������������������������������������������������������������������������������� 146 The Offline App – Design Overview ������������������������������������������������������������������������������������������� 148 Goal ������������������������������������������������������������������������������������������������������������������������������������� 148 Add Offline Features in React�js ������������������������������������������������������������������������������������������������ 150 Assumption �������������������������������������������������������������������������������������������������������������������������� 150 The Page Render Function �������������������������������������������������������������������������������������������������� 151 Real-Time Online HTTP Client ���������������������������������������������������������������������������������������������� 153 Offline HTTP Client ��������������������������������������������������������������������������������������������������������������� 153 Rendering the Offline and Online Items in the List ������������������������������������������������������������������� 156 Testing Offline Feature �������������������������������������������������������������������������������������������������������������� 157 Testing the Online Syncing Feature ������������������������������������������������������������������������������������������ 162 Things to Consider While Creating Offline Apps ������������������������������������������������������������������������ 162 Summary����������������������������������������������������������������������������������������������������������������������������������� 164 Chapter 6: Data Storage ��������������������������������������������������������������������������������������� 165 Introduction ������������������������������������������������������������������������������������������������������������������������������� 165 Types of Data to Store ��������������������������������������������������������������������������������������������������������������� 166 Cloud Storage As a Service ������������������������������������������������������������������������������������������������������� 167 Database Provision and Integration ������������������������������������������������������������������������������������������ 167 Provisioning Database ��������������������������������������������������������������������������������������������������������� 168 Integrating the Database with APIs ������������������������������������������������������������������������������������� 169 Assigning IDs to New Items ������������������������������������������������������������������������������������������������� 172 Modifying the Create Todo Item Function ���������������������������������������������������������������������������� 172 Modifying the Get All Items API �������������������������������������������������������������������������������������������� 174 Do It Yourself (DIY) ��������������������������������������������������������������������������������������������������������������� 175 File Storage – S3 Bucket����������������������������������������������������������������������������������������������������������� 176 Goal ������������������������������������������������������������������������������������������������������������������������������������� 176 Approach ����������������������������������������������������������������������������������������������������������������������������� 176 Provision S3 Bucket ������������������������������������������������������������������������������������������������������������� 177 Table of ConTenTs
vii Verifying the Resources on Amazon Console ���������������������������������������������������������������������� 179 The Lambda Function ���������������������������������������������������������������������������������������������������������� 184 Testing the Thumbnail Creation by Lambda Trigger ������������������������������������������������������������ 187 Checking the Lambda Function Logs ���������������������������������������������������������������������������������� 190 Summary����������������������������������������������������������������������������������������������������������������������������������� 193 Chapter 7: Analytics ��������������������������������������������������������������������������������������������� 195 A High-Level View of Analytics �������������������������������������������������������������������������������������������������� 195 Analytics Fundamentals ������������������������������������������������������������������������������������������������������������ 198 Terminologies ���������������������������������������������������������������������������������������������������������������������������� 199 Setting Up Amplify Analytics Backend �������������������������������������������������������������������������������������� 200 Recording Events and Actions��������������������������������������������������������������������������������������������������� 201 Recording Events from our React App ��������������������������������������������������������������������������������� 202 Recording Button Clicks on the Sign-In Page ���������������������������������������������������������������������� 204 Why Is There a Delay in API Calls After We Click the Button to Record? ������������������������������ 206 Tracking Page Views ������������������������������������������������������������������������������������������������������������ 207 Automatic Tracking �������������������������������������������������������������������������������������������������������������� 209 Events Dashboard on AWS Console ������������������������������������������������������������������������������������� 210 Limitations of AWS Pinpoint Service ������������������������������������������������������������������������������������ 213 Introduction to Kinesis �������������������������������������������������������������������������������������������������������������� 214 Streaming Analytics Data ���������������������������������������������������������������������������������������������������� 215 Setting Up Kinesis Backend ������������������������������������������������������������������������������������������������������ 215 Delivery Stream ������������������������������������������������������������������������������������������������������������������� 220 Writing the Data into the File ����������������������������������������������������������������������������������������������� 222 Streaming the Analytics Data from React App ��������������������������������������������������������������������� 225 Summary����������������������������������������������������������������������������������������������������������������������������������� 232 Table of ConTenTs
viii Chapter 8: Continuous Integration and Continuous Delivery/Continuous Deployment ����������������������������������������������������������������������������������������������������������� 233 The Goal of This Chapter ����������������������������������������������������������������������������������������������������������� 233 Defining CI/CD ��������������������������������������������������������������������������������������������������������������������������� 233 Difference Between CI and CD �������������������������������������������������������������������������������������������������� 234 Continuous Integration �������������������������������������������������������������������������������������������������������� 234 Continuous Delivery ������������������������������������������������������������������������������������������������������������� 235 Continuous Deployment������������������������������������������������������������������������������������������������������� 235 The Objective of the CI/CD Pipeline ������������������������������������������������������������������������������������������� 236 Pipeline As Code ����������������������������������������������������������������������������������������������������������������������� 236 Benefits of Pipeline As Code ������������������������������������������������������������������������������������������������ 237 Repository and Environments ���������������������������������������������������������������������������������������������� 237 Hosting the Application for Development Environment ������������������������������������������������������������� 238 Creating a New Environment and Hosting It ������������������������������������������������������������������������ 248 Password Protecting the Nonproduction Environment �������������������������������������������������������� 254 Summary����������������������������������������������������������������������������������������������������������������������������������� 256 Chapter 9: Amplify Supplements �������������������������������������������������������������������������� 257 Building Interactive Bots with AWS Lex Service ����������������������������������������������������������������������� 257 Important Terminologies ������������������������������������������������������������������������������������������������������ 260 Test the Chatbot������������������������������������������������������������������������������������������������������������������� 262 Boost Your Application with AI/ML Capability ���������������������������������������������������������������������������� 264 What Is Artificial Intelligence? ��������������������������������������������������������������������������������������������� 264 What Is Machine Learning? ������������������������������������������������������������������������������������������������� 265 Amplify Beyond React Web Apps ���������������������������������������������������������������������������������������������� 268 AWS Amplify Studio ������������������������������������������������������������������������������������������������������������� 270 Summary����������������������������������������������������������������������������������������������������������������������������������� 272 Index ��������������������������������������������������������������������������������������������������������������������� 273 Table of ConTenTs
ix About the Authors Akshat Paul is the Founder and CTO of Company360, a technology leader, author of four books on React Native, Ruby, and RubyMotion, and a former consultant at McKinsey & Company. With his extensive experience in mobile and web development, coupled with his strategic insights gained at McKinsey, he has delivered numerous enterprise and consumer applications over the years. As an influential voice in the tech industry, Akshat frequently speaks at conferences and meetups on various technologies. He has given talks at React Native EU, Cross-Platform Mobile Summit, Devops@scale Amsterdam, the DevTheory Conference India, RubyConfIndia, and #inspect-RubyMotion Conference Brussels and was a keynote speaker at technology leadership events in Bangkok and Kuala Lumpur. Besides technology Akshat spends time with his family, is an avid reader, and is obsessive about healthy eating. Mahesh Haldar is a passionate software engineer and expert in building scalable systems. With extensive experience in designing robust architectures, Mahesh empowers the team to fully harness the potential of cloud-based solutions. As a sought-after speaker, Mahesh has presented at technical meetups and conferences in Bangalore, Johannesburg, and Singapore. His outstanding contributions have earned recognition, including features in Yourstory magazine and being listed among India’s top 20 apps. Currently serving as a Principal Software Engineer at Carrefour, Mahesh leads a team of talented developers, delivering exceptional eCommerce experiences. His expertise has been pivotal in designing and implementing high-impact functionalities, effectively serving millions of daily customer requests. With a proven track record in developing complex large-scale systems for start-ups and renowned enterprises like Jago Bank and Mckinsey & Company, Mahesh brings a wealth of practical knowledge and expertise to the table.
xi As the saying goes, “If I have seen further, it is by standing on the shoulders of giants.” In the context of this book, those giants are the individuals who offered their unwavering support and invaluable guidance throughout my journey. Firstly, I want to express my profound gratitude to my parents, Shakuntala Paul and Anup Paul. Your unwavering belief in my abilities and steadfast encouragement have always propelled me forward. The spirit of continuous learning that you fostered in me has not only been instrumental in my personal growth, but it has also profoundly influenced my professional trajectory as a technology leader, and your tireless cheerleading during my biggest victories has always been my motivation to keep moving forward. I am eternally thankful for my wife, Anu Sharma. She has been my rock and my sanctuary throughout the process of writing this book. Her understanding, patience, and unconditional love were invaluable during those late-night writing sessions and bouts of writer’s block. Her ability to uplift my spirits during challenging moments and celebrate with me during my triumphs has been a constant source of inspiration. This book is as much her accomplishment as it is mine. I would also like to extend my heartfelt thanks to the Apress team: Jessica Vakili, James Robinson-Prior, and James Markham. Your collective expertise, support, and collaboration have played a vital role in the successful completion of this book. Your dedication to maintaining the quality and integrity of this work has not gone unnoticed, and I am deeply grateful for your tireless efforts. A special acknowledgment to Louise Corrigan, who was instrumental in the initial conceptualization of this book. To each and every one of you, I express my sincerest appreciation. This book would not have been possible without your enduring support, faith, and encouragement. Thank you for being a part of my journey. —Akshat Paul Acknowledgments
xii I would like to express my heartfelt gratitude to the following individuals who have been instrumental in the creation and completion of this book. My dearest friend and mentor, Akshat Paul, whose guidance, expertise, and unwavering support have been invaluable throughout this journey. Your wisdom and insights have shaped not only this book but also my growth as a technologist and as a writer. Thank you for believing in me. To my late father, Ram Ratan Haldar, who always taught me to work hard and instilled in me the love for knowledge and learning. Though you are no longer with us, your presence and influence continue to inspire me every day. To my mother, Champa Rani Haldar, whose unwavering love, encouragement, and sacrifices have been a constant source of strength and motivation. Your belief in my abilities and your unwavering support have been the driving force behind this accomplishment. And finally, to my loving wife, Prachita, who sacrificed many late nights and weekends without me while I was working on this book. Thank you for your unwavering support, encouragement, and patience. I must also extend my earnest appreciation to the team at Apress: Jessica Vakili, James Robinson-Prior, and James Markham. Your combined knowledge, unwavering support, and collaborative efforts were pivotal to the book’s successful completion. I am deeply grateful to each and every person who has played a role, big or small, in the creation of this book. Your contributions, encouragement, and belief in my abilities have made this book possible. —Mahesh Haldar aCknowledgmenTs
xiii As we progress further into the digital age, serverless architectures and web applications are continuously reshaping the technological landscape. As technology leaders, we often faced challenges when searching for thorough, hands-on resources on this topic. This motivated us to compose Serverless Web Applications with AWS Amplify, a book that represents the guide we wished existed when we first ventured into the field of serverless architecture. Serverless Web Applications with AWS Amplify is intended for a broad audience – from newbies taking their first steps in cloud development to advanced developers aiming to broaden their understanding of modern web application technologies. While prior knowledge of cloud computing might be helpful, it is not a prerequisite. The aim is to assist all readers in scaling their web applications, reducing costs, enhancing scalability, or simply exploring the expansive domain of serverless web development with AWS Amplify. The structure of this book is carefully designed, beginning with the fundamentals of cloud computing and serverless architectures, followed by an introduction to AWS Amplify. Subsequent chapters dive into topics such as authentication, authorization, REST APIs, GraphQL, and offline- first applications. As we progress, we delve into data and storage, analytics, continuous integration/continuous delivery (CI/CD), with AWS Amplify, and, eventually, the integration of AI and ML capabilities into your applications, by building interactive chatbots and building application to convert text to speech. In addition to detailed explanations, this book includes practical examples, code snippets, and hands-on exercises to solidify your understanding of the concepts. To further support your learning journey, additional online resources are available. Reflecting on our journey, we recall the intriguing challenge that programming initially posed for us. It was the transformative power of code, the ability to turn ideas into reality, that fueled our fascination. AWS Amplify, in particular, revolutionized our approach to web application development. This book is the culmination of our journey, experiences, and accumulated knowledge, which we are eager to share with all readers. As the famous quote by Albert Einstein goes, “The measure of intelligence is the ability to change.” By the end of Serverless Web Applications with AWS Amplify, our hope is to provide you with the knowledge and skills to adapt to the fast-paced world of serverless web applications, fostering your growth in this dynamic field. Introduction
1 CHAPTER 1 Introduction to Serverless In the world of cloud, scale is the game changer. —Akshat Paul Cloud computing has transformed the way we store, process, and manage data. In this chapter, we will cover the basics of cloud computing, including its evolution from traditional IT, its key advantages, and the next generation of cloud technologies. We will explore serverless architectures, BaaS (Backend as a Service) and FaaS (Function as a Service), discussing their benefits and weaknesses. We will also introduce AWS Amplify, a platform for building web and mobile applications with AWS services, and guide you through setting it up locally and configuring the Amplify CLI with AWS. Whether you’re new to cloud computing or an experienced developer looking to learn about next-generation cloud technologies, this chapter will provide you with a solid foundation to build upon. So, let’s dive into the world of cloud computing and explore the latest and greatest technologies that it has to offer. A Little Background In 2017 at AWS re:Invent, I became intrigued by a new architecture for application development called serverless architecture. Initially, I had reservations about serverless applications, as it seemed like someone else would be running a server for me, which meant giving up control. As a developer, I was reluctant to relinquish control over my application. However, I soon discovered that serverless architecture offers much more. In this book, we will explore how this game-changing architecture can save developers a significant amount of time on repetitive tasks, allowing them to focus on tasks that have the maximum impact. But before we dive into that, let’s take a brief look at the background and history of how we arrived at this point. © Akshat Paul, Mahesh Haldar 2023 A. Paul and M. Haldar, Serverless Web Applications with AWS Amplify, https://doi.org/10.1007/978-1-4842-8707-1_1
2 If we time travel back to almost 20 years and see how traditional IT used to work, life was not easy. There used to be a dedicated team to handle all the operations tasks of the server setup and maintenance, and once the servers were ready, the developers would be writing business logic and deploy the application on those servers. The server operations team was responsible for setting up firewalls and compute servers, installing the operating system, and configuring database servers. Additionally, they were tasked with monitoring the temperature of the server rooms to prevent server failures caused by excessive heat. They also had to plan for potential damage caused by natural calamities such as heavy rainfall or other extreme weather events. In the past, hosting an application required a significant amount of time and effort. Before writing the first line of business logic, one had to perform a series of operational tasks. This was akin to having to build a car from scratch before embarking on a family trip. It was an extremely painful and time-consuming process. However, a revolutionizing change came in the form of cloud computing. Services such as AWS transformed the hosting model. Rather than building a car from scratch, users could now simply rent one and focus on itinerary planning and enjoying the trip. With AWS, hosting applications in the cloud has become incredibly easy. There is no need to invest in physical space or worry about maintaining data centers. Compute, storage, and databases can be quickly provisioned on demand, without having to worry about setting up and maintaining hardware. This approach saves companies from up-front investments in procuring hardware, paying rent for a data center, and paying the bills for electricity. In addition, it enables businesses to scale their infrastructure as per their requirements, without having to worry about infrastructure management. As a result, cloud computing has become an essential component of modern software architecture, and AWS is a leading provider of cloud computing services. EC2 (Elastic Computing Cloud) from AWS (Amazon Web Services) was one of the early Infrastructure as a Service (IaaS) products. IaaS allows users and companies to buy computing capacity on rent rather than setting up and buying all those physical machines on their own. It allowed them to provision infrastructure just in time when required, which means the commissioning of machines to availability will happen in minutes, if not in seconds. This was revolutionary at that time to even think. IaaS is a type of cloud service that offers required resources like compute engine, database, storage, artificial intelligence services, and networking configurations on demand; these are basically on the model of pay as you go. Over the years, companies Chapter 1 IntroduCtIon to ServerleSS
3 realized there is a huge overhead just to commence a digital footprint on the World Wide Web or even spinning up simple internal apps, which involved physical infrastructure operations like electric power for machines, setting up data centers. All these resources can be provisioned quickly and easily with the advent of cloud. Rise of Cloud Computing If we look closely, all the things involved in computing infrastructure are a bunch of repetitive tasks. There were inefficiencies and a high learning curve for any new company to set up its infrastructure. Cloud computing giants were able to find this opportunity and establish best practices in order to take away this stress from end consumers. Further, they also have multiple options in these instances. They also have options like spot instance which can further help you lower the costs; these are a few examples, but the probability to play around with options is huge to bring down cost and improve efficiency. The evolution of cloud computing led to the introduction of Platform as a Service (PaaS). Among the most popular and my personal favorite PaaS services is Heroku. PaaS builds on the foundation of Infrastructure as a Service (IaaS) and provides additional tools and resources to help you deploy your application quickly. With PaaS, you can leverage prebuilt services such as OS installation, language-specific environment setup, service discovery, and monitoring, which are completed up front. PaaS enables developers to focus on the core business logic of their application, rather than worrying about the underlying infrastructure. This significantly reduces the time and effort required for deployment while also providing greater flexibility and scalability. By leveraging PaaS, businesses can rapidly deploy and iterate on their applications, reducing time to market and improving overall efficiency. Heroku is an excellent example of a PaaS service that offers a wide range of features and capabilities, making it a top choice for many developers and businesses. Platform as a Service (PaaS) is a layer that sits on top of virtual machines (VMs), but we can also use containers to achieve the same. Containers, such as Docker, are a popular example that isolates application requirements from operating system dependencies. When containers run on top of virtual machines, it is called Chapter 1 IntroduCtIon to ServerleSS
4 Container as a Service (CaaS). Container orchestration is a sophisticated task that requires tools such as Kubernetes and Mesos, which can be run on both public and private clouds (we will discuss private cloud in more detail shortly). So far, we have discussed the three main genres of cloud computing: Infrastructure as a Service (IaaS), PaaS, and CaaS. Together, they come under the umbrella of compute as a service. All three are closely associated with each other and are interdependent. Now, let’s review some of the advantages of cloud environments. Key Advantages of Cloud Environments By leveraging cloud computing services, businesses can focus on their core competencies and achieve greater operational efficiency. The following are some key advantages: • Cheaper cost: Before Infrastructure as a Service, you would need to set up data centers which in turn would require specialized skilled engineers who would work in these data centers to maintain apps and servers. Things from networking to installations, power, and physically fixing issues which means high cost of assets and team. With IaaS, all this cost is outsourced to cloud providers like AWS (in the case of EC2), and you can pay as you go. • Less risk: Managing your own physical servers can expose you and your company to many unplanned incidents like hardware failure, downtime during high volume, or scaling up the servers due to unplanned surge in traffic. There is also a high risk that the servers you own are in a region which has become hostile. With IaaS spread across continents and backups available in multiple regions, you are secured in every manner. Downtime is managed since cloud providers have endless computing capacity, so risk is pretty much at bay. • Scaling: Scaling has a cost attached to it, and it is significantly pulled down when we bring IaaS. With IaaS, there is flexibility in paying as you scale. You are no longer required to make up-front investment on servers which might never be used or could be used very quickly. There is also an option to start with the minimal configuration of infrastructure and move to high-power infrastructure as and when Chapter 1 IntroduCtIon to ServerleSS
5 needed. You are also free from procurement and provisioning of servers every time you start a new proof of concept or a planned application. If you just want to try an idea for a short period of time with IaaS, you can go live in minutes instead of months. This is one of the main reasons of small start-ups experimenting ideas like any big corporation and scaling only when required. • Increased efficiency: Cloud environments provide automated provisioning, orchestration, and management, which results in increased efficiency and reduced downtime. • Improved agility: With cloud computing, developers can rapidly deploy and iterate on applications, reducing time to market and improving overall agility. • Flexibility: Cloud environments provide the flexibility to run workloads on public, private, or hybrid clouds, as well as the ability to leverage multiple cloud providers for different services. Now that we’ve discussed the advantages of cloud computing, let’s dive into the next evolution in cloud development: serverless computing. With serverless, developers can take their applications to the next level, leveraging the power of the cloud without worrying about the underlying infrastructure. The Emergence of Serverless Computing: A Game- Changer for Cloud Development After a decade of cloud computing, the technology industry started exploring new ideas for the next evolution of infrastructure outsourcing. The focus was to make the process more efficient and cost-effective for the end consumer. The concept of serverless emerged from this, but it does not mean that applications run without servers. Instead, serverless architecture allows applications to run without being tied to a specific server. Traditionally, an application would require a dedicated server even if it was only needed for a few hours a day. With serverless architecture, when a request is made, one of the available servers is assigned to execute the required business logic, and the function runs on that server. This means that the same function may not run on the same server Chapter 1 IntroduCtIon to ServerleSS
6 if it is required at different times of the day. With serverless architecture, you only pay for the time the function consumes the computing engine, making it a more cost-effective solution. Serverless architecture is a way of providing backend services on an as-needed basis. In this architecture, resources are not held in volatile memory. Computation is done in short bursts of requests, and the results are persisted. When the application is not in use, no computing resources are allocated. However, serverless architecture comes with a range of techniques and technologies that can be grouped into two categories: Backend as a Service (BaaS) and Function as a Service (FaaS). Let us take a closer look at these two categories. Backend As a Service (BaaS) In the Backend as a Service (BaaS) model, developers can focus solely on building the client side of applications while outsourcing the backend activities as services through APIs (Application programming interfaces). This means the various essential functionalities such as authentication, database management, and push notifications, can be outsourced to third party service providers, and directly consumed in the applications, without managing it. To put it simply, it is similar to a fast-food restaurant where the waitstaff is responsible for serving clients and chef prepares the food in the back kitchen. The basic idea of BaaS is to reduce complex backend tasks that can be reused and enable the team to focus more on the frontend development. BaaS can be seen as a variation of Software as a Service (SaaS), where business processes are consumed through tools and services such as GitHub, Salesforce, Dropbox, and Google apps. BaaS breaks down an application into smaller pieces, where the implementation can be entirely in-house, using external products, or a combination of both, with APIs and SDKs (software development kits) being the typical integration methods used. BaaS has become very popular ever since the advent of single-page web apps and mobile apps. Some common features which BaaS services easily provide are 1. Authentication 2. CDN (Content Delivery Network) 3. API integration 4. Database management Chapter 1 IntroduCtIon to ServerleSS
7 5. Geographical location 6. Cloud storage and backup 7. Email service and verification 8. Regulatory compliance 9. Social media integration 10. Push notifications Popular BaaS service providers include • Apache Usergrid • Auth0 • Back4App • Backendless • 8Base • Built.io Backend • Couchbase • Kii • Kumulos • Kuzzle • MongoDB Stitch • Parse • Firebase • Windows Azure Mobile Services • AWS Amplify (one we will discuss in depth in this book) Now let’s move on to Function as a Service (FaaS), which is another type of serverless architecture that focuses on the backend code execution. Chapter 1 IntroduCtIon to ServerleSS
8 Function As a Service/Serverless Computing Function as a Service (FaaS) is another part of serverless computing where an environment is provided to customers to develop, execute, and manage application functionalities without setting up or maintaining complexity of building a full-blown server. By full-blown server here we mean instead of deploying server-side software, the deployment is limited to only functions and operations. The most popular form of FaaS implementation is Lambda from AWS. Figure 1-1 shows the evolution path of application infrastructure from a physical machine to serverless. Figure 1-1. Evolution of IT infrastructure The evolution of serverless computing can be analogous to human evolution; with every passing step, the productivity and ease for end users increased manyfolds. Traditionally, applications had to deploy their server-side software with a host instance, which used to be a virtual machine (VM) instance or container. The application contains functions that have the business logic to act based on user requirements. However, with the rise of Function as a Service (FaaS), developers can now focus only on writing these functions, while the service providers manage everything else. FaaS is Chapter 1 IntroduCtIon to ServerleSS