 Has anyone had like a eureka moment with your computer? You know when CGA became EGA, 16 colours. When I got a modem upgrade and I went from like 14.4 to 28.8 or when I came to Singapore and I tasted fiber optic for the first time. It was a really special moment, almost made me cry. When you went from downloading things from FTP to torrenting, that was great. When, I don't know, you went from Lynx to Mosaic or from Internet Explorer to Firefox. Anyway, I'm just curious just to get a conversation. What was your big memory of a big change for you guys? Come on, you must have won. Go. When you discovered Vim? Java to go. When you installed Lynx? When you met your wife? Anyway, seriously, I've been having a lot of fun with Go and this new technology that I've come across and I'm going to share it with you guys and hopefully you'll be just as excited as I am or I encourage you to get a new line of profession which you're excited about. Not computers, obviously. Oh, shit! Local horse refused to connect? I think I killed my... I killed present, yes. Okay, there you go. How to do Golang's web services? Okay, Golang, it's really good for the web, honestly. Take control plus a couple of times. Really? Yeah. Okay, done. So, who's deployed a Golang web service? Yes, one, two. How did you do it? Was it manually? Did you go like, go run main.go? No, we're using Delta. Okay, well, you're advanced. You've gone to the third step. But has anyone started off manually? I mean, everyone does it manually. Of course we do. So the first step is you run it manually. Go run something and it launches itself on some port, 888 or whatever. And then typically you put it behind Nginx or something like Caddy so that it doesn't fall over immediately and it can respond to some intelligent behavior. But that's baby steps, guys. That's baby. You have to start somewhere. You have to start somewhere. But that's kind of crappy. And the second one is maybe to orchestrate it using Puppet or Ansible or something like that. That's the next step I like to think. Who's done that? Sucks. That sucks. Stop doing that. I'm going to tell you. The third one is probably Docker. Probably the worst of all three options. I disagree with you. I don't like Docker. I mean, for example, the Golang colon on build Docker image. It bloats the most innocent of Golang programs to about 500 megabytes. Because you don't know from scratch. I do. Yeah, you could use that. Or I'll use the Alpine one. There are some options. Let me see. Can I? What did I link here? Oh, yeah. So the typical way to do it now is to use Alpine images or something like that. Anyway, I can still, oh, it's tiny. It sucks. Don't do it. It sucks. I actually wrote a blog about how you can all suck. And the idea is don't suck. I've made mistakes. Learn from my mistakes. Follow the one true way. Join me. But I'm joking. Just watch. The one true way, obviously, is Lambda. Because everyone's been talking about it. Lambda this, Lambda that. Boring, boring, boring. But it's true. Sorry, it's true. It's all true. Functioners. What? Do you work at Lambda? No, don't. Good. I was also just, I just threw in some stupid competitors in there. Just pretend that they have a decent function as a Lambda service, whatever. They probably don't. I've never tried it. I mean, who's going to try IBM in this darn age? Maybe some of you. Sorry, IBM. I'm still interested. I was trying to give them the code. No, the function is as a service. Do you guys know what it is? It's basic. It's quite simple. It's like Docker without the bullshit. Excuse my English. It's taking your little piece of code, running it in a container, provisioning it for you. It supposedly maybe does security too, who knows. And more importantly, it scales them. Like scaling Docker, OGBs. Who's used Amazon ECS? Who's used Kubernetes? It's a colossal waste of time. Just look at your YAML files for just one minute and realize there's insanity. I can see that the YAML files are nasty. The real way to run containers is to not run them at all. Let some idiot do it. No, they're not idiots. The geniuses. Let the geniuses do it. Maybe there's other guys. But there is a little bit of a niggle. Golang is not supported on ADS Lambda. Oh. Okay, let's go home. That's a joke. There's a saviour, a savant. Amongst us humans called TJ Holloway Chuck. I don't think I pronounced his name correctly. But he wrote ExpressJS, which is an amazing piece of junk. No, it's great. It's what you use when you have JavaScript to work with and you need to run a web server. Good luck. It's the wrong way to do it. He admits it's the wrong way to do it. He leaves the Node.js camp and joins the enlightened ones. I hope you all use Golang or you're just pretending. It's okay to pretend. I used to pretend. So he's now one of us. And he's now doing some excellent stuff with Golang. He's launched this sort of project that he hopes to turn to a business. I'm sure he will. Called Apex. And this is what I'm going to share with you. Apex. Oh, by the way, have a look at my talk. I'm going to put it online. You can follow the links. So what is Apex? I actually talked about Apex before. But the Apex I talked about was the Lambda stuff. This new stuff that I'm talking about is called Apex Up. What's different between what I talked about Apex before and what I'm talking about now is Apex Up solves all the complexity surrounding the API gateway and Lambda. API gateway is... What's a politically correct term for bitch? To work with. It's nasty. And basically Apex Up is just... It takes all that monstrosity away. And so now instead of working with Lambda functions where you just listen for SNS events like somebody uploaded, now you can respond in the traditional web services way with the request and response model. Yeah, PIA. So what does it do? It's basically a reverse proxy running in Lambda. And you're probably thinking to yourself... You're probably thinking to yourself, oh man, that's really crazy, stupid, slow. Running a reverse proxy to handle requests in Lambda? Are you an idiot? Oh no, it's not actually. It's pretty damn fast. His solution is faster than Heroku, faster than Now, which is another typical pass solution. It's actually amazingly fast. And maybe when Amazon natively support GoLang, it'll be even faster. Up is just not only for shipping GoLang services. It's also good for static content. And don't sound like a hater, but you can use other stupid languages if you really, really... If you wanted to. All languages are good. Except Python. Who uses Python here? Hate you. That's pretty nice. You're making a mistake. Python 2 or 3. They're both mistakes, that's a joke. So this is what an Apex GoLang service look like. You notice something about it? Can you all see that? Funk me. Funk me? Function me. The only thing that's slightly peculiar about it is that port is exposed as an environmental variable. The rest of it is just standard Go. You don't need any special local tools. In fact, any GoLang service that you have will run in Apex pretty much. It's amazing. And there are further examples there. You can click on. But you don't have to do anything. You get your GoLang program and you just basically do what this video says. Instead of me doing a demo, here's a tip for you. Instead of doing a live demo, record it and play it back. And then you won't break a sweat. So this is what I try to do. So in this thing, it's just a simple GoLang thing that I showed you. All you do is configure your Amazon account. That's so easy, isn't it? Just credit card. Giving all your personal information. So easy. And then you press up. And boom. It's doing something. What is it doing? It's actually, the cool thing about the way he's done it is that you can go up build and you can see like the cloud formation template that he's building. But essentially, if you don't care about all that complexity, you just press up. It creates the cloud formation template. It bundles it all up. It tells Amazon to set up the stack. It does something else. Probably make a cup of tea. I don't know. I wish it did that. And then it builds up the whole thing and about, I don't know how long this video is. In another 30 seconds? And about, I mean, this is going from scratch. Provisioning an API gateway takes time. Setting up stupid little cloud formation stuff takes time. But once it's done, I assure you, it gets better. It gets a lot better. OK. That's it. My service is online. There's also fun commands like up metrics to see how many times it's run. It's got the old stuff there. There's also up logs so you can see all the requests. Up URL gives you the URL. By default, you're in a development environment. So here I am. I'm putting this development URL in there. And you can see that when I upload a file or do something, the logs later appear here. It's actually way better than CloudWatch because you can filter, which is a nightmare in CloudWatch. So you get how long each request took, IP, or that sort of cool stuff. So basically, from a cold start providing that you've given Amazon your credit card details and your personal information and your mother's maiden name, you can get going in like 30 seconds. Get your service up and running on an Amazon endpoint, which scales, which is going to be able to serve as Zillion customers on the rest of it. Oh, shit. Help. Pardon? Yeah, it does all this automatically. But this is where it gets really crazy. This is what made me cry with joy. Look at this. So imagine doing some local development here. I use gin dash dash all. And what gin does, it runs your Golang program. You change something. I change the CSS. I reload. The CSS is applied. I like what I like. I like my stupid change. I run up again. And as you can see within, should we say, five seconds, you've got a new iteration up on the cloud. You haven't. It's also a red green deployment or AB deployment. You won't drop a request. That is frankly effing incredible. Do that on Docker. Do that on Kubernetes. Do that manually. Do that with any technology known to man as quick as that. And I'll buy you something expensive. You owe me your Burger King. There's nothing faster than this. I mean, there's nothing as, I mean, this is like, you've answered every single, you've answered a whole bunch of problems in this one sort of stupid, well, quite cool front end to Amazon services to the cloud. And TGA hopes to support other cloud stuff too, not just Amazon iterations that take five seconds. Well, I mean, how long does your iterations take at work? It's not unusual. I've been, I've come to workplaces where iterations took like a week. Look at this five seconds and you didn't even, you can't even drop a request if you tried. You can't eff it up if you tried. I love this. This is amazing. That's, that's it. No, no, it's a little bit more. So I hope, I hope you're amazed by that. And yeah, I do recommend I use Gen locally to do my local development. I've written an image viewer using deployed with up. And the cool thing is that I developed this image viewer like years and years ago. And you just need to write one little file. And now I've got it deploying deployed to Amazon Lambda. And I put cloud front in front of it to get a nice URL. This is a, is a brilliant image viewer. It's written by me. It must be awesome. It works even on Android. I got it. Someone sent me a video working on Android the other day. And I'm like, there's some more interesting apps. I mean, any Golang web, any Golang web service runs really, really well like this. Anything. And like a lot of people, I guess, I don't know if you've run a web service in Golang, but you probably thought, ah, this is a bit too difficult to deploy. Or it's like, this is the way I felt before. Like I didn't have a public demo of my, of my image viewer because it's like, ah, it's too difficult to get it running. Or it's just too small. Or, but now you can deploy hundreds of your stupid ideas. And like an afternoon. It's so freaking amazing. Anyway, this is a more fleshed out example where you click on a vote or something like this. And it updates something and he just, he generates an SVG or something like that. That's how the bars are made. He's got lots of examples. So if you're short of ideas yourself. So another, I had been using serverless framework, like a Node.js thing. And I still do it work. And like one of the major problems I had with Node.js is dependencies. Dependency hell was invented not by Java. Years later, Node.js invented it. It's called NPM. It's an effing disaster. The way that packages update. If you're dumb enough like me and you maybe forget to do an NPM install, or you have some like something out of sync, and then you do a deploy, it can be really screwed up. But the brilliant thing about Golang is you all know you build to a binary and you ship that little binary. Well, it's not that little. Sometimes it's quite big. Well, it's okay. It's all there. It's all there. It's like I can cry when I see my little binary there. You can roll back. It's just so nice. Another thing that Apex is supporting is like multi-region deployments. Just imagine you're outside Singapore. Just imagine you're in some godforsaken country like Australia near Sydney. And it's so slow. But with Apex you can deploy to every like what do you call it? Amazon region and like just like you change the conflict from region, AP Southeast one to region, Asterix. You're deployed to every region just like that. I mean, how easy is that? That's like, we don't have to do anything guys. Fire the DevOps people. Where are they? Go home. You're fired. I've just saved your company 50% of their waste or something. You can now just hire programmers to do an awesome job. I mentioned that you can do like the logging is pretty awesome. I mentioned, I didn't mention that it's got like nice sort of, like who uses a make file in their project? A couple of you guys, you should all raise your hands. Because a make file is the same way to do it. Always use the make file, please. It has make file support and hook support, all the rest of it. Doesn't work in Windows last time. Windows, what is this? Some customers insist on a Windows environment. Lose those customers. Break away. They pay the bills. So, I just wanted to boast that I actually am using a production service on Apex. Actually, to be honest, it's not using the latest up stuff. But it's a production service. It generates something important in my company. In my employer's company, sorry. It ran a thousand, four hundred odd invocations. And this is what it cost my business to run, my employer's business to run. That's a lot of money. No, it isn't. It's nothing. Basically, I haven't even seen it register ascent when you go over 10K or something. This is amazing. This is like discovering Doom 2. One million invocations for three years. Oh, that's wondering. That's probably why I didn't see anything. One million invocations for three every month. So, just to recap, I've shown you how to save a ton of money, a ton of time, how to get more girls. No, I didn't say that one. How to become rich and famous, basic. No, not famous. Just rich, I guess. I've shown you how, like, I mean, this is a watershed moment. If you guys can tell me how I can deploy with less code, less pain and all the rest of it, like I've shown you here today, seriously, I'm with you. But this is just an incredible development after, you know, I used to think Docker was good. What an idiot. Now I've seen the light, guys. You can join me in the light. Come here. Let's have a big hug. Well, that's it. That's my talk. I think it's my talk. Yeah. Just one quick question. I want this in-house. Huh? I want this in-house. In-house. What do you mean? In-house. On-prem. On-prem. I mean, the people who run Windows and the people... No, not everyone can use Amazon or... What? All you need is a credit card and some personal information and your mother's maiden name. Don't you have that? You can actually have a developer environment and have a talk, but not really much. It's like saying, I can't use Linux because my company hasn't approved it. I can't use Go because the auditors say it's too new. I can't use electricity because someone, my witch doctor said it contains voodoo magic. No, no, I'm sorry. I don't buy that argument. If you want to not use the cloud, not use Go, not use computers, then like da-da-doo. Bye-bye. We're living in a new world where it's pretty sensible to use commoditized cloud services to run your service. All you can do at the old school way is use Kubernetes. Da-da-da-doo. Waste a lot of money and time and enjoy the complexity. Any other city questions? So how did the zero dollar happen? I think as Surya pointed out, you get one million invocations every month. Or on Amazon. Then you charge something like 0.00, I think there's like six zeros before the two. Every thousand you get the same worth. It's pretty darn cheap than running an EC2 instance. How do they run Go on AWS Lambda? Well, the way they get scale, the way that Amazon run Lambda, I believe, is that they have EC2, what do you call it, compute power behind the Lambda functions. But instead of like, I don't know, I'm sorry, I'm going to explain this really badly off the top of my head. Each instance is basically running like a zillion containers, but most of the containers, let's be honest, are not being used. So basically, the compute power that was laying idle in your previously, your VPS setup is now efficiently put to use running containers. So what can happen to containers? There are a little bit of niggly details, like if it's not used, they can go cold. So there can be like a 500 millisecond delay when it warms up again or something like this. But it really mounts to nothing in the scheme of things. And then once it's warm, I think it'll only shut down after like a few minutes. So if you have like, I don't know, a busy API, you have no problems. At least, I haven't seen anything to worry about. So yeah, this is a new watershed moment because like, let's be honest, running VPS where you didn't use, I mean, I've done some jobs, oh my gosh, I used to work in Docklands in London. They had like a rack of these IBM E-Series things. I SHHed into it and it was like, I looked at the Apache logs, it was like, all these machines. And there was like, you know, less requests than my blog at the time. I mean, people have been wasting compute and power for years and years and years. And now we have this awesome technology where we can efficiently use it. And yeah, this is why I'm sold. Oh, yep. So how do you do session management using Lambda? Like doing something stateful? Yes. Don't do something stateful. You can actually. You can because the Lambda function stays around. In fact, there's quite a cool example. There's a cool example here where, I think it's this one. Anyway, you just have a look. Basically, there's an example where he has like an in-memory database. And when I ran it and did lots of tests, it's kind of amazing how long that data persists. So you can do interesting things. Yes, like if you have a particular problem like we do at my workplace, where you have to encode a video, a video is being like a few gigabytes, an encode process being like something that takes an hour or maybe more, then Lambda isn't your savior. You can't join the party. But for like 99% of other use cases, I like to believe you can get away with this model. You can store it in memory for a while, but you do it like how most people do, I guess, that's stored in a database. Well, you can use a DynamoDB or something, use something, use some sort of way to synchronize your state or something. That's an implementation detail, really, I think. Any other questions? Okay, I hope you guys, oh, one more. You can use Apex to ease the difficulty of deploying Lambda. How do you deal with the API gateway? That's what the Apex app is all about. Jesus, where are you listening? That's what the Apex app is all about. Jesus, where are you listening? Let's be cool about this. Apex apps solves the API gateway problem. It provisions the API gateway. It connects it to the Lambda. That was the hard thing that Apex, whatever, Apex no name had before. Apex apps solves that problem. This is why I'm so excited. This is why I'm sharing you this incredible information. I hope. Yeah, one more question. Oh, AWS Chalice probably sucks. Carry on. There's many like this, Sam, but the AWS ones are particularly bad. Here's a tip, AWS, what do you call it? High-end applications? Don't bother. Use the low-end ones. Use S3, use DynamoDB, use Lambda. Use EC2. I don't trust, I don't have many good experiences. But if Amazon is watching, I love you guys. There's a question in the back. There is. Oh. You just... Oh, so I just wasted my time. Oh, okay. Is it going there? I mean, is Google... Do they have a data center in Singapore? Yes. I'm officially supported. It would be interesting. I mean, ultimately, I want to see a competition between Microsoft, Google, and Amazon on who's going to get my cloud money. But right now, Amazon are winning with a zero sense and a great performance. Google offers two millions for free. Okay. But listen, it's not about what Amazon offer here. I just want to get this point across. There's this new technology called... The general name for Lambda is called Function as a Service, FAS. But it sounds like a terrorist organization. So I usually use the name Lambda instead. So Lambda is seriously a major effing innovation. It's huge. It's like having a child. But without changing it's nappy. Actually, it's not like having a child. But it's a big thing. Okay, thanks.