Separate each sentence from the text: You learned briefly about continuous delivery and deployment, and that is what we're working towards. By integrating CodeDeploy into our CICD pipeline, we ensure that every code change passes through a consistent and repeatable process before it reaches our production environment. Before we dive into setting up CodePipeline, let's discuss the differences between continuous delivery and continuous deployment. Continuous delivery involves automatically building, testing, and preparing code for release into production. However, a manual approval step is required before the final deployment. This gives teams control over when to release updates, ensuring that they can decide the best time to deploy, often after additional manual verification or business considerations. In this diagram here, we are showing what a continuous integration and continuous delivery pipeline looks like. When developers commit changes to a source repository, CodePipeline automatically detects the changes. Those changes are then built by CodeBuild, and if any tests are configured, those are run as well. After the tests are complete, the built code is deployed with AWS CodeDeploy to staging servers for testing. From the staging server, CodePipeline can run more tests, such as integration or load tests. Then there is a stage for the manual approval. You would want to send out some sort of automated notification to the necessary stakeholders so they can be made aware that the deploy was completed in staging and is gated and ready to be deployed to production and requires their approval. To send these notifications, CodePipeline integrates with Amazon Simple Notification Service, or SNS, which is a service that sends messages to subscribers to a topic through protocols like SMS or email. Once the approver approves, CodeDeploy would then deploy the application to the production environment. Now, in contrast, this diagram is showing continuous deployment, which takes things a step further by actually automating deploying the application for every code change that passes through all stages of the pipeline directly to production without manual intervention. This makes it so that you can have more frequent releases but requires a more mature process to be in place, which would include things like extensive automated testing in a staging environment. This is so that you have more confidence that deploying your changes to production won't cause unforeseen errors. Whether you go with continuous delivery or continuous deployment depends on your risk tolerance and how fast you need to move. With that in mind, let's move forward with integrating CodeDeploy into our CICD pipeline. So here I am in the AWS console, and I already have the TravelGuide AI pipeline that we created for continuous integration. We will now update this to include continuous deployment. To do that, we will edit the existing pipeline. And then we can select Edit. From here, we can add a new stage and then call it Deploy and select Add Stage. Then I will need to add an action group. This is where we want to specify the kind of action you want to take and which service to use to do it. I'll give it a name and call it Deploy. And then for the action provider, I want to use CodeDeploy. Then I need to specify the input artifact that flows through this pipeline. I can choose Source Artifact or Build Artifact. Artifacts are the files that are worked on by actions in the pipeline, such as files or folders with application code, files, scripts, things like that. You can use outputs from one stage as inputs to another. Here we will select Source Artifact. Then we will details about the application and deployment group that we already created, selecting the Travel Guide application and the EC2 deployment group. Then I'll select Done. From here, I can scroll up and save the pipeline and then click Save again. From here, we can kick off the pipeline by selecting Release Change and then Release. And this starts a brand-new execution of our pipeline. This will take a couple of minutes, so we will let it run and then come back when it's done. All right, this is done running, and it looks like everything succeeded. And we've automated much of our process already. Everything is good to go.