 So I'm so glad to be here and in front of you, I'm so happy to be here and to go through this baby step process of going back to normal, because I personally love being part of conferences. That's where I think that people should connect and link to each other even though they're just maybe from different parts of the world. So I'm glad you're taking some time and coming here. So a little bit about us. So my name is Andresa and I know it's difficult to pronounce because it's an Albanian name. I live in a place called Kosovo and I'm a software developer. This place is based in the Balkans. It's in southeastern Europe specifically. And you will see these two markers up there. The red one up there, it's WeTech. It's our company, which is the business which provides the software solutions to international customers. And they are web-based mostly. And the other one down there is Koder Girls, which is a community based and present in our hometown. We started this community like three or four years ago when we were part of our college days because it was so hard to travel like from place to place to even be there physically on job interviews and other stuff or participate in tech industry. So we started organizing events, hackathons, conferences based in open source. And we try to have a glimpse and gather people there in one place so they can know what this industry means and how important is open source. And yeah, the other speaker. Hi, everyone. I think this one is working. So yeah, I am Albiona. I'm Andresa's sister and we are here together to attend the open source summit for the third time, organized by the Linux Foundation. And we kind of started a super basic three years ago. We were organizing events by Koder Girls and we were like studying and getting hands on the professional careers. So I am a DevRel and a full stack developer based in Kosovo. And today, I think we are good to go with our topic. But before that, you can find us on GitHub on the links that are here. And we can kind of start with the presentation. Yeah. Sure. So today, we are going to talk more about the cloud native and we will be focused on the cloud native architecture as a whole. We'll be continuing on cloud native services. We'll be talking about serverless and what serverless means to us and how serverless has changed the way developers build applications. We'll continue talking about the serverless framework. And we also included one of the functions as a service providers here. So we're taking an example of that later on. We're also will be having a glimpse of serverless anatomy on our example. And by the end, we'll be able to see how to build a scalable API using serverless with some basic configuration files and deploying it later on. Okay, then we will start off with the fundamental into the cloud computing before continuing on the, let's say, the best components when it comes to the cloud computing architecture. Cloud computing gives us the option to have our IT infrastructure, let's say, based on somewhere else kind of as a utility. And that's because up until now or super late, we were like handling everything ourselves and that means owning the servers and managing the IT and, of course, the real estate for the servers. But when it comes to the utility or as a service, having the cloud computing be part of the different companies who are, who function as a providers to us, it's basically easier or it has different advantages on computing or building up different projects. And these are kind of three basic or, let's say, overall advantages of the cloud computing and those are the lowering, the total cost of ownership because if we are kind of getting all of these services from somewhere else, that means we will be focusing more on our business models and kind of providing the solutions to our clients. And then the agility and the skill and performance when it comes to the demand of our users. We will continue on the best parts of the, not best parts, but the parts that we chose to talk today about the cloud computing architecture, but we will note some kind of definitions from different resources and one of them is the Linux foundation where they put together this definition about cloud native computing which uses an open source software stack to deploy applications as microservices where each of the parts is packaged and I'm sorry for the voice, where each of the parts is packaged into containers and that goes together with all of the orchestrating all of these to manage the resources or the utilization from these providers. We will focus on the containers, we will focus on the dynamic orchestration and on the microservices part. So the containers, when it comes to the containers, they are packages of software that gives us the opportunity to package our code and the dependencies and that we can, together with the container tool, we can run all of the things that we have in our application in any environment depending on the, depending on, it depends on the tool that you are using or the cloud service, let's say the private cloud or the public storage and things like that. When it comes to the, yeah, let me just check something. So when it comes to the containers, the Docker kind of is a tool that provides you with the container functionality and they say that, let's say the container is a standard software tool that packages up the code and the dependencies so that the application can run quickly on any environment or any computing environment in different parts of the, let's say, world. When it comes to what they offer is that they offer this Docker image which is a lightweight standalone package that will provide you with all of the necessary things that you need to put up your application and that is the code, the runtime, the system about the libraries and the storage as well as the settings. The containers allow us with their lightweight packages to kind of put together the code with all of its dependencies and we can focus on the things such as the versioning of these dependencies and the language runtime versions as well that are required to set up and running your application anywhere. When it comes to the differences between the containers and the other part that are the virtual machines that provide you kind of the same solution, those differ a lot between because containers are an abstraction on top of the app and that gives you the opportunity to work with just the code and the dependencies but the operating system kernel layer is based there and you can use a lot of containers to, on top of that operating system layer and that means you'll have the opportunity to have more space or have your package super small to run it everywhere whereas the virtual machines are an abstract on the physical hardware layer and that means that each, let's say, package or container for virtual machines will have their own operating system, the code, the dependencies and that makes it super heavy when it comes to the storage. So the three benefits for containers are the separation of responsibilities and that comes up with dividing the teams of development and the IT where the development team can focus on bringing up the functions or the features of the application, the logic part of it and depending on the IT, like, depending on their own requirements to meet the business logic side and when it comes to the IT team, they can operate on their own to set up all of the necessary, let's say, configurations so that this application can be up and running and they don't have to kind of mix things up and it comes to the versioning and other details. The workload probability, it comes with the, let's say, containers can run anywhere globally in that means to the private storages or to the public cloud providers or your own based on laptop where you can set up the container and run it everywhere. So it's like, it's super easy for developers to set up and going with the application and to focus more on their kind of priorities. And then the application isolation and that is about the container, containers visual, virtualize the CPU, the memory storage and network resources that makes it, but it comes to the, providing to the developers with an overview of how the operating system logically is connected with everything. And then we have the dynamic orchestration that is a pre-integrated solution that enables service providers to launch out of the box business logics or business use cases that leverages both the physical and the virtual network functions. These are all come to one place of enabling the quick to time to market focusing on the optimizing the costs and providing the solutions to the target users that are behind the scenes when it comes to the solution itself. The components for the solution include the VNF visual network functions onboarding that is quickly on board and validate multi vendor VNFs on the service provider environment. There is the end to end orchestration, element management, assurance and the inventory. This is when it comes to the kind of a lot of, a lot of services, let's say, or these set up out of the box business use cases can leverage each other's services or features because they are set up in a place where it's easier for them to be connected and kind of to share the resources. And about the microservices. So the microservices are an architectural approach to the development. When it comes to the having all bits of the system set up, it's like every part of the function of the application is set up into different services. And that means each service can have its own team that is focused on prioritizing their goals, let's say, or development features, when it comes to their kind of end solution, dividing the front end, back end, storage, all of these are set up on their own. It's like small bits of projects that are connected into providing a bigger solution. This architecture makes applications easier to scale, faster to develop and enabling innovation and accelerating time to market for the new features. Comparing it with the monolithic architecture and the microservices, the monolithic on the other side, it has all of the, let's say, parts of the application together in one place, making it easier to, making it harder to scale because based on the new features, let's say, it, all of the code base will have to be changed if it needs to be kind of another feature developed. And that is super dependent on every part of it. It makes it super complex code base and it's super hard to later on to kind of scale in this way. And that's where the microservice architecture comes in, where the application is built based on the different components that run each of their processes separately without depending on each other. And they are kind of connected with the lightweight, super defined APIs to send and receive, let's say, requirements from each of these services. We will go through the cloud computing types, starting with the infrastructure as a service, then platform and function as a service on the cloud computing providers. The infrastructure as a service, so it offers the user the option to use all of the services when it comes to the networking and storage and servers. Basically you will need to set up everything when it comes to your application and platforms and the infrastructure parties will be handled by the providers in this case. Some of the advantages of it is that you will have to pay what you are using when it comes to the computing part. It's scaled dynamically and it has a part of the security set up because another part of it is not that because it goes down to the availability in this case because based on their own, the way, how they work, you will have to be kind of dependent on that side for the availability. The challenges are the lack of support from their kind of teams of these services, the integration is kind of complex and the processes do change because it depends based on their development roadmaps. When it comes to the platform as a service, it is a cloud computing offering that it provides to you the opportunity to set up all of your platform and application in this case to the cloud. It comes up with pre-built tools that helps you to develop and add new features easily and test these applications. In this side, when it comes to the advantages, they are cost-effective. It's time savings because this way you will kind of have it free to kind of build up an application idea that you have to see and test things out and then you have the security as well that is increased and you have the flexibility to kind of iterate through different versions of the applications and platforms you are developing. And then the challenges of platform as a service, there is a lot of security risks because it all depends on the cloud provider that you are kind of using their services. You don't have to, you can't have some kind of hands on to change things or to update things. It's the compatibility, the vendor dependency, and then risk of lock-in. And to the other type of cloud computing provider service types is the function as a service, which is one of the most, one of the famous types of cloud computing because it allows you to set up small building code snippets to kind of set up and running whenever you have events. And that is super cool because all of the other parts you will have to manage to yourself. You don't need to depend on about the computing storage and things like that from different other services. And here the advantages are that you have improved the developer velocity. It's built in scalability depending on the usage of these functions. It will scale and the cost is efficient because whenever those functions are set up and are used, you will get to pay only that time. The challenges are that it's less system control and it's a more complexity required for testing. This is when it comes to the types of cloud computing services that we chose. And for the next part, we will continue with the serverless. Okay, great. Thank you everyone. Back in the day when we tried to build applications, we needed to take care of some processes before going to the most exciting part, writing the business logic. And we had to start on the bottom layer, which was the hardware layer where the storage of the computer and everything was stored at. And then we needed to move to the virtualization layer in which we needed to have a single running operating system. But we also needed to create virtual machines to help it horizontally scale. The upper layer would be the operating system, which I'm sure everybody knows what this means to us and what this matters, which is a software that helps us run the programs that we would need to work on. And I think the most important layer, which would be the runtime, because this will help to put on work the operating system and the application layer. So after that one, it comes the most exciting part that I was talking about earlier, the one where we could write our business logic and we could maybe form teams to design, to build and deploy these applications. So based on this, all of this would have been like the exact process we would go through if you would plan to work on an application, which would maybe solve an existing problem. By that I mean, imagine you're working in a startup and you're trying to launch that product as soon as possible. But at the meantime, you're like the first person you're doing all the job in the background. By that I mean having to take care of your infrastructure, code, management, sales and everything else. So that's why by this, they started to emerge some cloud services by some of the famous that we already know, let's say AWS, because that's what we're using for our next example. So they just started to focus more on making things efficient, like the services that I've been on mentioned. And all of these networking storage were just removed from an extra resources because they were already started to get some help from these outsiders from the cloud services providers. And then we started to just accomplish a more, maybe not manual way of building those applications. So all of these services that we mentioned, the most important one I would say maybe is the last one function as a service which is a kind of cloud computing service that does not require coding to a particular framework or library is just a function that lets you focus on that. And that function is just abstracts the application and it makes you build an individual component which makes the whole application. So what's serverless bringing to the table? I think that this is what makes it special because the deployment is very different from the traditional system since we do not have server applications to run ourselves. It's just that we upload the code into one function and that function is being taken care of a service provider and then everything else is all sorted to somebody else and it just continue to do everything else in the background, all the necessary things including provisioning and other stuff. So when we say that we include serverless into our applications, sometimes we don't have a clear view of what that means but we can focus on two main areas that will explain better of that term. Serverless, when we hear of this word it doesn't mean that it doesn't include servers in the background, it does actually but what we understand is that someone else is just taking care of that behind us. So another term that would use to describe it is that serverless would be third party cloud application and services so we can manage the logic application like single page web apps or mobile apps that have cloud databases. Another one way to think of this is the function as a service because as discussed earlier, because now we do have like many platforms that offer this service as you can see there's lambda function from AWS Azure functions and Google Cloud functions. So right now we will be focusing more on the AWS lambda that's what we chose for the examples. What lambda does actually is just you can run a code virtually on it. It might be of any type of application or backend service. Each lambda that you create contains the code that you want to execute and everything else that happens in the background that we'll see later. So there are two ways that you can create them. You can use a AWS console but before doing that you need to have an AWS account with all its proper credentials so you can have a proper function of the lambda and the other way of creating it is through using serverless framework. So you just can go through the dashboard when you can create the function and just within your service and then continue to work on that or you can just use the terminal to log in through terminal with a single command in the serverless framework and then create that function that you want to just continue working on that. So while we're here we can see and we can like appreciate how much a serverless framework is helping us and what is offering to us. All of the things that were explained earlier such as defining your applications or your functions and your events, it's like too easy right now. Deploy infrastructure, it's too easy as well with one line command or using plugins that would make your code or your deploying like very simple and many, many more which is offering right now. So we will jump right now into anatomy of serverless so if you're thinking of building an application which will include serverless within that, you would need like it's a must that you would include a serverless YAML file inside that application and there's, I mean there's a lot of resources so there's a file, it should be a structure to write on that file. But some of these attributes are a must. So the project right here that we're going to try is starting with the organization name, in this case it's my name and I was trying to build an e-commerce so I can include serverless in it and the app name should be included as well which in this case is you really store and the service name should be included here. We've talked about plugins that we've, if you would need to like make anything easy to deploy or to work on your application you just include it in your serverless YAML file, in this case it's serverless offline that we needed to include and also the providers that we mentioned earlier we used AWS in this case so we've included here name of the provider and their runtime version, stage, whether it's development or production, region of that function that you've created it in that provider and this one right here is the role statements because I've used DynamoDB to store my data so there's some configuration steps to include that here and also the environment variable which is my table name. So the function that we've talked until now you can just include them here as well if there are some resources that you need to get or add the data but in this case since the application will grow and it will just make the code immense I've just added it into a separate file which is called jewelry.yaml and I've just included the functions right here. Also I've included the resources file here which is the configuration of the data table that we're using on this example and the last one should be .env because as I said you need to have the proper credentials to create a function in AWS so they would provide you the access key and secret access key and other stuff you can include them in your JS files or anywhere but I just added an .env file and I just called them here. So this is one way of including functions and events when you're trying to build an application with serverless so the file that I included here into the serverless is the same one which includes the resources here and so I've just added a screenshot with two of them it's a jewelry which is the name of the function and then the handler which contains the path of that method and you can include the timeout so the important part of that is the events so you can have the HTTP method and the path here in this example it should be a post request with a path of jewelry so the same thing goes for the other function is just it has another purpose by getting all jewelry that we need. So the other picture is a screenshot of the resources file so this part maybe goes more with DynamoDB structure which I think maybe we should do another section of that but it's just a little bit a basic structure where you could have the name type and the properties with the partition here in the sort here that table and of course the name of that table. This is the way of so this method that we've used where we could call the lambda function and a way we defined a method where we could just get an item and return the result or even the message if it fails so it's just a basic one we would use everywhere. So right now let's see I have an example here which I made it beforehand because of the time so all of the picture you saw until now it's based on this project which is a public repository and my GitHub you can find it there if you want to build an application and you can just set up a server less it's easy and it's like a boilerplate you can use it and you can just add more features on it if you want to so there's an SRC directory where I store my services and inside the utils I store my response messages and the credentials and I call the file with AWS credentials this is the service where I store my resources and the most important part is the serverless folder where I include my functions and then all of these functions are called here in the serverless YAML file so right now what I'm trying to do is that I should be these right here would be basic CRUD functionality where we would be able to add, edit, delete or get some data for this project but what I have not included here is the get method so we're going to do it right now I'm just going to copy and paste it right here so we can see it what happens and this is the place okay this should be in my service right in the current here and so this should be a basic function to get all of the properties here okay this is this should be the proper way now that we've added everything we've needed we can just go and write this simple command to deploy the changes that we made I hope that everything will go as planned so right now it's doing all of the stuff that we've discussed until now in the background it's just continuing to deploy these resources and so we can try them and test them how this works like internally while we're here what I show you what I did so I opened an account as I said I think you should fix the region here it's US okay so I've used DynamoDB to store my data and I've added a table here which you can see it's named serverless presentation example and we can view the items here so I've had at the moment like three products one of them should be yes one of them should be this one because I've added it one before five minutes before the presentation and its name should be Linux now we already have all the resources to test this crowd functionality we've added just the get method okay I think it's done so maybe we can try it here in the terminal but you can try it using any tool you want like postman or insomnia I'll try it here and see if it returns my data yeah it's here so every so the whole object is here as you can see it in DynamoDB and it's working so it's just a simple a very simple step to deploy your application and test it and then see if everything goes as planned so I'm continuing on this slide so based on that we need to do a more debugging when it comes to that but based on community and lots of developers there's a lack of resources when it comes to debugging because what lambda returns you there are many times there are errors when you just cannot understand those information but it still depends on the type of error you get so if you get a syntax error maybe you could just enable serverless debug and then continue using that but if you get another error it just depends on what tool you're using or what the kind of error that is another way of monitoring them is using AWS console so you have there's cloud watch there and it's a platform it's a actually very powerful platform where you could see a way of visualized way actually all of your data all of your logs there so you can kind of get a hint what's going wrong or if it's working properly and things like that this what you're seeing on the screen is the dashboard of the serverless framework where you also can use it as a debugging tool right now I'm seeing my dashboard for my service and you just can use it for different purposes like I've wanted to know more about the API requests and errors in the period of time for example for the last seven days and yeah it's super helpful so I know we've talked a lot about serverless and the benefits that you could have by using it and including it in your applications but there are drawbacks and challenges as well when you try to work with that so some of that you can see on the screen but there are many of that many of them that there are not included here let's say when they're locking so when we say that we use service provider to help us do all of the things in the background we just put our faith in that and we just play by their rules so it's one of the challenges and one of the cons maybe that we have to deal with it when we start to or when we decide to include serverless in our applications another maybe cons that would be it's that if your application it's part of your AWS service provider it's not that easy to just port your application to Azure let's say or another cloud service provider so that's one of the cons that I would say it matters and like anything else in technology we must consider the security factor because when it comes to serverless as I said about the vendor lock in it goes the same thing with the security everything falls under the cloud service provider and not the consumer and also despite all of the documentation and the community and other stuff it's still hard to find the learning curve that you need for to maybe migrate or to start something from scratch using serverless because it's quite a challenge to work in that and start doing things with that and many many other things like you need to have a significant mindset shift and it's also like the every time would be the lack of local testing options as I mentioned earlier and many many things so yeah these are some references that we've used to work on this presentation so this presentation is uploaded on Sketch I would kindly invite you guys to view it because the first links are very important to us and it will show you what we're doing in Kosovo and how important open source is to us and what we're trying to build you can see them all there and the links down there there are representation resources that we've used to work on this and to build this application or this presentation that we would present today so yeah this is it and you're welcome to ask questions if you have any and talk to us for everything that you need thank you for your participation we really appreciate you taking your time to get here so thanks oh we're also as I said that we're trying to go back to normal we also want the bid to organize Debian conference in Kosovo it's the first time that it's being organized in a country in the Balkans or in Europe at least because they already choose with places eastern or somewhere up there so if you're a fan of open source and you want to know more about Debian we're also contributed to that part so you can come there next year and or talk to us that we can help you so yeah oh yeah yeah I'm I don't really have much experience using other cloud services I've read something about the company that I've used to work with they used Google functions and they are basically like they had the same issues as we as you would have in AWS or another like cloud service is just maybe AWS with it has actually the best documentation that you would need to work with that and to maybe develop that application using serverless because it has even the community is very like sophisticated they just hold events they organize talks about how can you set up a Lambda function and how can you use it with other application stuff but yeah I think I think it's basically the same issues in all of the cloud services providers thank you yeah I actually have one of that here in my in my links here I think it's called only serverless serverless architectures with AWS Lambda I can share with you too it's one of that it's also I don't know the author of that but it's about the micro services and cloud cloud native I'll send you the link so it's just describes in details how can you use this and how can you approach build the way of building application using serverless the other one I've used I mean no the other one it's more of for the DynamoDB it's by Alex debris DynamoDB book but yeah I can share some of that with you so they're pretty detailed yes but yes some of these are the main ones that I've used okay yeah okay nice okay so if anyone doesn't have any questions just call it an end so thank you again and let's be in touch