1 00:00:00,000 --> 00:00:00,160 2 00:00:00,160 --> 00:00:01,884 SPEAKER 1: --everybody, how are we today? 3 00:00:01,884 --> 00:00:02,550 Doing wonderful. 4 00:00:02,550 --> 00:00:05,530 On behalf of CS50, I would like to thank you all for joining us, 5 00:00:05,530 --> 00:00:08,850 both in person and online, for another in our series of tech talks. 6 00:00:08,850 --> 00:00:12,261 Today, we are fortunate in that we have Leo Zhadanovsky, from Amazon Web 7 00:00:12,261 --> 00:00:12,760 Services. 8 00:00:12,760 --> 00:00:18,360 And Leo is going to talk to us about DevOps and best practices within AWS. 9 00:00:18,360 --> 00:00:20,996 Without further ado, I give you Leo. 10 00:00:20,996 --> 00:00:22,370 LEO ZHADANOVSKY: Thanks everyone. 11 00:00:22,370 --> 00:00:23,494 So thank you for your time. 12 00:00:23,494 --> 00:00:24,650 Thank you for coming. 13 00:00:24,650 --> 00:00:29,910 So I'm going to talk to you today about the DevOps story at amazon.com 14 00:00:29,910 --> 00:00:33,420 and how software development evolved at Amazon. 15 00:00:33,420 --> 00:00:36,870 And then I'm going to talk about how that translates into tools that you 16 00:00:36,870 --> 00:00:42,490 can use to do DevOps on your own. 17 00:00:42,490 --> 00:00:44,850 Also, we're going to talk about AWS Educate, which 18 00:00:44,850 --> 00:00:48,210 helps you get started and gives you credits so you can actually use AWS. 19 00:00:48,210 --> 00:00:50,780 So just a little bit about me-- 20 00:00:50,780 --> 00:00:53,580 I'm a solutions architect at AWS. 21 00:00:53,580 --> 00:00:54,870 I've been at Amazon-- 22 00:00:54,870 --> 00:00:57,350 it's going to be five years in February. 23 00:00:57,350 --> 00:01:02,370 And in my normal day-to-day job, I help customers implement our services. 24 00:01:02,370 --> 00:01:06,630 So whether they want to launch a website or build a mobile app 25 00:01:06,630 --> 00:01:11,710 or close their data center and move everything to AWS, 26 00:01:11,710 --> 00:01:15,210 I help them achieve that and make sure it's secure. 27 00:01:15,210 --> 00:01:17,670 And I help them achieve high availability 28 00:01:17,670 --> 00:01:20,380 and cost optimization, all that good stuff. 29 00:01:20,380 --> 00:01:24,590 Now, before that, I used to work for the Democratic National Committee. 30 00:01:24,590 --> 00:01:29,320 And then that turned into the Obama campaign in 2012. 31 00:01:29,320 --> 00:01:33,750 And so if you Google around, there's a bunch 32 00:01:33,750 --> 00:01:36,280 of articles and slide shows about that. 33 00:01:36,280 --> 00:01:39,930 But basically the Obama campaign was all in on AWS. 34 00:01:39,930 --> 00:01:45,730 When I was there, they built about 220 applications on AWS of all kinds. 35 00:01:45,730 --> 00:01:48,820 So after that, I was pretty knowledgeable about the platforms, 36 00:01:48,820 --> 00:01:51,400 so I went to work for AWS itself. 37 00:01:51,400 --> 00:01:54,130 So what are we going to talk about today? 38 00:01:54,130 --> 00:01:55,830 So first, we're going to level set. 39 00:01:55,830 --> 00:01:57,950 And we'll talk about-- 40 00:01:57,950 --> 00:01:59,870 we define what is DevOps. 41 00:01:59,870 --> 00:02:02,120 It means a lot of different things to a lot of people. 42 00:02:02,120 --> 00:02:05,090 Than we're going to talk about the Amazon DevOps story. 43 00:02:05,090 --> 00:02:09,690 And then we'll talk about code services that we have that you can use 44 00:02:09,690 --> 00:02:12,420 and our DevOps portfolio in general. 45 00:02:12,420 --> 00:02:16,170 And then, finally, we're going to talk about what AWS Educate is 46 00:02:16,170 --> 00:02:18,550 and how it can help you get started. 47 00:02:18,550 --> 00:02:22,780 So software today moves really fast. 48 00:02:22,780 --> 00:02:26,790 We see that startups can get their software into the hands of millions 49 00:02:26,790 --> 00:02:29,310 of customers in minutes. 50 00:02:29,310 --> 00:02:33,120 So your ability to move fast if you're a company 51 00:02:33,120 --> 00:02:37,050 is really paramount to your ability to either disrupt other industries 52 00:02:37,050 --> 00:02:38,730 or ward off disruption. 53 00:02:38,730 --> 00:02:42,460 So DevOps, why does it matter? 54 00:02:42,460 --> 00:02:45,780 Well, when you implement DevOps-- 55 00:02:45,780 --> 00:02:49,470 this is according to a [? Puppet ?] labs report-- 56 00:02:49,470 --> 00:02:51,470 you get much more frequent deployments. 57 00:02:51,470 --> 00:02:56,070 You get much shorter lead times and less failures and faster recovery 58 00:02:56,070 --> 00:02:57,210 from those failures. 59 00:02:57,210 --> 00:03:01,860 So basically, it accelerates how your software development works. 60 00:03:01,860 --> 00:03:03,670 First, what is DevOps? 61 00:03:03,670 --> 00:03:07,140 Well, DevOps is broken down into three different pieces. 62 00:03:07,140 --> 00:03:10,470 There is a cultural part of it, the actual practices that you use, 63 00:03:10,470 --> 00:03:14,800 and the tools that you can utilize to adopt those practices. 64 00:03:14,800 --> 00:03:17,940 So DevOps is a combination of these three things. 65 00:03:17,940 --> 00:03:21,270 And basically it increases your organization's ability 66 00:03:21,270 --> 00:03:24,000 to deliver applications and services at a higher 67 00:03:24,000 --> 00:03:28,830 velocity, so evolving and improving products at a faster pace 68 00:03:28,830 --> 00:03:33,480 than you normally would with traditional software development practices. 69 00:03:33,480 --> 00:03:37,470 The speed obviously enables companies to better serve their customers 70 00:03:37,470 --> 00:03:40,420 and compete more effectively in the market. 71 00:03:40,420 --> 00:03:42,450 So let's talk about the culture piece first. 72 00:03:42,450 --> 00:03:45,739 So traditionally, you've got your developers who build code. 73 00:03:45,739 --> 00:03:48,030 And then they throw it over to the wall to an ops team. 74 00:03:48,030 --> 00:03:50,400 An ops team deploys the code. 75 00:03:50,400 --> 00:03:52,710 And traditionally, they're siloed. 76 00:03:52,710 --> 00:03:55,140 So if you're a developer, you don't know much about how 77 00:03:55,140 --> 00:03:56,554 your infrastructure is set up. 78 00:03:56,554 --> 00:03:58,470 And if you're an operator, you don't know much 79 00:03:58,470 --> 00:04:00,120 about what you're actually deploying. 80 00:04:00,120 --> 00:04:03,330 And there's a bunch of problems that arise from that. 81 00:04:03,330 --> 00:04:08,110 Teams can blame each other and pass the buck around. 82 00:04:08,110 --> 00:04:10,140 And it slows down development. 83 00:04:10,140 --> 00:04:13,890 So an important part of DevOps is really integrating these two things, 84 00:04:13,890 --> 00:04:15,340 developers and operators. 85 00:04:15,340 --> 00:04:18,269 So what that actually means varies across companies. 86 00:04:18,269 --> 00:04:21,660 I see customers where they have a DevOps team that 87 00:04:21,660 --> 00:04:24,600 builds tooling that everybody can use to deploy things. 88 00:04:24,600 --> 00:04:29,440 I see customers where their developers all know a little bit about operations, 89 00:04:29,440 --> 00:04:33,360 so the developers know how to deploy or handle the deploys themselves. 90 00:04:33,360 --> 00:04:35,242 So there's different ways to do it. 91 00:04:35,242 --> 00:04:37,450 But one thing that it means is shared responsibility. 92 00:04:37,450 --> 00:04:39,450 So instead of having one team be responsible 93 00:04:39,450 --> 00:04:41,880 for development, another for operations, you 94 00:04:41,880 --> 00:04:44,867 have one team that is responsible for building the products 95 00:04:44,867 --> 00:04:45,700 or writing the code. 96 00:04:45,700 --> 00:04:49,770 Building it, compiling it, testing it, deploying it 97 00:04:49,770 --> 00:04:52,760 both through testing phases and staging and production, 98 00:04:52,760 --> 00:04:55,150 and then maintaining once it's up and running. 99 00:04:55,150 --> 00:04:58,710 So one team is responsible for everything. 100 00:04:58,710 --> 00:05:00,660 And so they own the whole product. 101 00:05:00,660 --> 00:05:04,380 And that has a lot of good things that happen with it. 102 00:05:04,380 --> 00:05:07,064 And also visibility and communication-- so if you 103 00:05:07,064 --> 00:05:09,480 have one team that owns everything, everybody has to know, 104 00:05:09,480 --> 00:05:11,190 is my product up? 105 00:05:11,190 --> 00:05:12,520 What are the key metrics here? 106 00:05:12,520 --> 00:05:15,180 Am I getting enough orders per second? 107 00:05:15,180 --> 00:05:20,407 So it forces you to have better visibility into what's going on. 108 00:05:20,407 --> 00:05:22,740 And if forces you to communicate, because the whole team 109 00:05:22,740 --> 00:05:25,570 has to communicate to work effectively. 110 00:05:25,570 --> 00:05:27,415 So what this means is chat ops. 111 00:05:27,415 --> 00:05:31,490 It means sometimes having some kind of central communication system, 112 00:05:31,490 --> 00:05:37,350 such as Slack or IRC or HipChat or Amazon Chime, something like that, 113 00:05:37,350 --> 00:05:40,780 where everybody can get on, whether [? they're a ?] [? vote ?] or not. 114 00:05:40,780 --> 00:05:42,920 So those are some of the cultural benefits. 115 00:05:42,920 --> 00:05:44,880 Then the actual practices-- 116 00:05:44,880 --> 00:05:47,310 so one thing that we see is we see customers moving away 117 00:05:47,310 --> 00:05:50,340 from big, monolithic applications to individual services. 118 00:05:50,340 --> 00:05:53,160 So instead of having this black box server 119 00:05:53,160 --> 00:05:55,980 where you have a load balancer and a web server 120 00:05:55,980 --> 00:05:59,430 and a database all running at the same time on one big box, 121 00:05:59,430 --> 00:06:01,920 and if that box goes down you've got a bunch of problems, 122 00:06:01,920 --> 00:06:05,320 we see customers moving to micro services. 123 00:06:05,320 --> 00:06:07,380 So what that means is you take your application 124 00:06:07,380 --> 00:06:09,600 and you break it down into small pieces. 125 00:06:09,600 --> 00:06:13,200 Each piece does one thing that's really simple and really well 126 00:06:13,200 --> 00:06:15,720 and takes on the least amount of dependency as possible. 127 00:06:15,720 --> 00:06:18,707 And then you can work on these miscoservices in parallel. 128 00:06:18,707 --> 00:06:20,790 And if one piece goes down, it doesn't necessarily 129 00:06:20,790 --> 00:06:22,320 mean your whole system goes down. 130 00:06:22,320 --> 00:06:26,790 So we find it's a much more agile way to architect your applications. 131 00:06:26,790 --> 00:06:29,940 And also, continuous integration and continuous delivery 132 00:06:29,940 --> 00:06:31,620 and continues deployment-- 133 00:06:31,620 --> 00:06:37,350 so what that means is you're breaking down how often you deploy code. 134 00:06:37,350 --> 00:06:41,740 So every time you make a change, that change gets built. 135 00:06:41,740 --> 00:06:44,040 There's a testing suite that goes against your code 136 00:06:44,040 --> 00:06:47,800 to make sure that it compiles, that it's doing what it's supposed to. 137 00:06:47,800 --> 00:06:50,090 And then you sometimes have an automated deployment. 138 00:06:50,090 --> 00:06:52,590 So as the developer, all you have to do is work in your code 139 00:06:52,590 --> 00:06:55,560 and commit it to your version control repository. 140 00:06:55,560 --> 00:06:57,574 But in the background, all this stuff happens 141 00:06:57,574 --> 00:06:59,490 to make sure your code is actually functional, 142 00:06:59,490 --> 00:07:02,130 and ultimately, it gets deployed. 143 00:07:02,130 --> 00:07:05,480 So one other thing that we see is infrastructure as code. 144 00:07:05,480 --> 00:07:09,090 So not just treating your code in a way where you have a software development 145 00:07:09,090 --> 00:07:11,100 lifecycle for your code, but actually treating 146 00:07:11,100 --> 00:07:12,880 your infrastructure the same way. 147 00:07:12,880 --> 00:07:16,070 So we have a tool that I'll talk about called CloudFormation. 148 00:07:16,070 --> 00:07:18,730 So basically you can write your whole infrastructure. 149 00:07:18,730 --> 00:07:21,750 So your load balancers, your web servers, your databases, whatever 150 00:07:21,750 --> 00:07:25,817 else is involved in your application, you write that in a [? YAML ?] file. 151 00:07:25,817 --> 00:07:28,400 And that [? YAML ?] file was the code for your infrastructure, 152 00:07:28,400 --> 00:07:29,880 and you deploy off of that file. 153 00:07:29,880 --> 00:07:32,960 So you store this file in a version control system. 154 00:07:32,960 --> 00:07:35,475 You control it just like you do with a piece of code. 155 00:07:35,475 --> 00:07:37,850 And that has a bunch of advantages. 156 00:07:37,850 --> 00:07:39,570 It's self-documenting. 157 00:07:39,570 --> 00:07:42,060 You can easily do updates. 158 00:07:42,060 --> 00:07:44,220 You can roll back much more easily, because you 159 00:07:44,220 --> 00:07:47,450 have a history of all the changes. 160 00:07:47,450 --> 00:07:51,510 And everything that we see, this forces you 161 00:07:51,510 --> 00:07:53,890 to do a lot of monitoring and logging. 162 00:07:53,890 --> 00:07:57,570 So you have to know how your application is performing, when 163 00:07:57,570 --> 00:08:00,160 there's errors, what those errors mean. 164 00:08:00,160 --> 00:08:04,387 And you have to understand the real time performance of your application. 165 00:08:04,387 --> 00:08:06,970 So there's a bunch of monitoring tools that we can talk about. 166 00:08:06,970 --> 00:08:09,360 But we find that our customers, these days, 167 00:08:09,360 --> 00:08:12,030 there's no more business hours for an application. 168 00:08:12,030 --> 00:08:15,350 So it used to be if you're building, for example, an education application, 169 00:08:15,350 --> 00:08:20,130 you really only cared if it was up from 9:00 AM to 3:00 PM US time. 170 00:08:20,130 --> 00:08:22,780 But now most customers I work with are global. 171 00:08:22,780 --> 00:08:25,710 So their services need to be on 24/7. 172 00:08:25,710 --> 00:08:27,660 And they need to be able to scale at any given 173 00:08:27,660 --> 00:08:29,970 time for unexpected bursts in traffic. 174 00:08:29,970 --> 00:08:33,330 So you have to have really good and strong monitoring and logging for that. 175 00:08:33,330 --> 00:08:37,140 So let's talk about some benefits of DevOps. 176 00:08:37,140 --> 00:08:38,970 So the first is improved collaboration. 177 00:08:38,970 --> 00:08:43,919 Because you're breaking down those silos, your team works better. 178 00:08:43,919 --> 00:08:46,410 They can deploy their software and deliver it much more 179 00:08:46,410 --> 00:08:48,940 quickly and much more reliably. 180 00:08:48,940 --> 00:08:51,780 So if you're deploying all the time-- 181 00:08:51,780 --> 00:08:56,280 so traditionally, I've seen customers who deploy their code 182 00:08:56,280 --> 00:08:57,887 quarterly, so four times a year. 183 00:08:57,887 --> 00:08:59,970 Now if you're deploying your quarterly, every time 184 00:08:59,970 --> 00:09:01,590 you deploy your code, that's a lot of changes, 185 00:09:01,590 --> 00:09:03,280 a lot of things that can go wrong. 186 00:09:03,280 --> 00:09:05,130 Whereas if you have DepOps and automation, 187 00:09:05,130 --> 00:09:07,230 you're deploying multiple times a day. 188 00:09:07,230 --> 00:09:09,750 Each change is going to be small and granular. 189 00:09:09,750 --> 00:09:13,630 So if something goes wrong, you can easily roll back or you can fix it. 190 00:09:13,630 --> 00:09:15,600 There's not going to be a lot of-- 191 00:09:15,600 --> 00:09:17,850 there's going be a lot less room for error. 192 00:09:17,850 --> 00:09:23,222 Also, security-- so what you can do is integrate security into your software 193 00:09:23,222 --> 00:09:24,180 development life cycle. 194 00:09:24,180 --> 00:09:26,820 So instead of just scanning for vulnerabilities in your code 195 00:09:26,820 --> 00:09:28,920 after the fact, after everything's deployed, 196 00:09:28,920 --> 00:09:32,260 you can integrate security checks into your software development lifecycle. 197 00:09:32,260 --> 00:09:35,970 So you can deploy your application to a staging environment. 198 00:09:35,970 --> 00:09:38,790 And then you can run a bunch of scans to see 199 00:09:38,790 --> 00:09:41,910 if it's compliant with whatever your security policies are before it goes 200 00:09:41,910 --> 00:09:43,950 to production and do things like that. 201 00:09:43,950 --> 00:09:45,120 You can scale. 202 00:09:45,120 --> 00:09:49,080 Once you've automated everything, it's much more 203 00:09:49,080 --> 00:09:52,500 easy to add capacity, [INAUDIBLE] capacity, so on and so forth. 204 00:09:52,500 --> 00:09:54,530 And ultimately, this means more speed. 205 00:09:54,530 --> 00:09:57,890 So you can deliver software for your customers much quicker. 206 00:09:57,890 --> 00:10:02,980 So let's take a look back at Amazon and how this story evolved there. 207 00:10:02,980 --> 00:10:08,360 So in 2001, amazon.com, the retail website, 208 00:10:08,360 --> 00:10:13,430 was a big monolithic architecture and a hierarchical organization. 209 00:10:13,430 --> 00:10:16,040 So when you went to the website, it was probably 210 00:10:16,040 --> 00:10:18,290 like a giant script of some kind. 211 00:10:18,290 --> 00:10:20,160 There weren't a lot of microservices there. 212 00:10:20,160 --> 00:10:24,500 So by the time 2009 rolled around, a bunch of changes had happened. 213 00:10:24,500 --> 00:10:26,495 And they started decoupling services. 214 00:10:26,495 --> 00:10:29,570 215 00:10:29,570 --> 00:10:31,790 On amazon.com, for example, so the shopping cart 216 00:10:31,790 --> 00:10:33,530 would have now been a different service. 217 00:10:33,530 --> 00:10:37,490 The hey, what do we recommend for you would have been a separate service. 218 00:10:37,490 --> 00:10:40,150 So the actual home page is a bunch of different services. 219 00:10:40,150 --> 00:10:44,294 They get put together for you, and, as I mentioned, 220 00:10:44,294 --> 00:10:45,710 there's a lot of benefits to that. 221 00:10:45,710 --> 00:10:48,840 And we also implemented this thing called two pizza teams. 222 00:10:48,840 --> 00:10:53,330 So this is a practice that's often used at Amazon to speed up development. 223 00:10:53,330 --> 00:11:00,110 And two pizza teams means that if you can't feed your team with two pizzas, 224 00:11:00,110 --> 00:11:01,550 your team is too big. 225 00:11:01,550 --> 00:11:06,980 So what that means is you have to keep breaking down your teams into smaller 226 00:11:06,980 --> 00:11:07,854 and smaller teams. 227 00:11:07,854 --> 00:11:09,770 And they can each work in parallel on whatever 228 00:11:09,770 --> 00:11:11,540 microservices they're working on. 229 00:11:11,540 --> 00:11:14,840 And then they all have speed, and they're not reliant. 230 00:11:14,840 --> 00:11:18,110 They're not waiting for another team to accomplish something. 231 00:11:18,110 --> 00:11:20,070 We've seen a lot of good results from that. 232 00:11:20,070 --> 00:11:22,610 And so things went much better this way. 233 00:11:22,610 --> 00:11:25,010 And we were releasing code faster than ever. 234 00:11:25,010 --> 00:11:27,350 But we still felt like we could improve. 235 00:11:27,350 --> 00:11:30,185 So in 2009, we ran this study. 236 00:11:30,185 --> 00:11:32,810 It's called Understanding Amazon's Software Development Process 237 00:11:32,810 --> 00:11:34,010 Through Data. 238 00:11:34,010 --> 00:11:39,410 And we wanted to find out how long it took to go from code check-in 239 00:11:39,410 --> 00:11:42,320 to code being available in our production environment. 240 00:11:42,320 --> 00:11:45,620 This included the time that it took to build the code, test the code, 241 00:11:45,620 --> 00:11:46,970 and deploy our software. 242 00:11:46,970 --> 00:11:49,400 So we learned that this was actually taking a long time, 243 00:11:49,400 --> 00:11:50,480 on the order of weeks. 244 00:11:50,480 --> 00:11:56,030 And we actually wanted it to get down to hours and not weeks-- 245 00:11:56,030 --> 00:11:57,440 hours or minutes, actually. 246 00:11:57,440 --> 00:12:00,650 So what we found out is that we were just waiting. 247 00:12:00,650 --> 00:12:03,590 So it takes time to write the code. 248 00:12:03,590 --> 00:12:06,090 But after a developer would write code, they'd 249 00:12:06,090 --> 00:12:09,847 have to submit a ticket for somebody else to build the code. 250 00:12:09,847 --> 00:12:12,680 And then that person would have to submit a ticket for somebody else 251 00:12:12,680 --> 00:12:15,330 to deploy the code to a testing environment and the staging 252 00:12:15,330 --> 00:12:16,950 and so on until it got to production. 253 00:12:16,950 --> 00:12:20,840 So the actual action part of this, the actual work, wasn't taking that long. 254 00:12:20,840 --> 00:12:23,480 It was somebody writing an email or opening 255 00:12:23,480 --> 00:12:28,342 a ticket, all these manual processes that were taking a bunch of time. 256 00:12:28,342 --> 00:12:29,300 And this was adding up. 257 00:12:29,300 --> 00:12:31,490 So the actual work part was taking minutes. 258 00:12:31,490 --> 00:12:34,190 The waiting in between stages was taking days. 259 00:12:34,190 --> 00:12:36,140 And that's what made it take weeks. 260 00:12:36,140 --> 00:12:38,900 So we wanted to eliminate this waiting, which 261 00:12:38,900 --> 00:12:43,100 could then take this whole process down to hours and not weeks. 262 00:12:43,100 --> 00:12:47,750 So we started building tools to automate our software release process. 263 00:12:47,750 --> 00:12:50,129 And the first tool that we built was called pipelines. 264 00:12:50,129 --> 00:12:52,670 So pipelines basically took these things where you previously 265 00:12:52,670 --> 00:12:55,640 had to file a ticket and wait for somebody to do something, 266 00:12:55,640 --> 00:13:01,890 and we changed it to be automated. 267 00:13:01,890 --> 00:13:06,380 So it automated the transitions between stages from check-in to production. 268 00:13:06,380 --> 00:13:09,080 So obviously we saw a lot of benefits from this. 269 00:13:09,080 --> 00:13:10,860 It made deployment much faster. 270 00:13:10,860 --> 00:13:11,600 It made it safer. 271 00:13:11,600 --> 00:13:15,410 Because it was now automated, the same thing would happen every time. 272 00:13:15,410 --> 00:13:19,815 Somebody couldn't fat finger Command and do something bad. 273 00:13:19,815 --> 00:13:22,440 It's simplified and standardized, our software release process. 274 00:13:22,440 --> 00:13:26,399 So if we had a developer who went from one team to another team, 275 00:13:26,399 --> 00:13:27,440 some things might change. 276 00:13:27,440 --> 00:13:30,230 But the process they were using to release code was the same. 277 00:13:30,230 --> 00:13:33,782 So it sped up the amount of time, or actually decreased amount of time 278 00:13:33,782 --> 00:13:36,740 that it took for them to get on boarded, and it visualized the process. 279 00:13:36,740 --> 00:13:39,500 So a developer can go on the pipeline site 280 00:13:39,500 --> 00:13:41,760 and see where's my code that I just committed. 281 00:13:41,760 --> 00:13:42,860 Did it fail this test? 282 00:13:42,860 --> 00:13:43,560 Is it going? 283 00:13:43,560 --> 00:13:46,350 Is it good, so on and so forth. 284 00:13:46,350 --> 00:13:48,170 So this continued to work really well. 285 00:13:48,170 --> 00:13:52,230 And by 2014, we had thousands of service teams across Amazon. 286 00:13:52,230 --> 00:13:54,710 They were all-- they were building micro services. 287 00:13:54,710 --> 00:13:56,810 They were practicing continuous delivery. 288 00:13:56,810 --> 00:13:59,087 We'll talk about what that is in a second. 289 00:13:59,087 --> 00:14:00,170 There's many environments. 290 00:14:00,170 --> 00:14:02,240 So they're deploying to staging environments, beta environments, 291 00:14:02,240 --> 00:14:03,290 production environments. 292 00:14:03,290 --> 00:14:08,750 So in that year alone, in 2014, across the company, we did 50 million deploys. 293 00:14:08,750 --> 00:14:11,180 So that's-- I forgot what the exact statistic is. 294 00:14:11,180 --> 00:14:15,230 But I think it's like around 1.5 deploys a second. 295 00:14:15,230 --> 00:14:16,925 And this is from 2014. 296 00:14:16,925 --> 00:14:18,800 So I'm sure if we look at the current metric, 297 00:14:18,800 --> 00:14:20,216 it would be even bigger than that. 298 00:14:20,216 --> 00:14:24,530 So every year, we perform a survey of our developers. 299 00:14:24,530 --> 00:14:28,707 And the survey asks how do you like your laptop, 300 00:14:28,707 --> 00:14:31,790 how do you like your productivity tools that you have, so on and so forth. 301 00:14:31,790 --> 00:14:34,490 And in that year, in 2014, the results found 302 00:14:34,490 --> 00:14:38,640 that there is only one tool or service that could be correlated statistically 303 00:14:38,640 --> 00:14:40,070 with the happier developers. 304 00:14:40,070 --> 00:14:41,560 And that was this pipeline service. 305 00:14:41,560 --> 00:14:45,050 So we found that continuous delivery means happier developers. 306 00:14:45,050 --> 00:14:48,830 So as I said, DevOps means a lot of different things to a lot of people. 307 00:14:48,830 --> 00:14:50,769 So where do you start? 308 00:14:50,769 --> 00:14:54,060 Whether you're a startup or an existing company and you want to implement this, 309 00:14:54,060 --> 00:14:55,370 it's a complex answer. 310 00:14:55,370 --> 00:14:57,290 It's going to depend on what your needs are, 311 00:14:57,290 --> 00:15:00,456 whether it's a regulation or compliance, or what you're trying to accomplish 312 00:15:00,456 --> 00:15:02,150 or what kind of product you're building. 313 00:15:02,150 --> 00:15:06,230 And doing that transformation can involve organizational changes, 314 00:15:06,230 --> 00:15:08,000 cultural changes, process changes. 315 00:15:08,000 --> 00:15:09,600 So there's no real right answer. 316 00:15:09,600 --> 00:15:11,790 The important part is to do it. 317 00:15:11,790 --> 00:15:15,450 But there there's one thing that's uniform across every customer I've seen 318 00:15:15,450 --> 00:15:19,550 is they need an efficient and reliable continuous delivery pipeline. 319 00:15:19,550 --> 00:15:23,330 And so because they do, we ended up building a bunch of services 320 00:15:23,330 --> 00:15:25,110 to help them do that. 321 00:15:25,110 --> 00:15:28,310 So let's talk about the software development lifecycle 322 00:15:28,310 --> 00:15:30,140 that we typically see. 323 00:15:30,140 --> 00:15:32,770 It has four different phases. 324 00:15:32,770 --> 00:15:34,700 So the first phase is the source phase. 325 00:15:34,700 --> 00:15:38,130 That's when you build your code or you write your code, 326 00:15:38,130 --> 00:15:41,600 you check-in the source code in server version control systems, such as Git. 327 00:15:41,600 --> 00:15:45,800 You usually typically do peer review on that code. 328 00:15:45,800 --> 00:15:47,210 Then you have the build phase. 329 00:15:47,210 --> 00:15:48,920 So the build phase is when you compile your code. 330 00:15:48,920 --> 00:15:50,961 Obviously, not all languages need to be compiled. 331 00:15:50,961 --> 00:15:54,010 But if you do compile it here, you run your unit tests. 332 00:15:54,010 --> 00:15:56,600 You run your style checkers to make sure that the code is 333 00:15:56,600 --> 00:15:59,360 readable by other employees of your company. 334 00:15:59,360 --> 00:16:02,330 You get any kind of code metrics that are important to you. 335 00:16:02,330 --> 00:16:03,890 And then you create your artifacts. 336 00:16:03,890 --> 00:16:06,650 So these could be like [? Docker ?] images. 337 00:16:06,650 --> 00:16:12,000 These could be RPMs, [? Debian ?] packages, MSIs, system images. 338 00:16:12,000 --> 00:16:15,560 So whatever your unit of deployment is, you built them here. 339 00:16:15,560 --> 00:16:17,114 Then you have your testing phase. 340 00:16:17,114 --> 00:16:20,030 So in the testing phase, this is where you do your integration testing 341 00:16:20,030 --> 00:16:21,320 with other systems. 342 00:16:21,320 --> 00:16:22,760 You do your load testing. 343 00:16:22,760 --> 00:16:24,320 You do your UI testing. 344 00:16:24,320 --> 00:16:27,680 And you do your penetration testing or any other kind of security testing. 345 00:16:27,680 --> 00:16:29,970 And then lastly is the push to production, 346 00:16:29,970 --> 00:16:31,670 which is the ultimate end goal. 347 00:16:31,670 --> 00:16:34,580 So you deploy to staging environments, testing environments, 348 00:16:34,580 --> 00:16:36,930 eventually to production. 349 00:16:36,930 --> 00:16:43,405 So let's see how these levels, how they map to continuous integration, 350 00:16:43,405 --> 00:16:48,710 continuous delivery, and continuous deployment. 351 00:16:48,710 --> 00:16:52,700 So continuous integration, what that means is you've got a Git repo, 352 00:16:52,700 --> 00:16:54,020 let's say, for your code. 353 00:16:54,020 --> 00:16:58,940 And every time you commit code to the mainline branch of that Git repo, 354 00:16:58,940 --> 00:17:02,540 it gets built. So there's a build that runs and either errors out 355 00:17:02,540 --> 00:17:05,210 and then you fix whatever caused it to error out, or it works 356 00:17:05,210 --> 00:17:09,349 and we know that the code is actually buildable. 357 00:17:09,349 --> 00:17:11,092 Then we've got continuous integration. 358 00:17:11,092 --> 00:17:12,800 So continuous integration is the practice 359 00:17:12,800 --> 00:17:18,230 of checking your code to the continuous and-- 360 00:17:18,230 --> 00:17:21,200 so it means that when you go from source to build 361 00:17:21,200 --> 00:17:24,500 and then you have tests that happen after it's built. 362 00:17:24,500 --> 00:17:27,920 And then you deploy your code to a staging environment. 363 00:17:27,920 --> 00:17:32,160 And everything's automated right up before you get to production deploy. 364 00:17:32,160 --> 00:17:35,090 So when you get to a production deploy, you have a manual gate. 365 00:17:35,090 --> 00:17:38,900 So somebody has to go in and say, OK, I've reviewed this change. 366 00:17:38,900 --> 00:17:39,890 This is OK. 367 00:17:39,890 --> 00:17:42,060 I hit approve, and then it goes to production. 368 00:17:42,060 --> 00:17:44,900 So most of our customers that are trying to do [? some form of ?] 369 00:17:44,900 --> 00:17:48,692 DevOps, they're trying to go for a continuous delivery at first. 370 00:17:48,692 --> 00:17:50,150 Then there's continuous deployment. 371 00:17:50,150 --> 00:17:53,290 So continuous deployment is when you go from source 372 00:17:53,290 --> 00:17:57,020 to build to test to deployment to production without any manual gates. 373 00:17:57,020 --> 00:18:00,090 So everything is automated. 374 00:18:00,090 --> 00:18:01,400 So you're committing code. 375 00:18:01,400 --> 00:18:05,040 And as long as it passes all the tests, you eventually get to production. 376 00:18:05,040 --> 00:18:07,387 So what we see is our customers, when they 377 00:18:07,387 --> 00:18:09,470 get really good at continuous delivery and they're 378 00:18:09,470 --> 00:18:11,553 really sure their tests are good, their automation 379 00:18:11,553 --> 00:18:14,930 is good, that's when they go to continuous deployment. 380 00:18:14,930 --> 00:18:17,330 Sometimes they never go, because for various reasons 381 00:18:17,330 --> 00:18:18,930 they just want a manual gate. 382 00:18:18,930 --> 00:18:21,530 But sometimes they go to continuous deployment. 383 00:18:21,530 --> 00:18:26,420 So we've got a set of code services that can help you do this. 384 00:18:26,420 --> 00:18:30,860 So we'll be talking today about CodeStar, AWS CodePipeline, AWS 385 00:18:30,860 --> 00:18:34,190 CodeDeploy, CodeCommit, and CodeBuild. 386 00:18:34,190 --> 00:18:37,980 Let's see how these match up with a software development lifecycle. 387 00:18:37,980 --> 00:18:41,240 So CodeCommit is our managed Git service. 388 00:18:41,240 --> 00:18:43,960 So it helps you with the source stage. 389 00:18:43,960 --> 00:18:46,910 CodeBuild allows you to build some code. 390 00:18:46,910 --> 00:18:48,500 That goes to the build stage. 391 00:18:48,500 --> 00:18:53,570 392 00:18:53,570 --> 00:18:56,600 For testing, you typically still use third party tooling. 393 00:18:56,600 --> 00:19:00,200 And for deployments, you use CodeDeploy. 394 00:19:00,200 --> 00:19:04,980 So then to do the transition between all these stages, 395 00:19:04,980 --> 00:19:10,670 you have CodePipeline, which is the customer version of this tool 396 00:19:10,670 --> 00:19:12,500 that we built called Pipelines. 397 00:19:12,500 --> 00:19:16,370 And then if you don't want to have to manually set the stuff up, 398 00:19:16,370 --> 00:19:20,390 we have CodeStar that will give you an integrated dashboard and templates 399 00:19:20,390 --> 00:19:23,330 where you can get all these services up and running really quickly. 400 00:19:23,330 --> 00:19:25,010 So before we go on, I'm actually going to kick off 401 00:19:25,010 --> 00:19:27,590 a demo that's going to work in the background while I talk. 402 00:19:27,590 --> 00:19:28,790 And then I'll go back to it. 403 00:19:28,790 --> 00:19:31,710 So in my demo, I actually have two demos here. 404 00:19:31,710 --> 00:19:33,710 So what I'm going to do is I have two Git repos. 405 00:19:33,710 --> 00:19:36,876 And I'm just going to make a change to the Git repos to kickoff my pipeline. 406 00:19:36,876 --> 00:19:41,134 So I'm going to make a change to this read-me file. 407 00:19:41,134 --> 00:19:42,425 I'm going to commit the change. 408 00:19:42,425 --> 00:19:47,371 409 00:19:47,371 --> 00:19:49,120 So hopefully, when you commit Git changes, 410 00:19:49,120 --> 00:19:53,607 you have more descriptive comments about what you've changed. 411 00:19:53,607 --> 00:19:54,940 So I'm going to push the change. 412 00:19:54,940 --> 00:19:57,680 413 00:19:57,680 --> 00:20:01,567 So while that is going, I'm going to do the same thing on my second one here. 414 00:20:01,567 --> 00:20:05,250 So I'm going to again change my read-me file, 415 00:20:05,250 --> 00:20:06,880 just add some exclamation marks here. 416 00:20:06,880 --> 00:20:13,882 417 00:20:13,882 --> 00:20:15,340 I'm going to push those changes up. 418 00:20:15,340 --> 00:20:18,170 So let's go back now to my slides. 419 00:20:18,170 --> 00:20:22,100 420 00:20:22,100 --> 00:20:27,391 So aside from our code services, we have a bunch of other stuff 421 00:20:27,391 --> 00:20:29,390 in our [? DevOps ?] portfolio that can help you. 422 00:20:29,390 --> 00:20:32,460 So for infrastructure as code, we have a service called CloudFormation. 423 00:20:32,460 --> 00:20:35,480 So that, as I mentioned earlier, it allows 424 00:20:35,480 --> 00:20:38,180 you to basically write a JSON or a YAML file that 425 00:20:38,180 --> 00:20:42,080 describes your whole architecture and your infrastructure. 426 00:20:42,080 --> 00:20:43,719 And then it deploys off of it. 427 00:20:43,719 --> 00:20:46,010 We have something called OpsWorks, which is essentially 428 00:20:46,010 --> 00:20:49,910 a managed service for Chef, which is a commonly used configuration. 429 00:20:49,910 --> 00:20:53,127 SPEAKER 2: So your customers which adopt this methodology do 430 00:20:53,127 --> 00:20:56,345 they just have to for peer review? 431 00:20:56,345 --> 00:20:58,490 LEO ZHADANOVSKY: No, for peer review they-- 432 00:20:58,490 --> 00:21:00,020 no, they still do it. 433 00:21:00,020 --> 00:21:02,980 We don't have any services for peer review. 434 00:21:02,980 --> 00:21:05,930 So they typically use third party services to do the peer review part. 435 00:21:05,930 --> 00:21:09,380 So you typically still have that involved. 436 00:21:09,380 --> 00:21:11,992 So you typically-- 437 00:21:11,992 --> 00:21:16,974 SPEAKER 2: Can you [INAUDIBLE] source to deployment [INAUDIBLE]?? 438 00:21:16,974 --> 00:21:18,890 LEO ZHADANOVSKY: Well, typically the way to do 439 00:21:18,890 --> 00:21:22,500 it is there's different branches in your Git repo. 440 00:21:22,500 --> 00:21:24,656 So it only goes to the mainline branch, which 441 00:21:24,656 --> 00:21:26,780 is what triggers your pipeline after a code review. 442 00:21:26,780 --> 00:21:30,110 443 00:21:30,110 --> 00:21:33,950 So then there's OpsWorks, which allows you to do Chef. 444 00:21:33,950 --> 00:21:36,200 And then for monitoring and logging, we have a service 445 00:21:36,200 --> 00:21:38,420 called CloudWatch, which gives you metrics 446 00:21:38,420 --> 00:21:42,000 on your application and your infrastructure and gives you logs. 447 00:21:42,000 --> 00:21:44,720 This service is called CloudTrail, which gives you an audit log. 448 00:21:44,720 --> 00:21:47,472 So everything you do in AWS is API driven. 449 00:21:47,472 --> 00:21:49,430 Even if you do it through a web console, you're 450 00:21:49,430 --> 00:21:52,530 just making API calls through the web console. 451 00:21:52,530 --> 00:21:54,499 So all those API calls get logged. 452 00:21:54,499 --> 00:21:57,540 And you get those logs so you can see what's going on in your environment 453 00:21:57,540 --> 00:21:58,100 later on. 454 00:21:58,100 --> 00:22:02,240 Then there's AWS Config, which tells you what is the state of my environment 455 00:22:02,240 --> 00:22:03,690 at any given point in time. 456 00:22:03,690 --> 00:22:07,040 So I can say, OK, an hour ago, what did I have running? 457 00:22:07,040 --> 00:22:09,990 What security groups did I have attached to it, so on and so forth. 458 00:22:09,990 --> 00:22:13,850 And then we have X-ray, which is a distributed tracing tool. 459 00:22:13,850 --> 00:22:17,570 So let's talk through our code tools here. 460 00:22:17,570 --> 00:22:19,550 So for building and testing your application, 461 00:22:19,550 --> 00:22:21,300 we have a service called CodeBuild. 462 00:22:21,300 --> 00:22:24,440 So CodeBuild is a fully managed build service. 463 00:22:24,440 --> 00:22:28,300 It compiles your source code, runs any tests that you tell it to run, 464 00:22:28,300 --> 00:22:30,615 and produce software packages ultimately. 465 00:22:30,615 --> 00:22:34,400 It's scaled continuously and processes multiple builds at the same time. 466 00:22:34,400 --> 00:22:36,000 So it's a fully managed service. 467 00:22:36,000 --> 00:22:38,000 You don't have to spin up a cluster or anything. 468 00:22:38,000 --> 00:22:41,000 You just put a config file in your repo. 469 00:22:41,000 --> 00:22:42,770 And it'll do the test after that. 470 00:22:42,770 --> 00:22:46,040 So you can also do custom build environments with it. 471 00:22:46,040 --> 00:22:48,950 So the way it works is through Docker containers. 472 00:22:48,950 --> 00:22:51,280 So we have a bunch of pre-built Docker containers. 473 00:22:51,280 --> 00:22:53,113 You can also bring your own Docker container 474 00:22:53,113 --> 00:22:55,882 if you have some kind of customized build environment. 475 00:22:55,882 --> 00:22:57,590 And so it'll spin up the Docker container 476 00:22:57,590 --> 00:23:00,854 and run the test in that environment, give you the output of the test, 477 00:23:00,854 --> 00:23:03,770 and/or create whatever artifacts it needs to create and then shut down 478 00:23:03,770 --> 00:23:05,000 the container. 479 00:23:05,000 --> 00:23:06,620 You pay by the minute. 480 00:23:06,620 --> 00:23:09,620 So you pay for only what you use. 481 00:23:09,620 --> 00:23:13,440 And it works with CodePipeline, which we'll talk about in a second. 482 00:23:13,440 --> 00:23:17,170 And it works with Jenkins, which is another open source CI tool 483 00:23:17,170 --> 00:23:18,955 that we see a lot of our customers use. 484 00:23:18,955 --> 00:23:21,080 So the way it works is a downloads the source code, 485 00:23:21,080 --> 00:23:26,060 and it executes the commands in this buildspec file, which I'll show you. 486 00:23:26,060 --> 00:23:30,020 And it executes them in this temporary container. 487 00:23:30,020 --> 00:23:32,000 And it streams the logs to our logging service 488 00:23:32,000 --> 00:23:34,790 so you can see exactly what's going on with your build. 489 00:23:34,790 --> 00:23:38,000 And then it uploads the artifacts that are generated either to an S3 bucket-- 490 00:23:38,000 --> 00:23:39,920 S3s are objects through our service-- 491 00:23:39,920 --> 00:23:46,450 or it can upload them to a Docker repo, such as Docker Hub or Container 492 00:23:46,450 --> 00:23:48,410 Registry. 493 00:23:48,410 --> 00:23:52,340 So how do I automate my process, my release process, with CodeBuild? 494 00:23:52,340 --> 00:23:54,950 So it's integrated with CodePipeline. 495 00:23:54,950 --> 00:23:57,960 It is API driven, like most of our services. 496 00:23:57,960 --> 00:24:00,470 You can create your own build environments, as I mentioned, 497 00:24:00,470 --> 00:24:01,640 and as a Jenkins plug-in. 498 00:24:01,640 --> 00:24:03,515 So I have a lot of customers who use Jenkins. 499 00:24:03,515 --> 00:24:06,350 So you can just plug it into Jenkins, and use it with that. 500 00:24:06,350 --> 00:24:09,270 So let's take a look at how this actually works. 501 00:24:09,270 --> 00:24:11,270 So this is a buildspec file. 502 00:24:11,270 --> 00:24:13,490 This is what controls the build. 503 00:24:13,490 --> 00:24:15,650 So in this buildspec file, the first part here 504 00:24:15,650 --> 00:24:17,340 is we have the environment variable. 505 00:24:17,340 --> 00:24:20,210 So this defines what environment variables 506 00:24:20,210 --> 00:24:23,222 will be available to this container that gets spun up. 507 00:24:23,222 --> 00:24:24,680 And then you have different phases. 508 00:24:24,680 --> 00:24:27,380 So there's an install phase, a pre-build phase, a build phase, 509 00:24:27,380 --> 00:24:28,460 a post-build phase. 510 00:24:28,460 --> 00:24:32,090 So in each of these phases, you can put whatever commands you want. 511 00:24:32,090 --> 00:24:34,460 So in this example, I'm updating. 512 00:24:34,460 --> 00:24:36,040 I'm getting the latest app updates. 513 00:24:36,040 --> 00:24:39,200 So this is a one two container. 514 00:24:39,200 --> 00:24:40,680 I'm installing Maven. 515 00:24:40,680 --> 00:24:42,430 I'm not doing anything in pre-build. 516 00:24:42,430 --> 00:24:44,090 I'm doing a Maven install and build. 517 00:24:44,090 --> 00:24:46,280 And then eventually, at the end of it all, 518 00:24:46,280 --> 00:24:47,970 I get a JAR file that I can deploy. 519 00:24:47,970 --> 00:24:50,120 So we can get much more complicated than this. 520 00:24:50,120 --> 00:24:52,640 This is just a simple example here. 521 00:24:52,640 --> 00:24:55,020 So that's pretty simple there. 522 00:24:55,020 --> 00:24:56,840 And let's see about testing in general. 523 00:24:56,840 --> 00:24:58,548 So there's building, and there's testing. 524 00:24:58,548 --> 00:25:01,400 So testing is obviously both a science and art form. 525 00:25:01,400 --> 00:25:04,240 But things you typically want to get out of testing your code-- 526 00:25:04,240 --> 00:25:07,970 so you want to make sure that the code works, it does what it's supposed to. 527 00:25:07,970 --> 00:25:11,020 You want to make sure you catch any kind of syntax errors right away. 528 00:25:11,020 --> 00:25:13,853 You want to make sure that you're standardizing any kind of patterns 529 00:25:13,853 --> 00:25:17,880 and how you write the code so it's readable across your whole company. 530 00:25:17,880 --> 00:25:20,744 You want to reduce bugs due to faulty logic in the code. 531 00:25:20,744 --> 00:25:22,660 And you want to check for security, so we need 532 00:25:22,660 --> 00:25:24,470 to make sure that your code is secure. 533 00:25:24,470 --> 00:25:29,130 It's allowing things like SQL injection or code injection attacks. 534 00:25:29,130 --> 00:25:34,370 So we find that industry experts agree that you should focus your code. 535 00:25:34,370 --> 00:25:36,830 You should do 70% of your testing on unit testing 536 00:25:36,830 --> 00:25:41,930 and then 20% on service testing and 10% on UI testing. 537 00:25:41,930 --> 00:25:47,980 So typically what you can do, you can do your unit testing with CodeBuild. 538 00:25:47,980 --> 00:25:52,140 And for service and UI testing, you want to use third party tooling. 539 00:25:52,140 --> 00:25:54,200 So let's talk about the pricing. 540 00:25:54,200 --> 00:25:56,120 So the pricing is you pay by the minute. 541 00:25:56,120 --> 00:25:57,710 So you only pay for what you use. 542 00:25:57,710 --> 00:26:00,560 And there's different container instance sizes essentially. 543 00:26:00,560 --> 00:26:02,810 So it depends on what you're building. 544 00:26:02,810 --> 00:26:04,957 If you're building Java, you might need more RAM. 545 00:26:04,957 --> 00:26:07,040 So you might want to use a bigger build container. 546 00:26:07,040 --> 00:26:09,890 But these are the prices per minute for the different container types. 547 00:26:09,890 --> 00:26:11,514 And there's a free tier of 100 minutes. 548 00:26:11,514 --> 00:26:14,690 549 00:26:14,690 --> 00:26:16,750 Now let's talk about deployment. 550 00:26:16,750 --> 00:26:22,120 So CodeDeploy-- CodeDeploy is a service that 551 00:26:22,120 --> 00:26:26,800 allows you to automate your deployments to instances, [? to EC2 ?] instances, 552 00:26:26,800 --> 00:26:28,660 or on premise servers. 553 00:26:28,660 --> 00:26:32,380 So it handles the complexity of updating your application. 554 00:26:32,380 --> 00:26:36,705 And what that means is, in AWS, you might have two op servers 555 00:26:36,705 --> 00:26:38,080 [? free up. ?] You might have 10. 556 00:26:38,080 --> 00:26:39,940 You might have 20, if you're using auto scaling, 557 00:26:39,940 --> 00:26:42,970 because you're scaling up and down based on how much capacity you have. 558 00:26:42,970 --> 00:26:46,291 So it's a lot harder to just run a script to deploy to everything, 559 00:26:46,291 --> 00:26:48,040 because you don't know what everything is. 560 00:26:48,040 --> 00:26:49,498 So CodeDeploy handles this for you. 561 00:26:49,498 --> 00:26:53,959 It has automatic integration with autoscaling groups, also tagging. 562 00:26:53,959 --> 00:26:57,000 So you can say, OK, every instance that it's tagged with this tag, deploy 563 00:26:57,000 --> 00:26:57,775 to it. 564 00:26:57,775 --> 00:27:01,300 It allows you to avoid downtime during those deployments. 565 00:27:01,300 --> 00:27:04,480 So CodeDeploy has integration with our little load balancing products, 566 00:27:04,480 --> 00:27:07,180 so our elastic load balancer and application load balancer. 567 00:27:07,180 --> 00:27:09,971 And so what this means is if you have a load balancer with some web 568 00:27:09,971 --> 00:27:15,155 servers behind it, it can say, OK, do a deployment to one of those web servers. 569 00:27:15,155 --> 00:27:17,780 They can take it out of a the load balancer, do the deployment, 570 00:27:17,780 --> 00:27:19,840 make sure it's healthy, add it back in. 571 00:27:19,840 --> 00:27:21,890 And it can do that until it's done. 572 00:27:21,890 --> 00:27:23,420 You can also do blue green deploys. 573 00:27:23,420 --> 00:27:25,510 So instead of touching your existing web servers, 574 00:27:25,510 --> 00:27:29,290 it can spin up a whole new group of web servers, deploy to them, 575 00:27:29,290 --> 00:27:32,570 make sure they're healthy, shift traffic over to them. 576 00:27:32,570 --> 00:27:34,660 And then, after a period of time that you define, 577 00:27:34,660 --> 00:27:36,687 it can terminate your old web servers. 578 00:27:36,687 --> 00:27:37,770 So that's another pattern. 579 00:27:37,770 --> 00:27:40,850 And it's supposed to allow you to avoid downtime. 580 00:27:40,850 --> 00:27:42,130 It also supports rollbacks. 581 00:27:42,130 --> 00:27:44,350 So if something goes wrong, if it detects a failure, 582 00:27:44,350 --> 00:27:45,920 you can roll back to your old code. 583 00:27:45,920 --> 00:27:47,711 Or if you're doing blue green deploys, just 584 00:27:47,711 --> 00:27:50,500 roll back to your old instances that haven't been touched. 585 00:27:50,500 --> 00:27:53,149 And you can deploy it at EC2, or you can deploy it 586 00:27:53,149 --> 00:27:54,440 on premise servers [INAUDIBLE]. 587 00:27:54,440 --> 00:27:56,380 The only difference is that EC2 is free. 588 00:27:56,380 --> 00:27:58,810 On premise, you pay per deployment. 589 00:27:58,810 --> 00:28:01,250 And it integrates with third party tools in AWS. 590 00:28:01,250 --> 00:28:07,520 So if you're using something like Ansible to deploy on your instances, 591 00:28:07,520 --> 00:28:08,590 you can still use it. 592 00:28:08,590 --> 00:28:10,886 You just use CodeDeploy to kick off your [INAUDIBLE].. 593 00:28:10,886 --> 00:28:12,760 So let's take a look at what this looks like. 594 00:28:12,760 --> 00:28:16,540 So this is controlled by an [? appspec ?] file. 595 00:28:16,540 --> 00:28:20,020 The [? appspec ?] file has a file section. 596 00:28:20,020 --> 00:28:24,930 And so in the file section, you define what 597 00:28:24,930 --> 00:28:26,962 is it that I'm actually copying here. 598 00:28:26,962 --> 00:28:28,420 Then you have a permission section. 599 00:28:28,420 --> 00:28:29,711 That's pretty self-explanatory. 600 00:28:29,711 --> 00:28:33,880 It's like how am I going to set the permissions on what I'm copying 601 00:28:33,880 --> 00:28:35,350 and what I'm deploying. 602 00:28:35,350 --> 00:28:37,270 And then you have a bunch of lifecycle hooks. 603 00:28:37,270 --> 00:28:39,729 So the hooks, these are what actually do the deployment. 604 00:28:39,729 --> 00:28:41,395 And these can be any kind of executable. 605 00:28:41,395 --> 00:28:42,640 It can be a shell script. 606 00:28:42,640 --> 00:28:47,480 It could be Ansible, Chef, Puppet, whatever it is that you want to use. 607 00:28:47,480 --> 00:28:51,980 So your different hooks, where you can enter scripts, they get run. 608 00:28:51,980 --> 00:28:55,480 You can also choose a deployment speed. 609 00:28:55,480 --> 00:28:58,800 So if you're deploying to production and you want to be super safe, 610 00:28:58,800 --> 00:29:02,160 you can deploy to one instance at a time, or you can do half at a time. 611 00:29:02,160 --> 00:29:03,870 You can do all at a time. 612 00:29:03,870 --> 00:29:06,980 And there's different kinds of customizations beyond that. 613 00:29:06,980 --> 00:29:09,250 And you can choose where you want to deploy. 614 00:29:09,250 --> 00:29:11,680 So you can deploy it on auto scaling type of instances. 615 00:29:11,680 --> 00:29:14,970 You can deploy to just certain instances with tags on them. 616 00:29:14,970 --> 00:29:17,460 And so again, there's different lifecycle hooks. 617 00:29:17,460 --> 00:29:22,110 The yellow ones are the ones where you can script everything. 618 00:29:22,110 --> 00:29:24,570 And then you also get triggers and event notifications. 619 00:29:24,570 --> 00:29:26,640 So you can set up different event notifications 620 00:29:26,640 --> 00:29:29,190 for did this deployment fail or succeed? 621 00:29:29,190 --> 00:29:31,740 Is there a rollback? 622 00:29:31,740 --> 00:29:38,050 And so you can send these to email, to Slack, to really anywhere else. 623 00:29:38,050 --> 00:29:43,200 So now let's talk about building a CICD pipeline. 624 00:29:43,200 --> 00:29:46,110 So we have this service called CodePipeline. 625 00:29:46,110 --> 00:29:49,440 So CodePipeline is a continuous delivery service. 626 00:29:49,440 --> 00:29:52,440 It allows you to model and visualize your software release process. 627 00:29:52,440 --> 00:29:58,780 It is a version of that pipeline service that I talked about earlier. 628 00:29:58,780 --> 00:30:02,730 And it handles the builds, the tests, the deployment of your code 629 00:30:02,730 --> 00:30:04,110 every time there's a code change. 630 00:30:04,110 --> 00:30:07,587 It also integrates with a lot of third party tools and AWS services. 631 00:30:07,587 --> 00:30:10,170 Let's take a look at what a pipeline actually looks like here. 632 00:30:10,170 --> 00:30:12,964 So this is a very simple pipeline. 633 00:30:12,964 --> 00:30:14,130 We've got three stages here. 634 00:30:14,130 --> 00:30:16,629 We've got a source stage, a build stage, and a deploy stage. 635 00:30:16,629 --> 00:30:19,290 So the source code is stored in GitHub. 636 00:30:19,290 --> 00:30:21,304 Then we kick off a build in CodeBuild. 637 00:30:21,304 --> 00:30:23,220 And then we deploy it using Elastic Beanstalk, 638 00:30:23,220 --> 00:30:27,280 which is an AWS service that allows you to deploy your code pretty easily. 639 00:30:27,280 --> 00:30:30,550 So again, this is the whole pipeline. 640 00:30:30,550 --> 00:30:33,370 641 00:30:33,370 --> 00:30:34,225 This is a stage. 642 00:30:34,225 --> 00:30:36,225 And then in [INAUDIBLE] stage, you have actions. 643 00:30:36,225 --> 00:30:38,994 644 00:30:38,994 --> 00:30:42,160 And then there's transitions, so that when you go from one stage to another, 645 00:30:42,160 --> 00:30:43,900 that's a transition. 646 00:30:43,900 --> 00:30:46,700 And so you can have parallel actions. 647 00:30:46,700 --> 00:30:48,630 So in this example, we're building our code. 648 00:30:48,630 --> 00:30:50,296 And we're kicking off a Lambda function. 649 00:30:50,296 --> 00:30:53,950 So Lambda is our serverless product where you can give it a function 650 00:30:53,950 --> 00:30:55,820 in Python, Node.js Python-- 651 00:30:55,820 --> 00:31:00,390 or Python, Node.js Java, or .NET. 652 00:31:00,390 --> 00:31:01,720 And you can just execute it. 653 00:31:01,720 --> 00:31:04,136 So in this example, we're notifying our developers there's 654 00:31:04,136 --> 00:31:06,910 a build going on through, say, Slack. 655 00:31:06,910 --> 00:31:10,290 You can also have sequential actions. 656 00:31:10,290 --> 00:31:13,930 So then, now after all this happens and it succeeds, 657 00:31:13,930 --> 00:31:19,390 we're going to do an API test using a third party service call Runscope. 658 00:31:19,390 --> 00:31:22,450 And it has manual reviews. 659 00:31:22,450 --> 00:31:25,150 So in this example, we're building our code. 660 00:31:25,150 --> 00:31:29,080 Then we're deploying it using Elastic Beanstalk to staging. 661 00:31:29,080 --> 00:31:31,160 And then somebody has to go in and hit approve. 662 00:31:31,160 --> 00:31:32,243 And then they hit approve. 663 00:31:32,243 --> 00:31:36,740 And then it then goes on to deploy it to production. 664 00:31:36,740 --> 00:31:39,440 So there's different service integrations. 665 00:31:39,440 --> 00:31:42,790 So for AWS services, for source code, it works 666 00:31:42,790 --> 00:31:45,870 with storing our source in S3 and CodeCommit. 667 00:31:45,870 --> 00:31:47,245 You can invoke a Lambda function. 668 00:31:47,245 --> 00:31:49,456 So you can put custom logic and Lambda functions. 669 00:31:49,456 --> 00:31:52,330 And for deployment, it works with CodeDeploy, CloudFormation, Elastic 670 00:31:52,330 --> 00:31:53,470 Beanstalk and OpsWorks. 671 00:31:53,470 --> 00:31:56,840 And there is just a bunch of a third party integrations with this as well. 672 00:31:56,840 --> 00:32:01,090 And so you can also do custom actions, either through a plug-in 673 00:32:01,090 --> 00:32:02,620 or through Lambda functions. 674 00:32:02,620 --> 00:32:06,520 So things we see are doing mobile testing, updating tickets. 675 00:32:06,520 --> 00:32:10,030 So if you have some kind of [? JIRA ?] or other ticketing system, 676 00:32:10,030 --> 00:32:13,420 you can have it automatically update the tickets during deployment. 677 00:32:13,420 --> 00:32:17,930 Provision resources-- so CloudFormation, so deploy to CloudFormation 678 00:32:17,930 --> 00:32:21,660 stacked to provision extra resources during your software release process, 679 00:32:21,660 --> 00:32:24,730 updating any kind of dashboards, sending notifications, 680 00:32:24,730 --> 00:32:26,510 or initiating a security scan. 681 00:32:26,510 --> 00:32:27,635 Again, that's part of this. 682 00:32:27,635 --> 00:32:30,270 These are all things you can do with custom actions. 683 00:32:30,270 --> 00:32:33,510 So now let's talk about CodeCommit. 684 00:32:33,510 --> 00:32:36,470 So CodeCommit is managed Git. 685 00:32:36,470 --> 00:32:40,080 You use your standard Git tools to enter interface with it. 686 00:32:40,080 --> 00:32:46,500 It is built on three AWS services, DynamoDB, S3, and our key management 687 00:32:46,500 --> 00:32:48,330 service, which I'll talk about in a second. 688 00:32:48,330 --> 00:32:51,720 But basically, all your code is encrypted at rest with keys 689 00:32:51,720 --> 00:32:53,550 that you create. 690 00:32:53,550 --> 00:32:55,740 And there's no repo limit. 691 00:32:55,740 --> 00:33:00,000 So you can have big S3 repos or big files in your repos 692 00:33:00,000 --> 00:33:01,920 and a lot of files on those repos. 693 00:33:01,920 --> 00:33:03,150 And it has post commit hooks. 694 00:33:03,150 --> 00:33:06,240 So you can trigger an SNS notification or a Lambda function 695 00:33:06,240 --> 00:33:09,040 afterwards, after you do a commit. 696 00:33:09,040 --> 00:33:14,010 So let's take a look at how this works. 697 00:33:14,010 --> 00:33:17,700 So CodeCommit, as a developer, you're just working on the Git, 698 00:33:17,700 --> 00:33:19,170 just like you normally work. 699 00:33:19,170 --> 00:33:20,160 So you can pull. 700 00:33:20,160 --> 00:33:21,030 You push your code. 701 00:33:21,030 --> 00:33:23,250 You do commits, the same thing. 702 00:33:23,250 --> 00:33:28,020 In the background, the CodeCommit service, your objects are stored in S3. 703 00:33:28,020 --> 00:33:30,300 The index is stored in DynamoDB. 704 00:33:30,300 --> 00:33:33,420 And the encryption key is stored in our key management service. 705 00:33:33,420 --> 00:33:37,150 So it is the same Git experience as normal. 706 00:33:37,150 --> 00:33:40,420 So again, I did this earlier at my terminal window. 707 00:33:40,420 --> 00:33:42,160 So you clone a repo. 708 00:33:42,160 --> 00:33:43,080 You update a file. 709 00:33:43,080 --> 00:33:44,280 You push the file. 710 00:33:44,280 --> 00:33:46,740 In the background, it's working with CodeCommit. 711 00:33:46,740 --> 00:33:48,060 So that's CodeCommit. 712 00:33:48,060 --> 00:33:49,290 And then for the pricing-- 713 00:33:49,290 --> 00:33:54,060 so CodeCommit costs $1 per active user per month plus however much storage 714 00:33:54,060 --> 00:33:55,100 you end up using. 715 00:33:55,100 --> 00:33:58,200 CodePipeline is $1 per active pipeline per month, 716 00:33:58,200 --> 00:34:02,010 but the first month of any pipeline is free. 717 00:34:02,010 --> 00:34:04,980 CodeDeploy is free [? in the ?] EC2. 718 00:34:04,980 --> 00:34:08,040 It costs $0.02 per deployment on premise. 719 00:34:08,040 --> 00:34:12,179 And CodeBuild, it's permanent and depends on what instance I was using. 720 00:34:12,179 --> 00:34:17,150 So before we go to our live demo, let's go to CodeStar. 721 00:34:17,150 --> 00:34:18,420 Let's talk about CodeStar. 722 00:34:18,420 --> 00:34:23,620 So CodeStar, it allows you to basically quickly develop, build, 723 00:34:23,620 --> 00:34:25,750 and deploy your applications in AWS. 724 00:34:25,750 --> 00:34:29,234 And also, it helps you manage your developer teams. 725 00:34:29,234 --> 00:34:32,400 And so you basically pick a bunch of-- there's a bunch of templates in here. 726 00:34:32,400 --> 00:34:35,070 So let's say I have a Ruby on Rails project or a Node project. 727 00:34:35,070 --> 00:34:37,469 I can just click on the project. 728 00:34:37,469 --> 00:34:38,929 It deploys the resources I need. 729 00:34:38,929 --> 00:34:44,100 So it sets up all these services I talked about and deploys them. 730 00:34:44,100 --> 00:34:45,500 It connects to my ID. 731 00:34:45,500 --> 00:34:49,199 So it works with Visual Studio, Eclipse, or the command line tools. 732 00:34:49,199 --> 00:34:50,605 And then I get a dashboard. 733 00:34:50,605 --> 00:34:52,739 So in that dashboard, I can manage my users. 734 00:34:52,739 --> 00:34:58,080 So I can give users access to SSH into my instances that are spun up. 735 00:34:58,080 --> 00:34:59,610 And then you have a dashboard. 736 00:34:59,610 --> 00:35:01,740 That dashboard shows your code pipeline. 737 00:35:01,740 --> 00:35:03,990 It can connect to [? Jirus. ?] So it can show you your 738 00:35:03,990 --> 00:35:05,730 to do list and your issues. 739 00:35:05,730 --> 00:35:07,230 It has a Wiki tab. 740 00:35:07,230 --> 00:35:09,510 It has a Monitoring tab. 741 00:35:09,510 --> 00:35:11,370 So it shows you CloudWatch metrics. 742 00:35:11,370 --> 00:35:14,160 It can show you your commit repo history. 743 00:35:14,160 --> 00:35:15,550 So that's CodeStar. 744 00:35:15,550 --> 00:35:16,050 All right. 745 00:35:16,050 --> 00:35:19,690 So let's check out what my demo is doing here. 746 00:35:19,690 --> 00:35:23,980 So a little bit ago, I pushed these files. 747 00:35:23,980 --> 00:35:25,920 So let's take a look at CodePipeline here. 748 00:35:25,920 --> 00:35:28,870 749 00:35:28,870 --> 00:35:30,500 So this is my pipeline. 750 00:35:30,500 --> 00:35:33,370 So in this example, what I'm doing is I have a website. 751 00:35:33,370 --> 00:35:35,270 This website has a load balancer. 752 00:35:35,270 --> 00:35:36,520 It has an ELB. 753 00:35:36,520 --> 00:35:38,500 And this website is a Java app. 754 00:35:38,500 --> 00:35:39,430 There's no database. 755 00:35:39,430 --> 00:35:42,710 There's three instances on it and an auto scaling group. 756 00:35:42,710 --> 00:35:45,650 It's a Bespoke site for dire wolves, although it 757 00:35:45,650 --> 00:35:47,470 looks the pictures are of dogs. 758 00:35:47,470 --> 00:35:53,040 And so we have a deployment pipeline for this. 759 00:35:53,040 --> 00:35:57,070 So it's going to connect to my code repo. 760 00:35:57,070 --> 00:35:58,080 So here's CodeCommit. 761 00:35:58,080 --> 00:35:59,457 So it's connecting to this repo. 762 00:35:59,457 --> 00:36:01,290 Actually, that's there before my other demo. 763 00:36:01,290 --> 00:36:03,750 But it's a standard Git repo. 764 00:36:03,750 --> 00:36:07,620 And it's building the demo in CodeBuild. 765 00:36:07,620 --> 00:36:10,110 Once the build is done, it goes to CodeDeploy. 766 00:36:10,110 --> 00:36:15,200 So as soon as I made the commit eight minutes ago, it would have picked up-- 767 00:36:15,200 --> 00:36:18,630 13 minutes ago, now-- it would have picked up that I did the commit. 768 00:36:18,630 --> 00:36:22,060 And it would have taken the files from that commit, 769 00:36:22,060 --> 00:36:24,450 zipped them up, put them into an S3 bucket. 770 00:36:24,450 --> 00:36:26,340 And then it kicked off this code build. 771 00:36:26,340 --> 00:36:28,290 So let's take a look at CodeBuild here. 772 00:36:28,290 --> 00:36:30,870 So I'm going to refresh this page. 773 00:36:30,870 --> 00:36:31,740 Here we go. 774 00:36:31,740 --> 00:36:34,650 So 12 minutes ago, it completed a code build. 775 00:36:34,650 --> 00:36:40,770 So in my code build, it would have basically built this JAR file here. 776 00:36:40,770 --> 00:36:44,220 So I can see the history of what it was doing. 777 00:36:44,220 --> 00:36:46,890 I can see over the last 1,000 lines of my log. 778 00:36:46,890 --> 00:36:49,520 I can also see the whole log here. 779 00:36:49,520 --> 00:36:50,830 So here's my logs. 780 00:36:50,830 --> 00:36:53,880 So this is if I want to see what happened or if something broke. 781 00:36:53,880 --> 00:36:56,470 You get access to the full log here. 782 00:36:56,470 --> 00:37:00,990 So then after the build was finished, it would have done a deploy. 783 00:37:00,990 --> 00:37:03,720 So this is my CodeDeploy environment. 784 00:37:03,720 --> 00:37:05,040 I have only one group here. 785 00:37:05,040 --> 00:37:08,340 I'm deploying straight to production. 786 00:37:08,340 --> 00:37:11,540 We can take a look at the actual deployment here. 787 00:37:11,540 --> 00:37:14,430 So let's take a look here. 788 00:37:14,430 --> 00:37:16,330 So my other deployment is still in progress. 789 00:37:16,330 --> 00:37:19,110 Let's take a look at this one. 790 00:37:19,110 --> 00:37:22,450 So we've got three instances that it was deploying to. 791 00:37:22,450 --> 00:37:24,200 And again, this was an auto scaling group. 792 00:37:24,200 --> 00:37:25,450 So I could have six instances. 793 00:37:25,450 --> 00:37:26,127 I could have 20. 794 00:37:26,127 --> 00:37:27,710 It would have deployed to all of them. 795 00:37:27,710 --> 00:37:28,640 And I see a timeline. 796 00:37:28,640 --> 00:37:30,170 So all three are done. 797 00:37:30,170 --> 00:37:32,992 So the timeline here is we can see exactly what happened. 798 00:37:32,992 --> 00:37:34,700 And if anything had failed, it would have 799 00:37:34,700 --> 00:37:37,220 shown me the logs of why this failed. 800 00:37:37,220 --> 00:37:38,570 So I did a deployment. 801 00:37:38,570 --> 00:37:42,602 It would have not involved any downtime, and I 802 00:37:42,602 --> 00:37:44,060 would have had my website still up. 803 00:37:44,060 --> 00:37:46,100 Let's take a look at my second demo here. 804 00:37:46,100 --> 00:37:47,610 So this was a bit more complicated. 805 00:37:47,610 --> 00:37:49,920 So this is a WordPress site. 806 00:37:49,920 --> 00:37:53,650 So it's got a RDS database for MySQL. 807 00:37:53,650 --> 00:37:55,310 It's using elastic cache. 808 00:37:55,310 --> 00:37:58,580 So it has memecache connected to it, as a content delivery 809 00:37:58,580 --> 00:38:00,740 network in front of it. 810 00:38:00,740 --> 00:38:02,990 It's a WordPress, so it's in PHP. 811 00:38:02,990 --> 00:38:07,660 I'm using Engine X. I'm using MySQL. 812 00:38:07,660 --> 00:38:09,250 I'm using PHP. 813 00:38:09,250 --> 00:38:12,031 I have an auto scaling group with an application load 814 00:38:12,031 --> 00:38:13,030 balancer in front of it. 815 00:38:13,030 --> 00:38:14,120 So I have a load balancer. 816 00:38:14,120 --> 00:38:16,820 And I'm offloading my static assets to S3. 817 00:38:16,820 --> 00:38:18,440 So it's a more complicated set up. 818 00:38:18,440 --> 00:38:21,520 And so for my pipeline here, let's take a look. 819 00:38:21,520 --> 00:38:23,090 Let's go to my pipelines. 820 00:38:23,090 --> 00:38:26,330 821 00:38:26,330 --> 00:38:29,830 See what it's doing here is, again, it's picked up my source code 822 00:38:29,830 --> 00:38:31,180 from CodeCommit. 823 00:38:31,180 --> 00:38:33,430 So let's take a look here. 824 00:38:33,430 --> 00:38:38,070 So here's my appspec file in CodeCommit. 825 00:38:38,070 --> 00:38:40,030 And so this is what it's doing. 826 00:38:40,030 --> 00:38:42,570 This is what it's telling it what to do during deploy. 827 00:38:42,570 --> 00:38:44,100 And I have all these scripts I'm running here. 828 00:38:44,100 --> 00:38:45,433 So I'm running security updates. 829 00:38:45,433 --> 00:38:46,815 I'm installing dependencies. 830 00:38:46,815 --> 00:38:51,430 I'm installing-- I'm changing permissions. 831 00:38:51,430 --> 00:38:52,820 I'm validating the servers. 832 00:38:52,820 --> 00:38:55,360 And this is all in the form of shell scripts. 833 00:38:55,360 --> 00:38:57,295 So let's look here at my scripts. 834 00:38:57,295 --> 00:39:00,220 835 00:39:00,220 --> 00:39:02,880 So I'm just going to look at my validate script. 836 00:39:02,880 --> 00:39:05,910 And this is just the thing, so just curling itself. 837 00:39:05,910 --> 00:39:08,850 The local web server is making sure it's OK. 838 00:39:08,850 --> 00:39:12,960 So anyway, it's going to do whatever I tell it to do through these scripts. 839 00:39:12,960 --> 00:39:23,890 And so it's currently-- so it gets the code from CodeCommit. 840 00:39:23,890 --> 00:39:25,120 It zips it up. 841 00:39:25,120 --> 00:39:26,480 Then it runs Jenkins. 842 00:39:26,480 --> 00:39:30,610 So Jenkins is, again, an open source CICD tool. 843 00:39:30,610 --> 00:39:33,540 So let's see if I can remember my password here. 844 00:39:33,540 --> 00:39:34,690 Nope, maybe I can't. 845 00:39:34,690 --> 00:39:35,250 Let's see. 846 00:39:35,250 --> 00:39:37,890 847 00:39:37,890 --> 00:39:39,620 So I forgot my password for Jenkins. 848 00:39:39,620 --> 00:39:45,330 But Jenkins, basically what it does is Jenkins is running a test. 849 00:39:45,330 --> 00:39:46,820 It's unzipping the code. 850 00:39:46,820 --> 00:39:48,410 It's running a test on it. 851 00:39:48,410 --> 00:39:50,970 If the test passes, it goes on to the next stage. 852 00:39:50,970 --> 00:39:52,500 So that already succeeded. 853 00:39:52,500 --> 00:39:54,164 So now we're on CodeDeploy. 854 00:39:54,164 --> 00:39:56,330 So now is deploying code to my staging environments. 855 00:39:56,330 --> 00:39:57,830 So it's not quite done. 856 00:39:57,830 --> 00:39:59,580 But I'll show you what it-- 857 00:39:59,580 --> 00:40:00,800 it just finished. 858 00:40:00,800 --> 00:40:02,390 So here's the staging deploy. 859 00:40:02,390 --> 00:40:04,040 And this is a blue green deploy. 860 00:40:04,040 --> 00:40:06,260 So I had three original instances. 861 00:40:06,260 --> 00:40:10,700 And it spun up three replacement instances here. 862 00:40:10,700 --> 00:40:14,210 And it installed the application on those replacement instances. 863 00:40:14,210 --> 00:40:16,890 It rerouted the traffic to the replacement instances 864 00:40:16,890 --> 00:40:18,710 and terminated the original instances. 865 00:40:18,710 --> 00:40:21,380 So here, we have six total instances-- three old, three new. 866 00:40:21,380 --> 00:40:24,252 And again, we can see everything that happened here. 867 00:40:24,252 --> 00:40:26,710 So let's take a look at one of these replacement instances. 868 00:40:26,710 --> 00:40:31,130 So again, this is a more involved deployment. 869 00:40:31,130 --> 00:40:35,770 So what's going to happen now, after this succeeded-- 870 00:40:35,770 --> 00:40:37,640 so now we're on the load testing stage. 871 00:40:37,640 --> 00:40:39,920 I'm using a third party service called BlazeMeter. 872 00:40:39,920 --> 00:40:42,640 So after I've done a deployment to staging, 873 00:40:42,640 --> 00:40:44,720 it's going to do an automated load test. 874 00:40:44,720 --> 00:40:47,192 So it's going to make sure, OK, you're deployed. 875 00:40:47,192 --> 00:40:48,400 Can this handle some traffic? 876 00:40:48,400 --> 00:40:50,240 So it's going to throw some traffic at it. 877 00:40:50,240 --> 00:40:53,130 And when that succeeds, it's going to go to a manual approval. 878 00:40:53,130 --> 00:40:55,139 So it's going to say, OK, this is all good. 879 00:40:55,139 --> 00:40:56,180 You've completed testing. 880 00:40:56,180 --> 00:40:58,070 You've completed a load test. 881 00:40:58,070 --> 00:41:00,140 Do you approve this going to production? 882 00:41:00,140 --> 00:41:02,720 So once it gets to that stage, which will take a few minutes, 883 00:41:02,720 --> 00:41:04,115 I would hit approve. 884 00:41:04,115 --> 00:41:05,990 And then a dozen others deploy to production. 885 00:41:05,990 --> 00:41:07,615 And then, finally, we're in production. 886 00:41:07,615 --> 00:41:10,580 So this is a more complicated pipeline. 887 00:41:10,580 --> 00:41:14,530 It's more similar to what a company would do to to deploy their code. 888 00:41:14,530 --> 00:41:16,352 So that's the demo. 889 00:41:16,352 --> 00:41:18,560 I'm going to save room for some questions at the end. 890 00:41:18,560 --> 00:41:20,799 But let's talk about how you actually get started. 891 00:41:20,799 --> 00:41:22,340 So I'm going to go back to my slides. 892 00:41:22,340 --> 00:41:25,290 893 00:41:25,290 --> 00:41:27,970 So first of all, we've got a DevOps blog. 894 00:41:27,970 --> 00:41:31,200 And on the DevOps blog, a lot of this information I talked about. 895 00:41:31,200 --> 00:41:36,960 We also have blog posts about how to do various things related to DevOps. 896 00:41:36,960 --> 00:41:38,610 But how do I get started? 897 00:41:38,610 --> 00:41:41,310 Well, that's what AWS Educate is for. 898 00:41:41,310 --> 00:41:45,950 So Educate is a program that gives you a bunch of resources to get started. 899 00:41:45,950 --> 00:41:50,220 So things like grants for access to AWS-- 900 00:41:50,220 --> 00:41:54,890 so I'll have a sign up link for you to be able to get $150 in credits 901 00:41:54,890 --> 00:41:57,330 to start using AWS. 902 00:41:57,330 --> 00:42:02,400 It gives you open course content on how to get trained in AWS. 903 00:42:02,400 --> 00:42:05,100 It gives you communities to collaborate with other people trying 904 00:42:05,100 --> 00:42:06,690 to get trained in AWS. 905 00:42:06,690 --> 00:42:11,730 And it allows you to do professional development to get cloud skills 906 00:42:11,730 --> 00:42:13,440 and ultimately find jobs. 907 00:42:13,440 --> 00:42:17,970 So we want to encourage student entrepreneurship. 908 00:42:17,970 --> 00:42:21,260 We want to have growth and credentialing for AWS. 909 00:42:21,260 --> 00:42:24,150 We want to accelerate our hiring pipelines. 910 00:42:24,150 --> 00:42:27,660 A lot of people are trying to hire employees with cloud skill sets. 911 00:42:27,660 --> 00:42:32,721 So here, let me play a short video to tell you more about Educate. 912 00:42:32,721 --> 00:42:36,410 913 00:42:36,410 --> 00:42:39,890 SPEAKER 3: Welcome to AWS Educate's cloud career pathway. 914 00:42:39,890 --> 00:42:43,310 AWS Educate helps you create a pathway into innovative and lucrative 915 00:42:43,310 --> 00:42:47,930 opportunities in the rapidly expanding cloud industry. 916 00:42:47,930 --> 00:42:50,630 On AWS Educate, you will discover the skills 917 00:42:50,630 --> 00:42:56,090 necessary to advance into cloud careers, explore content, test your knowledge, 918 00:42:56,090 --> 00:43:00,110 seek micro credentials as badges and certificates of completion, 919 00:43:00,110 --> 00:43:04,970 and even have the opportunity to apply for jobs and internships in the cloud. 920 00:43:04,970 --> 00:43:08,490 Start off by building your profile, adding your resume, classes, 921 00:43:08,490 --> 00:43:11,790 degrees attained, and other facets of your experience. 922 00:43:11,790 --> 00:43:14,670 Then, select a cloud career field. 923 00:43:14,670 --> 00:43:17,210 From there, we'll personalize your plan by providing 924 00:43:17,210 --> 00:43:19,620 content that matches your pathway. 925 00:43:19,620 --> 00:43:21,680 As you consume that content, we'll prompt 926 00:43:21,680 --> 00:43:24,500 you to take knowledge checks of three to five questions 927 00:43:24,500 --> 00:43:27,380 in order to gauge your comprehension. 928 00:43:27,380 --> 00:43:29,930 After you've completed 50% of the knowledge checks, 929 00:43:29,930 --> 00:43:33,920 you'll have a chance to earn an AWS Educate badge. 930 00:43:33,920 --> 00:43:37,820 Then uplevel your profile by completing a project and a final assessment, 931 00:43:37,820 --> 00:43:41,090 and you can receive an AWS Educate certificate of completion. 932 00:43:41,090 --> 00:43:44,780 Take applicable courses at your school or online to grow your knowledge 933 00:43:44,780 --> 00:43:46,640 and fill gaps in your skill set. 934 00:43:46,640 --> 00:43:49,850 All of these achievements can be added into your portfolio. 935 00:43:49,850 --> 00:43:51,260 Then put it all together. 936 00:43:51,260 --> 00:43:55,340 Apply for a job or internship at Amazon or at one of our customers or partners 937 00:43:55,340 --> 00:43:57,890 through the AWS Educate job board. 938 00:43:57,890 --> 00:44:00,830 Download your portfolio and send it to your potential employer 939 00:44:00,830 --> 00:44:03,270 to get your ideal job in the cloud. 940 00:44:03,270 --> 00:44:04,500 So what are you waiting for? 941 00:44:04,500 --> 00:44:06,628 Start your career pathway today. 942 00:44:06,628 --> 00:44:10,044 [MUSIC PLAYING] 943 00:44:10,044 --> 00:44:15,816 944 00:44:15,816 --> 00:44:16,940 LEO ZHADANOVSKY: All right. 945 00:44:16,940 --> 00:44:20,360 So with Educate, there's different career paths. 946 00:44:20,360 --> 00:44:24,530 There's currently 27 careers, ranging from solutions architecture 947 00:44:24,530 --> 00:44:29,160 to programming web development, big data, Hadoop, and more. 948 00:44:29,160 --> 00:44:31,910 There's 30 plus hours of content for each one of these, 949 00:44:31,910 --> 00:44:34,940 including access to labs you can do, as well 950 00:44:34,940 --> 00:44:41,090 as our technical essentials training, which normally costs $600. 951 00:44:41,090 --> 00:44:45,410 And we've got over 1,000 educational institutions 952 00:44:45,410 --> 00:44:48,890 who will participate in AWS Educate and the top 10 global computer 953 00:44:48,890 --> 00:44:51,920 science and information systems institutions. 954 00:44:51,920 --> 00:44:56,630 And here's just a sampling of customers for AWS Educate. 955 00:44:56,630 --> 00:45:02,630 So to get started, I basically made some simple things that are easy to see. 956 00:45:02,630 --> 00:45:04,010 There's a link for signing up. 957 00:45:04,010 --> 00:45:08,630 And so that link will get you $150 in credit codes. 958 00:45:08,630 --> 00:45:13,670 And so I believe this also is going to be emailed out to anybody who attended. 959 00:45:13,670 --> 00:45:18,830 And then there's a guide for how to sign up here as well. 960 00:45:18,830 --> 00:45:22,580 So that's all I had in terms of my presentation. 961 00:45:22,580 --> 00:45:28,445 But does anybody have any questions about anything? 962 00:45:28,445 --> 00:45:28,945 Yeah? 963 00:45:28,945 --> 00:45:31,430 SPEAKER 4: Do you have a plan for open source projects? 964 00:45:31,430 --> 00:45:32,373 LEO ZHADANOVSKY: Sorry, can you repeat that one? 965 00:45:32,373 --> 00:45:34,690 SPEAKER 4: Do you have any plans for open source projects? 966 00:45:34,690 --> 00:45:36,220 LEO ZHADANOVSKY: Do we have any plans for open source projects? 967 00:45:36,220 --> 00:45:37,660 So it's a good question. 968 00:45:37,660 --> 00:45:43,299 So we actually have, if you search for AWS Labs, 969 00:45:43,299 --> 00:45:46,090 we have a GitHub repo called [? database ?] [? ops, ?] where we put 970 00:45:46,090 --> 00:45:49,870 our open source projects that you can implement. 971 00:45:49,870 --> 00:45:57,442 We also have contributed to a bunch of open source projects in general. 972 00:45:57,442 --> 00:46:00,400 But I think your question is, do we have a pricing plan for open source 973 00:46:00,400 --> 00:46:00,900 questions. 974 00:46:00,900 --> 00:46:03,704 SPEAKER 4: Yeah, for example, with [? Git ?] [INAUDIBLE].. 975 00:46:03,704 --> 00:46:09,548 976 00:46:09,548 --> 00:46:11,292 That was one thing that [INAUDIBLE]. 977 00:46:11,292 --> 00:46:12,250 LEO ZHADANOVSKY: Right. 978 00:46:12,250 --> 00:46:14,170 So we have a free tier. 979 00:46:14,170 --> 00:46:17,260 So basically if you sign up, you get a bunch of stuff for free. 980 00:46:17,260 --> 00:46:18,520 So you can launch an instance. 981 00:46:18,520 --> 00:46:20,420 There's things you can do without getting charged. 982 00:46:20,420 --> 00:46:21,940 And that can actually take you pretty far. 983 00:46:21,940 --> 00:46:24,565 And then on top of that, if you sign up with that Educate link, 984 00:46:24,565 --> 00:46:26,450 you get $150 in credits. 985 00:46:26,450 --> 00:46:30,850 So we don't have a specific thing, a program for open source projects. 986 00:46:30,850 --> 00:46:34,630 But that should give you some credits to get started. 987 00:46:34,630 --> 00:46:36,020 Any other questions? 988 00:46:36,020 --> 00:46:40,900 989 00:46:40,900 --> 00:46:41,400 OK. 990 00:46:41,400 --> 00:46:43,296 Well, thank you for your time. 991 00:46:43,296 --> 00:46:46,170 I'll hang out here for a little bit just if anyone else has anything. 992 00:46:46,170 --> 00:46:47,610 But thanks for coming. 993 00:46:47,610 --> 00:46:48,360 SPEAKER 5: Thanks. 994 00:46:48,360 --> 00:46:49,235 SPEAKER 6: Thank you. 995 00:46:49,235 --> 00:46:52,010 [APPLAUSE] 996 00:46:52,010 --> 00:46:54,002