![The .NET on AWS Show, featuring Chris Christou!](https://assets.community.aws/a/2gkDTaTawFy9ge8WLPfQttw2mnK/Scre.webp)
The .NET on AWS Show, featuring Chris Christou!
In this episode we are joined by Senior AWS Engineer, Chris Chrisou, where we discuss the AWS Toolkit, AI coding companions...and more!
Brandon Minnick
Amazon Employee
Published May 20, 2024
Continue to The .NET on AWS Show, featuring Dennis Doomen!
![Listen to the Audio Podcast](https://assets.community.aws/a/2gkEBjcRrjIxoidEhFJF4ocVpLU/Scre.webp)
Loading...
Francois Bouteruche 1:05
Ello ello everyone, thanks for joining. So, for another opinions of the dotnet on AWS show,
I'm possible to urge dotnet developer advocate. And this week, this is not Brandon Minnick. hosting the show because Brandon is in Sydney this week for the NDC Sydney conference. So it's definitely not a good time for, for him to to be there. So I'm when I'm with the amazing gems as gems at Hello, are you doing?
James Eastham 1:42
Thank you for having me back on. Again. This is becoming a very fun regular occurrence that I get to do on the odd Monday here and there. So yeah, thanks for coming back. It's a lot of fun.
Francois Bouteruche 1:51
Yeah, it's always a pleasure to have you with us. So really, thank you, too, to be there with the dotnet community. How was your rake?
James Eastham 2:02
My Yeah, well, it's been okay. It's been. It's been a nice come down after after we bought the NDC a couple of weeks ago. kind of relaxed back into like, my actual job. As opposed to just been having fun at a conference speaking to people. So yeah, it's been okay. So far. Busy. Okay.
Francois Bouteruche 2:21
Yeah, indeed, the last few weeks, we were threatening for conferences. So we've been at NDC, London, and it was an amazing week at MDC London. A great conference. I love the energy there from the dotnet community. We had a booth at Regis had a booth at the conference. We met so much people using dotnet and AWS. So once again, really great conference. And, James, you, you were lucky you had a conference at MDC, what was the topic of your talk?
James Eastham 2:58
So my talk NDC was, so you want to build an event driven system. So it was a looker event of an architecture, how you can build event driven systems, but a much more conceptual level, I suppose. So there was no AWS services. Although we already got employees, it was all about having an architecture that benefits that can give you it's the first time I've actually done that talk in public. It's one I've been working on for a little while. So it was a lot of fun. Hopefully, it'll be going on tour to Oslo, and Porto and Copenhagen. Hopefully, if any of the NDC organizers are listening, then hello. So yeah, it was a lot of fun. It was my first time speaking at NDC. So yeah, it was it was really good fun. Really good audience really good questions afterwards. Yeah. What would you like to talk on? Again? Remind me?
Francois Bouteruche 3:42
Yeah, my talk was about a race like gRPC signaler and Graph QL? And how to choose the dotnet developer, because nowadays, we hear a lot of about both backend API technology, but we don't know. Often, we don't know how to choose all to pick one over the other depending on your use case. So in this talk, I tried to give some insight on how to design which is not always has it because yeah, the minutes were it. It depends. So I tried to share with the audience decision tree so it's very opinionated. This is decision tree I've built for myself and and I share this decision tree. I think it will offer 80% of the situation. But always you will have 20% of the situation, which are very specific to your use case. And you will have to have all the equation. And last week, I had the pleasure to be also at Stockholm for Swedberg and here again an amazing conference. A great day lineup of speaker lineup great venue with moving told at the pleasure to deliver the same talk at Twitter and lots of good conversation. I've seen a lot of excitement about new release dotnet eight, of course, but also dotnet aspire, some excitement around AI coding companion and generative AI technology. A lot of buzz about this. That's it for me. And, James, I think you told me that you've seen something really cool in the past week in the dotnet space. Yes.
James Eastham 5:41
My off the back of my talk at NEC I started to look a little bit more building management systems. Well, I built amendment systems. I tried to kinda, I wanted to get a bit theoretical for a minute and see, we can build an event driven system inside a monolithic, monolithic app built modular, modular Lee, that's not a word, I don't think but built like a module in the modular fashion. And if you could do fully event driven communication, which is typically for micro services, and cross service communication, but inside a monolith, and when I were doing that, I came across a really cool open source library, created by Ian Cooper and a few others called brighter. B ri ght are brighter. And it's a really cool way to do that just to abstract away so much complexity of management systems underlying implementation details, it's just got to hear make it work for me. And he also works with a really cool libraries that just work as soon as you use them. So yeah, it's really fun. We maybe said we might get time to look at it later on him later on in the show, maybe? Yes,
Francois Bouteruche 6:43
of course. Let's Let's keep this for the end of the show. Because before I love to introduce into welcome, Christopher Christou. Chris, welcome to the stage. So Christopher, is a software development engineer at AWS. And today, we really want to introduce Chris to the dotnet community and to our audience, because Chris is one of the folks who build tools for dotnet, developer on AWS. And you're, you are building, for example, the AWS toolkit for Visual Studio. So we will we really want the tech community to know about the people who are building the tools for them. So thanks for joining us, Chris. today. Yeah. And, as with any guests, I will start with the same question. Oh, did you get into it?
Chris Christou 7:47
Oh, boy. Um, yeah, I mean, I think I just just growing up, you know, I always had had an interest in computers. You know, growing up, I think, just one day, I saw a booklet Michelle, if it was GW basic, and I don't know why, but they pulled it down and flip through it a little bit and kind of thought, I think I could write a program and you know, is that you start obviously, with something like 10, print HelloWorld. And next thing, you know, you're you're doing prompting and rolling, rolling random numbers and stuff like that. And yeah, just kind of just kind of went from there.
Francois Bouteruche 8:22
Yeah. And so, today, you're working for the restricted team? How did you get there? What is your journey in the IT industry? Did you even get at AWS? Oh, did you join it and raise it may? Some people may be interested in how did you get there? Yeah.
Chris Christou 8:48
Well, let's go. We'll go back a little bit, we'll go we'll go a little bit of the career journey. So yeah, I used to work at a video game studio. And I was doing internal internal tooling at the time. And there was a lot of, you know, a lot of graphical tools. But we were doing C++ development. So I think it was MFC based editors and stuff like that. And at one point, there was an opportunity, there was a new small program that we needed to make, again, internal tooling. And I thought, well, you know what, I'm going to try to try the C sharp thing out and make a WinForms app. And today, it's kind of comical if if I was to find that code and see it today, because it was the equivalent of trying to write C++ style code in dotnet. C, you know, things like a for each, you know, it's like, oh, I wasn't aware of some of these things. But as you know, as I started to learn more, and I kind of thought, wow, this is this is really cool. This is with dotnet WinForms. This was just a really quick way of putting together gooeys and getting functionality together and so I started to learn more More about dotnet and apply that to future work and tooling. But over the years, then I switched switch team and started working on back end online services, systems. And we were at the time we were working in, I think it was dotnet, core 2.1. In 3.1, it was right around when 3.1 came out. And you know, starting to prop up some backend services, the, the manager of the team kind of said, Hey, I would like everybody to learn about AWS just just get a little bit immersed, like, test the waters. And he said, he said, you know, hey, just, you know, don't don't stress about a timeline, but just think about this, like, hey, how would you how would you store a file somewhere, and it was basically that simple challenge as a, as a way of letting us go explore without any kind of intimidation. And so it's like, Okay, I'll try this out. And so, you know, look up a little bit of details about the dotnet SDK, the AWS SDK for dotnet, and just the light, at a high level, just one of the AWS services, any of the punch line, and I think our manager was, was expecting this, but you know, the punch line is, you know, I pulled this down, I added through about three lines of code. And next thing, you know, I'm storing content in an s3 bucket. And you know, it was kind of, you know, that that kind of gets is a nice, easy on ramp, which is pretty cool. So, as we started writing, you know, writing our formal back end services, you know, getting that emerged in both into dotnet. And, and AWS. You know, at that point, I did see there was an opportunity for this team that I'm on right now, the toolkit, and I kind of thought, gee, the dotnet is interesting. AWS is interesting. Hey, there's a role that kind of fuses both of them. So I thought, well, let's, let's put my hat in the ring and see, see what happens. And yeah, now I'm working on a universe toolkit for Visual Studio.
Francois Bouteruche 11:59
Yeah, that's amazing. So just just try, don't be shy, just try. It may give you the best, amazing, amazing stories. And what is the coolest feature you work on? During those years working on the areas toolkits, what is the feature you really loved? And you're proud of billing?
Chris Christou 12:27
Well, it's, it's very recent. And it is the the code whisper integration. So you and I did a presentation at reinvent just a couple months ago about that. And, you know, I was on a team working on integrating that into Visual Studio for a couple months leading up to reinvent, but you know, just, but there was a lot I really liked about that project. And not because it's the most recent one, but, you know, kind of some of the some of the architectural decisions we put under the hood behind the scenes to bring it together. And just the feature itself is pretty cool. And interesting. So yeah, that's, that's definitely one of my favorites.
Francois Bouteruche 13:07
Yeah, so for those who don't know, Amazon could whisper, Amazon AI could in companion. So basically, when you start typing in Visual Studio, you get suggestions based on what you are working on based on the context of your open file, and it will complete your code, or it can help you to arrive to come in, for example. So that's basically what you can get from code whisper. And it also has a nice feature regarding regarding openSUSE. Maybe you can explain Christopher, fruit to the audience.
Chris Christou 13:55
Right. And that's the that's a reference tracking and asking. Yeah, this is this is pretty interesting. Because when you when you're prompting, or even as you're as you're coding, because sometimes code whisperer will jump in with helpful suggestions. You know, these, all of these suggestions are coming from, you know, from a model trained on, on a lot of source. So, code Whisperer is keeping track of what, you know, what kind of what code base is, it's getting that inspiration from and so if it's generating for you a suggestion that's based on a certain, a certain set of code that had a specific license, you'll also get that you'll get that indication like it will say, Hey, by the way, this this suggestion is associated with this particular license, and you can get a link to the to the upstream open source repo that contains that licensing, and also had that sample code that's similar to the suggestion being made. Yeah, and yeah, and that That is called reference tracking. And in any of the toolkits there's there's a concept called the reference log. And so from, from your particular code, whisper gestures or menus, you'll be able to access that to see the, the back history of of any of the suggestions you've accepted and see which which licenses are referenced with it.
Francois Bouteruche 15:21
Yeah, so let's take the time to to ask a question, because we are discussing the AWS toolkit. So the WS toolkit for Visual Studio is a plugin to Visual Studio 2022. But there are other other toolkits out there we have tool kit for vs. Code, we have toolkit for JetBrains IDE. So what I would love is to ask our audience, so let's be clear today, it is a test it is a first try. So people, I may fail with the so I'm trying this, this poll, we have a new tooling that helps you I've had to pull our audience. So here's the question, which AWS toolkit do you use, so people, you can throw in the sharp just so if you don't use the restricted any area to get you just type one in the chat, if you use the areas toolkit for Visual Studio code, you can type two. And the if you are using the AWS toolkit for Visual Studio 2022, you can type three and if you are using the area's toolkit for JetBrains IDE, you can type for just so just type the number, if you and you can type several number if you use multiple toolkits. So I will vote on myself. Because I'm using the build cheat method. I'm using the three and four I'm using for Visual Studio and project brands, because I'm also using the toolkit for Jen JetBrains. Rider. If you if you want to vote, let us know. So you can continue to vote for the in the chat. It will help us to be informed on what you are using. So let's see. Let's Let's keep this poll running. Let's see if people are which which will keep people you coming back to Turkey. Chris, you just before the show you tell us you recently released a new feature. Regarding identity. Can you tell us a bit more about this new feature?
Chris Christou 17:53
Yeah, just last week, we released version one dot 47 of the universe toolkit for Visual Studio, we've got a couple of new couple of bug fixes and improvements. And yeah, one of them is around off because you're getting getting your credential squared away is can can be a bit confusing at times. And you know, we're always looking for ways to make that easier. But when you're when you're doing when you're using credentials that that require an SSL login flow, you know, there's a little bit of interaction that the tooling needs from you. And that's for a secure purposes, but it can be a bit confusing. So we've we've made that a little bit streamlined. I've actually got this ready here. If, if you'd like to see a demo of it. Yeah,
Francois Bouteruche 18:40
sure, sure. All
Chris Christou 18:41
right. Let me share my screen. And let's see which window is gonna bring up.
Francois Bouteruche 18:58
Okay, so let's add these to the stage.
Chris Christou 19:01
Okay. And so what we're looking at just some arbitrary code here, but again, quickly touching on code whisperer, because that's where the login is, and I'm going to show code was for is is currently I'm logged out to code whisperer, but it's available through this margin icon down here. And there's a couple of ways you can you can sign in. If you've already set up your your credentials and handling. You can jump right into the signing dialog and pick your pick your credentials profile, and go ahead. And if you haven't, we have this easy to use getting started. panel here. And there's two different ways you can connect to code whisper. One, you might have your AWS identity center or SSO set up within an AWS account. And if you have that connected to code whisper that's one way you can you can set up Um, set up a sign in. If you don't, or if you don't have an AWS account, you can use an AWS builder ID. And that lets you create a or that's a free personal identification account you can create. And it's not tied inherently to an AWS account. But it lets you sign in to services like cold whisper. And that's what I'm going to show here. Either way, you're going to go through an SSL login flow. But in this case, it's going to be with the builder ID. And so the really cool thing is we've we've set it up so that it's, it's pretty straightforward. Before this, you had to copy a code, paste it in the browser, here, we're just making it very prominent. And when you connect over, I got it in the other window here. You know, you're basically just doing that, that matching to say, Okay, make sure these codes match. And that way, you know, it's coming from the toolkit. Now, I'm already signed in in the browser to my builder ID, but if you weren't, it will take you through that login. And then basically, it's just going to ask, Hey, can can we connect this AWS toolkit for Visual Studio to your account, to do code whisperer. And once that goes through, that's it. We're now connected. And if I come back here, we can see, we're now indeed signed in. And I can go ahead and request suggestions from code whisperer.
Francois Bouteruche 21:24
Okay, so just a quick question. So you you mean that any developer, any social developer, any visual studio user can just sign in with a builder ID, which basically is create a builder ID with their personal email address, for example, for free, that doesn't mean every seconds, but yet, they can still use code whisperer. So they don't have to set up a whole area second, put their credit card, and so on, and so on. They just have to sign up with AWS Bill O'Reilly, correct.
Chris Christou 22:01
Yep, that's right. Yeah,
Francois Bouteruche 22:03
that's really cool. Because that's really something for all developers, you don't have. If you don't want to deploy on AWS, you can still use and benefit from the code whisperer. That's pretty cool.
Chris Christou 22:19
Yeah, and what's neat about that, too, is that's kind of like they mentioned here in the documents, it's, this is basically your account, that's you. As opposed to if you had, say, an enterprise account, or your whole company is using one or a few AWS accounts, you might be in a in a pool, with a couple of different people in the same account. But yeah, this one, this one's you that that kind of follows you around just like just like you would on on Source Control repos and stuff like that.
Francois Bouteruche 22:48
Yeah, and just to share with a folder there, you can use your interface builder ID on other AWS services like code catalyst, which is our software factory. So you can create a code catalyst project and have a git repository in this project, just with a biller ID, you can also connect to community dot AWS, or a community platform where you can you can read content written by the AWS community. And you can even write your own content on committee dot AWS, and publish your own content on on technical stuff that you want to share with the committee. So the bidder ID is definitely becoming the, this personal ID between you and AWS and your one stop shop when you want to log in with AWS services that don't require an area seconds.
Chris Christou 23:57
Yeah, let's see. There's a couple of other features that I did want to mention here. So when you have the toolkit installed, it's really easy for you to send quick feedback over to me and the team. And this is just, you know, this is a way you can just tell us you know, hey you have an idea or you like or don't like a certain aspect of the toolkit, and the team reads all of these so this is really quick and easy way to to let us know how you're feeling and you know, what are your thoughts around the toolkit? So one of the one of the sets of feedback we've been getting recently does relate to code whisper that some people are a little bit you know, they're a little bit hesitant to say you know, I'm not quite ready to use code whisper yet or try it out. But I see that it tells me that code whisper is there. Is there a way for me to turn it off? And you know, by default, you are signed up so it is off, but you know, you can see the the icon there and so, so we have we have made a setting so that you can wholesale, disable it. And that's if you go through the menu, there's this, the options here, that'll bring you to the code whisperer configuration. And here, you can basically turn the entire feature set off by just toggling that and clicking OK. And then, you know, you can always bring it back at a later time, if you want it to be, you can go through the Visual Studio options, come back down, and turn it back on. So that'll that'll basically, fully remove it or fully make it available into your IDE. And one other one we got through feedback was proxy support. And this is more is more likely for enterprise enterprise teams. And
Francois Bouteruche 25:43
we didn't get that that's a nightmare. When you work in an enterprise company, often you have to deal with these proxies that mess everything. And that's a nightmare. Yeah, you can just do this no icon there is this proxies that makes that mess? Everything.
Chris Christou 26:03
Yeah, even. I mean, even sometimes local development gets gets impacted by something like that. Right. So yeah, you always have to be aware. But yeah, with the most recent version of the toolkit, you can now configure your proxy settings, you'll have to restart your IDE. These settings aren't picked up directly by the toolkit. But yeah, then then you should be able to also get your your suggestions and everything from code whisper, using your proxy. So yeah, that's all new in, in the most recent version. Yeah,
Francois Bouteruche 26:35
I've seen something really cool because you, you did presences like all this is just something to send feedback. But to me, that's really important, because this is where we connected with the with the data committee. So you've seen Christopher showing this, send feedback. So Christopher is one of the person who will read those feedback. So this is not a myth there is there is someone behind the scene reading those feedback. And Christopher is one of them. So if you just bear in mind that if you send feedback, this guy is likely will likely read your feedback. So this is not a black hole. This is real. So because as a developer, I'm always wondering, when I send feedback, is there any? Is there any one at the other? Part of the line or? And so today we have Chris, he's part of the team.
Chris Christou 27:41
Yeah, I mean, this is this is actually one of my favorite parts of the day, like I start my day, and I see an email coming in that says, somebody left a feedback, you know, I'm immediately curious. I'm like, Oh, I can't wait to see what what somebody has written in here. So yeah, we love receiving the feedback regardless of what it is in there.
Francois Bouteruche 28:00
Yeah, amazing. That's, that's really cool, are maybe a high school question. And I don't want to push you to say something that you can't, because I know, what if well, the plans for it, there's some part of the roadmap that you can share with the earth or what are the big topic you are working for the toolkit in in the coming months?
Chris Christou 28:31
Yeah, actually, right now we're there, there are a few more code, whisper or Amazon cue features that we're looking to bring into the engineers toolkit for Visual Studio. So one example of a feature that's currently in the integration toolkits for JetBrains and VS code, but isn't in the Visual Studio Toolkit yet, is code scanning. So this is a this is a feature where you can have code whisper, take a look more holistically at your project and tell you about known vulnerabilities or warnings. Potential flaws, and yeah, having kind of that AI assisted, even more AI assisted guidance. And so yeah, this is something we're actively working on. And yeah, we're looking forward to releasing that in the future version.
Francois Bouteruche 29:27
Yeah, that's really cool.
James Eastham 29:30
I wonder if I could come back, Chris, just to the width. You're talking about the back when you were getting started with AWS and you were talking about like downloading the SDK and the three lines of code? Yeah. And I think I'd be interested to know, like you said that your manager at the time gave you that free rein and just to go and build things, which is what everybody wants, but like what kinds of things did you go and build at the time because I think, at least when I speak to people, there can be this thing that okay, I want to get started with AWS but what do I do? So I'd be really interested to learn more about what exactly what what will you We're actually building back at that time to explore the AWS SDK, because that might give some of the listeners some ideas of things, I could go and build that I could go and try that out. It's a really good way to get started with with AWS.
Chris Christou 30:09
Yeah. Now those those challenges were actually like, very, and deliberately, simple, but deceptive, too. So he basically asked the two questions like, hey, trying to store something somewhere, and you know, the intent was to discover s3. And the other one was, hey, write a message somewhere that you can pick up somewhere else. And that was essentially using SQS queues and SNS topics. And. And, yeah, so they, you know, it was there wasn't like a write an application in the challenge, but it was just kind of like, learn about some of the parts that you would use to stitch something together. And their
James Eastham 30:51
way of looking at it that wasn't it, like, you know, many applications need to store data in places. And I think at least from my experience, before I started working with AWS, a lot of the time you're just using like your local file system, or like some sort of attached drive to a server somewhere. So actually, I find when I worked with customers, now there'll be new to AWS. And they're like, well, where's my file system that Well, there isn't a file? Is your file server, then it's a different way, you're not you're not writing to C slash RF slash or whatever you. So I think that's a really interesting way of looking at it like, Okay, I need to pass messages between systems, what do I use? I need to store data, what do I use? I need to store files, what do I use? So I it's been that's a really interesting angle of coming up learning about some of the services as opposed to needing to build an entire application and try and boil the ocean to use them to use them. Yeah.
Chris Christou 31:36
But you know, what else like something I wish I knew then that I knew now was exactly these AWS toolkits, like, I didn't actually know about them at the time. And so if I was reading about s3, and these SQS, queues, I mean, with with the toolkit, you can actually go and create a bucket, put some content in it, you can you can make a queue and put messages in it. And you know, that that would have really helped. Well, it partly visualize, I guess, but like, understand and just see the services working right. And like, if I was to do that, again, or if I was to be the manager, I probably would have said, here and try using this toolkit with it, because it'll really like, make it really easy to understand what's going on. Well, while going on that discovery journey.
James Eastham 32:21
I wonder if you could show us it. Because there's something you can do in the toolkit, right. As you can show, you can see all of the resources currently in the AWS account that you're logged into, right. I'm sure. I've used the toolkit before.
Chris Christou 32:33
So yeah, that's, that's a great question. So from the View menu, there is this IRS Explorer. And that's where you can bring up this, this view here. And so we have a panel that will show you, when you're connected to an account there is there's a selection of services that will show you the resources available in your account. And for some of them, you can actually do, you can actually do like creation and stuff as well. So if I was to go through, let's take the SQ SQ since since you mentioned that, you know, I can see what's in my account here. And I can also go and create one. So I'll just, we'll set up a one here. So we're in we're doing a demo, you know, and this is where as you're reading the documentation, there's there's different parameters you can use to customize your queue. And so seeing those options, there is great. But then I can go and open this up. And so from here, yeah, here, I now have an SQS queue in my account, and I can go and send a new message to it.
James Eastham 33:43
You know, you've actually taught me something today, Chris, because I did not know you could you could invoke lambda functions, I did not know you can measure their UI. So there's an experience.
Chris Christou 33:53
Absolutely. And yeah, then I can, I can go in sample that sample the queues now in here, you do need to you need to understand a little bit about some of the services. This will, this will mutate your resource, in a sense, like the act of looking at the resource. The queue now knows that but it's pretty quickly putting it back in. But yeah, we can see a message in there. And I can now go and write an application that consumes this message if I if I were so inclined. But yeah,
Francois Bouteruche 34:23
that's really grid. Because as a developer, if I have access to an AWS account for development purpose, of course, you don't want to mix two ad recycles, in one ad RIA second production environment and Devon relevant but if, if I'm given an ad recycled from my dev and ramen so I better we can basically can spin up quickly a queue and start to use it in my code, make them test. I don't have to ask for thermal Hey, can you set up a accumulation system on the server somewhere? I can just do it right from my ID and start building and start experimenting without relying on someone else. So for for rapid prototyping I love this. Yeah.
Chris Christou 35:08
Yeah, one of my favorites is s3. I have a lot of buckets in here. But where's my go to? Yeah, I mean one of the important things to remember like s3 Isn't file storage, it's actually object like blob storage. But you know, a lot of what we're doing is files. And one of my favorite things about this is you can actually just take files and drag them in. And that will upload them right. So that's that's just a really quick way of getting, say, a configuration file. There's something in there that you can bootstrap for your program. And then similarly, you can go and download files and collection to files locally from from your bucket as well.
James Eastham 35:46
So cool, like you said, France went off in terms of like prototyping, I'm very much a fan of that infrastructure was called and doing things properly in inverted commas when you would like you know, production, but like you said, for quickly, okay, I need an s3 bucket and the queue and a lambda function to do all that from within the, the IDE and then be able to deploy that invoke that put messages into the queue of log files. It's a really, really cool way of being able to process that really quickly.
Francois Bouteruche 36:11
Yeah, that's, I agree that sometimes I don't know, are you wrong, but I'm kind of before starting a project or when I start a project, I need to figure out what are the path I will use. So I need to prototype otherwise, I difficult to design my application. So I need to get my hands dirty, and prototype. And this is in those situations where I want to be very quick. But I love using this feature to have rabbit quickly a cure s3 bucket and then okay, I get a sense of okay, this is what I will build. No, let's, like you said, gems, let's start building this the right way with infrastructure as code. But in my way of doing things, this is really a two part process. First, I need to figure out by with rapid prototyping what I want to build how I want to build this, and then I need to build it the proper way. So both both of the world if I'm correct. You also have CloudFormation support for infrastructure as code crease in the toolkit.
Chris Christou 37:19
Yeah, that's right. So you can, you can create and deploy CloudFormation templates. And not only that, once, once you're in here, you can get a view of your stack. So this was, if I'm not mistaken, this was the stack, we deployed in our reinvent talk. And you can actually see some of the aspects, some of the same details that you can from the web console without leaving your IDE. So here, you can see if you creating or updating your stack, the individual resources, like the progress that's going on, but you can also see what what resources are in your stack as well. And you can see the entire template that was published into your account. So that's a super convenient, I'm
James Eastham 38:06
sure I'm assuming this would show you errors as well. We're aggressive. If the if the deployment was to fail, you would see the the errors inside the your ID as well. Oh,
Chris Christou 38:13
yeah. And definitely, yeah, definitely, I hit that from time to time with with various stacks. And it's, it's great, because then you get that reason right there. Right. So you can, you can, again, stay within your ID, but also keep in that iterative loop too. Yeah, that's
James Eastham 38:29
something I'm finding as I'm starting to use more and more like aI coding companions. Personally, it's something I'm finding super valuable like that ability to not even just like switching to a new tab or to a new window, or it's been able to do everything inside your IDE is such a, I've never really appreciated it as much before. I've always been like a Stack Overflow, go and hit Google kind of guy. And they actually know that. I've got to say Google, and now my speakers are listening to me. Yeah, like being able to do everything within your IDE super cool, like explaining called, I'm learning rust at the minute. So I can be like, can you explain this piece of code to me inside the IDE. And it's just a really nice experience to have to do everything inside the IDE and being able to see cloud formation templates and see how they deploy is super, super cool as well, especially we use in the CDK or Sam or something like that to deploy your application which uses CloudFormation under the hood. You can then do all that within your IDE without even leaving the single pane of glass. So super cool. Absolutely.
Francois Bouteruche 39:26
Yep. Chris, I know I know you. You have to jump with discus a lot. I know you have to jump. So I think we are on time for you to leave. I really want to thank you joining today where you have a packed agenda, a packed schedule. I really appreciate you to join us to join the data committee. Because I think it's important for people to figure out okay, both of the bills on all our building those services those tools for us, it's to me having this connection between, okay, I'm using these in sales guys are building those tools is is always a good thing. This is not there's not a huge monster without any heads. No. Both are actual folks who are building those tunings. So thank you, Chris, for being with us today. I guess I guess we already signed up for next episode with you, when you you will have relieved the few feature you've mentioned in the roadmap. Am I right?
Chris Christou 40:44
Yes. Well, yeah, thank you for having me on the show. It's been a pleasure. But yeah, I'm looking forward to coming back at a later date and showcasing all the all the great new features we'll have at the time.
Francois Bouteruche 40:55
Thanks. Thank you, Chris. Thank you. And fpu Thiessen. So today we will close the show today. Together, James. So I will want to come back with on your library you mentioned at the beginning of the show. It's time It's time for us to to see this library in action, if you can. Yeah, we certainly.
James Eastham 41:26
So yeah, like I said, the the library that I've been using is called brighter. Hopefully you should see it on screen now. And there's other libraries in the dotnet space that were similar kind of thing. There's mass transit. There is another one which names? Yeah, yes, there was. Yeah. But this is one that you're asked to kind of pick one that I've not used before. I've used mass transit before. So I started working with brighter. And it's actually really, really cool because it has, if I go to samples, it has some really cool pre built implementations for a whole bunch of different like messaging providers. So you can see you've got like SQS, and SNS. You've got Kafka, you've got SQL Server, you've got rabbit and queue DynamoDB, you've got all these different pre built implementations to allow you to really quickly add messaging to your application, which is really, really fun, because anything that makes your life easier is is fantastic. And when it comes to excuse me, let me Let start with me actually demonstrating what it is that I built. So I started building out, as I said, at the start, like a bit more of a theoretical application, maybe not something you'd really do in the real world. But if you could do fully asynchronous non blocking communication inside a monolithic application. So what I ended up building was this really simple blazer front end and a web API back end, please excuse my UI skills, because I am not a UI developer, my brothers back
Francois Bouteruche 42:58
in no offense, but you are a back end developer,
James Eastham 43:01
I hope to represent a very much a back end developer like front end terrifies me. So this is very much like aI generated images, materialized CSS UIs. And just kind of look at the buttons, I mean, look at that look horrible, then buttons are they they're awful, nobody wants to click a button that looks like that. But anyway, the point stands. So this is a front end, that's going to make a call to an API back end application. And the API is completely non blocking. So it will receive the request and immediately respond, and then everything else happens asynchronously in the background. So you'll see if I add some stuff to my basket, you can see the basket increasing at the bottom here. This is all happening completely, asynchronously, completely message driven, eventually consistent. And because it's so performant, it appears to be real time, although it isn't. And I can prove that to you. Because the other really cool thing about Bryter is that it has built in implementation, support for open telemetry and distributed tracing. So as part of this application, I've also got Jaeger running locally. Jaeger is a opentelemetry compatible, tracing back end. So you can see all the traces for all them bottle clicks that are just
Francois Bouteruche 44:14
Martin Martin sweet would love to you would like your your shout
James Eastham 44:20
out to Martin, both of you watching. This is for you. And you can actually see this in the trace data here. So I've actually got into one of the traces for me posting a request to my basket. And you see, I've got a 347 millisecond response there. And then I've got a big gap. And then I've got a 500 millisecond response at the back end there. And that gap there is the time the message was sent in the queue. So my API responded in 340 milliseconds, and then the actual back end storing in the database doing other downstream stuff happened in a background thread still inside this monolithic application, but it's asynchronous. It's non blocking. So this front end performance is really really fast because it just gets the data stores it gets the data stores it. Let's have a look at some code, shall we? So, sure, the actual libraries. If I just open up my project file, you see I've got a whole bunch of brighter libraries here. I've got support via dependency injection for supporting SQS. So when this is running locally, he's using rabbit MQ and locally on my machine, so I support the rabbit MQ.
Francois Bouteruche 45:33
Just a quick question, just so I guess that's the problem. In general ILO, it comes with opinionated implementation, like, Okay, if I want to use the Ituri SQS, it's an open unity implementation you don't have to care about or it works under the hood.
James Eastham 45:52
Exactly that Yeah. And how it actually works is it uses SNS and SQS, it uses a combo. So the actual message send, uses SNS and then when you define a subscriber in your application called and I'll show you that in a second, it automatically creates the SQS queue, and maps the SQS queue to the SNS topic. So it does all that on your behalf it does it all that fire, it's really, really cool.
Francois Bouteruche 46:16
Yeah, that's what I love with this kind of library. Sometimes it's, it's it is opinionated, because sometimes it's nice to have a lot of building blocks. But sometimes you just want to get straight to the point and okay, I want to build this, I don't want to spend too much time about thinking about oh, I will, oh, I should configure this. And that's the good both of those libraries. Yeah, absolutely.
James Eastham 46:40
So you see, if I just show you the code structure very quickly. So I've got my API. That's the actual, really thin minimal API in dotnet. And then I've got my four modules, one for orders, one for the menu, one for the local component, one for the basket, if anyone's heard me talk before, I love talking about pizza and the pizza restaurant analogy, please bear with me. I'm really sorry, if it's like dinnertime at lunchtime, wherever you are, because I might just have really distracted you. Inside my basket module, I've got these extension methods to actually add the subscriptions. So you can see I've got these add subscriptions here. So when I'm using SQS, I just create a list of SQS subscriptions. And then I just add a new SQS subscription, I give the subscription a name, I give the message channel a name. And then I define which message which kind of message I want to subscribe to. So what this will do under the hood, when I actually start up this application is it will create an SQS queue called Basket, add items a basket. And then it will also subscribe that to a topic with the name of if my F 12 decides he wants to work with the topic name of a command that I've defined elsewhere in the application. So it's you just create the subscriptions. And Brighton will then automatically go off and actually create the queues on your behalf, which is really cool. Yeah, definitely. And then the same applies to the Publish. So you also need to define things that you're going to publish. So this basket module has two two messages that it publishes. One is a basket basket atom added event one is a basket atom removed event. And I'm following the same pattern of defining the name for the topic, which is basket basket, automatic added and again at startup brighter will automatically go off and create SNS topics in this instance with the names of my events. If I'm using rabbit MQ, it creates rabbit MQ topics and rabbit MQ queues, but it creates the relevant infrastructure. You don't need to care, frankly,
Francois Bouteruche 48:50
which is pretty good. And hello, so this is configuration at startup. And how do you use this in your code? Great
James Eastham 49:02
question, Francoise. So if I look at the let's start with commands, so this is broadly speaking, a dot you adopted CQ RS counterpart in command query responsibility segregation for anyone who's never heard of CQ Rs. That's the idea of splitting your commands from your query. So commands are things that might mutate your system queries or where you're retrieving data. Typically in CQ Rs, you would split them into two completely independent deployable applications. What can they do in the form of CQ RS here inside a monolithic application, I suppose. So what you need to do is create a class and that class inherits from this command, command base class and that command class comes from the brighter library. Okay, so when you inherit from command, you can then publish this, this message this class as a command. So that's step one, you define a set of commands or events in your application. So I've got commands, and I've also got events. Okay? Okay, you can also define command handlers. So I've got a second class here. That inherits if I scroll right over, this is a request handler for the Add Item to basket command, which is the command we've just looked at. So you create your commands, you create your command handlers. And brighter kind of just those the rest, it kind of just works like genuinely, as long as you've set up the right subscriptions and publications, and you create your command and you create your command handler, Brad to just does it, it kind of just works. It's really cool. It kind of also links together. So that's the core of it is you define commands, you define command handlers, you create your subscriptions as part of your startup code, and the rest gets mapped together.
Francois Bouteruche 50:59
That's pretty cool. You don't have to write the boilerplate code to FEM the method and retry the method and exactly, all the things that are done for you. Okay, 100%.
James Eastham 51:11
It's all yep, that's all all the retries because even when you if you look, if I go back to these extension methods, you'll notice when I set up the publication's for example, there's a whole lot of different settings that I can set up here. When I do the subscriptions, you can do things like you can set them to be like doable message channels are nondurable message channels that might be a yes you've got is doable property. You can configure retries, you can configure a back off site, you can configure all of that stuff that you would. And then that that's really interesting, because the pattern I've got here with this specific application is that when I run it locally, I want to use rabbit MQ, because rabbit MQ is really easy to spin up locally. And then when I deploy it to AWS, I want to use SNS and SQS. Because they're managed services. They're scalable, I don't need to worry about the underlying infrastructure. And it allows you to use the exact same programming model. And then you'd swap out your messaging implementation. But you don't actually really change an awful lot of application got your application called justice, brighter is managed the rest. So it's super, super cool. And one last thing, I will add that really quick Francois sorry, is so sure when you actually want to publish. So the last part of this is this is my actual end point on my API. And you see, I've got this I am Air Command processor, really great name for an interface, by the way, big fan of that. Yeah. And I just do Command processor dot post async. And that's what will actually then start how you send a command and you send a message. And because I've configured this all to be asynchronous, that call will return. As soon as the message is successfully delivered to rabbit MQ or SQS, or whatever it happens to be as soon as that message gets delivered. That called returns. And that's how I get that really fast response time in my API, and a shovel that back in that that that more time consuming work into a background worker process. It also supports things like inbox patterns and outbox patterns. So you can just say, use outbox, and then use DynamoDB as your outbox. And for anyone who's unfamiliar with the outbox pattern, that's the idea of storing the message in a persistent location. And then the actual publish to the message bus happens again, as a background process to make things more fault tolerant. So it just supports all these really cool messaging patterns, and you just turn them on, and they just kind of work, which is amazing. If you ask me. Yeah.
Francois Bouteruche 53:37
Yeah, I love I love this library. Yeah, definitely. I love this. You mentioned. So that's maybe the difficult question. You mentioned mass transit, there is a bunch of other libraries that are why would you use this well over the other if you if you have an ID, maybe it's kind of preference or my
James Eastham 54:02
honest answer to this question is that I've used mass transit for projects before and it's fantastic. I've never used it before. And I wanted to give it a try. Like I've not, I've not found anything yet brighter that will make me say choose brighter or the mass transit. They're both amazing libraries. They're both fantastic. I can't remember what the support was like in mass transit in terms of services. I know SQS is supported by mass transit. But yeah, I couldn't say one over the other. My reason for picking this is partly because I watched the innkeeper who built the library speak NDC. So I was like, ah, Ian's Barbara automatic messaging library. And I've never used it. So I wanted to try it. And it's fantastic. Mastery really is good when I've used mass transit in the past.
Francois Bouteruche 54:43
Yeah, I've seen a we were discussing we were talking about Martin bit before, and I've seen recently a post of Martin twith on LinkedIn that I was so agree with him. When you when you are choosing The library always found someone before choosing a library always find someone who had run something in connection with it. To make sure that if it fits your needs, we can find many, many great libraries. Like its gems, you run mass transit application before. So you have a point about mass transit in production. Maybe not the same for for writer, right. Yeah, absolutely.
James Eastham 55:31
Yeah. And I think an important point is that I'm sure Martin agree with is this this observability factor, like, yeah, so I'm just configuring opentelemetry In my dotnet application. And I just add a source to opentelemetry. And I add a source of Paramore dot Bryter, which is the namespace that all these browser implementations are in, excuse me, and I've not really configured anything else as far as tracings config is concerned. And I just get all of this for free. Like I just get distributed tracing, which is so important when you're building distributed systems is to have this ability to observe and understand what's going on inside your application. It's incredibly important to get that built in is, is really powerful. Yeah,
Francois Bouteruche 56:18
and I guess, in the future, checking if library has built in support for open telemetry will be kind of okay. You don't have let's Yeah.
James Eastham 56:33
Like, I think it's the number two, if not now, nearly the number one project on the CN cf opentelemetry. Like it's becoming the de facto standard for observability everywhere. Yeah. So I think I think both if you're building an application to not have open symmetry support in your own application is something that is should be considered at least. And then yeah, if you're looking at a library and you want that tracing support, it will for me, at least personally, it wouldn't be a distinct decision factor is that can I add tracing through this library? Yes, I can. Fantastic.
Francois Bouteruche 57:08
Yeah. Red grid library to showcase to the community. I'd love to ask the last question to the audience. We have three minutes left. So I'd love to see how many people have already tried Amazon could whisper or Amazon cue our AI couldn't companion. So feel free to to vote in the chat. So like the previous? Poll, one, four, I never tried to if you've already try three, if you use them from time to time for if you use them regularly, or five, if you use another AI coding assistant.
James Eastham 57:56
It's really cool, by the way.
Francois Bouteruche 57:59
Yeah. And feel free to vote in the chat. Give us some insight. And it's important for us to to get to know you and what are you trying so don't be shy. Please vote in the chat. And it will help us. So it's time to close the show. Thank you for joining us. Thank you. Thank you, James, for being with us today. If you don't want we have another show every other Monday. So you don't want to miss the show. Subscribe to the AWS Twitch channel. And don't miss the next episode in two weeks. And you can find the The episode also soon on most audio podcast platform as we leave the episode on a podcast as well. So thanks for joining us and see you the other Monday.
Continue to The .NET on AWS Show, featuring Dennis Doomen!
Any opinions in this post are those of the individual author and may not reflect the opinions of AWS.