In this lesson, we create an AWS Cloud development environment. Let's look at the learning objectives. First, we get into what continuous integration is and why you want it in your project. Next, we cover an AWS Cloud9 continuous integration from zero. We do it step-by-step. Then, we construct a Python projects scaffold. This is really the core components of what I would consider a best practice, a make file tests, lint, and also a requirements.txt file. Next, we'll get into developing GitHub actions testing for an AWS project. Let's dive into a few of these key terms and make sure that you understand them. First, a Makefile, What is it? Well, a make file is a recipe for building software and it's a way to make sure that your application runs the same way in any environment and it really simplifies the steps of a software project, really it's a recipe that is available on all Linux systems and you can use it for your advantage. Next, let's get into tests, what are tests? Well, the main reason you have tests is that it ensures that your software works. There's a few different kinds of tests, one kind is functional, this could be, let's say, a test of a command line tool or a web application to high level, make sure that it works. Another one is integration, there's one piece of software integrate with another, let's say the web front end and the backend. A load tests is another one that is a very common form of a test and this would be ensuring that, let's say, 10,000 users would be able to use your application, this is really critical in the Cloud, is to do load testing. So in a nutshell, tests are not a waste of time, they are actually a way to save time when you do automated testing, especially these different varieties and these are just a few, it actually saves time in your project and this is a really key point to remember. What about Linting? So Linting is something that comes up a lot and this is a best practice, really for all projects in Python and what it can do is it can check for bad syntax. So let's say you have a variable that you forgot to declare the value for it, we'll catch it before it gets put into production. In a nutshell, that's really the purpose of linting is that it can catch bugs before they even occur, and you can test it automatically. It also enhances automation and so when you use Linting you can ensure that when you use a GitHub actions or build server that is running your code, that the lint step will really ensure a certain level of quality. Python virtual environments are often really misunderstood and let's talk a little bit about that since we are going to be covered in this lesson, they isolate Python to a particular directory, that's really in a nutshell what they do, they allow Python, interpreter, and the libraries to be fit right into one directory. So how would you do this? This is an example of one thing that you could use, you could say Python 3, the interpreter -m for module, use the virtual environment module venv and then, inside of your home directory, that ~/ create an invisible directory. If you put a dot at the beginning, it'll make the directory invisible and this is a great format to use when you're creating a virtual environment. Later to use that you would say source~/.your-project-env/bin/activate and this activates that environment and the activate script is just a shell script that tells your project to listen to that directory and that's where you're going to put all your code and that's where Python will live and this really does isolate a lot of problems and eliminate them. So in a nutshell, Python virtual environments or a best practice to get into, and they save you a lot of trouble and there's a lot of very exotic reasons why you should use them, but in general, if you use Python virtual environments, you'll eliminate a lot of problems before they start. Let's talk about GitHub actions next here. So what is GitHub actions? It's a SaaS-based build server that's available with GitHub and allows you to do continuous integration and continuous integration, which we'll get into in a little bit, is a form of automated testing. So when you check in your code, this SaaS-based build server will automatically go and test your code and makes it very convenient if you're already using GitHub. It's also YAML based and if you're not familiar with YAML, its stands for Yet Another Markup Language and what it means is that it's a very high-level simple configuration file where it looks pretty human readable and you would put in the series of steps like lint my code, test my code, deploy my code. In a nutshell, GitHub actions is a SaaS-based continuous integration server, and we'll get into that later in this course.