Azure Friday Live – Building serverless Python apps with Azure Functions | Azure Friday


[MUSIC]>>What a joy it is to be
here today at Build 2019, doing Azure Friday Live. We’ve never done it live
before. It’s amazing. We’re here with Asavari Tayal talking about Python and
Azure functions. How are you?>>Pretty good excited to be here.>>Yeah, I’m glad. Thanks
for coming to share some of the new things that are happening
in Azure Functions for us. You’ve got to make
a few demos for me. When I tried to go into
Functions before in the past, and I would say, it
probably maybe a year ago. I make a new function and I get excited about
Serverless but then they tell me to put all of my work in this little text box
in the Azure portal, and honestly, I left and I
didn’t looked at it after that. But I understand that there’s
been some fundamental changes.>>Yeah. Well, if you’ve
been following Functions, you might know that we recently
announced Functions 2.0, which is cross-platform, what that means is you can develop
on any platform, you don’t have to be
stuck to the browser, and you can develop with
the tools of your choice. So if you’re a Python developer
and you like Visual Studio Code, you could go in and use the
extension to build your Function.>>I understand that
the Azure Functions runtime can even be run
on my own computer. I could do Serverless in the Cloud but on
my machine on an airplane.>>Exactly. It’s open source, so you can run it on your machine, you could run it on
an on-premise device, you can containerize it and run it on a Raspberry Pi if
you wanted to Yeah.>>Can an Azure Function
be complicated? Like I said, I was doing
it in the browser, in a very small box,
but now I can do it in VS Code. Maybe you
can show us that.>>Sure. All right.>>Were going to switch over to her machine and take a look at that. So we are in VS code on your Mac.>>Yes, and I have my Azure
Functions extension installed. What I’m going to be showing
you today is how to develop a Python function app in Visual
Studio Code using Functions 2.0.>>Functions 2.0.>>So what this lovely extension
does for us is offers us these friendly utilities to help us work with the
function project. So for instance, I can say, hey I’d like to go ahead and
create a new function project. It’ll prompt me to pick a
directory for my project. Let’s go ahead and pick Demo1. It’ll ask me for the language I’d
like to use for my function app. So Azure Function supports
a wide variety of languages today. Let’s go ahead and use Python, which is our new offering. Now, as a next step, I’m going to be prompted
to pick a trigger for my very first function
in my function project. So we can pick HTTP trigger. We also support a wide variety
of other triggers. Things like events
in Azure Storage in messaging or eventing
systems, Azure Storage, Cosmos DB, Event Grid, Event Hub, and recently as of two days ago
we also added the Kafka triggers. You’re not seeing it here right now because there isn’t
a template for it, but we’re going to be
adding a template as well, to help you get started.>>When I saw that drop
down for the first time, it really changed the way that I
thought about Azure Functions. Because like I told you before, I had the wrong idea. I thought it was a simple thing for making little HTTP applications. But this is really
a fantastic platform for making large
event-driven applications, and these are all events
that can happen in other Azure services that can
then invoke my Azure Function.>>Exactly. We’re always watching
for those events so we can go ahead and provision the resources
and run your application.>>Fantastic. So what are
we going to trigger on?>>Let’s pick HTTP trigger
for our demo today. Now, what you’ll see is it’ll ask me for a name to give my function. Let’s just pick the default name
which is HTTP trigger. We’ll be prompted to pick
an authorization level. What this means is, if
I picked anonymous, it could be a public endpoint. I could also secure
it behind an API key, or if I wanted some more control
like OATH or AD Authentication, I could pick the Admin
Control as well. For the demo, let’s pick anonymous
and make it a public endpoint.>>All right.>>So what this is doing here, and you’ll see this little
processing box at the bottom, is create a new function
project for us. So if we go ahead and
look at the Explorer, a function project is, basically, the equivalent of a function
application in Azure. It can contain multiple functions that share the same
local configuration, hosting configuration, and even the requirements or
dependencies that they use.>>I see that it’s popping up a notification about
a Python interpreter. Do I have to have Python locally or does it depend on whether I’m doing
the work locally or not?>>Well, if you’re developing locally you do need to
have Python installed. We already support Python 3.6. What this will do is, it’ll give me an option of what Python
interpreter I want to use. So the Function extension already created
a virtual environment for us. I can go ahead and pick that. If I wanted, I could also pick
the python on my local bin path, depending on what your preference
is as the developer.>>Okay.>>So Let’s go ahead and pick
the virtual environment. We don’t have to
worry about this one. So the next step I can do is, we talked about Azure Functions
is open source, right? You can run the functions runtime right here on
your local machine, without even publishing to the Cloud, you can debug and test. Visual Studio Code makes it
so easy that all I need to do is go ahead and press “F5”
to start the debugger.>>Is this in the Cloud
or is this local?>>This is completely local.>>Wow. Okay.>>So what this did was it
started the functions runtime. It started what we call a
Python language worker process, and now, it’s already solving your function on
a local hosting endpoint. We can go ahead and
call this function. A cool thing I’ll show you
today is to set a break point. So what you need to understand is the Functions extension is
smart in the sense that it’s already attached the python debugger to the functions for us
that’s running locally.>>Okay.>>So when I go ahead and
call the function, we’d see that it actually breaks
on our breakpoint right here. So we can debug, view, call, stack and do all kinds
of fancy things as well.>>Yeah. I saw when you hovered over the request that you had
a whole ton of context. I mean this is
full rich debugging and the debugging that
a Python person would expect. But now they’re not thinking
about servers anymore.>>Exactly. So going back to
your point about portal development, this is not just limited
to the experience that you are seeing in
the web browser this is us bringing functions to the local development that you’re
used to as a python developer>>That’s really cool.>>Yeah. So if we go ahead and
continue and go back to a browser, I can, since this is
a Hello World Function, give it a friendly name
and continue again.>>So you’re passing
something in as a parameter, as a query string, and then changing and coming
back around the other side.>>Exactly, I already have
that local hosting endpoint. All you needed to look at, since this function got
generated from the template, I do want to walk
through a few things that really help you
configure the function. So if you look at the HTTP
trigger folder I have right here, that’s where my function
is actually located. The HTTP triggered function. We’ve got a script file right here, which is called the dunder init file. Then this other one which is
called the function JSON file. Now, this is the configuration
where I actually define the script file
that I want to invoke, the Python script file that I want to invoke when my function’s executed. That trigger that will
invoke my function. So in this case it’s an HTTP trigger. The templates already
populate things like, hey, it’s supposed to be
a Get or a Post requests. But you can obviously customize
and configure as per your needs. You can also define other bindings. In this case, we’ve already
defined the HTTP response. That’s what the template
populated for us. If you wanted you can even go ahead and add new bindings
to your function.>>This binding thing is
really really powerful. The first thing I thought
was okay HTTP in, HTTP out, some JSON in some JSON out, but it could be images dropped into storage that then
triggered the function, and then the out is
another storage bucket.>>Exactly. So what we see is, people are using functions
as the glue between several other services
that they may be using in Azure or outside of Azure. So make it super easy
with bindings for you to be able to speak
with these data sources, without having to understand what the Azure Storage SDK
for Python looks like, what the authentication
mechanism is etc. We do all of that for you. So looking at the Python script here, our entry point actually
was the main method, if you noticed, and it already
got an input of the HTTP request. This is the trigger
that we defined in the function raised
on file and it spits out a response or return value
that’s treated as an HTTP response. We already, in fact gave
it a root logo in Python. So you can go ahead and start
sending logs to the console when running locally and to application insights
when running in Azure. It also, since this is
a Hello World template, we simply grab a name parameter
on the query string and use it to construct an HTTP response that is
sent back from the function.>>You said that this was
a Hello World template, but when I go into
Azure Function in the portal, there’s a lot of different templates.>>Yes.>>There’s examples about how to
do all kinds of things including image manipulation or
calling cognitive services, or calling other Azure services.>>Right, exactly. You could start from
when I said this is a Hello World template for HTTP, we also have a few other
templates available for different events
sources and, in fact, I could go back and even say, hey, I’d like to add a new
function to the same project. That’s available. If you were looking for something a little
bit more complex, like an image processing. Example, we’ve got this thing called a Serverless library that gives you a bunch of samples that
the community has contributed, that we’ve contributed
to that you can already start using and leveraging.>>You had said something earlier
about a custom container?>>Yes. So the experience that I showed you right
here on the screen is, hey, I’m building
my Python script and that’s all I need to do to
publish a function.>>Right.>>But we also have
scenarios with Python, specifically, where folks
walk up to us and say, hey. I have a custom OS
level dependencies, something that doesn’t
necessarily have to be pip install but something that needs to be Apt-get installed
for instance, right? Or a scenario where I’m using
a custom distribution of Python, something like the Anaconda
distribution, maybe.>>Okay.>>Which you guys don’t support. You guys as an Azure, don’t
support out of the box. Can I bring in a custom Docker
container to support the scenarios? Now, the cool thing
with Python is that we actually introduce being able to bring in your custom Docker image and run it Serverlessly on the
Linux hosting platform.>>That is a moment where we need to pause and think about
that for a second, because I think of Serverless
is hiding computers for me, hiding service for me,
making life really easy. I think that Python is
a really high level language, but what you’re giving us is
the power of the low level, a native library, a custom container, a custom system call into Linux. But then, you’re still making it really convenient
and really flexible, and really scalable by using
the Functions run time in the Cloud.>>Exactly. So you get
the very same programming model. In fact, if you like I can show
you a demo of that as well.>>That’s good.>>Okay. Let’s switch over
from VS code for a second because I also do want to show
you our command line features. So if you didn’t use VS Code and you were more of a command line person,
and you said, hey, I’d like to use
the editor of my choice, or I’d like to use WIM, the same stuff that I was doing in VS code is also available in the CLI via a utility we call Func or the functions command line tools,
functions core tools. If you look at it, it lets you do all the same things that
we were doing in VS Code, in the CLI instead.>>Okay. So I can do the portal, VS Code or the command line?>>You cannot do portal
today, portal editing today. That’s because we heard
feedback from a lot of our Python developers and decided
to deprioritize it for now.>>That makes sense. I mean,
they’re going to spend their time with the command line
or VS code anyways. So you prioritize that
for this release.>>Exactly.>>Okay.>>So let’s go ahead and
use our command line now. Say, I already have directory, nothing in it right now. I’d like to create
a new function project. So I go ahead and click on “Func init” and it’ll prompt
me to pick a language, similar to how VS code did. I can go ahead and do that or let me just “Control C” out
of that for a second, and say, hey, I’d like to initiate
a project with a Docker file. So now, when I pick Python, what this is going to do is, not just populate
the simple function settings files for me but also
this Docker file, and if you look at
the Docker file right here, it’s already got a template where
it’s extending the functions, the Azure Functions base image, adding some console settings to it, going ahead and
setting the directory, and adding your function project, and pip install in your requirements. Now, I can go in here and say, hey, I’d like to apt-get install
the SQL driver, for instance, or I’d like to add
something that’s completely custom to my specific workload
right here in this Docker file. Once you customize it, you can go ahead and
build the Docker image. Before we do that,
one thing you’ve notice is, we’ve only initialized
the project right now. So let’s go ahead and also add
a function to that project.>>All right.>>So func new and we can go ahead, and this time maybe pick a
time a trigger function. Now, I’ve not only got my Docker file hosting local settings but also this time a trigger folder which
actually contains my function. I can go ahead and build the Docker container using the docker build command that
I’m already familiar with, and give it a name. So this is going to go
ahead and build a layers. Since I already had the same image
built on my local machine, it didn’t take a lot of time, since there was nothing custom
I was doing right now and now, I can go ahead, and push
this image to Docker Hub.>>When you push that to Docker Hub, will Azure Functions
pick it up and know that it’s something that can be used?>>Azure Functions won’t automatically
pick up but the ID or the identify you are going to use
is this image named right here.>>I see. So you’re
going to push it to Docker Hub then tell
functions about it, it’ll go get it and
then start running?>>Exactly. So once I
have this image ready, I’ll go to the portal and this is the management experience in the portal that you might
already be familiar with.>>All right.>>This is the new create blade for functions and if you go in here, give your Function app a name. You go ahead and pick a subscription, give it a resource group. So let’s give it
a resource group of Build demo. Pick Linux because we’re
running Python on Linux. You have an option of being able to pick either code or Docker image. What that means is, code, I’m simply bringing my Python files and I’d like to run
them serverlessly, or the Docker image approach, where I can actually go ahead, and configure the Container
that I’d like, should run my function.>>We’ve only got a few seconds left. So we’re going to have to go
and fast forward at this point. So you’re putting that into Docker Hub and you’re
going to go ahead, and enter in that tag,
and you hit “Apply”. It’ll pull that down and
immediately start running that now custom Docker image
in Azure Function?>>Exactly.>>Where can people learn about this new Python ability that we
have now an Azure Functions?>>Right. So all of our docs
talk about Python functions now. We’ve got two getting
started experiences. If you go to docs.Microsoft.com, you can start with
Visual Studio code or you can start with the CLI
and build a function, or if you wanted to do something
a little bit more custom, you could go dive into our Developer
Guide to learn more as well.>>Fantastic. We’re learning all
about Python and Azure Functions, and the power of Serverless, here
at Azure Friday Live, Advil. [MUSIC]

4 thoughts on “Azure Friday Live – Building serverless Python apps with Azure Functions | Azure Friday

Leave a Reply

Your email address will not be published. Required fields are marked *