Introducing .NET Aspire with Damian Edwards
Read full transcript 24 segments
-
hey friends we have some news from our hey friends we have some news from our sponsor text control they just released sponsor text control they just released sponsor text control they just released version 32 of their document processing version 32 of their document processing version 32 of their document processing Library which includes new core Library which includes new core Library which includes new core functionality such as document footnotes functionality such as document footnotes functionality such as document footnotes SVG export and more you can integrate SVG export and more you can integrate SVG export and more you can integrate document editing signing collaboration document editing signing collaboration document editing signing collaboration and PDF processing into your asp.net and PDF processing into your asp.net and PDF processing into your asp.net core and angular applications with TX core and angular applications with TX core and angular applications with TX text control these powerful libraries text control these powerful libraries text control these powerful libraries will let your developer teams focus on will let your developer teams focus on will let your developer teams focus on their core competencies while text their core competencies while text their core competencies while text control handles your digital document control handles your digital document control handles your digital document processing check check out all the new processing check check out all the new processing check check out all the new features and see the Technologies live features and see the Technologies live features and see the Technologies live in action by visiting the demo at demos. in action by visiting the demo at demos. in action by visiting the demo at demos. text control.com that's demos. text [Music] [Music] control.com hi I'm Scott Hanselman this control.com hi I'm Scott Hanselman this control.com hi I'm Scott Hanselman this is another episode of Hansel minutes is another episode of Hansel minutes is another episode of Hansel minutes today I'm chatting with Damen Edwards a today I'm chatting with Damen Edwards a today I'm chatting with Damen Edwards a prince architect at Microsoft working on prince architect at Microsoft working on prince architect at Microsoft working on net Aspire how's it going sir ah you net Aspire how's it going sir ah you net Aspire how's it going sir ah you know you know Building Product doing the know you know Building Product doing the know you know Building Product doing the net stuff all that good fun how about net stuff all that good fun how about net stuff all that good fun how about you I'm getting there I think we're both you I'm getting there I think we're both you I'm getting there I think we're both uh a little uh Monday right now for uh a little uh Monday right now for uh a little uh Monday right now for those of us who are listening we're those of us who are listening we're those of us who are listening we're having a case of the Mondays but uh work having a case of the Mondays but uh work having a case of the Mondays but uh work the work continues and the good work the work continues and the good work the work continues and the good work continues so um net Aspire is this new continues so um net Aspire is this new continues so um net Aspire is this new thing that seems to have captured the thing that seems to have captured the thing that seems to have captured the imagination of uh the net Community it's imagination of uh the net Community it's imagination of uh the net Community it's really interesting and it's starting to really interesting and it's starting to really interesting and it's starting to get outside the net Community I'm get outside the net Community I'm get outside the net Community I'm noticing people start mentioning it uh
-
noticing people start mentioning it uh noticing people start mentioning it uh more and more uh I think it's always more and more uh I think it's always more and more uh I think it's always interesting because Microsoft's not well interesting because Microsoft's not well interesting because Microsoft's not well known for naming things well and it known for naming things well and it known for naming things well and it doesn't exactly tell you what it is doesn't exactly tell you what it is doesn't exactly tell you what it is certainly the word kubernetes doesn't certainly the word kubernetes doesn't certainly the word kubernetes doesn't exactly tell anyone what it is either exactly tell anyone what it is either exactly tell anyone what it is either but what is net Aspire and why should but what is net Aspire and why should but what is net Aspire and why should why should anyone care yeah the truth is why should anyone care yeah the truth is why should anyone care yeah the truth is explaining what Aspire is can be explaining what Aspire is can be explaining what Aspire is can be challenging um because it's not one challenging um because it's not one challenging um because it's not one thing it's not like a new web framework thing it's not like a new web framework thing it's not like a new web framework that you use to build web pages like that you use to build web pages like that you use to build web pages like Blazer is or was and it's not like Blazer is or was and it's not like Blazer is or was and it's not like minimal API a new way to build apis in minimal API a new way to build apis in minimal API a new way to build apis in aset core and it's not even something aset core and it's not even something aset core and it's not even something like a new aset core so they allow you like a new aset core so they allow you like a new aset core so they allow you to build new apps for new modalities or to build new apps for new modalities or to build new apps for new modalities or whatever it might be it's literally a whatever it might be it's literally a whatever it might be it's literally a collection of a few things spread across collection of a few things spread across collection of a few things spread across four or five pillars depending on who's four or five pillars depending on who's four or five pillars depending on who's talking about it that collectively the talking about it that collectively the talking about it that collectively the the end goal is about helping you build the end goal is about helping you build the end goal is about helping you build distributed applications better now the distributed applications better now the distributed applications better now the marketing term and like the current marketing term and like the current marketing term and like the current industry trend is to use the term Cloud industry trend is to use the term Cloud industry trend is to use the term Cloud native but Cloud native means different native but Cloud native means different native but Cloud native means different things to different people things to different people things to different people some folks hear Cloud native and they some folks hear Cloud native and they some folks hear Cloud native and they think oh it is attached to kubernetes it think oh it is attached to kubernetes it think oh it is attached to kubernetes it has to be attached to kubernetes in has to be attached to kubernetes in has to be attached to kubernetes in order to be Cloud native other folks order to be Cloud native other folks order to be Cloud native other folks will hear Cloud native and think it will hear Cloud native and think it will hear Cloud native and think it means well that means it can only run or means well that means it can only run or means well that means it can only run or only help me if I'm running on a public only help me if I'm running on a public only help me if I'm running on a public Cloud the reality is it's just about Cloud the reality is it's just about Cloud the reality is it's just about building distributed applications and building distributed applications and building distributed applications and then kind of borrowing or acknowledging then kind of borrowing or acknowledging then kind of borrowing or acknowledging a lot of the recommendations that have a lot of the recommendations that have a lot of the recommendations that have emerged over the past half decade to emerged over the past half decade to emerged over the past half decade to decade as people start running more and decade as people start running more and decade as people start running more and more apps in the cloud or at Large Scale more apps in the cloud or at Large Scale more apps in the cloud or at Large Scale about what con institutes a good app in about what con institutes a good app in about what con institutes a good app in those places and maybe that's a loaded
-
those places and maybe that's a loaded those places and maybe that's a loaded term maybe it's more like what's going term maybe it's more like what's going term maybe it's more like what's going to help you be productive what's going to help you be productive what's going to help you be productive what's going to help you be reliable what's going to to help you be reliable what's going to to help you be reliable what's going to help you scale well when you start help you scale well when you start help you scale well when you start building apps and deploying them in this building apps and deploying them in this building apps and deploying them in this way versus you know what we did 20 or 30 way versus you know what we did 20 or 30 way versus you know what we did 20 or 30 years ago I guess if we look at the years ago I guess if we look at the years ago I guess if we look at the epoch of how we built these types of epoch of how we built these types of epoch of how we built these types of applications so it's templates it's a applications so it's templates it's a applications so it's templates it's a bunch of new new get packages um it's a bunch of new new get packages um it's a bunch of new new get packages um it's a thing called an orchestrator which we thing called an orchestrator which we thing called an orchestrator which we can talk a little bit about and it's a can talk a little bit about and it's a can talk a little bit about and it's a full embracement of open telemetry um in full embracement of open telemetry um in full embracement of open telemetry um in order to make your app a lot more order to make your app a lot more order to make your app a lot more observable both during the development observable both during the development observable both during the development time like on your local machine as well time like on your local machine as well time like on your local machine as well as after you've deployed it to as after you've deployed it to as after you've deployed it to production okay all right so let's production okay all right so let's production okay all right so let's unpack some of these things this is unpack some of these things this is unpack some of these things this is super helpful place to start so we hear super helpful place to start so we hear super helpful place to start so we hear the words Cloud native we hear the words the words Cloud native we hear the words the words Cloud native we hear the words cloud ready I am always been surprised cloud ready I am always been surprised cloud ready I am always been surprised that we don't simply say cloud aware that we don't simply say cloud aware that we don't simply say cloud aware because all of those terms to me just because all of those terms to me just because all of those terms to me just mean does your app know it's in the mean does your app know it's in the mean does your app know it's in the cloud or does it is it being lied to so cloud or does it is it being lied to so cloud or does it is it being lied to so completely that it has no awareness of completely that it has no awareness of completely that it has no awareness of the cloud early web apps naively lifted the cloud early web apps naively lifted the cloud early web apps naively lifted and shifted like if you run your web app and shifted like if you run your web app and shifted like if you run your web app on IIs and Windows server and you move on IIs and Windows server and you move on IIs and Windows server and you move it quote unquote to the cloud meaning it quote unquote to the cloud meaning it quote unquote to the cloud meaning you lift up your VM and you throw it you lift up your VM and you throw it you lift up your VM and you throw it into a VM in the cloud the app has no into a VM in the cloud the app has no into a VM in the cloud the app has no concept that the cloud exists if you concept that the cloud exists if you concept that the cloud exists if you have an an Azure storage account or an have an an Azure storage account or an have an an Azure storage account or an AWS storage account and you map a drive AWS storage account and you map a drive AWS storage account and you map a drive like the D drive in your VM once again like the D drive in your VM once again like the D drive in your VM once again you're hiding the cloud so that that app you're hiding the cloud so that that app you're hiding the cloud so that that app is not a cloud native app it is being is not a cloud native app it is being is not a cloud native app it is being effectively lied to is that a fair effectively lied to is that a fair effectively lied to is that a fair statement so far I I think it's a fair statement so far I I think it's a fair statement so far I I think it's a fair Viewpoint um I think there are other
-
Viewpoint um I think there are other Viewpoint um I think there are other perfectly or as valid viewpoints about perfectly or as valid viewpoints about perfectly or as valid viewpoints about what constitutes an app that's Cloud what constitutes an app that's Cloud what constitutes an app that's Cloud native but I think it it it makes total native but I think it it it makes total native but I think it it it makes total sense to say Well it can't really be sense to say Well it can't really be sense to say Well it can't really be Cloud native if it's not natively taking Cloud native if it's not natively taking Cloud native if it's not natively taking dependencies on things that are only dependencies on things that are only dependencies on things that are only available in you know quote unquote the available in you know quote unquote the available in you know quote unquote the cloud but that has other drawbacks as cloud but that has other drawbacks as cloud but that has other drawbacks as well so people care about um sometimes well so people care about um sometimes well so people care about um sometimes like multicloud scenarios where they like multicloud scenarios where they like multicloud scenarios where they want to have an app that can seamlessly want to have an app that can seamlessly want to have an app that can seamlessly run on one Cloud versus another so they run on one Cloud versus another so they run on one Cloud versus another so they want a layer of abstractions like it's want a layer of abstractions like it's want a layer of abstractions like it's funny because you talk you know said funny because you talk you know said funny because you talk you know said architect of aspire architecture is architect of aspire architecture is architect of aspire architecture is basically just operating at different basically just operating at different basically just operating at different levels of abstraction and either levels of abstraction and either levels of abstraction and either inventing or removing levels of inventing or removing levels of inventing or removing levels of abstraction to make a different set of abstraction to make a different set of abstraction to make a different set of trade-offs that's all it really is um trade-offs that's all it really is um trade-offs that's all it really is um throw in some product kind of sprinkle throw in some product kind of sprinkle throw in some product kind of sprinkle dust in there as well and so Cloud dust in there as well and so Cloud dust in there as well and so Cloud native to one person might be look native to one person might be look native to one person might be look different to Cloud native of another different to Cloud native of another different to Cloud native of another person and I would probably argue that person and I would probably argue that person and I would probably argue that you can be doing Cloud native even if you can be doing Cloud native even if you can be doing Cloud native even if your app isn't directly talking using your app isn't directly talking using your app isn't directly talking using the client as K of some proprietary the client as K of some proprietary the client as K of some proprietary cloud service because there is kind of a cloud service because there is kind of a cloud service because there is kind of a generalized set of things that have generalized set of things that have generalized set of things that have evolved out of the modern Cloud native evolved out of the modern Cloud native evolved out of the modern Cloud native um sort of architecture movement um that um sort of architecture movement um that um sort of architecture movement um that are really just continuations of are really just continuations of are really just continuations of distributed application design which has distributed application design which has distributed application design which has been something that's been evolving for been something that's been evolving for been something that's been evolving for literally decades like 40 50 even 60 literally decades like 40 50 even 60 literally decades like 40 50 even 60 years yeah I was doing distributed apps years yeah I was doing distributed apps years yeah I was doing distributed apps in dcom and Comm 25 years ago 20 years in dcom and Comm 25 years ago 20 years in dcom and Comm 25 years ago 20 years ago and it was all about lying to our ago and it was all about lying to our ago and it was all about lying to our app because we were had we had location app because we were had we had location app because we were had we had location trans transparency and we would pretend trans transparency and we would pretend trans transparency and we would pretend that the network had no latency right uh that the network had no latency right uh that the network had no latency right uh we would pretend that these objects just
-
we would pretend that these objects just we would pretend that these objects just oh they just exist they just they're in oh they just exist they just they're in oh they just exist they just they're in The Ether um but now there's a formal The Ether um but now there's a formal The Ether um but now there's a formal recognition like DNS is a thing and we recognition like DNS is a thing and we recognition like DNS is a thing and we depend on it and HTTP is a thing and depend on it and HTTP is a thing and depend on it and HTTP is a thing and search are a thing and we know that they search are a thing and we know that they search are a thing and we know that they exist right well not and and it's that exist right well not and and it's that exist right well not and and it's that which is absolutely true but then which is absolutely true but then which is absolutely true but then there's also kind of the flip side of there's also kind of the flip side of there's also kind of the flip side of that coin like DNS is a really that coin like DNS is a really that coin like DNS is a really interesting example because then there's interesting example because then there's interesting example because then there's also DNS exists and I'm going to exploit also DNS exists and I'm going to exploit also DNS exists and I'm going to exploit it by lying about what DNS actually is it by lying about what DNS actually is it by lying about what DNS actually is so now I'm gon think my app thinks it's so now I'm gon think my app thinks it's so now I'm gon think my app thinks it's talking to DNS which is probably some talking to DNS which is probably some talking to DNS which is probably some remote server that resol in its mind but remote server that resol in its mind but remote server that resol in its mind but in reality I've just hijacked the the in reality I've just hijacked the the in reality I've just hijacked the the client side of the DNS uh resolution client side of the DNS uh resolution client side of the DNS uh resolution Pipeline and now I'm lying to it about Pipeline and now I'm lying to it about Pipeline and now I'm lying to it about where to actually talk to in order to where to actually talk to in order to where to actually talk to in order to leverage that as a new layer of leverage that as a new layer of leverage that as a new layer of abstraction yeah actually that's a great abstraction yeah actually that's a great abstraction yeah actually that's a great example this is a weird analogy tell me example this is a weird analogy tell me example this is a weird analogy tell me if this works or not but like when rest if this works or not but like when rest if this works or not but like when rest said hey get post put and delete I'm said hey get post put and delete I'm said hey get post put and delete I'm adopting those those never intended to adopting those those never intended to adopting those those never intended to do this but I'm going to go ahead and do this but I'm going to go ahead and do this but I'm going to go ahead and say that they're crud with DNS we're say that they're crud with DNS we're say that they're crud with DNS we're like hey you know we have this whole like hey you know we have this whole like hey you know we have this whole lookup table here this wonderful lookup table here this wonderful lookup table here this wonderful distributed hash table that goes from distributed hash table that goes from distributed hash table that goes from domain names to IPS I'll just pretend domain names to IPS I'll just pretend domain names to IPS I'll just pretend that it's locally in memory here and that it's locally in memory here and that it's locally in memory here and we'll just have an orchestrator lie to we'll just have an orchestrator lie to we'll just have an orchestrator lie to everyone and that's a thing now I mean everyone and that's a thing now I mean everyone and that's a thing now I mean kubernetes really exploited DNS to its kubernetes really exploited DNS to its kubernetes really exploited DNS to its fullest right and so it might be that fullest right and so it might be that fullest right and so it might be that now you know at the layer of abstraction now you know at the layer of abstraction now you know at the layer of abstraction that your app code is running when you that your app code is running when you that your app code is running when you you know logically make a DNS request you know logically make a DNS request you know logically make a DNS request you wrote that as the developer or the you wrote that as the developer or the you wrote that as the developer or the application executes that in the context application executes that in the context application executes that in the context of I'm going to call out to you know the of I'm going to call out to you know the of I'm going to call out to you know the OS or the platform I'm running on is
-
OS or the platform I'm running on is OS or the platform I'm running on is going to do its DNS thing because I know going to do its DNS thing because I know going to do its DNS thing because I know I'm running on top of TCP and all the I'm running on top of TCP and all the I'm running on top of TCP and all the rest of it and then I'm going to get rest of it and then I'm going to get rest of it and then I'm going to get back some address or some result of that back some address or some result of that back some address or some result of that query but as you just said you you query but as you just said you you query but as you just said you you literally called it out DNS is a literally called it out DNS is a literally called it out DNS is a database right and you can have records database right and you can have records database right and you can have records of different types so it has a schema of different types so it has a schema of different types so it has a schema and that means you can extend it with and that means you can extend it with and that means you can extend it with different things even if a lot of those different things even if a lot of those different things even if a lot of those schema elements have not been used in schema elements have not been used in schema elements have not been used in the vast majority of cases in the the vast majority of cases in the the vast majority of cases in the history um of the way that we think history um of the way that we think history um of the way that we think about DNS um so but that is utilized about DNS um so but that is utilized about DNS um so but that is utilized today in the world of kubernetes and today in the world of kubernetes and today in the world of kubernetes and lots of other systems where you can put lots of other systems where you can put lots of other systems where you can put data in this distributed hashtable as data in this distributed hashtable as data in this distributed hashtable as you called it or synchronized hash table you called it or synchronized hash table you called it or synchronized hash table in order to change or get a distributed in order to change or get a distributed in order to change or get a distributed configuration system that means your app configuration system that means your app configuration system that means your app code doesn't have to change if you want code doesn't have to change if you want code doesn't have to change if you want to change some aspect of how your app is to change some aspect of how your app is to change some aspect of how your app is going to run after you've deployed it going to run after you've deployed it going to run after you've deployed it and again that's all just layers of and again that's all just layers of and again that's all just layers of abstraction and trade-offs turns out abstraction and trade-offs turns out abstraction and trade-offs turns out there was an existing system that almost there was an existing system that almost there was an existing system that almost everyone has deployed called DNS which everyone has deployed called DNS which everyone has deployed called DNS which we know how to administer we know how to we know how to administer we know how to we know how to administer we know how to make reliable continues to evolve as uh make reliable continues to evolve as uh make reliable continues to evolve as uh the needs of the things that sit on top the needs of the things that sit on top the needs of the things that sit on top of it uh you know mature hey we can use of it uh you know mature hey we can use of it uh you know mature hey we can use that in in a slightly different way to that in in a slightly different way to that in in a slightly different way to get a different outcome and rest is get a different outcome and rest is get a different outcome and rest is another great example of where something another great example of where something another great example of where something that has been there in plain sight that has been there in plain sight that has been there in plain sight underneath someone took a slightly underneath someone took a slightly underneath someone took a slightly different look at it and said you know different look at it and said you know different look at it and said you know what we could use this plus all these what we could use this plus all these what we could use this plus all these little bits of these extensions and just little bits of these extensions and just little bits of these extensions and just formulate a new or codify a new quote formulate a new or codify a new quote formulate a new or codify a new quote unquote standard of how to think about unquote standard of how to think about unquote standard of how to think about this this this um and then leverage that now rest was um and then leverage that now rest was um and then leverage that now rest was that and a whole bunch more and I don't that and a whole bunch more and I don't that and a whole bunch more and I don't want to get into all the rest of it want to get into all the rest of it want to get into all the rest of it because I know people will get angry um
-
because I know people will get angry um because I know people will get angry um but that's you know broadly speaking uh but that's you know broadly speaking uh but that's you know broadly speaking uh that's really what what we're doing here that's really what what we're doing here that's really what what we're doing here yeah it it is funny though they have all yeah it it is funny though they have all yeah it it is funny though they have all of this historical context and in my of this historical context and in my of this historical context and in my mind I'm thinking well you know Inc and mind I'm thinking well you know Inc and mind I'm thinking well you know Inc and decom you'd go from a class identifier decom you'd go from a class identifier decom you'd go from a class identifier you'd look it up in the registry and you'd look it up in the registry and you'd look it up in the registry and you'd get to a guid which would give you you'd get to a guid which would give you you'd get to a guid which would give you the object that you wanted and now we're the object that you wanted and now we're the object that you wanted and now we're looking up with a URI arguably not a URL looking up with a URI arguably not a URL looking up with a URI arguably not a URL but a URI that may or may not exist like but a URI that may or may not exist like but a URI that may or may not exist like you know HTTP whack whack shopping cart you know HTTP whack whack shopping cart you know HTTP whack whack shopping cart it's just I want to talk to the shopping it's just I want to talk to the shopping it's just I want to talk to the shopping cart I don't know where it is I'm going cart I don't know where it is I'm going cart I don't know where it is I'm going to trust the orchestrator to just handle to trust the orchestrator to just handle to trust the orchestrator to just handle that for me right and just to like put a that for me right and just to like put a that for me right and just to like put a bit more context with a name around this bit more context with a name around this bit more context with a name around this and bring it back to Aspire what we're and bring it back to Aspire what we're and bring it back to Aspire what we're talking about here is service Discovery talking about here is service Discovery talking about here is service Discovery right so this is one of these pillars right so this is one of these pillars right so this is one of these pillars that we talked about and these pillars that we talked about and these pillars that we talked about and these pillars we as a product team we we if we take a we as a product team we we if we take a we as a product team we we if we take a few steps back again why did we even few steps back again why did we even few steps back again why did we even start doing this well it turns out when start doing this well it turns out when start doing this well it turns out when we spoke to customers or observe we spoke to customers or observe we spoke to customers or observe customers building net apps and then customers building net apps and then customers building net apps and then deploying them in these hyper deploying them in these hyper deploying them in these hyper distributed scenarios let's just say the distributed scenarios let's just say the distributed scenarios let's just say the cloud but that's really what we're cloud but that's really what we're cloud but that's really what we're talking about it could be on premises talking about it could be on premises talking about it could be on premises running kubernetes clusters but it's running kubernetes clusters but it's running kubernetes clusters but it's basically hyper distributed what were basically hyper distributed what were basically hyper distributed what were the challenges that they ran into and the challenges that they ran into and the challenges that they ran into and here's a very common one that developers here's a very common one that developers here's a very common one that developers run into it's like well just to get run into it's like well just to get run into it's like well just to get service a to talk to service B which service a to talk to service B which service a to talk to service B which talks to some messaging system or talks talks to some messaging system or talks talks to some messaging system or talks to some database I have to think about to some database I have to think about to some database I have to think about addresses I have to think about TCP I addresses I have to think about TCP I addresses I have to think about TCP I have to think about firewalls I have to have to think about firewalls I have to have to think about firewalls I have to think about all this stuff and when it think about all this stuff and when it think about all this stuff and when it comes to onboarding perhaps younger comes to onboarding perhaps younger comes to onboarding perhaps younger developers this is also a challenge that developers this is also a challenge that developers this is also a challenge that we've observed which is you just you we've observed which is you just you we've observed which is you just you know the first day that you want to be know the first day that you want to be know the first day that you want to be able to show this person write this bit able to show this person write this bit able to show this person write this bit of code over here like literally five
-
of code over here like literally five of code over here like literally five lines and then write this other three lines and then write this other three lines and then write this other three lines on this other side and they can lines on this other side and they can lines on this other side and they can talk to each other well guess what you talk to each other well guess what you talk to each other well guess what you try and say something like well it's try and say something like well it's try and say something like well it's using local it's using the loopback using local it's using the loopback using local it's using the loopback address so you you don't need to do a address so you you don't need to do a address so you you don't need to do a firewall roll this will be fine and firewall roll this will be fine and firewall roll this will be fine and their eyes glaze over so you just take their eyes glaze over so you just take their eyes glaze over so you just take for granted all this context that you for granted all this context that you for granted all this context that you have sometimes Decades of what it takes have sometimes Decades of what it takes have sometimes Decades of what it takes to have two processors even on the same to have two processors even on the same to have two processors even on the same machine talk to each other using tcpip machine talk to each other using tcpip machine talk to each other using tcpip or or or a higher level thing and so or or or a higher level thing and so or or or a higher level thing and so service Discovery is really just about service Discovery is really just about service Discovery is really just about saying as you said give it a friendly saying as you said give it a friendly saying as you said give it a friendly name that me as the developer name that me as the developer name that me as the developer understands and then Plum it through understands and then Plum it through understands and then Plum it through some system that again is familiar to some system that again is familiar to some system that again is familiar to the developer it could be DNS it could the developer it could be DNS it could the developer it could be DNS it could be a c API if you're a net developer it be a c API if you're a net developer it be a c API if you're a net developer it could be a configuration file if that's could be a configuration file if that's could be a configuration file if that's what's common to you it's really just what's common to you it's really just what's common to you it's really just about abstracting simple name how does about abstracting simple name how does about abstracting simple name how does that get resolved to something that the that get resolved to something that the that get resolved to something that the actual machine can can use to talk to actual machine can can use to talk to actual machine can can use to talk to talk to and to to abuse Arthur Clark's talk to and to to abuse Arthur Clark's talk to and to to abuse Arthur Clark's famous quote uh you know each additional famous quote uh you know each additional famous quote uh you know each additional layer of abstraction is layer of abstraction is layer of abstraction is indistinguishable from Magic we need indistinguishable from Magic we need indistinguishable from Magic we need some kind of maturity almost or kind of some kind of maturity almost or kind of some kind of maturity almost or kind of a collective Acceptance in the in the a collective Acceptance in the in the a collective Acceptance in the in the computer science and in the engine in computer science and in the engine in computer science and in the engine in the software engineering community when the software engineering community when the software engineering community when a thing like Aspire or kubernetes comes a thing like Aspire or kubernetes comes a thing like Aspire or kubernetes comes along and starts to hide stuff from along and starts to hide stuff from along and starts to hide stuff from stuff some from people so you just said stuff some from people so you just said stuff some from people so you just said for the the younger developer and what for the the younger developer and what for the the younger developer and what we mean is for early in career we mean is for early in career we mean is for early in career developers full stack is a lot like okay developers full stack is a lot like okay developers full stack is a lot like okay I want to make an I want to make an app I want to make an I want to make an app I want to make an I want to make an app what's it going to do it's going to have what's it going to do it's going to have what's it going to do it's going to have login and do a shopping cart okay before login and do a shopping cart okay before login and do a shopping cart okay before we can teach you any of that let's talk we can teach you any of that let's talk we can teach you any of that let's talk about yaml let's talk about DNS let's
-
about yaml let's talk about DNS let's about yaml let's talk about DNS let's talk about HTTP there was a you know if talk about HTTP there was a you know if talk about HTTP there was a you know if net Aspire was was created 10 years ago net Aspire was was created 10 years ago net Aspire was was created 10 years ago the moment might not have been there the moment might not have been there the moment might not have been there like we may we might have said you're like we may we might have said you're like we may we might have said you're hiding too much but it feels like the hiding too much but it feels like the hiding too much but it feels like the community has become frustrated with the community has become frustrated with the community has become frustrated with the amount of stuff you got to know and amount of stuff you got to know and amount of stuff you got to know and they're like okay I get it fine now hide they're like okay I get it fine now hide they're like okay I get it fine now hide this from me yeah I mean I feel like it this from me yeah I mean I feel like it this from me yeah I mean I feel like it the tooling met the moment and we're the tooling met the moment and we're the tooling met the moment and we're okay with some of the administ trivia okay with some of the administ trivia okay with some of the administ trivia being hidden from us yeah I think so I I being hidden from us yeah I think so I I being hidden from us yeah I think so I I think honestly there's always been an think honestly there's always been an think honestly there's always been an acceptance for abstraction layers which acceptance for abstraction layers which acceptance for abstraction layers which is effectively what we're talking about is effectively what we're talking about is effectively what we're talking about here right we're just saying I I'm here right we're just saying I I'm here right we're just saying I I'm operating at some logical contextual operating at some logical contextual operating at some logical contextual level um in in the modality that I level um in in the modality that I level um in in the modality that I currently am I'm saying these words that currently am I'm saying these words that currently am I'm saying these words that means something in this context but we means something in this context but we means something in this context but we kind of consciously or subconsciously kind of consciously or subconsciously kind of consciously or subconsciously understand we're standing on top of many understand we're standing on top of many understand we're standing on top of many many other layers underneath us whether many other layers underneath us whether many other layers underneath us whether it's saying we're standing on the it's saying we're standing on the it's saying we're standing on the shoulders of giants or whether all all shoulders of giants or whether all all shoulders of giants or whether all all those who came before us or just some those who came before us or just some those who came before us or just some logical model or physical model but I logical model or physical model but I logical model or physical model but I think there's also good ways of doing think there's also good ways of doing think there's also good ways of doing that words like good can be problematic that words like good can be problematic that words like good can be problematic but there are different sets of but there are different sets of but there are different sets of trade-offs that can be made with one trade-offs that can be made with one trade-offs that can be made with one approach of of doing that of abstracting approach of of doing that of abstracting approach of of doing that of abstracting and quote unquote hiding stuff and other and quote unquote hiding stuff and other and quote unquote hiding stuff and other ways that perhaps people equate to just ways that perhaps people equate to just ways that perhaps people equate to just being magical and not actually well being magical and not actually well being magical and not actually well architectured and to give some you know architectured and to give some you know architectured and to give some you know more perhaps concrete example examples more perhaps concrete example examples more perhaps concrete example examples from the history that you and I both from the history that you and I both from the history that you and I both have in common let's look at net so web have in common let's look at net so web have in common let's look at net so web forms was an incredibly productive web forms was an incredibly productive web forms was an incredibly productive web framework and I think was very
-
framework and I think was very framework and I think was very successful in setting out what it successful in setting out what it successful in setting out what it achieved to do which was make developers achieved to do which was make developers achieved to do which was make developers who were familiar with a certain style who were familiar with a certain style who were familiar with a certain style of application development be productive of application development be productive of application development be productive very quickly in a very different style very quickly in a very different style very quickly in a very different style of application development and so and of application development and so and of application development and so and that was basically built around a very that was basically built around a very that was basically built around a very complicated architecture under the complicated architecture under the complicated architecture under the covers some of which was exposed if you covers some of which was exposed if you covers some of which was exposed if you wanted to be and other parts that were wanted to be and other parts that were wanted to be and other parts that were kind of more black box and then some kind of more black box and then some kind of more black box and then some very rich tooling that helped with that very rich tooling that helped with that very rich tooling that helped with that as well and I think after after a little as well and I think after after a little as well and I think after after a little bit and the web evolved there was some bit and the web evolved there was some bit and the web evolved there was some you know backlash against that style of you know backlash against that style of you know backlash against that style of web framework for being too magical web framework for being too magical web framework for being too magical hiding too much and I think the real Sin hiding too much and I think the real Sin hiding too much and I think the real Sin making it too difficult to break free of making it too difficult to break free of making it too difficult to break free of the abstraction to punch through the the the abstraction to punch through the the the abstraction to punch through the the abstraction layer and say you know what abstraction layer and say you know what abstraction layer and say you know what I understand what's going on here but I I understand what's going on here but I I understand what's going on here but I need to tweak this one aspect of what need to tweak this one aspect of what need to tweak this one aspect of what you're hiding from me right now all that you're hiding from me right now all that you're hiding from me right now all that is a long way of saying there's a good is a long way of saying there's a good is a long way of saying there's a good way to hide and a bad way to hide and way to hide and a bad way to hide and way to hide and a bad way to hide and what we're really striving to do when we what we're really striving to do when we what we're really striving to do when we build these experiences now whether it's build these experiences now whether it's build these experiences now whether it's asenet core you know 10 years ago or asenet core you know 10 years ago or asenet core you know 10 years ago or minimal apis 3 to four years ago or now minimal apis 3 to four years ago or now minimal apis 3 to four years ago or now um Aspire is we want those layers of um Aspire is we want those layers of um Aspire is we want those layers of distraction we know we understand that distraction we know we understand that distraction we know we understand that they help with productivity they help they help with productivity they help they help with productivity they help with onboarding they help with with onboarding they help with with onboarding they help with flexibility they help with extensibility flexibility they help with extensibility flexibility they help with extensibility but we need to do it in such a way and but we need to do it in such a way and but we need to do it in such a way and this is where the job of the architect this is where the job of the architect this is where the job of the architect comes in such that we're not you know comes in such that we're not you know comes in such that we're not you know throwing the baby out with the bath throwing the baby out with the bath throwing the baby out with the bath water or hiding so much stuff or making water or hiding so much stuff or making water or hiding so much stuff or making it so difficult to punch through that it so difficult to punch through that it so difficult to punch through that when you get to that 20% case of kind of when you get to that 20% case of kind of when you get to that 20% case of kind of that 8020 rule it's just impossible it's that 8020 rule it's just impossible it's that 8020 rule it's just impossible it's like well I need to do this sorry the like well I need to do this sorry the like well I need to do this sorry the abstraction does not allow you to do abstraction does not allow you to do abstraction does not allow you to do that and there's no way to operate that and there's no way to operate that and there's no way to operate outside the abstraction um and so we
-
outside the abstraction um and so we outside the abstraction um and so we continually to evolve and you know continually to evolve and you know continually to evolve and you know that's where we rely on feedback from that's where we rely on feedback from that's where we rely on feedback from customers to really tell us whether customers to really tell us whether customers to really tell us whether we've got that right but we like to we've got that right but we like to we've got that right but we like to think that that's what we're doing and think that that's what we're doing and think that that's what we're doing and so my my message to folks would be and I so my my message to folks would be and I so my my message to folks would be and I think you were kind of alluding to this think you were kind of alluding to this think you were kind of alluding to this was that if it looks magical and I know was that if it looks magical and I know was that if it looks magical and I know you talk about this a lot as well take a you talk about this a lot as well take a you talk about this a lot as well take a moment just take a little bit of time to moment just take a little bit of time to moment just take a little bit of time to step back and try and understand what's step back and try and understand what's step back and try and understand what's going on one layer beneath what you're going on one layer beneath what you're going on one layer beneath what you're looking at right now and often that will looking at right now and often that will looking at right now and often that will be the key to unlocking the whole be the key to unlocking the whole be the key to unlocking the whole picture for you in your mind and you'll picture for you in your mind and you'll picture for you in your mind and you'll suddenly see where the abstractions suddenly see where the abstractions suddenly see where the abstractions exist and whether it's been a good exist and whether it's been a good exist and whether it's been a good implementation or a bad implementation implementation or a bad implementation implementation or a bad implementation yeah this is perfect okay so now if yeah this is perfect okay so now if yeah this is perfect okay so now if you've made it this far into the podcast you've made it this far into the podcast you've made it this far into the podcast let's get real Hansel minutes.com is an let's get real Hansel minutes.com is an let's get real Hansel minutes.com is an asp.net application that runs in a asp.net application that runs in a asp.net application that runs in a container in azure right now it has some container in azure right now it has some container in azure right now it has some external data sources let's say I want external data sources let's say I want external data sources let's say I want to add redus for caching and I want to to add redus for caching and I want to to add redus for caching and I want to add add add postgress if I did not use Aspire I postgress if I did not use Aspire I postgress if I did not use Aspire I would fire up some reddis uh service or would fire up some reddis uh service or would fire up some reddis uh service or I'd fire up a container with reddis in I'd fire up a container with reddis in I'd fire up a container with reddis in it I'd have to figure out how to do that it I'd have to figure out how to do that it I'd have to figure out how to do that I'd have to deal with some Secrets some I'd have to deal with some Secrets some I'd have to deal with some Secrets some keys some apis I'd figure out how to keys some apis I'd figure out how to keys some apis I'd figure out how to address that reddest thing maybe address that reddest thing maybe address that reddest thing maybe directly I think I would probably make directly I think I would probably make directly I think I would probably make some configuration options maybe an some configuration options maybe an some configuration options maybe an environment variable I have to start environment variable I have to start environment variable I have to start thinking about that all of that is kind thinking about that all of that is kind thinking about that all of that is kind of yak of yak of yak shaving uh before I can actually go into shaving uh before I can actually go into shaving uh before I can actually go into the reddish stuff and then I have to do the reddish stuff and then I have to do the reddish stuff and then I have to do the exact same thing for postgress is the exact same thing for postgress is the exact same thing for postgress is that all fair so far yeah like as you
-
that all fair so far yeah like as you that all fair so far yeah like as you said like the first thing is like okay I said like the first thing is like okay I said like the first thing is like okay I need to stand up a reddis assume and need to stand up a reddis assume and need to stand up a reddis assume and we're still assuming an awful lot just we're still assuming an awful lot just we're still assuming an awful lot just making that statement right it's like making that statement right it's like making that statement right it's like okay how do I connect to it I let's okay how do I connect to it I let's okay how do I connect to it I let's assume that I know that it listens on a assume that I know that it listens on a assume that I know that it listens on a port what port does R Us listen on by port what port does R Us listen on by port what port does R Us listen on by default well let me go and find that out default well let me go and find that out default well let me go and find that out now I could figure all that stuff out by now I could figure all that stuff out by now I could figure all that stuff out by you know searching and all the rest of you know searching and all the rest of you know searching and all the rest of it yeah but if I just want to get some it yeah but if I just want to get some it yeah but if I just want to get some cash working right now wouldn't it be cash working right now wouldn't it be cash working right now wouldn't it be nice if I could just say can you add a r nice if I could just say can you add a r nice if I could just say can you add a r cash for me and please make it work okay cash for me and please make it work okay cash for me and please make it work okay so I could go and do all of that with my so I could go and do all of that with my so I could go and do all of that with my asp.net app my asp.net app already asp.net app my asp.net app already asp.net app my asp.net app already exists at any point though I could exists at any point though I could exists at any point though I could probably make some mistakes uh maybe I probably make some mistakes uh maybe I probably make some mistakes uh maybe I would be dealing with the keys in in an would be dealing with the keys in in an would be dealing with the keys in in an insecure fashion there'd be a number of insecure fashion there'd be a number of insecure fashion there'd be a number of like best practices and a little naive like best practices and a little naive like best practices and a little naive on my part that may cause me to do on my part that may cause me to do on my part that may cause me to do something wrong so when we say net something wrong so when we say net something wrong so when we say net Aspire is opinionated I'm assuming it Aspire is opinionated I'm assuming it Aspire is opinionated I'm assuming it has a strong enough opinion to want to has a strong enough opinion to want to has a strong enough opinion to want to do things right and simple and in some do things right and simple and in some do things right and simple and in some kind of formalized best practice kind of formalized best practice kind of formalized best practice prescriptively by default yeah yeah prescriptively by default yeah yeah prescriptively by default yeah yeah that's kind of the idea so like some that's kind of the idea so like some that's kind of the idea so like some other decisions that you would have to other decisions that you would have to other decisions that you would have to make or perhaps you you you implicitly make or perhaps you you you implicitly make or perhaps you you you implicitly made without even thinking about them if made without even thinking about them if made without even thinking about them if you set something up like redus by you set something up like redus by you set something up like redus by default is you would choose a redus default is you would choose a redus default is you would choose a redus client like I'm I'm using net so I need client like I'm I'm using net so I need client like I'm I'm using net so I need a library to add to my application to a library to add to my application to a library to add to my application to talk to Reedus with because net doesn't talk to Reedus with because net doesn't talk to Reedus with because net doesn't have native support for talking to Rus have native support for talking to Rus have native support for talking to Rus well I mean in our community there is well I mean in our community there is well I mean in our community there is basically one library that everyone uses basically one library that everyone uses basically one library that everyone uses with a stack exchange. Rus but if you go with a stack exchange. Rus but if you go with a stack exchange. Rus but if you go to if you didn't know that and you go to to if you didn't know that and you go to to if you didn't know that and you go to stack you go to newg get.org and you stack you go to newg get.org and you stack you go to newg get.org and you type in reddis it just sorts by
-
type in reddis it just sorts by type in reddis it just sorts by downloads right like that's all that's downloads right like that's all that's downloads right like that's all that's what it does by default and that's what what it does by default and that's what what it does by default and that's what it uses as a proxy for you know quote it uses as a proxy for you know quote it uses as a proxy for you know quote unquote correctness how relev how unquote correctness how relev how unquote correctness how relev how relevant is this is this result but relevant is this is this result but relevant is this is this result but there's a lot of results when if you there's a lot of results when if you there's a lot of results when if you search for reddis now if you were you search for reddis now if you were you search for reddis now if you were you could also very um understandably you could also very um understandably you could also very um understandably you might search for redus espet or aset cor might search for redus espet or aset cor might search for redus espet or aset cor redis as a package because a certain redis as a package because a certain redis as a package because a certain type of customer or a certain type of type of customer or a certain type of type of customer or a certain type of user might think that they're an aset user might think that they're an aset user might think that they're an aset person not a net person and so that person not a net person and so that person not a net person and so that that's what they would search for and I that's what they would search for and I that's what they would search for and I you would get different results you would get different results you would get different results depending on what you type in so just depending on what you type in so just depending on what you type in so just getting the client is one thing now once getting the client is one thing now once getting the client is one thing now once you've got the client now you have to you've got the client now you have to you've got the client now you have to figure out how to use the client okay figure out how to use the client okay figure out how to use the client okay well how do I use this stack exchange well how do I use this stack exchange well how do I use this stack exchange let's assume we got stacky change. Rus let's assume we got stacky change. Rus let's assume we got stacky change. Rus which is the one that you want how do I which is the one that you want how do I which is the one that you want how do I use it well it'll have its own use it well it'll have its own use it well it'll have its own documentation on its own website which documentation on its own website which documentation on its own website which makes sense and let's assume that you makes sense and let's assume that you makes sense and let's assume that you can find that and hopefully it has some can find that and hopefully it has some can find that and hopefully it has some examples and it might even have some examples and it might even have some examples and it might even have some example that you zero one on quite example that you zero one on quite example that you zero one on quite quickly specifically about the context quickly specifically about the context quickly specifically about the context in which you're going to use it which is in which you're going to use it which is in which you're going to use it which is I'm going to use it in aset and I'm I'm going to use it in aset and I'm I'm going to use it in aset and I'm going to use it for caching now that's a going to use it for caching now that's a going to use it for caching now that's a big AR that's I already made quite a big big AR that's I already made quite a big big AR that's I already made quite a big leap that you got there that quickly I leap that you got there that quickly I leap that you got there that quickly I would Hazard to guess you will not get would Hazard to guess you will not get would Hazard to guess you will not get there that quickly um but let's say that there that quickly um but let's say that there that quickly um but let's say that you did aset core has a DI system it has you did aset core has a DI system it has you did aset core has a DI system it has a configuration system it has a logging a configuration system it has a logging a configuration system it has a logging system much of which is built on top of system much of which is built on top of system much of which is built on top of the hosting abstractions in net does the hosting abstractions in net does the hosting abstractions in net does redus integrate with any of those well redus integrate with any of those well redus integrate with any of those well no not by default if you want them to no not by default if you want them to no not by default if you want them to integrate with that you have to write integrate with that you have to write integrate with that you have to write the shims to do that yourself you have the shims to do that yourself you have the shims to do that yourself you have to like make the left hand you know to like make the left hand you know to like make the left hand you know match up to the shape of the right hand match up to the shape of the right hand match up to the shape of the right hand and then join them together um in fact
-
and then join them together um in fact and then join them together um in fact before we started the Aspire effort the before we started the Aspire effort the before we started the Aspire effort the psy exchange regist client for logging psy exchange regist client for logging psy exchange regist client for logging if you wanted to get logs out of what it if you wanted to get logs out of what it if you wanted to get logs out of what it was doing you passed it a text writer was doing you passed it a text writer was doing you passed it a text writer which is like a very lowlevel primitive which is like a very lowlevel primitive which is like a very lowlevel primitive in net for a thing that you can push in net for a thing that you can push in net for a thing that you can push text into so you would have to create an text into so you would have to create an text into so you would have to create an instance of a text wrer pass it in at instance of a text wrer pass it in at instance of a text wrer pass it in at the very top level of the you know the very top level of the you know the very top level of the you know hierarchy of their API and then it would hierarchy of their API and then it would hierarchy of their API and then it would write outputs to that now that doesn't write outputs to that now that doesn't write outputs to that now that doesn't matter to the aset C lugging system by matter to the aset C lugging system by matter to the aset C lugging system by default right and all of this has default right and all of this has default right and all of this has nothing to do with the business problem nothing to do with the business problem nothing to do with the business problem right which is I'd like my podcast to right which is I'd like my podcast to right which is I'd like my podcast to have a red as cash well the business have a red as cash well the business have a red as cash well the business prob with probably even higher level prob with probably even higher level prob with probably even higher level right it's like I want the homepage of right it's like I want the homepage of right it's like I want the homepage of my red of my my podcast to be quicker uh my red of my my podcast to be quicker uh my red of my my podcast to be quicker uh because it's doing redundant things because it's doing redundant things because it's doing redundant things every time so I want a thing I want a every time so I want a thing I want a every time so I want a thing I want a reddis cash I want a postgress I want a reddis cash I want a postgress I want a reddis cash I want a postgress I want a service bus I want and then to your service bus I want and then to your service bus I want and then to your point health checks logging Telemetry point health checks logging Telemetry point health checks logging Telemetry specific to that and I would like just I specific to that and I would like just I specific to that and I would like just I don't want to have to think about that I don't want to have to think about that I don't want to have to think about that I want to be able to say I'd like this want to be able to say I'd like this want to be able to say I'd like this service so net Aspire provides those service so net Aspire provides those service so net Aspire provides those things as net Aspire components things as net Aspire components things as net Aspire components basically a standard Nate package for basically a standard Nate package for basically a standard Nate package for these these Services these obvious top these these Services these obvious top these these Services these obvious top Services now is it every service is it Services now is it every service is it Services now is it every service is it like what if there's a a database I've like what if there's a a database I've like what if there's a a database I've never thought about like couch base or never thought about like couch base or never thought about like couch base or something you know right that doesn't something you know right that doesn't something you know right that doesn't have one of those is that something I have one of those is that something I have one of those is that something I could write my own you absolutely could could write my own you absolutely could could write my own you absolutely could so yeah we have to acknowledge that so yeah we have to acknowledge that so yeah we have to acknowledge that another part of a Spire was kind of another part of a Spire was kind of another part of a Spire was kind of trying to bootstrap kind of a bit of a trying to bootstrap kind of a bit of a trying to bootstrap kind of a bit of a create a bit of a gravity well around create a bit of a gravity well around create a bit of a gravity well around this kind of idea of how can we make this kind of idea of how can we make this kind of idea of how can we make pulling together a set of um ideals for
-
pulling together a set of um ideals for pulling together a set of um ideals for distributed app design in net a little distributed app design in net a little distributed app design in net a little more Central a little easier to find and more Central a little easier to find and more Central a little easier to find and put some practices around it and when I put some practices around it and when I put some practices around it and when I say you know practices you're saying say you know practices you're saying say you know practices you're saying opinionated that's what our marketing opinionated that's what our marketing opinionated that's what our marketing stuff says what are these opinions it stuff says what are these opinions it stuff says what are these opinions it just it the opinion is something as just it the opinion is something as just it the opinion is something as simple as if you add the Aspire simple as if you add the Aspire simple as if you add the Aspire component for reddis rather than it's component for reddis rather than it's component for reddis rather than it's simply adding a library that lets you simply adding a library that lets you simply adding a library that lets you talk to redis it adds the when you call talk to redis it adds the when you call talk to redis it adds the when you call the method in that Aspire component it the method in that Aspire component it the method in that Aspire component it adds it to the DI container in an adds it to the DI container in an adds it to the DI container in an opinioned way it adds it with a specific opinioned way it adds it with a specific opinioned way it adds it with a specific lifetime because you know Di has a whole lifetime because you know Di has a whole lifetime because you know Di has a whole bunch of settings that you can that you bunch of settings that you can that you bunch of settings that you can that you can configure so the default is it does can configure so the default is it does can configure so the default is it does it a certain way then it by default it a certain way then it by default it a certain way then it by default hooks it up to the configuration system hooks it up to the configuration system hooks it up to the configuration system so that all the options for that API so that all the options for that API so that all the options for that API that you would usually set in code you that you would usually set in code you that you would usually set in code you can now set from your configuration can now set from your configuration can now set from your configuration system which you know includes Json system which you know includes Json system which you know includes Json environment variables all the normal environment variables all the normal environment variables all the normal things that we used to in aset core or things that we used to in aset core or things that we used to in aset core or net hosting then things like Telemetry net hosting then things like Telemetry net hosting then things like Telemetry and health checks well again the redest and health checks well again the redest and health checks well again the redest client doesn't include support for the client doesn't include support for the client doesn't include support for the net health check system that's in net health check system that's in net health check system that's in another package written by another another package written by another another package written by another person on another GitHub repository with person on another GitHub repository with person on another GitHub repository with a different new get ID so the Aspire a different new get ID so the Aspire a different new get ID so the Aspire component references that for you we component references that for you we component references that for you we made a choice we had an opinion and we made a choice we had an opinion and we made a choice we had an opinion and we said well this is the prevalent health said well this is the prevalent health said well this is the prevalent health checks Library or site for doing sort of checks Library or site for doing sort of checks Library or site for doing sort of extra health checks for all these extra health checks for all these extra health checks for all these services so we're just going to adopt services so we're just going to adopt services so we're just going to adopt that and when I say adopt it I simply that and when I say adopt it I simply that and when I say adopt it I simply mean we're going to reference it from mean we're going to reference it from mean we're going to reference it from our new get package that we built like our new get package that we built like our new get package that we built like it's a community this is what this is it's a community this is what this is it's a community this is what this is it's an ecosystem of lots of great stuff it's an ecosystem of lots of great stuff it's an ecosystem of lots of great stuff but we we're just helping pull stuff
-
but we we're just helping pull stuff but we we're just helping pull stuff together in a way so that you don't have together in a way so that you don't have together in a way so that you don't have to make that decision every single time to make that decision every single time to make that decision every single time and when you call the method it's all on and when you call the method it's all on and when you call the method it's all on by default and the last part is the open by default and the last part is the open by default and the last part is the open Telemetry stuff so open Telemetry is Telemetry stuff so open Telemetry is Telemetry stuff so open Telemetry is probably worth talking about a little probably worth talking about a little probably worth talking about a little bit more which is this industry effort bit more which is this industry effort bit more which is this industry effort um sponsored by Google and Microsoft and um sponsored by Google and Microsoft and um sponsored by Google and Microsoft and other um you know Telemetry vendors like other um you know Telemetry vendors like other um you know Telemetry vendors like APM vendors and things like that and APM vendors and things like that and APM vendors and things like that and it's about basically coming to an it's about basically coming to an it's about basically coming to an agreement about hey if a system wants to agreement about hey if a system wants to agreement about hey if a system wants to emit Telemetry about how it talks to a emit Telemetry about how it talks to a emit Telemetry about how it talks to a database or how it talks to another HTTP database or how it talks to another HTTP database or how it talks to another HTTP service or what it does when it starts service or what it does when it starts service or what it does when it starts up etc etc maybe we should standardize up etc etc maybe we should standardize up etc etc maybe we should standardize that and what does that mean well it that and what does that mean well it that and what does that mean well it should have a standard event name it should have a standard event name it should have a standard event name it should have a standard schema they should have a standard schema they should have a standard schema they should have standard protocols so if you should have standard protocols so if you should have standard protocols so if you want to send that Telemetry via HTTP want to send that Telemetry via HTTP want to send that Telemetry via HTTP with Json it should look like this but with Json it should look like this but with Json it should look like this but we should also support sending it over we should also support sending it over we should also support sending it over HTTP with GPC and in that case it should HTTP with GPC and in that case it should HTTP with GPC and in that case it should look like this and then we should do look like this and then we should do look like this and then we should do that in a collective way as an ecosystem that in a collective way as an ecosystem that in a collective way as an ecosystem so that I can build Telemetry into my so that I can build Telemetry into my so that I can build Telemetry into my app and then I can pick it up from one app and then I can pick it up from one app and then I can pick it up from one place point at that Telemetry egress to place point at that Telemetry egress to place point at that Telemetry egress to some totally other Telemetry Ingress some totally other Telemetry Ingress some totally other Telemetry Ingress system and as long as it speaks open system and as long as it speaks open system and as long as it speaks open Telemetry it'll work and so we've taken Telemetry it'll work and so we've taken Telemetry it'll work and so we've taken a bet on open Telemetry because net a bet on open Telemetry because net a bet on open Telemetry because net supports open Telemetry we have PR supports open Telemetry we have PR supports open Telemetry we have PR Primitives in The NET Framework and the Primitives in The NET Framework and the Primitives in The NET Framework and the language that map to the open Telemetry language that map to the open Telemetry language that map to the open Telemetry Primitives so when I say we adopted open Primitives so when I say we adopted open Primitives so when I say we adopted open Telemetry there isn't like in the core Telemetry there isn't like in the core Telemetry there isn't like in the core of net types that have the same names no of net types that have the same names no of net types that have the same names no we have things like ilogger which maps we have things like ilogger which maps we have things like ilogger which maps to the open Telemetry concept of logging
-
to the open Telemetry concept of logging to the open Telemetry concept of logging we have things like meters which open we have things like meters which open we have things like meters which open Telemetry has I think called metrics so Telemetry has I think called metrics so Telemetry has I think called metrics so we we hooked those up to each other and we we hooked those up to each other and we we hooked those up to each other and then we have something called activities then we have something called activities then we have something called activities in net which is what we use for doing in net which is what we use for doing in net which is what we use for doing distributed tracing that is tracing that distributed tracing that is tracing that distributed tracing that is tracing that go across process boundaries across go across process boundaries across go across process boundaries across machine boundaries um and that gets machine boundaries um and that gets machine boundaries um and that gets hooked up to open Telemetry concept of hooked up to open Telemetry concept of hooked up to open Telemetry concept of tracing through the open Telemetry net tracing through the open Telemetry net tracing through the open Telemetry net libraries um and so we pull all that libraries um and so we pull all that libraries um and so we pull all that stuff in for you by default when you use stuff in for you by default when you use stuff in for you by default when you use our components um so that when you add our components um so that when you add our components um so that when you add your reddis going back to what it is your reddis going back to what it is your reddis going back to what it is that you want to do you know it'll be that you want to do you know it'll be that you want to do you know it'll be instrumented for open Telemetry by instrumented for open Telemetry by instrumented for open Telemetry by default right and open Telemetry also default right and open Telemetry also default right and open Telemetry also another example of something that's another example of something that's another example of something that's having a moment where the software having a moment where the software having a moment where the software engineering practitioners Community has engineering practitioners Community has engineering practitioners Community has finally said okay we're done writing to finally said okay we're done writing to finally said okay we're done writing to a text files let's have a bus of some a text files let's have a bus of some a text files let's have a bus of some kind let's standardize how Telemetry is kind let's standardize how Telemetry is kind let's standardize how Telemetry is collected and transmitted to our back collected and transmitted to our back collected and transmitted to our back ends in a way that is open source and ends in a way that is open source and ends in a way that is open source and that is vendor neutral with a that is vendor neutral with a that is vendor neutral with a formalization on the idea that component formalization on the idea that component formalization on the idea that component should be observable and in doing that should be observable and in doing that should be observable and in doing that that means that I could theoretically that means that I could theoretically that means that I could theoretically have a net service I could have a reddis have a net service I could have a reddis have a net service I could have a reddis A postgress or maybe a python service or A postgress or maybe a python service or A postgress or maybe a python service or a JavaScript like I don't I assume that a JavaScript like I don't I assume that a JavaScript like I don't I assume that net Aspire could talk to non-net things net Aspire could talk to non-net things net Aspire could talk to non-net things because it is is when it's talking to because it is is when it's talking to because it is is when it's talking to postgress and uh and reddis yeah 100% so postgress and uh and reddis yeah 100% so postgress and uh and reddis yeah 100% so first of all yes everything you just first of all yes everything you just first of all yes everything you just said about open Telemetry is true and said about open Telemetry is true and said about open Telemetry is true and then I would add to that the other then I would add to that the other then I would add to that the other critical part is that it's we want to critical part is that it's we want to critical part is that it's we want to make sure that it's growing up in the make sure that it's growing up in the make sure that it's growing up in the real world that it's battle tested with real world that it's battle tested with real world that it's battle tested with real things it's not just Pie in the Sky
-
real things it's not just Pie in the Sky real things it's not just Pie in the Sky Architecture that would be great if Architecture that would be great if Architecture that would be great if everyone you know designed in a closed everyone you know designed in a closed everyone you know designed in a closed box as I said it's actually being built box as I said it's actually being built box as I said it's actually being built and standardized um by an ecosystem that and standardized um by an ecosystem that and standardized um by an ecosystem that includes players like Google and includes players like Google and includes players like Google and Microsoft and the big PM vendor so Microsoft and the big PM vendor so Microsoft and the big PM vendor so that's great um when it comes to Aspire that's great um when it comes to Aspire that's great um when it comes to Aspire and sort of heterogeneous environments and sort of heterogeneous environments and sort of heterogeneous environments and like multi you know stack um one of and like multi you know stack um one of and like multi you know stack um one of the key aspects of the Spire is this the key aspects of the Spire is this the key aspects of the Spire is this orchestration this development time orchestration this development time orchestration this development time orchestration piece um which we haven't orchestration piece um which we haven't orchestration piece um which we haven't talked about yet when it's actually kind talked about yet when it's actually kind talked about yet when it's actually kind of the key building block that really of the key building block that really of the key building block that really unlocks the whole development experience unlocks the whole development experience unlocks the whole development experience so Aspire is very unapologetically net so Aspire is very unapologetically net so Aspire is very unapologetically net and and developer first so it is a it is and and developer first so it is a it is and and developer first so it is a it is intended primarily to improve the intended primarily to improve the intended primarily to improve the development lives of developers that development lives of developers that development lives of developers that developer a loop experience it stretches developer a loop experience it stretches developer a loop experience it stretches beyond that we have things to help with beyond that we have things to help with beyond that we have things to help with deployment um and a lot of that stems deployment um and a lot of that stems deployment um and a lot of that stems from this orchestration piece now we from this orchestration piece now we from this orchestration piece now we call it the apphost it's a new project call it the apphost it's a new project call it the apphost it's a new project type you know very net like you add a type you know very net like you add a type you know very net like you add a new project to your solution it's the new project to your solution it's the new project to your solution it's the Aspire apphost project and inside that Aspire apphost project and inside that Aspire apphost project and inside that you have a C file and you write code you have a C file and you write code you have a C file and you write code that describes your distributed that describes your distributed that describes your distributed application so ever since net 6 we've application so ever since net 6 we've application so ever since net 6 we've had this espet core sort of minimal had this espet core sort of minimal had this espet core sort of minimal hosting layer this type called Web hosting layer this type called Web hosting layer this type called Web application and you in the very first application and you in the very first application and you in the very first line of your program CS is this web line of your program CS is this web line of your program CS is this web application. create Builder call and application. create Builder call and application. create Builder call and then what's returned from that is an then what's returned from that is an then what's returned from that is an object that you can call things on to object that you can call things on to object that you can call things on to add services to Di and then you call add services to Di and then you call add services to Di and then you call build and you get this application build and you get this application build and you get this application object that you can use to map endpoints object that you can use to map endpoints object that you can use to map endpoints using minimal apis and then you call run using minimal apis and then you call run using minimal apis and then you call run so that's we call that kind of the the so that's we call that kind of the the so that's we call that kind of the the host Builder pattern so we have a host host Builder pattern so we have a host host Builder pattern so we have a host Builder pattern for distributed
-
Builder pattern for distributed Builder pattern for distributed applications now okay well what are the applications now okay well what are the applications now okay well what are the things that you add to the Builder for things that you add to the Builder for things that you add to the Builder for distributed applications versus the distributed applications versus the distributed applications versus the thing that you would add to a web thing that you would add to a web thing that you would add to a web application well you add containers you application well you add containers you application well you add containers you add execut add execut add execut you add parameters because there might you add parameters because there might you add parameters because there might be input coming from the host that you be input coming from the host that you be input coming from the host that you don't you can't codify a value for in C don't you can't codify a value for in C don't you can't codify a value for in C it's that I need to leave a space here it's that I need to leave a space here it's that I need to leave a space here for a value to be provided by my for a value to be provided by my for a value to be provided by my environment but then I can create environment but then I can create environment but then I can create references between these things we call references between these things we call references between these things we call them resources uh a container is a them resources uh a container is a them resources uh a container is a resource an executable is a resource a resource an executable is a resource a resource an executable is a resource a net project is a resource a nodejs net project is a resource a nodejs net project is a resource a nodejs application is a resource and then we application is a resource and then we application is a resource and then we allow you to sort of configure these so allow you to sort of configure these so allow you to sort of configure these so that they talk to each other effectively that they talk to each other effectively that they talk to each other effectively I can say this resource has a reference I can say this resource has a reference I can say this resource has a reference to that resource um and if the code to that resource um and if the code to that resource um and if the code looks very um elegant I think like it's looks very um elegant I think like it's looks very um elegant I think like it's very much I add a thing to the model and very much I add a thing to the model and very much I add a thing to the model and then I can say this thing references then I can say this thing references then I can say this thing references that thing with a very common set of that thing with a very common set of that thing with a very common set of sort of new terms or vocabulary that sort of new terms or vocabulary that sort of new terms or vocabulary that should look familiar to people who use should look familiar to people who use should look familiar to people who use modern. net you're you're building a modern. net you're you're building a modern. net you're you're building a dependency tree you're expressing it's dependency tree you're expressing it's dependency tree you're expressing it's exactly right you're building a exactly right you're building a exactly right you're building a dependency tree or a graph as it might dependency tree or a graph as it might dependency tree or a graph as it might be you can have Cycles you can have lots be you can have Cycles you can have lots be you can have Cycles you can have lots of different branch as that go off in of different branch as that go off in of different branch as that go off in different ways and then effect and at different ways and then effect and at different ways and then effect and at the end you call run and then when you the end you call run and then when you the end you call run and then when you hit F5 in Visual Studio or vs code or hit F5 in Visual Studio or vs code or hit F5 in Visual Studio or vs code or type. net run at the command line you type. net run at the command line you type. net run at the command line you run that project and it runs everything run that project and it runs everything run that project and it runs everything for you it literally boots up and for you it literally boots up and for you it literally boots up and configures everything for you uh when configures everything for you uh when configures everything for you uh when you run it and if you've got Docker on you run it and if you've got Docker on you run it and if you've got Docker on your machine it spins up the containers your machine it spins up the containers your machine it spins up the containers that are necessary and when you break that are necessary and when you break that are necessary and when you break out of your debugging experience or your out of your debugging experience or your out of your debugging experience or your local experience those things go away local experience those things go away local experience those things go away that's right so at the moment the life
-
that's right so at the moment the life that's right so at the moment the life cycle or the lifetime of these sessions cycle or the lifetime of these sessions cycle or the lifetime of these sessions is tied very much to again the net is tied very much to again the net is tied very much to again the net Centric application life cycle so you Centric application life cycle so you Centric application life cycle so you launch in Visual Studio or you net run launch in Visual Studio or you net run launch in Visual Studio or you net run at the command line that starts a new at the command line that starts a new at the command line that starts a new session and everything runs for as long session and everything runs for as long session and everything runs for as long as that session runs and when you finish as that session runs and when you finish as that session runs and when you finish that uh session either by stopping the that uh session either by stopping the that uh session either by stopping the debugger in Visual Studio or hitting debugger in Visual Studio or hitting debugger in Visual Studio or hitting control C uh in your terminal then control C uh in your terminal then control C uh in your terminal then everything gets torn down now one of the everything gets torn down now one of the everything gets torn down now one of the first biggest pieces of feedback that first biggest pieces of feedback that first biggest pieces of feedback that we've had actually since we launched is we've had actually since we launched is we've had actually since we launched is that's too simple like people want more that's too simple like people want more that's too simple like people want more control over the lifetime very much so control over the lifetime very much so control over the lifetime very much so of especially things like containers so of especially things like containers so of especially things like containers so they want to be able to say yes I want they want to be able to say yes I want they want to be able to say yes I want you to create this container for me but you to create this container for me but you to create this container for me but don't shut down when I shut down the hos don't shut down when I shut down the hos don't shut down when I shut down the hos it's fine just to keep it running and it's fine just to keep it running and it's fine just to keep it running and then find it the next time now that then find it the next time now that then find it the next time now that sounds really easy it's actually a very sounds really easy it's actually a very sounds really easy it's actually a very hard problem to solve reliably um but hard problem to solve reliably um but hard problem to solve reliably um but that's one of the big pieces of feedback that's one of the big pieces of feedback that's one of the big pieces of feedback that we've that we've heard and that that we've that we've heard and that that we've that we've heard and that we're trying to improve for upcoming we're trying to improve for upcoming we're trying to improve for upcoming versions yeah I saw that with my versions yeah I saw that with my versions yeah I saw that with my application that fires up postgress and application that fires up postgress and application that fires up postgress and has to build the schema load the thing has to build the schema load the thing has to build the schema load the thing with test data you know it it adds you with test data you know it it adds you with test data you know it it adds you know 10 seconds to my startup if I just know 10 seconds to my startup if I just know 10 seconds to my startup if I just kept it running or did that you know kept it running or did that you know kept it running or did that you know outside of the environment it would be a outside of the environment it would be a outside of the environment it would be a lot easier it would be and so to be lot easier it would be and so to be lot easier it would be and so to be clear we have Primitives that let you clear we have Primitives that let you clear we have Primitives that let you collect or building blocks that let you collect or building blocks that let you collect or building blocks that let you connect to existing instances so if you connect to existing instances so if you connect to existing instances so if you don't want to manage the container from don't want to manage the container from don't want to manage the container from a Spire you can just connect to it so a Spire you can just connect to it so a Spire you can just connect to it so you can rather than adding a container you can rather than adding a container you can rather than adding a container to the model you can add a connection to the model you can add a connection to the model you can add a connection string to the model then just point to string to the model then just point to string to the model then just point to the connection string now this is now we the connection string now this is now we the connection string now this is now we get back to this comment we were making get back to this comment we were making get back to this comment we were making about layers of extraction before that's about layers of extraction before that's about layers of extraction before that's one layer lower so the highest level is one layer lower so the highest level is one layer lower so the highest level is you say add postgress and you give it a
-
you say add postgress and you give it a you say add postgress and you give it a name and you give it no other arguments name and you give it no other arguments name and you give it no other arguments and a miracle happens and then a miracle and a miracle happens and then a miracle and a miracle happens and then a miracle happens and you also wrote a line that happens and you also wrote a line that happens and you also wrote a line that says give this postgress to this net says give this postgress to this net says give this postgress to this net application application application and the miracle that happens under the and the miracle that happens under the and the miracle that happens under the covers there is it somehow configures covers there is it somehow configures covers there is it somehow configures that application to know about that that application to know about that that application to know about that postgress well what's happening one postgress well what's happening one postgress well what's happening one layer lower well that ad postgress layer lower well that ad postgress layer lower well that ad postgress method just calls the ad container method just calls the ad container method just calls the ad container method with a set of values what values method with a set of values what values method with a set of values what values well the value that is the name of the well the value that is the name of the well the value that is the name of the postgress image and the tag to use and postgress image and the tag to use and postgress image and the tag to use and uh wraps it in a class that says hey I uh wraps it in a class that says hey I uh wraps it in a class that says hey I can provide a connection string so if can provide a connection string so if can provide a connection string so if anyone references me and they can anyone references me and they can anyone references me and they can consume connection strings can you consume connection strings can you consume connection strings can you please inject my connection string please inject my connection string please inject my connection string information into their environment information into their environment information into their environment variables so that project the way it was variables so that project the way it was variables so that project the way it was being you know magically configured was being you know magically configured was being you know magically configured was very simply by virtue of the fact that very simply by virtue of the fact that very simply by virtue of the fact that Aspire injects an environment variable Aspire injects an environment variable Aspire injects an environment variable into that application when it starts its into that application when it starts its into that application when it starts its process when you hit FR run in a schema process when you hit FR run in a schema process when you hit FR run in a schema that's already understood by net that's already understood by net that's already understood by net application so most people are probably application so most people are probably application so most people are probably aware if they're using net today that aware if they're using net today that aware if they're using net today that when you get a when you want to get a when you get a when you want to get a when you get a when you want to get a connection string out of the connection string out of the connection string out of the configuration API there's literally a configuration API there's literally a configuration API there's literally a method called get connection string on method called get connection string on method called get connection string on the configuration object and all that is the configuration object and all that is the configuration object and all that is is a layer of abstraction that says go is a layer of abstraction that says go is a layer of abstraction that says go and get a configuration value where the and get a configuration value where the and get a configuration value where the beginning is in the connection strings beginning is in the connection strings beginning is in the connection strings section that's all it does right these section that's all it does right these section that's all it does right these are all just what's the word you know are all just what's the word you know are all just what's the word you know the nice little apis on top of very the nice little apis on top of very the nice little apis on top of very rudimentary um sort of standards that rudimentary um sort of standards that rudimentary um sort of standards that you would have done anyway if we hadn't you would have done anyway if we hadn't you would have done anyway if we hadn't have built the higher level API for you have built the higher level API for you have built the higher level API for you so we're just looking for the boiler so we're just looking for the boiler so we're just looking for the boiler plate and then kind of codifying that as plate and then kind of codifying that as plate and then kind of codifying that as the way that you do it and giving you a the way that you do it and giving you a the way that you do it and giving you a nice method to achieve that but it's
-
nice method to achieve that but it's nice method to achieve that but it's built on a lower method if you don't built on a lower method if you don't built on a lower method if you don't like what it does F12 which is in Visual like what it does F12 which is in Visual like what it does F12 which is in Visual Studio go to definition it'll pull in Studio go to definition it'll pull in Studio go to definition it'll pull in the source code for you from Source link the source code for you from Source link the source code for you from Source link and you can look at exactly what it's and you can look at exactly what it's and you can look at exactly what it's doing there's no better documentation doing there's no better documentation doing there's no better documentation than the actual code and the code is than the actual code and the code is than the actual code and the code is actually fairly straightforward it's actually fairly straightforward it's actually fairly straightforward it's literally just setting environment literally just setting environment literally just setting environment variables through a bunch of interfaces variables through a bunch of interfaces variables through a bunch of interfaces um so if you can understand C you can um so if you can understand C you can um so if you can understand C you can pretty much understand what Aspire is pretty much understand what Aspire is pretty much understand what Aspire is doing in this apphost project very cool doing in this apphost project very cool doing in this apphost project very cool okay so wrapping this all up into a nice okay so wrapping this all up into a nice okay so wrapping this all up into a nice little bow in the last few minutes here little bow in the last few minutes here little bow in the last few minutes here so that my my current existing podcast so that my my current existing podcast so that my my current existing podcast website which is just running in the website which is just running in the website which is just running in the cloud in a container I add this I make cloud in a container I add this I make cloud in a container I add this I make it an Aspire app application the host it an Aspire app application the host it an Aspire app application the host starts up it fires up reddis it fires up starts up it fires up reddis it fires up starts up it fires up reddis it fires up postgress and it fires up my existing postgress and it fires up my existing postgress and it fires up my existing podcast site and then when I deploy that podcast site and then when I deploy that podcast site and then when I deploy that to a cloud whether it be Azure or to a cloud whether it be Azure or to a cloud whether it be Azure or another Cloud if that cloud can spin up another Cloud if that cloud can spin up another Cloud if that cloud can spin up containers the app kind of runs as as containers the app kind of runs as as containers the app kind of runs as as per usual right how does that Aspire per usual right how does that Aspire per usual right how does that Aspire spin up those things or connect to those spin up those things or connect to those spin up those things or connect to those resources yeah so I will say everything resources yeah so I will say everything resources yeah so I will say everything I've talked about with orchestration is I've talked about with orchestration is I've talked about with orchestration is almost predominantly a Dev time thing almost predominantly a Dev time thing almost predominantly a Dev time thing this is about improving the development this is about improving the development this is about improving the development experience on your local developer box experience on your local developer box experience on your local developer box in your scenario where you've got an in your scenario where you've got an in your scenario where you've got an existing site and you want to use a existing site and you want to use a existing site and you want to use a Spire to improve the development Spire to improve the development Spire to improve the development experience it can literally stop there experience it can literally stop there experience it can literally stop there so you can say I already have all the so you can say I already have all the so you can say I already have all the stuff running on my cloud I'm not going stuff running on my cloud I'm not going stuff running on my cloud I'm not going to change anything about how I deploy to change anything about how I deploy to change anything about how I deploy like literally zero nothing I already like literally zero nothing I already like literally zero nothing I already have my database I already have my have my database I already have my have my database I already have my reddis or I can manually create the reddis or I can manually create the reddis or I can manually create the reddis I don't need to go and create a reddis I don't need to go and create a reddis I don't need to go and create a script for it I don't need to turn over script for it I don't need to turn over script for it I don't need to turn over the keys to the and then I and then I
-
the keys to the and then I and then I the keys to the and then I and then I just going to deploy the application the just going to deploy the application the just going to deploy the application the way I already deploy it whether it's in way I already deploy it whether it's in way I already deploy it whether it's in a container cic that already works right a container cic that already works right a container cic that already works right so you don't have to change anything so you don't have to change anything so you don't have to change anything nothing at all you can just add a Spire nothing at all you can just add a Spire nothing at all you can just add a Spire to make your local development to make your local development to make your local development experience much much much easier so you experience much much much easier so you experience much much much easier so you don't have to think about when you hit don't have to think about when you hit don't have to think about when you hit F5 is my postgress server running is my F5 is my postgress server running is my F5 is my postgress server running is my red server do I even have a red server red server do I even have a red server red server do I even have a red server on this box because I've got some new on this box because I've got some new on this box because I've got some new laptop all that goes away or you can laptop all that goes away or you can laptop all that goes away or you can look at what Aspire can do for you by look at what Aspire can do for you by look at what Aspire can do for you by taking all that information that you taking all that information that you taking all that information that you wrote in that apphost C file and then wrote in that apphost C file and then wrote in that apphost C file and then piping that through to what we call a piping that through to what we call a piping that through to what we call a deployment manifest and feeding that deployment manifest and feeding that deployment manifest and feeding that into a tool chain that understands how into a tool chain that understands how into a tool chain that understands how to read that manifest right now in Azure to read that manifest right now in Azure to read that manifest right now in Azure there's a tool the Azure developer CLI there's a tool the Azure developer CLI there's a tool the Azure developer CLI that has been updated to support a Spire that has been updated to support a Spire that has been updated to support a Spire the Amazon folks are working on a set of the Amazon folks are working on a set of the Amazon folks are working on a set of tools uh for their tool chain as well tools uh for their tool chain as well tools uh for their tool chain as well and then there's a community tool called and then there's a community tool called and then there's a community tool called aspirate uh which does it for kubernetes aspirate uh which does it for kubernetes aspirate uh which does it for kubernetes so if you want to take like a full so if you want to take like a full so if you want to take like a full Aspire Solution that's 100 containers Aspire Solution that's 100 containers Aspire Solution that's 100 containers with a whole bunch of things and just with a whole bunch of things and just with a whole bunch of things and just point it at something and say give me point it at something and say give me point it at something and say give me kubernetes at the other side the kubernetes at the other side the kubernetes at the other side the aspirate tool can do that for you as aspirate tool can do that for you as aspirate tool can do that for you as well but I want to make it very clear well but I want to make it very clear well but I want to make it very clear you don't need to use any of that you you don't need to use any of that you you don't need to use any of that you can just keep deploying the app the way can just keep deploying the app the way can just keep deploying the app the way that you deploy it today and just add that you deploy it today and just add that you deploy it today and just add aspire to get all the benefits as a aspire to get all the benefits as a aspire to get all the benefits as a developer very cool rock on well this developer very cool rock on well this developer very cool rock on well this has been super helpful it gives me a lot has been super helpful it gives me a lot has been super helpful it gives me a lot of context hopefully it will give the of context hopefully it will give the of context hopefully it will give the folks that are listening additional folks that are listening additional folks that are listening additional context you can check out the source context you can check out the source context you can check out the source code foret Aspire at github.com doot NE code foret Aspire at github.com doot NE code foret Aspire at github.com doot NE Aspire and of course there's a link Aspire and of course there's a link Aspire and of course there's a link directly on that GitHub page to the directly on that GitHub page to the directly on that GitHub page to the documentation uh and get involved in the documentation uh and get involved in the documentation uh and get involved in the community and there's a ton of YouTubers
-
community and there's a ton of YouTubers community and there's a ton of YouTubers as well talking about net Aspire as well as well talking about net Aspire as well as well talking about net Aspire as well so check them out if that's how you like so check them out if that's how you like so check them out if that's how you like to learn thank you so much Damen Edwards to learn thank you so much Damen Edwards to learn thank you so much Damen Edwards for chatting with me today thanks SC for chatting with me today thanks SC for chatting with me today thanks SC this has been another episode of Hansel this has been another episode of Hansel this has been another episode of Hansel minutes and we'll see you again next minutes and we'll see you again next minutes and we'll see you again next week week week [Music]
Summary
The main topic is .NET Aspire, a new platform designed to help developers build distributed applications. It's highlighted as more than just a framework, but a collection of tools across several pillars aimed at building cloud-native applications effectively. The practical takeaway is that .NET Aspire simplifies the complexity of modern distributed application development for .NET developers.