Transcript
            
            
              This transcript was autogenerated. To make changes, submit a PR.
            
            
            
            
              Hi, welcome to the session on growing your company with AWS Container Services.
            
            
            
              My name is Mesaido Kasingh and I'm a developer advocate with the ECS service
            
            
            
              team. Before we start, I would like to give you an idea of what a
            
            
            
              developer advocate does with inside a service team. We work closely
            
            
            
              with product managers and system engineers in the team to help them understand and
            
            
            
              collect the signals and trends from our customers based on your feedback and help
            
            
            
              us all improve our products. Instead of going
            
            
            
              through architectural details and how things work under the covers, you'll see some
            
            
            
              of that. Don't worry. I decided to do today something different. We're going
            
            
            
              to go through the story of an imaginary company which is based on the stories
            
            
            
              of many real world scenarios and customers. The names of course are not real,
            
            
            
              but the actual use case is they are an early stage startup and we
            
            
            
              are going to company them on their journey from the early stages.
            
            
            
              As they continue to grow from were, we'll jump over to a demo of how
            
            
            
              they deploy the solution. Last but not least, we'll also see how they continue
            
            
            
              to evolve over time, how their priorities changed, and how
            
            
            
              they utilized the continues services within AWS in order
            
            
            
              to allow growth and handle complexity. So welcome
            
            
            
              to any company. Any company has a brand new product, something new
            
            
            
              in tech that will enable you to bring any product from any industry
            
            
            
              to market in less than eight weeks. They do this by streamlining the process,
            
            
            
              fully automated, allow you to upload a few artifacts and they will take care of
            
            
            
              the rest of everything for you. Marketing channels, advertising,
            
            
            
              partnership, press releases everything will be done from a to z.
            
            
            
              Automated managed AWS a service Scott, the founder
            
            
            
              of any company, wanted to solve a personal pain point that he had with his
            
            
            
              previous companies that he started. Launching a product is hard.
            
            
            
              It has a number of moving parts, relationships that need to be formed and coordinated,
            
            
            
              hiring multiple people to track the whole process. And in his experience,
            
            
            
              it never ever went smoothly. There were always hiccups along the way,
            
            
            
              things that were forgotten, things that he wished that they'd done better.
            
            
            
              So he was thinking, why not create a service that will take you
            
            
            
              through all the checkboxes and manage it for you? That is what brought Scott
            
            
            
              to any company's mission statement. Any company is a small startup
            
            
            
              in the early stages. They're just getting started. Meet Scott,
            
            
            
              the CEO. He's also the chief marketing officer. He's trying to
            
            
            
              raise funding, create a company at the same time. And he lives
            
            
            
              more in the air, in hotels than he usually does at home.
            
            
            
              Diane's the CTO, the technical visionary for the company. She came
            
            
            
              up with the technology and process to make the product possible.
            
            
            
              Alice is the vp of engineering. She's a coder at heart,
            
            
            
              hands on, and also has great leadership skills that will grow the company.
            
            
            
              So as founders do, they got together
            
            
            
              and made a strategy for the first six months of the company. And these are
            
            
            
              the bullet points that they came up with. Most important things they needed to do.
            
            
            
              The first thing they needed to do was create a web presence. They needed to
            
            
            
              get the word out to the world about their new technology and a new service.
            
            
            
              Of course, they need to find customers, build a product, and build a company in
            
            
            
              the background. But the most important thing was to build a web presence
            
            
            
              as soon as possible and as quick as possible. So Alice took
            
            
            
              on the responsibility for getting the website up and running. She has previous experience with
            
            
            
              containers and knows that the technology is sound and it will allow
            
            
            
              them to grow in the future. She does not really want to have any time
            
            
            
              to maintain the infrastructure underneath that runs the website. And she wants something that
            
            
            
              is fire and forget. The product is going to be awesome, of course. So it
            
            
            
              will need to handle significant load and Alice does not want to have to
            
            
            
              do that on her own. And the most important thing as a developer,
            
            
            
              git flow for life. So Alice was started to look for a suitable service
            
            
            
              that would search her needs. She contacted the AWS account team and they
            
            
            
              decided together to go with AWS apprunner. Let's have a look what apprunner
            
            
            
              is. So at the top here is the customer's application coming out of
            
            
            
              a container registry like ECR public or ECR private in your account
            
            
            
              or source code repository. For example,
            
            
            
              GitHub. Sitting underneath that is apprunner. We have a front end API,
            
            
            
              a very familiar AWS oriented API that you are
            
            
            
              accustomed to working with, along with a very robust AWS
            
            
            
              console experience. We've invested heavily from the user experience
            
            
            
              perspective into designing a service that takes the different
            
            
            
              areas of the AWS console and folds them into
            
            
            
              one easy to use product. Everything you see in
            
            
            
              the console is also backed by the front end API.
            
            
            
              That also allows you to interact directly with the service programmatically.
            
            
            
              Underneath is the orchestration workflow. That's what's handling the end
            
            
            
              to end story that takes you from a git push all
            
            
            
              the way into a running application deployed on the AWS cloud.
            
            
            
              With apprunner, there are a variety of these components that you do not
            
            
            
              need to manage. A build system, pipeline, load balancers.
            
            
            
              All of those are set up automatically for you.
            
            
            
              AWS also sets up and handles the author scaling of
            
            
            
              the application based on the number of requests apprunner
            
            
            
              is still a fairly new service, but the building blocks and the shoulders on which
            
            
            
              it is standing are very, very tried and tested.
            
            
            
              App runner is built on these mature services that we've encapsulated together into
            
            
            
              one simple service. And by leaving the undifferentiated
            
            
            
              heavy lifting to us, you don't need deep AWS domain knowledge
            
            
            
              to get up and running and be successful with your application.
            
            
            
              Apprunner is suitable for many types of applications.
            
            
            
              Were are the characteristics that we see most of our customers using for
            
            
            
              apprunner applications, web applications and rest APIs
            
            
            
              that serve HTTP requests. Also, these applications are stateless.
            
            
            
              They store their information in an external data store,
            
            
            
              for example DynamoDB RDS. And these applications
            
            
            
              are long running applications that can serve many requests,
            
            
            
              sometimes simultaneously. In order to handle load,
            
            
            
              let's have a look at the user experience in apprunner. Developer writes
            
            
            
              the code in their ide and pushes it to a source code repo, for example
            
            
            
              GitHub. Or they can create a docker image and upload it to their ECR repository.
            
            
            
              They then create an apprunner service which has a number of configurations, the build
            
            
            
              and runtime compute resources, a health check to know that tour application is
            
            
            
              actually working, auto scaling parameters and the deployment details.
            
            
            
              All that information is then used to provide you a customizable
            
            
            
              public secure URL with which you can access your
            
            
            
              application. So let's have a look what happens when you deploy
            
            
            
              an app runner services. Your application is deployed in an AWS
            
            
            
              managed VPC where your application is taken
            
            
            
              and packaged as a container and deployed on a fargate
            
            
            
              task running in that VPC in multiple subnets.
            
            
            
              Your customers, when they access the application, will make a DNS request
            
            
            
              to route 53 where they will receive an FQDN
            
            
            
              which is pointing to the service URL which is actually a network
            
            
            
              load balancer. They will make the HTTP request to the load
            
            
            
              balancer. From there they will be forwarded to a managed
            
            
            
              router inside the app runner service, and each of those requests will
            
            
            
              be forwarded to each one of your containers based on the number of containers
            
            
            
              running, just so that you know,
            
            
            
              apprunner can also scale down to zero, which means that if there are no
            
            
            
              requests coming into your application, you will not be paying for any of the requests
            
            
            
              coming in and you'll be able to save and optimize your costs
            
            
            
              from there. Any application which needs to make a
            
            
            
              request out to the Internet, for example to pull down dependencies
            
            
            
              in the application or modules, or any other
            
            
            
              kind of code will go through the managed. Net gateway
            
            
            
              out to the Internet in order to pull those dependencies down into
            
            
            
              the application itself. Time for a demo. Let's go
            
            
            
              through a scenario that people in any company
            
            
            
              would go through in order to deploy their application. So first things
            
            
            
              we're going to start with is of course shell,
            
            
            
              because there's no other reason why not to.
            
            
            
              And here we have simple git repository where
            
            
            
              sorry, not a git repository show where
            
            
            
              alice decided okay, I have an idea what I would like to do.
            
            
            
              I've got some kind of a boilerplate template or
            
            
            
              boilerplate design where I would like to base my website upon. She found
            
            
            
              something on git, cloned it to her repository, to her local
            
            
            
              machine, and for the purposes of
            
            
            
              this demo I created a script which will
            
            
            
              do a couple of things to make the flow of the demo tiny bit easier.
            
            
            
              What this does will make a couple of files, but in the meantime just going
            
            
            
              to download the file were to this repository and
            
            
            
              the repository is simple, is a node JS application. All I did
            
            
            
              was added the demo bash
            
            
            
              script. I'm going to run the script at the moment. What it will do will
            
            
            
              create a few files for me in this repository, in this repo,
            
            
            
              so that I can make my work a little easier. A docker ignore
            
            
            
              file docker file a build script, a customized script
            
            
            
              just to save time.
            
            
            
              Standard default, not a JS application which will create a static website.
            
            
            
              So I'm going to run my build script which will build a docker
            
            
            
              container for me. Also in the interest of
            
            
            
              saving time, this build script is going to go and build
            
            
            
              my container locally, but also above and beyond that. It's going to push
            
            
            
              it to an ECR private repository which I've already configured
            
            
            
              with my account. So I'll be able to use that same
            
            
            
              docker image further along the way. It's going to also add two tags
            
            
            
              to the same image as well, one with
            
            
            
              latest and one with a timestamp based on the
            
            
            
              amount of the specific date and time that I'm working on. Takes a
            
            
            
              couple of seconds for this to work completely
            
            
            
              building the image. Now it's pushing, as we say to my repository in my AWS
            
            
            
              account because I've already pre populated the image,
            
            
            
              or at least part of it with of the image into my repo is going
            
            
            
              a little bit quicker. Some of the layers are already there and
            
            
            
              it pushes the second one of the same with a different tag does
            
            
            
              it a very quick push and
            
            
            
              my image is roundy is ready. I'm going to run this locally on my machine
            
            
            
              because I want to see how this actually looks? So I'll run it with a
            
            
            
              port 3000, open up my own browser and
            
            
            
              look at localhost 3000 to see exactly what this looked like. So,
            
            
            
              boilerplate website with some kind of design.
            
            
            
              It has a video file and some animations going
            
            
            
              on in between. Looks pretty professional. Everything which
            
            
            
              was done with the default template was the name of Elementor, was the name
            
            
            
              of this website, and it
            
            
            
              looks like a good base which I can start upon, but I want to make
            
            
            
              some changes because it has to be suitable
            
            
            
              for any company, of course, for my website, for my company.
            
            
            
              So builds a script which will go
            
            
            
              in and modify this boilerplate website
            
            
            
              with a number of customizations. Mostly in this case
            
            
            
              it's going to be replacing
            
            
            
              anywhere where it says Elementor, almost anywhere where it says
            
            
            
              elementor into any company you can see.
            
            
            
              Made a number of changes in my repo,
            
            
            
              in my files, and I'm going to build
            
            
            
              a new container based on these changes. So it goes through the
            
            
            
              process again using of course docker
            
            
            
              caching. It should be a little bit quicker the second time when I'm doing it.
            
            
            
              Once the image is built again, push it to my ECR repository
            
            
            
              again with minimal changes. Most of the layers are already there so it should be
            
            
            
              pretty quick. And the second push is just to add a new tag
            
            
            
              which will be even quicker.
            
            
            
              And Alice says okay, I want to just see exactly what it looks like and
            
            
            
              see if my changes were all right. And aws we had originally the previous
            
            
            
              version of the website with the video animation.
            
            
            
              And after refreshing you can see these things have changed. Any company has
            
            
            
              been replaced, has replaced all the text were it's at elementor,
            
            
            
              that video is no longer there. All the customizations I made
            
            
            
              any company is more looking something which is more
            
            
            
              suitable for my personal website and
            
            
            
              the website for the company. So it looks there are a couple of things which
            
            
            
              didn't replace properly
            
            
            
              because they're graphic elements, which of course Alice
            
            
            
              would be able to do properly when she works in more detail on making the
            
            
            
              website 100% presentable for the rest of the
            
            
            
              world. So Alice has her container
            
            
            
              which is ran locally on a machine, but now she wants to take that same
            
            
            
              container, same application she wrote, and push it into
            
            
            
              apronaut so it will be accessible from the rest of the world. So let's go
            
            
            
              to the apparatus console were I already have an any company web
            
            
            
              service which has been running built in the background which is watching a git repo
            
            
            
              or an ECR repository in this case to make
            
            
            
              changes based on every new push so as soon as I pushed
            
            
            
              my previous versions and I was pushing them, up until now it has been
            
            
            
              making those changes and deploying a new version for my
            
            
            
              service. But let's go through how we would create a new service.
            
            
            
              So as we said, you can have either a container registry AWS,
            
            
            
              your source, or a source code repository,
            
            
            
              for example GitHub, where you would create a connection to GitHub.
            
            
            
              Choose your GitHub
            
            
            
              repo, which branch you would like to work off. In this case, I'm going
            
            
            
              to be working off the option of a container registry
            
            
            
              where I can choose either ECR public or ECR private.
            
            
            
              I'm going to choose my repository where I have this container called
            
            
            
              Summit demo with a tag which I've tagged it, and every time this tag is
            
            
            
              updated, a new build will occur. I have the
            
            
            
              options of choosing how I would like my deployments to work,
            
            
            
              either on a manual. In other words, I would initiate these deployments
            
            
            
              in a manual fashion or automatically. If there would
            
            
            
              be a new push to the GitHub repository or the ECR
            
            
            
              repo a new version, then a new build
            
            
            
              will kick off and start. You have to give the
            
            
            
              service a iem role so it will allow it access
            
            
            
              to pull the ECR, the docker image from the ECR. And here
            
            
            
              we configure the service and give a number of different options as well.
            
            
            
              Choose the amount of cpu and memory that I'm giving
            
            
            
              the service, which port it's listening on, and how I
            
            
            
              configure. Auto scaling auto scaling is done by the
            
            
            
              user configuring how many requests their application
            
            
            
              will be able to handle, and as soon as it goes over the number
            
            
            
              of requests, concurrent requests to that Docker container,
            
            
            
              it will scale up and bring up a new node.
            
            
            
              When the number of requests diminishes,
            
            
            
              then it will go back down and scale those
            
            
            
              containers down. You can create your own custom configuration. In this case,
            
            
            
              I'm going to use the defaults.
            
            
            
              I can continue a health check to know that my application is up and
            
            
            
              running properly. I also can
            
            
            
              add an IEM role to the container itself. If I wanted to
            
            
            
              perform actions on my behalf into the APIs of AWS,
            
            
            
              I can configure what kind of encryption I would like if it's
            
            
            
              an AWS owned key, or my own key if I would like to provide
            
            
            
              it as well. The next option is networking. If I would
            
            
            
              like this application to have access to resources
            
            
            
              in my own private VPC, I would choose custom VPC.
            
            
            
              If I only want access or access into
            
            
            
              the container and without having that container or the application
            
            
            
              have access into my own resources, I would choose public for this case.
            
            
            
              For the website we are going to choose public, click next and
            
            
            
              deploy as
            
            
            
              we said console that you all know and recognize
            
            
            
              different tabs. For example, the activity tab will give me what's happening with my service
            
            
            
              and all the different actions which are currently occurring or have occurred in the
            
            
            
              past. The metrics will give me the service metrics of the container, how it's
            
            
            
              performing. This will give me a summary of my configuration and
            
            
            
              I can change it. And over here I have the option of configuring
            
            
            
              a custom domain. By default every service
            
            
            
              is provisioned with a region awsaprunner.com
            
            
            
              fqdn but of course for
            
            
            
              each of tour customers custom applications they would like to have a more recognizable
            
            
            
              and usable name. So you can link a route 53
            
            
            
              hosted zone to the service and create a AE
            
            
            
              record or a CNamE record that will be able to attach
            
            
            
              and link to this apprunner service. So your users and
            
            
            
              your clients will be able to access through a
            
            
            
              generic or your own private FQDN instead of
            
            
            
              having coming through the apprunner domain
            
            
            
              names in FQDNs. If we quickly
            
            
            
              jump into the previous one, you'll see this is what the event log looks like.
            
            
            
              It gives me a status of how what everything is happening when
            
            
            
              we deploy applications in apprunner and update those applications.
            
            
            
              There's a pipeline in the background which deploys a new version in a blue green
            
            
            
              deployment so you do not suffer
            
            
            
              any downtime when you update your applications and only when your
            
            
            
              application has been tested and verified based on your health checks
            
            
            
              that everything is up and running, it will switch
            
            
            
              to a new version. That is why
            
            
            
              you can see that in my case I'm still using a previous version
            
            
            
              of my application which hasn't got the updates
            
            
            
              for any company in the customization because the
            
            
            
              process is not completed of deploying a new version yet and therefore I'm
            
            
            
              still running my old version where my
            
            
            
              first push of my docker container when I started this demo only
            
            
            
              had these original or the same default
            
            
            
              template which I was using.
            
            
            
              That's how you use apprunner. Thank you very much for watching this
            
            
            
              demo and let's go back to the rest of the presentation.
            
            
            
              So let's continue with any company's journey. They're growing at
            
            
            
              an insane rate and six months have gone by and
            
            
            
              of course AWS all founders do they have another meeting
            
            
            
              to understand were they want to go with the next six to 18 months
            
            
            
              and they came up with these three bullet points that
            
            
            
              they need to build a product as fast as possible with minimal maintenance.
            
            
            
              They need to bring revenue into the company and of
            
            
            
              course they need to gain market share, which means customers. So over
            
            
            
              the past six months, the company of course has grown. Instead of the three people
            
            
            
              which were doing everything from running around finding
            
            
            
              customers to developing a website, they have expanded.
            
            
            
              So instead of having one person doing everything,
            
            
            
              they now have teams underneath. And most of the employees
            
            
            
              are now working on creating a product under Alice, who is
            
            
            
              the vp of engineering, who still likes to code, of course, by the way.
            
            
            
              So they said, alice, can you build us a product?
            
            
            
              That's of course what she was hired for. But the requirements stayed
            
            
            
              pretty much the same, except for two things which were added to
            
            
            
              the end. The product has to be of course secure because they
            
            
            
              don't want to lose any customers because of a security breach or information leaking
            
            
            
              or landing up on the front page of the New York Times by any chance
            
            
            
              because they didn't guard their customer PII.
            
            
            
              And the second thing, of course, it's not only going to be a website that
            
            
            
              they built up until now using apprunner, because there is going to be information and
            
            
            
              data and things which they need to store and they need to be
            
            
            
              stored in place where that can be accessed on a regular basis,
            
            
            
              can be used in different ways. So these two different extra
            
            
            
              points on the requirements were added and let's
            
            
            
              see what Alice did. So Alice
            
            
            
              reached out to her account team, spoke to the solutions architect in AWS, and asked,
            
            
            
              what can we use, which is similar to the way we're working
            
            
            
              now. And after looking through a number of services, they decided to
            
            
            
              work on ECS. Amazon Elastic container Services
            
            
            
              what is ECS? ECS is a fully managed
            
            
            
              control plane and AWS. Fargate is a fully managed data plane.
            
            
            
              That means it is the compute that runs the containers that you
            
            
            
              provide for your applications.
            
            
            
              Customers don't need to maintain any Amis or container host clusters.
            
            
            
              It's a big and huge operational savings. Because everything is
            
            
            
              managed by AWS. It's easy to scale to ensure better utilization
            
            
            
              and cost savings. And of course even further and above and
            
            
            
              beyond that, you can use Fargate spot and savings plans to provide
            
            
            
              you further saving options in your account and your applications.
            
            
            
              The core concepts of ecs are really simple, but really, really powerful.
            
            
            
              A task consists of one or more containers. This is your
            
            
            
              application that you're running. You can run these tasks on
            
            
            
              an EC two instance or a Fargate instance.
            
            
            
              And you can also use, of course in order to save money. The spot variants
            
            
            
              of those either EC two spot or Fargate spot.
            
            
            
              Multiple identical tasks create a service
            
            
            
              tasks in a service can be connected to a load balancer, which is automatically
            
            
            
              done by ecs and groups of services and
            
            
            
              tasks are located in one single cluster.
            
            
            
              Customers can create many clusters mapped to teams and workloads.
            
            
            
              A cluster is simply a logical grouping.
            
            
            
              Any company is leveraging the newly released VPC support
            
            
            
              for Avroner to access resources that reside in their VPC.
            
            
            
              This ensures that the private information in their databases is
            
            
            
              not accessible from the public Internet, which meets the requirement of
            
            
            
              security. How is this connected to ECS? Besides the fact
            
            
            
              that appraunner uses AWS Fargate for running the
            
            
            
              tasks in the background, these other background tasks that they will be starting will be
            
            
            
              pulling the information that is collected through a front end application
            
            
            
              that is running on apprunner, pushed into an RDS database,
            
            
            
              and based on which is stored inside that
            
            
            
              database, they'll be able to provide business insight into their customers and
            
            
            
              the way they're using their products. So what did we see here
            
            
            
              today? We saw an example of a company by the name of any company was
            
            
            
              actually not really real, but could be your company or mine.
            
            
            
              Makes no difference. They managed to deploy
            
            
            
              their resources, meet the requirements in a very,
            
            
            
              very simple and easy way, the way they used to working in the AWS
            
            
            
              cloud and above and beyond that allowed them to grow further
            
            
            
              as their business grew, as they collected more customers and more market
            
            
            
              share. The second thing we touched today was serverless containers,
            
            
            
              which we by that I mean Fargate and apprunner, where you provide the
            
            
            
              container image and the configuration that goes along
            
            
            
              with it. And you do not need to manage any of the underlying infrastructure underneath
            
            
            
              in order to run the container. All of that is managed and taken care
            
            
            
              of by AWS in the cloud. So before
            
            
            
              I leave you to go into your next session, I want you to put here
            
            
            
              two links to different resources that you can dive
            
            
            
              deep into. I kind of geek out on the details
            
            
            
              of how things actually work and these two blog
            
            
            
              posts will be able to give you a lot more information, a lot more insight
            
            
            
              into how both Fargate and how apprunner works underneath,
            
            
            
              and how they can bring benefit to you. Thank you very much for your
            
            
            
              time. I hope you enjoyed the session and hope you learned something new about running
            
            
            
              containers on AWS and how you can benefit from the services which
            
            
            
              we have offering you today. My name is Mesaido.
            
            
            
              Casing. My emails here are up on the screen. The easiest way to get hold
            
            
            
              of me is to ping me on Twitter. My dms are open.
            
            
            
              Anything you would like to discuss. I'm always happy to hear from our customers.
            
            
            
              Thank you very much for your time and have a great day.