 Welcome everyone. Thank you all for joining us today for this live stream event. My name is Rebecca And I'm the event planner of the Microsoft reactor in New York Before we begin we recommend checking in to receive session resources. There are a lot of Learn modules on the check-in page we have a github repo on the check-in page definitely check in get those resources It's all neatly on this one Web page, so check it out the website is a k a m s slash reactor check-in and the event ID is 1 5 0 0 0 I dropped that into the chat as well and I'll have it up on the screen again in a little bit So quickly just to cover our code of conduct Microsoft reactor seeks to provide a respectful environment for both our audience and our presenters We encourage engagement in the chat But we just ask that you're mindful of your commentary you ran professional and on topic Our event guidelines this session is recorded. It is live right now on YouTube and will be available later on on demand If you have questions feel free feel free to submit them into the chat if you have not yet participated on a YouTube Live stream you do need to be signed in with an account to interact there So if you haven't done so yet you can do that now or you know if you have questions You're not able to send us right now. You can always message us later So today is a session. Let's bring up Jay Hey there How are you today? I'm great. I'm great. So this is Jay Gordon. He's a cloud advocate here at Microsoft reactor He'll be walking us through how to deploy bicep files using github actions That's exciting It looks like we've got a few people in the room already again if you haven't checked in yet. Oh welcome from Berlin we've got Philip joining us Hello, welcome Philip. Hi Philip. Yeah anybody in the chat feel free to let us know where you're joining from what your experience level is What you're hoping to gain from this session? Or you know, I know Jay from previous sessions. He's a big fan of the Yankees, right? So if you want to talk about that, too, we're we're here for it Absolutely, so why don't we jump into my slides and we'll kind of get started here I think that we've got some cool stuff to talk about. It's gonna be pretty fast-paced session. I Hope you're prepared. I've got a whole lot for you. My name like Rebecca said is Jay Gordon. I'm a cloud advocate. I Do a lot around IT operations infrastructure Things that help people get into and using the cloud and so I really do appreciate you taking part and if you want to send me any response any Information if you have questions my Twitter is always the best way to get in touch with me after this session I Welcome you to follow me and Interact and I am also Always doing Azure Funbytes. It's every Thursday at 2 p.m. on learn TV I'll get you more information about that if you check out my Twitter So let's talk about our agenda really quickly We're gonna be reviewing the components of this workshop. We'll configure the dependencies We'll secure our credentials with Key Vault and then we're gonna deploy our Application to Azure Kubernetes service. All right, and we'll get into all those different components as we continue along So if you're gonna follow along you're gonna need a few things to get your prerequisites in you're gonna need it SSH public key If you don't know how to do that, it's in the docs We'll be able to show you how to do that once we get to those docs You can use the template repo so you can run github actions. It should be in your own account You can't use the public template to run github actions. You need to have it a part of your user An Azure account, we're gonna be building something for Azure So an Azure account really helps $200 of free credit We'll get to that link in a second and then you're gonna want to clone your your Locally, I'm gonna be using a Visual Studio Code today So if you want to sign up for Azure keep this up for a second You can go to aka.ms slash CDA free Azure 12 months of free services 25 other free services that always and $200 in free credit if you want to follow along and Actually do this workshop yourself You can also just watch this video and follow along After the fact you can go to aka.ms slash DevOps slash aka s bicep Or just github.com slash jdestro slash aka s bicep And you can go ahead and just use the template and you don't need to fork it You just want to use the template and what it will do is create an entire version for you That copies exactly what I have into your own personal repository And so we're gonna be building today a demo app. The demo app is going to be just a simple .NET application that's using I believe JavaScript for the front end and It's also using Redis to store our votes, which is either cats or dogs. I'm voting dogs So let's answer a few questions before we actually start building things sound good. All right, so let's do this cool So first question is what is bicep? Well, we can start out with an intro on what it is Which is a domain specific language for deploying Azure resources? Declare it at least so you could think of it as the next generation of arm templates Which if you work within the past, you know that they came with a burden of working with JSON So bicep has a simpler syntax compared And it's aimed at simplifying the authoring experience So a good analogy to understand the relationship between bicep and arm would be similar to the relationship between type script and javascript Type script is like bicep javascript is like arm and bicep transpiles down to a standard arm template into JSON Which means that the arm JSON is effectively being treated as an intermediate language and all the work is being done In open source on github and you can keep a view of it. It's been like that since day one of how the product is evolving so bicep has a very reasonable writable syntax similar to arm templates in Terraform bicep is a declarative language where you say what you want and Azure makes it so so opposed to imperative approaches such as using Azure CLI or PowerShell That require you to tell Azure how to do things procedurally With bicep, you don't need to worry about the complexities of how with modules. You can break up your bicep code into manageable chunks bicep has a first-class authoring experience It has rich type safety validation IntelliSense a bunch of features. There's a really great visual studio code Extension it really makes it a lot easier to start authoring your templates and bicep also offers a Decompile command so you can take your arm template and convert it to bicep there's a bunch of tools that you can use including a Bicep playground that will let you actually transpile Your your arm templates directly into bicep. So why use it? Day zero support for all the different Azure resource types and API versions Let's continue along No state files, which means you don't have to actually store a state file in something like Azure storage or keep it locally as part of the repository Prefight validation so you can fail fast So you know where your problems are first and foremost before actually using it and deploying it The VS code extension is part of the tooling along with it being directly into Azure CLI You can use Azure PowerShell and like I said, there's this bicep playground where you can get different types of bicep templates Marcus was kind enough to put a blog together Marcus felling If you go to that blog post on the bottom, you can see why you would maybe want to use bicep over Terraform Alright, so let's keep going along So what's github actions? We covered what bicep was but github actions is first and foremost its first class CICD it's an automation tool for any software workflow related to your repo We've been using it for CICD But that's only one way you could run a workflow when someone comments on an issue or when you're someone work forks your repo you'll get Actions kicked off But it's really good at CICD and it can deploy almost anywhere So a workflow is a configurable automated process made up of one or more jobs You must create a YAML file to define your workflow configuration github actions is available with github free github pro github free for Organizations github team github enterprise cloud github enterprise server and github a so there There's lots and lots of places that you can actually use it You can create runners for your build process You can use it native to windows linux max so you have all these different cross platform ways to actually deploy Or I should say do builds public repos are free private repos include 2000 free minutes and there are more than 2000 if you you need to use that more in build time You need to use the paid offering and then self-hosted runners for windows linux back are capable So you install an agent on your build environment if you have a specific build environment Or you're worried about security or something like that and you could set that up And so the next part is keyboard which is where we're going to be storing our secrets So We have a multitude of places in the world of you know software development where you can store secrets and the list is pretty exhaustive, but There's a few common places that we can keep them and right now we can use github secrets Which we were going to be using in just a little bit We're going to be using these different application platform potential Potentially to store secrets like app settings and an Azure app service or secrets and AKS And then centralized key store, which is what we're going to be using today in Azure key vault So it's a centralized place to actually Store your secrets and certificates and so why should we use it? In addition to being a central location to store our secrets keep all layers on additional benefits to managing our secrets Find great access control network access control We can limit exactly where we actually can get those secrets and where they can go so we've got a Lot of different options to be able to keep your access control backups logging secret rotation of your secrets Keep them secure keep them easy to access and then finally a part of our intro We're going to get into our Actual demo in just a few minutes Is Azure Kubernetes service and so what is it? It's a serverless Kubernetes experience it's integrated continuous integration and Continuous delivery is possible It provides you enterprise-grade security and governance You can guide your development and operations teams on a single platform to rapidly build delivered scale applications with confidence so if you think about it this if Arm or Azure resource manager is the control plane for all of Azure AKS can be a control plane for your Kubernetes configurations and so you'll use this to build manage Kubernetes clusters You can orchestrate any type of workload running in the environment of your choice whether you want to Move dot net applications to Windows server containers modernized Java Java applications in Linux containers or run microservices In the public cloud at the edge and hybrid environments You can even use your own data center if you're using AKS on Azure Stack HCI So there's so many different solutions for you to run your your orchestrated containers with Kubernetes So why don't we get to work? We'll follow along at go in the chat ask questions if you need them This will be recorded so you can also just follow along in a later day so I've got my my screen up and What we're going to do is work together and put myself right down here in the corner What we're going to be doing is using this this Template that I've come up with the AKS bicep that's got all the instructions on the left side You can see here. So we're able to use all the different instructions that we need to be able to actually Build this this demo and deploy it on our own If you'd like to so if you're here in the AKS bicep repo You're going to just click use this template and then it'll give you the ability to copy the template into your account with your own Repository name. I've already done that and here we go. This is where my actions will run You can see I've already got a failed action because that the code is still generic Set up and and so Let's let's move ahead As we said before we need to have an SSH public key in order to actually do anything here So to create a key, I've got an example right here SSH key gen And if you're not familiar with it, I Really recommend taking a look on you can use a popular search and look up SSH public key generation But that command will get you one really quickly The next thing you need to do is you're going to need to Clone this repository and so I'm just going to go here to code Local I'm going to copy this I'm going to clone repo here I'm going to go ahead and open it up in VS code. I'm just going to see elect repo location Okay, and we'll open it up and now we've got our repo and you can see in here I've got a get ignore file and the big reason why I've created that get ignore file is I like to set up a scratch file That I'm not going to save and I also am going to be saving some credentials Locally and I don't necessarily want them to get checked in so I've got a get ignore file I've got my bicep template I've got a parameters file That's going to be modified And then I've got my github deployment It for my github actions workflow. So we'll go through those as we progress through the session so We need to get our subscription ID and set it as a variable and to do that You can just run this command in our terminal So subscription equals az account show query ID And in what it does is it actually drops our subscription into a variable. So if I just go echo Subscription you can see there's my subscription ID then what we need to do is set up some In shell environment variables for our location and the name That we're going to be using for our resource group our cluster and our keyboard I've simplified this where we're just using one name because naming things are difficult So we're just going to name we're going to use the location at East US. We're going to use the name aks bicep 02 which is what I named my template Repository that I I've stored locally. So all I have to do is paste in these two different Environment variables into my shell if you're using PowerShell, obviously, this is going to be a little bit different of a process So now I've got my environment variables for location and the name the name You should be unique if you need to just use a random name and numbers whatever it is Just store it as a variable So the next thing we're going to do is create the resource group in our shell and a resource group is we're All of our resources are pretty simple. That's where we keep everything within a Azure deployment Everything is in specific resource groups and it's kind of like a carton of eggs. You can take eggs out. You can put eggs back in And if you don't like your dozen of eggs, you can throw the whole thing out. So we're going to go ahead and use those environment variables to create Our resource group. So there you can see This is where our resource group is. It's underneath my my Subscription and you can see here. There it is. So this is all from the API. It puts it everything in JSON and so Once we finish that we need to create a service principle and the service principle are credentials That allow you to log into your Azure account when running github actions And so what I'm going to do is I have already kind of set it up here So we have our name environment variable our contributor Roll let me bring this up. So it's a little bit bigger so you can see So what we're doing is we're running an Azure CLI command and then we're specifying the scope for that specific resource group and then We're saving that is a service principle dot text file So it's just saving it locally and that's the big reason why we have it here in our get ignore So we can't check it in so What it's going to do is it's going to save my credentials for this Service principle in that text file. Here it is This is in JSON format. It contains a client ID a secret a subscription ID all this we we need this in order to actually connect our github repository to our our Azure account So what I want to do now is I need to create a few github action secrets environment variables So I'm just going to prop this They put it in another window so that you can kind of follow along to what I'm doing and So where I have to go next in order to create these environment variables is here on the side with the triple dots We'll go to settings for the repository and if you scroll down you can see here. There's secrets It's all blown up so you can see secrets right there and Action secrets or environment variables that are encrypted So you don't have to worry about clear text being passed along with your credentials for your Azure account. We don't want that So we're going to create three different Secrets that we need here. So what we're going to be doing is storing our Azure credentials so I'm just going to go here in my Action secrets section and click new repository. I should say new secret for the repo I'm going to name it as your credentials and then what I'll do is I'll just grab these entire credentials that we got That we got from our Azure CLI command that created Our service principle and I'm going to just dump them all right here. So the entire piece of JSON I'm going to throw it right in here and then click add secret at the bottom So that's our first one. Then we need our Azure resource group. That's the resource group that we created So we're going to just create new repository secret And we're going to just call it a case bicep go to We'll add that secret Cool and then our third one is our Azure subscription And so that's the subscription ID that we looked at before All we have to do actually is go back to our Our creation you can see here is of our resource group and you can see that our subscription ID is there But it's also stored as an environment variable So if you need it, you can just go echo subscription If you're on a Mac pipe it in the PB copy So let's bring back up this here we go. And so our final Action secret that we need so now that creates a service principle trust between my github account and my My Azure account so now my github actions are allowed to log into Azure and create resources All right, if you have any questions go ahead and put them in the comment section I'll see if I can get to them. We're going to keep moving along so We've taken care of these first Parts we've created our resource group. We've created our secrets and the next thing we need to do is create a key vault Now what I've done here is I've provided you with a CLI command that allows you to use AZ key vault create and What it's going to do is it's going to give it a name and then that name is that AKS bicep o2 variable The resource group same name variable the location of where our key vault is going to be is in East US You can set it to what particular region you need especially if you have some specific governance on where Data has to be stored for your apps. There's so many different Places and regions for you to do that We can say Here's some options that we can add so we can say that we can access our key vault for template deployments for disk encryption and For deployment to virtual machines so you can do it that way or You can use the portal and the portal gives you a next next last way of creating it I've already created this because it takes a few minutes to create a a key vault and you can see I've got it online here and What I need to do In here is to store some secrets. I I need some secrets that we're going to be able to grab from the parameters file and From that parameters file Specify that we're going to access this SSH RSA public key the one I told you about and that actually allows you to Have SSH access to the underlying Kubernetes cluster of virtual machines So if you do some troubleshooting, you'll be able to still get in your service principle client ID and that is right here and Then the service principles client secret So it's kind of like a username and password We don't want to send those over the wire in the parameter file. We'd rather store it Here in our key vault So we need to create these three and it it's just a matter of a couple of commands So let's go through that. So the first Section we need to do here in our key vault is go to secrets because we're not going to be storing Keys or certificates. We're going to be storing secrets and we can click generate import and What we're going to be doing is giving it a name and so based on our documentation the first one for our SSH public key is This name. So what we're going to be doing is Creating the secret name as SSH RSA public key Now we need to actually enter the secret and the easiest way for me to do that is I can just go in here to my Terminal I'm going to cat My SSH key. So I keep it in dot SSH ID RSA pub and then what I can do is just Cat it or I should say pipe it into PV copy as well. I mean you can also just copy and paste it directly But what I'm going to be doing is taking this value and just putting it right here and you can also see that you can look at the value you store just double-check and We can set activation dates and expiration dates if we need to have this key rotated every so often And then we just click create and that secret is created. I don't want to save this now Next we'll go to generate import because we need to get to our next secret. That's our service principal client ID And so we'll go back here the same process service principal client ID We'll go here to the sp text file and just grab our client ID The reason I'm showing you all this way We're doing it manually is that normally you would have to use multiple Bicep modules in order to be able to create your key vault to store your secrets I wanted to show you kind of like piece by piece how it all fits together. So create I've got my my second diff of Secret that I've stored and now I need to just add my last one and Our last one is our service private principal client secret so we put in our username with the client ID and now we're going to put in our password and We're going to go ahead and and this is so we can set up a Trust for our actual AKS cluster. So our service principal Principal client secret that is what this is called and then we can go to client secret Copy that and for the value click create So now we have our three secrets Cool, and if we go back here to our overview We can see that we actually have a URI that we can access if we need to programmatically access these secrets and then display them somewhere That that's basically how it's able to create and you can retrieve secrets using a Azure CLI you can use it using via various SDKs and and you can set up different access policies networking Identity management all the different things that you expect to be able to do with your Azure account For these different resources that you create you're able to do right here in the keyboard portal So we we've got our Credentials stored as secrets and now what we need to do is to update the parameters file And we just want to give it the name of our resource group And so our parameters file is located right here in the root of our repository directory and What we're going to do is Is take a look I think I took that out actually So we've got some names that we want to use here. We have a unique cluster name and DNS prefix I Have actually taken that out. I have to update the doc. I've taken that whole thing out just to simplify And it's automatically just utilizing that from the AKS template and we'll look at that in just a second So what we're going to be doing now is Updating where exactly so I have these three parameters that we just created secrets for and you can see right here SSH RSA public key we're referencing a particular keyboard that we created and so all we need to do Is take this section right here And we're just going to update some of these parameters and we can just go to edit replace and What we're going to do is copy that paste it in here So we're going to update our vaults name, which is a ks bicep O2 Our subscription ID Which we got from before right here and Our our actual Resource group we actually need to add in here and that will be a ks bicep To so we'll place these three And any oops an extra slash Let's just get rid of these here. So we've got our subscription set and we've pointed it to the specific Resource that we've created for our keyboard and within that keyboard. We're specifying these secret names So why did we need to do that? Well, simply stated that if you go into this a ks bicep template You can see that there are a number of parameters that get set So DNS prefix like I said, it's just going to use the resource group name and you can see how it's it's just declarative it's it's Allowing you to just add these parameters Provide strings for them You can add descriptions so you can actually know what they are And and we've got all these different values so we can specify What the size of the disk is so we could we can add all these different parameters into our parameter file So we don't have to manually hard-code them into this bicep template, but I've Taking care of just some three key things and so we've got our unique cluster name parameter We've got our Linux profile user name and then now we have here our public key That's stored as a secret. So that's we go back To our secret section. That's why we created these three That's why we have our client secret because we need to access it here and This parameter Specifically references exactly where it is All right Looks like I Overcooked this parameters file and I'm going to fix it really quick. Let's see. Yeah, I did it All right. Give me one second. Let me back up Fix this. Sorry about that. You know when you do it live sometimes you make mistakes. So I'm just going to Copy this and I'll do real place again. So go to edit the place Pop that in Pop that in here Vault name AKS bicep o2 subscription ID we got before so let's go ahead and just grab that and Then we just update the last parameter which is our resource group and That's the same here. Sorry. It's not a little easier But I have made this more difficult for myself for some reason and it's always fun when you're doing it live and You are making it more difficult. So All right o2 there, all right, so our key vaults are updated subscription the resource group the provider the actual Key Vault API that we're accessing in the name of the key ball. All right. So that's all set. We've got our three parameters Specified that for SSH public key our service principal client ID and our secret name. So I've saved it Okay, so I've saved this file. You can see it's in my actual source control And for the person that's asking the question, what's a bicep file bicep file is a template for authoring Azure resources so you can Basically declaratively state what you want created how you want it created Where you want to create it and it's a domain specific language for Azure resource manager. So What we've got to the point where we've made all of our changes And then we're going to take a look at the action file So we've set up our application to be able to start Deploying what it is we need and I'm sorry I'm moving so fast But we only have a little bit of time left I've got this YAML file That's our github workflow that when we have a push to our repository we're going to first of all reference our Resource group or I should say our Repository github action secrets. So that's just showing this variable right here We need the cluster name, which is Azure RG The resource group Azure RG. That's the name variable. We created before the namespace That's where the namespace within Kubernetes. We're going to be saving and creating our application and then the app name of the specific application that we're building and so what we can do is look at our runner and our job is going to Build and deploy everything on Ubuntu We're going to check out our code in this case. We're not checking out any code We're logging into Azure. So that's why we saved our credentials We're deploying our bicep file and we'll take a look. We've got our template right here a ks bicep and The parameters as you're deployed up parameters like JSON where we modified our parameters before Then what it'll do is it'll set the target for our Azure Kubernetes and so it'll use our credentials it'll give our cluster a name and it'll use our resource group and Specify what I'm changing is going to be done within this particular Kubernetes cluster Then we're going to create the namespace Where we keep everything and then eventually we're going to deploy our app to AKS and our our Deployment is actually just in this manifest files. This is a standard manifest for Kubernetes in our deployment You can see it's going to give all the information. So the name of our app The front end the back end the node selector And then the container itself so the container image that we're going to be deploying if you were creating your own AKS an ACR as your container registry combination you would specify Where your ACR is located in this case? We're just going to be using these base images. All right, so Let's go ahead and and get to the part where we start deploying So I've got the changes here to the Azure deploy file in our source control And I'm just going to go ahead and add it We're going to be just staging this and then we're going to just commit to the main branch If you were working in a team, you probably would want to Directly commit to main branch. You might want to have a separate branch do so, but we're doing a demo today We're going to try to move along fast So we're going to be saving a commit message and we're going to say deploy to AKS All right, and then we'll sync our changes. So what that's going to do here on the GitHub side And so we'll go up to GitHub actions Pushing that is going to kick off a GitHub actions workflow and you can see right now We've got deployed at AKS And so what's going to happen now is we're going to go through a build and deploy process that we specified in our workflow file So it's going to set up our job. It's going to be running checkout main So it's going to grab the image the repository and any code that we need Then it's going to get to that next section where actually logs into Azure and then specifies the environment So the cluster name the resource group the namespace for Kubernetes the application name and Kubernetes And the provider which is Azure R and Then what we get to the point is we're doing the deploy and so you can see here GitHub actions looks at that workflow file and says I'm supposed to kick off a build from this template using these parameters With this environment so all these different environment variables that we specified within GitHub and within our different I should say our parameters We've got all this ready to go And so it'll change the subscription context if necessary it'll validate the template and then it'll start creating your deployment So this will take Depending on on how many instances you have This will take a few minutes because what we're actually doing is we're creating a brand new AKS cluster which is getting some underlying virtual machines and To those virtual machines We're applying Kubernetes install from there. We're going to be actually then Deploying our application to that Kubernetes install now I'm lucky enough that I've already got one of these finished and so I'm going to show you what it looks like when it's done So here's the action and you can see I've built a new one here and the build and deploy completed and if we go to the build and deploy you'll see We finished our entire process it went ahead and it deployed our front-end and our back-end and Then it applied a public IP address So you can see we get a cluster IP for internal IP addressing and then we've got a load balancer so we can actually access our application from the front-end from the web and In order to be able to get that IP address We can just log in to AKS using AZ CLI and just grab our our credentials, so let's go back to the actual code here We'll scroll down and you can see I've given you a command to access your public IP from the load balancer So what we're going to do is use the Azure CLI and We're going to go over into this section right here, and we're just going to specify the name of our resource group and that is in this case AKS Bicep 01 and Actually, that's the the name of our cluster. Sorry, and then the resource group is the same so We're specifying we need to get the credentials for the AKS Bicep 01 cluster from the AKS Bicep 01 Resource group and so what it'll do is it'll go it'll access. What am I? Let's see. Oh I see. I just it should be the resource group instead of me anyway Of course, let's see what I did wrong here unrecognized command AKS AZ credentials great Let's see. Let's try this once more. Sorry about that Do it. You do it live, right? Okay, so we'll set our resource group Bicep 01 Buster name and so now it'll go and it emerged our AKS Bicep Kubernetes credentials into this This.cube config file and now what we can do is we can get the services So here's an example of the output of what it will look like What I need to do is get this load balancer IP. So I'm just gonna Boop cuddle get services all namespaces It's going to go into kubernetes and it's going to ask What are the IP for all these different services and you can see right here? Here's the front-end load balancer and the external IP address. So I'm just gonna grab that Put it into a browser and now we've got our application. It's up and it's online Dogs dogs dogs all day, right? cool That's how everything is built. I know it was really fast I really recommend that you take a look at some of the resources to get even more information Than what we present before so here are some great places for you to get some resources There's a quick start deploy bicep files by using github actions It's gonna give you a similar version of what we did today. It helps you just deploy a storage file if You go to this next link you can get information on how to get started using Azure Kubernetes service all the different product information If you want documentation about Azure Key Vault security aka at ms slash security features 3 underscore 12 1 What is github actions for Azure and? Then what is bicep? So just some basic documentation that we've got set up This bicep learn module. It's free education. It's free training Okay So you can use this to start learning more and more about bicep if you go to aka dot ms slash bicep learn And and that's everything and so To answer Rea's questions, we're covering all things DevOps on Azure While we also talking about the specific Azure DevOps products and times on this We also really love to talk about all the different ways to use DevOps methodologies in order to create a great experience using Azure So there's so many different tools. There's github Which is is just such a great way of integrating your code into Azure using the workflows Makes sense to me. You can use pipelines if you want you can do this deployment Using pipelines if you want, but that's a different session Okay, so I think we're just about out of time I really want to say thank you. I super appreciate you all One dealing with my little mistakes because you know these things happen and Also, just thank you for being here being a part watching Talking in the chat. I really love having interaction with people and there was a bunch of you that took part Take a look did what we had to do today to make our application start running so Vote dogs you can vote cats you can vote whatever you want, but just go ahead and give us a try so you can Thank you so much Jay. This was fantastic. We did get a couple other questions I know I was dropping a bunch of links and commentary myself into the chat So it kind of pushed things around So if you want to take a few seconds to scroll through that if you have a few more minutes I'm just gonna quickly run through my two slides and then if you want it if there's anything you miss and you want to answer feel free But yeah, so The arm TTK so there's this question Bicep is looking more and more powerful each day, but arm template toolkit is already compatible Yes, it is already compatible There is a arm template toolkit and the extension now supports bicep You can go ahead. I think you need to Be the bicep extension supports files so that there are a Bunch of different things that you can use But I'm pretty sure the arm template toolkit now includes Bicep, I think specifically for Azure DevOps, but it's in there You can go to Azure slash arm dash TTK on github actions Or I saw on github We answered what a bicep file is I think There was a question related one of the streams we're on right now is for the does up DevOps channel Sure. Yeah, I just answered that You know Microsoft DevOps on Microsoft, you know period We want to just make sure that we're covering all of our bases and while Azure DevOps is a great product github and github actions is just as Viable a product to talk about and so this channel it seems appropriate because we want to talk about DevOps on Azure not just Azure DevOps Thank you so much. Sorry about that Yeah, so for our audience still tuning in I dropped a link to our survey we use that information basically to Put together future programming Let us know based on your experience and your background kind of the things you want us to be putting out free content-wise Give us some feedback there And then also if you're tuning in from one of the many channels that we are streaming to right now And you're not familiar this session is brought to you by the Microsoft reactor program Free community events for everyone. We are an international program. We have 12 physical spaces If you're not familiar with us, definitely check us out. Go to Microsoft reactor comm We have a calendar of events find their sessions around the world. So Depending on what you're tuning in from the time zone you're in there might be sessions that are better for you Also find us on Twitter. You can check us out We'll have this session on demand on our Microsoft reactor YouTube channel and also if interested you can go to aka.ms slash reactor email sign up. We don't spam you we just send one email a month To let you know what we have coming up in your local region Can I give them my Twitter account? So if if you want to find me on Twitter You can just go to Twitter comm slash at Jay Destro or a Jay Destro And and if you'd like to also check out Azure Funbytes It's a weekly show where we cover all these different subjects about Azure this week. We'll be talking about web assembly And I'm gonna be I always have a guest these guests are incredible. We always learn so much together So check that out if you'd like to thank you so much Rebekah You are a wonderful wonderful host and I really do appreciate your time as well Thanks, Jay, and I appreciate you coming on here and providing us your time as well and to our audience for participating Thank you all for tuning in until next time Chow Bye. Bye