From ae586764b1e0040e94bb3bb9195a94dc9f7f103d Mon Sep 17 00:00:00 2001 From: Tushar Shah Date: Fri, 10 Jan 2025 16:47:50 -0500 Subject: [PATCH] Added azure native function app in python (#1002) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Added azure native function app in python ``` Type Name Status + pulumi:pulumi:Stack azure-py-functions-dev created + ├─ azure-native:resources:ResourceGroup resourcegroup_functions_py created + ├─ azure-native:web:AppServicePlan consumption-plan created + ├─ azure-native:storage:StorageAccount storageaccount created + └─ azure-native:web:WebApp functionapp created Outputs: consumptionplan : "consumption-plan2e4262cf" endpoint : "https://functionappd8d431c1.azurewebsites.net/api/HelloWithPython" function_app : "functionappd8d431c1" primarystoragekey : "[secret]" resourcegroup : "resourcegroup_functions_pyb8aff58c" storageaccount : "storageaccount6a453652" storageaccountkeys : "[secret]" storageconnectionstring: "[secret]" ``` curl "$(pulumi stack output endpoint)" Hello from Python in Pulumi! You have stood up a serverless function in Azure! --------- Co-authored-by: Richard Shade --- azure-py-functions/.gitignore | 2 + azure-py-functions/.vscode/settings.json | 3 + azure-py-functions/Pulumi.yaml | 6 + azure-py-functions/README.md | 182 ++++++++++++++++ azure-py-functions/__main__.py | 90 ++++++++ azure-py-functions/app/HelloWithPython.zip | Bin 0 -> 2145 bytes .../app/HelloWithPython/__init__.py | 10 + .../app/HelloWithPython/function.json | 20 ++ azure-py-functions/app/README.md | 202 ++++++++++++++++++ azure-py-functions/app/host.json | 7 + ...ion_uploaded_to_azure_function_via_cli.png | Bin 0 -> 71374 bytes azure-py-functions/app/local.settings.json | 7 + azure-py-functions/app/requirements.txt | 3 + azure-py-functions/requirements.txt | 2 + 14 files changed, 534 insertions(+) create mode 100644 azure-py-functions/.gitignore create mode 100644 azure-py-functions/.vscode/settings.json create mode 100644 azure-py-functions/Pulumi.yaml create mode 100644 azure-py-functions/README.md create mode 100644 azure-py-functions/__main__.py create mode 100644 azure-py-functions/app/HelloWithPython.zip create mode 100644 azure-py-functions/app/HelloWithPython/__init__.py create mode 100644 azure-py-functions/app/HelloWithPython/function.json create mode 100644 azure-py-functions/app/README.md create mode 100644 azure-py-functions/app/host.json create mode 100644 azure-py-functions/app/images/python_function_uploaded_to_azure_function_via_cli.png create mode 100644 azure-py-functions/app/local.settings.json create mode 100644 azure-py-functions/app/requirements.txt create mode 100644 azure-py-functions/requirements.txt diff --git a/azure-py-functions/.gitignore b/azure-py-functions/.gitignore new file mode 100644 index 000000000..a3807e5bd --- /dev/null +++ b/azure-py-functions/.gitignore @@ -0,0 +1,2 @@ +*.pyc +venv/ diff --git a/azure-py-functions/.vscode/settings.json b/azure-py-functions/.vscode/settings.json new file mode 100644 index 000000000..5b80df368 --- /dev/null +++ b/azure-py-functions/.vscode/settings.json @@ -0,0 +1,3 @@ +{ + "python.pythonPath": "venv/bin/python" +} \ No newline at end of file diff --git a/azure-py-functions/Pulumi.yaml b/azure-py-functions/Pulumi.yaml new file mode 100644 index 000000000..bcb077e1d --- /dev/null +++ b/azure-py-functions/Pulumi.yaml @@ -0,0 +1,6 @@ +name: azure-py-functions +runtime: + name: python + options: + virtualenv: venv +description: A minimal Azure Native Function in Python with Pulumi program diff --git a/azure-py-functions/README.md b/azure-py-functions/README.md new file mode 100644 index 000000000..03d264e13 --- /dev/null +++ b/azure-py-functions/README.md @@ -0,0 +1,182 @@ +# Deploying Serverless Applications with Azure Functions + +You will deploy a Azure Function Apps with HTTP-triggered serverless functions in python + +## Running the App + +1. Login to Azure CLI (you will be prompted to do this during deployment if you forget this step): + + ``` + $ az login + ``` + +1. Create a new stack: + + ``` + $ pulumi stack init dev + ``` + + +1. Create a virtual environment and install python dependencies + + ### Windows + Run the following command to create a virtual environment + ```bash + python -m venv venv + ``` + + Activate the environment: + ```bash + venv\Scripts\activate + ``` + + Install dependencies: + ```bash + pip3 install -r requirements.txt + ``` + ### Mac and Linux + Run the following command to create a virtual environment + ```bash + python3 -m venv venv + ``` + + Activate the environment: + ```bash + source venv/bin/activate + ``` + + Install dependencies: + ```bash + pip3 install -r requirements.txt + ``` + + At this point, dependencies will be installed into your virtual environment. **If you close your terminal at any time**, you may need to re-activate the environment: + ```bash + source venv/bin/activate + ``` + +1. Configure the location to deploy the resources to. The Azure region to deploy to is pre-set to **WestUS** - but you can modify the region you would like to deploy to. + + ```bash + pulumi config set azure-native:location eastus2 + ``` + + [pulumi config set](https://www.pulumi.com/docs/reference/cli/pulumi_config_set/) allows us to pass in [configuration values](https://www.pulumi.com/docs/intro/concepts/config/#setting-and-getting-configuration-values) from the command line. + Feel free to choose any Azure region that supports the services used in these labs ([see this infographic](https://azure.microsoft.com/en-us/global-infrastructure/regions/) for current list of available regions). A list of some of the regions: + + ``` + centralus,eastasia,southeastasia,eastus,eastus2,westus,westus2,northcentralus,southcentralus, + westcentralus,northeurope,westeurope,japaneast,japanwest,brazilsouth,australiasoutheast,australiaeast, + westindia,southindia,centralindia,canadacentral,canadaeast,uksouth,ukwest,koreacentral,koreasouth, + francecentral,southafricanorth,uaenorth,australiacentral,switzerlandnorth,germanywestcentral, + norwayeast,jioindiawest,australiacentral2 + ``` + + The command updates and persists the value to the local `Pulumi.dev.yaml` file. You can view or edit this file at any time to effect the configuration of the current stack. + +1. Azure Python Function Zip file + The applications settings configure the app to run on Python3 deploy the specified zip file to the Function App. The app will download the specified file, extract the code from it, discover the functions, and run them. We’ve prepared this [zip](https://github.com/tusharshahrs/demo/blob/main/content/lab/pulumi/azure-native/python/app/HelloWithPython.zip) file for you to get started faster, you can find its code [here](https://github.com/tusharshahrs/demo/tree/main/content/lab/pulumi/azure-native/python/app). The code contains a single HTTP-triggered Azure Function. + +1. Run `pulumi up` to preview and select `yes` to deploy changes: + + ``` + $ pulumi up + Previewing update (dev) + + View Live: https://app.pulumi.com/myuser/azure-py-functions/dev/previews/f3ea-2esdff2-123d-e79d + + Type Name Plan + + pulumi:pulumi:Stack azure-py-functions-dev create + + ├─ azure-native:resources:ResourceGroup resourcegroup_functions_py create + + ├─ azure-native:web:AppServicePlan consumption-plan create + + ├─ azure-native:storage:StorageAccount storageaccount create + + └─ azure-native:web:WebApp functionapp create + + Resources: + + 5 to create + + Do you want to perform this update? [Use arrows to move, enter to select, type to filter] + > yes + no + details + + Updating (dev) + + View Live: https://app.pulumi.com/myuser/azure-py-functions/dev/updates/1 + + Type Name Status + + pulumi:pulumi:Stack azure-py-functions-dev created + + ├─ azure-native:resources:ResourceGroup resourcegroup_functions_py created + + ├─ azure-native:web:AppServicePlan consumption-plan created + + ├─ azure-native:storage:StorageAccount storageaccount created + + └─ azure-native:web:WebApp functionapp created + + Outputs: + consumptionplan : "consumption-plan7b9df5ed" + endpoint : "https://functionappfe054af4.azurewebsites.net/api/HelloWithPython" + function_app : "functionappfe054af4" + primarystoragekey : "[secret]" + resourcegroup : "resourcegroup_functions_py4eba2bf2" + storageaccount : "storageaccounta6b2e431" + storageaccountkeys : "[secret]" + storageconnectionstring: "[secret]" + + Resources: + + 5 created + + Duration: 50s + ``` + +1. Check the deployed function endpoints via [pulumi stack output](https://www.pulumi.com/docs/reference/cli/pulumi_stack_output/) + + ``` + $ pulumi stack output endpoint + https://functionappfe054af4.azurewebsites.net/api/HelloWithPython + +1. You can now open the resulting endpoint in the browser or curl it: + ``` + $ curl "$(pulumi stack output endpoint)" + Hello from Python in Pulumi! You have stood up a serverless function in Azure! + ``` + +## Cleanup and destroy everything + +1. Destroy the stack via: `pulumi destroy` .Select `yes` + ``` + Previewing destroy (dev) + + Type Name Plan + - pulumi:pulumi:Stack azure-py-functions-dev delete + - ├─ azure-native:web:WebApp functionapp delete + .. + .. + + Outputs: + - endpoint : "https://functionappfe054af4.azurewebsites.net/api/HelloWithPython" + .. + .. + + Resources: + - 5 to delete + + Do you want to perform this destroy? [Use arrows to move, enter to select, type to filter] + yes + > no + details + .. + .. + Resources: + - 5 deleted + + Duration: 1m1s + ``` + +1. Remove the stack + + ``` + pulumi stack rm + This will permanently remove the 'dev' stack! + Please confirm that this is what you'd like to do by typing ("dev"): + ``` + + Type in the name of your stack: **dev** \ No newline at end of file diff --git a/azure-py-functions/__main__.py b/azure-py-functions/__main__.py new file mode 100644 index 000000000..8bbf5646b --- /dev/null +++ b/azure-py-functions/__main__.py @@ -0,0 +1,90 @@ +import pulumi +from pulumi_azure_native import resources +from pulumi_azure_native import storage +from pulumi_azure_native import web +from pulumi import Output + +# Create an Azure Resource Group +resource_group = resources.ResourceGroup('resourcegroup_functions_py') + +# Create a Storage Account +account = storage.StorageAccount( + 'storageaccount', + resource_group_name=resource_group.name, + sku=storage.SkuArgs( + name=storage.SkuName.STANDARD_LRS, + ), + kind=storage.Kind.STORAGE_V2, +) + +# Create a consumption plan +# Consumption plan must be linux for python: https://docs.microsoft.com/en-us/azure/azure-functions/functions-scale#operating-systemruntime +plan = web.AppServicePlan( + "consumption-plan", + resource_group_name=resource_group.name, + location=resource_group.location, + kind="functionapp", + reserved=True, # This is an Azure Requirement for PYTHON. The function can only run on Linux. + sku=web.SkuDescriptionArgs(name="Y1", tier="Dynamic", size="Y1", family="Y", capacity=0), +) + +# Export the Azure Resource Group +pulumi.export('resourcegroup', resource_group.name) + +# Export the Storage Account +pulumi.export('storageaccount', account.name) + +# Export the Consumption Plan +pulumi.export('consumptionplan', plan.name) + +# List of storage account keys +storageAccountKeys = pulumi.Output.all(resource_group.name, account.name).apply( + lambda args: storage.list_storage_account_keys( + resource_group_name=args[0], account_name=args[1] + ) +) +# Primary storage account key +primaryStorageKey = storageAccountKeys.apply(lambda accountKeys: accountKeys.keys[0].value) +# Build a storage connection string out of it: +storageConnectionString = Output.concat( + "DefaultEndpointsProtocol=https;AccountName=", account.name, ";AccountKey=", primaryStorageKey +) + + +# Export the storageacountkey as a secret +pulumi.export("storageaccountkeys", pulumi.Output.secret(storageAccountKeys)) +# Export the primarystoragekey as a secret +pulumi.export('primarystoragekey', pulumi.Output.secret(primaryStorageKey)) +# Export the storageconnectionstring as a secret +pulumi.export('storageconnectionstring', pulumi.Output.secret(storageConnectionString)) + +# Create the functionapp +app = web.WebApp( + "functionapp", + resource_group_name=resource_group.name, + location=resource_group.location, + kind="functionapp", + reserved=True, + server_farm_id=plan.id, + site_config=web.SiteConfigArgs( + app_settings=[ + web.NameValuePairArgs(name="runtime", value="python"), + web.NameValuePairArgs(name="FUNCTIONS_WORKER_RUNTIME", value="python"), + web.NameValuePairArgs(name="FUNCTIONS_EXTENSION_VERSION", value="~3"), + web.NameValuePairArgs(name="AzureWebJobsStorage", value=storageConnectionString), + web.NameValuePairArgs( + name="WEBSITE_RUN_FROM_PACKAGE", + value="https://github.com/pulumi/examples/raw/master/azure-py-functions/app/HelloWithPython.zip", + ), + ], + ), +) + +# Export the function +pulumi.export('function_app', app.name) + +# Full endpoint of your Function App +function_endpoint = app.default_host_name.apply( + lambda default_host_name: f"https://{default_host_name}/api/HelloWithPython" +) +pulumi.export('endpoint', function_endpoint) diff --git a/azure-py-functions/app/HelloWithPython.zip b/azure-py-functions/app/HelloWithPython.zip new file mode 100644 index 0000000000000000000000000000000000000000..4cedbee773c15ea4bfead062645583b46c450111 GIT binary patch literal 2145 zcmWIWW@Zs#0D;?0tAfA`C?UY0z~GUZlan8wS&|V@S(1^Trym-^%fK!_ZDvCKi&+Wh z7S2p4t>9*0WckX-zyLNS0Bjlu0|!Gw^J=(h)<9`lET*NE<|UV8=I7~U73b%Hjh+HD z)(&Vqh(yKlJ>aTNdBGz4lz$1=in(3g55xL}PdxZ_YoUzpiQmee@0(ss-!o;e z+5J{~?!TFj7X1mkY2=Yo)wX`N%zitD0B?4VHBttjmH>kgmNn0Su1#cwa|n z|KJFH^ibA|#~w0gfuRDzXd#oFAex+>kd*Mj*C*@)e^^IA1JeWvW_1B+#zI+v<{#1$ z9ZY?SijDzl9>lIYOQw}J4K`98$ z6R8t6W*s&VXe)2N|ImNh4d*`$l3aIfW=&YSxWm88;hN_1;02YxPL+Cb?|obM@3)=B zeibp-gy%ISxtGoAyw7ar;N5m)byc6FT5{|)x7%k@HcH4_FZ}(|THfty$+GH&Yi#@S z>krS-YVgZ#w$i`+VDZy;2DPtxm5-fHZR#rTW3l&Bd8qx=$CxL@nZLd6Fh}OZANMca z{Oh4;u;xRP_&s+Y)hS2ce>li${#hXNIAyiaq1V z)u152dZBjtj|;b)SuWbL1|0s^$Wb+yi&IUl?!D8T5Falj?U&ZS{fmON{8 znd|jAs3@qh=&D2F0+%!{kGc72MS*pNby1!3l0!2CSIvvgj4R>{DBUvYs^-lOW8T}Tq13ffo=o258-m;ur3A42m@W7lb@WJqgR|- zQj(dMUX1VqD7Zms@dOS(e9|d9>#es+N5j)Ma8rs#2}u|IL!RKrf=ivE$y*F{%2tz584McLlplYP;pjjOh3nA(`0)V5z~ zu|s9QhM}$K5)V#|=+mLxV4oaU@P3#HbSucc0p5&EBFwmpW1tc+c func.HttpResponse: + logging.info('Python HTTP trigger function processed a request.') + return func.HttpResponse( + f"Hello from Python in Pulumi! You have stood up a serverless function in Azure!" + ) diff --git a/azure-py-functions/app/HelloWithPython/function.json b/azure-py-functions/app/HelloWithPython/function.json new file mode 100644 index 000000000..4667f0aca --- /dev/null +++ b/azure-py-functions/app/HelloWithPython/function.json @@ -0,0 +1,20 @@ +{ + "scriptFile": "__init__.py", + "bindings": [ + { + "authLevel": "anonymous", + "type": "httpTrigger", + "direction": "in", + "name": "req", + "methods": [ + "get", + "post" + ] + }, + { + "type": "http", + "direction": "out", + "name": "$return" + } + ] +} \ No newline at end of file diff --git a/azure-py-functions/app/README.md b/azure-py-functions/app/README.md new file mode 100644 index 000000000..4ed3cd22c --- /dev/null +++ b/azure-py-functions/app/README.md @@ -0,0 +1,202 @@ + +# Azure Function App Python + +Use command-line tools to create a Python function that responds to HTTP requests. +After testing the code locally, you deploy it to the serverless environment of Azure Functions. +This is informational. You can skip this entire thing if you already have working `python code`. + +# Why do this step? +To make sure that you build a function that works + +# Based on the following guide from MS +[Create a Python function in Azure from the command line](https://docs.microsoft.com/en-us/azure/azure-functions/create-first-function-cli-python?tabs=azure-cli%2Cbash%2Cbrowser) + +## Installation Prereq + +[Install the Azure Functions Core Tools](https://docs.microsoft.com/en-us/azure/azure-functions/functions-run-local?tabs=macos%2Ccsharp%2Cbash#install-the-azure-functions-core-tools) + +Example steps for a mac: + +``` +brew tap azure/functions +brew install azure-functions-core-tools@3 +# if upgrading on a machine that has 2.x installed +brew link --overwrite azure-functions-core-tools@3 +``` + +# Create a Function Project +[Create a local Functions project](https://docs.microsoft.com/en-us/azure/azure-functions/functions-run-local?tabs=macos%2Ccsharp%2Cbash#create-a-local-functions-project) + +1. Create this in subdirectory of where your pulumi project is. For Example. + ``` + cd azure-function-workshop (where the Pulumi.yaml, **`__main__.py`**, etc are located. ) + mkdir app + cd app + + ``` + +1. Create an Azure Functions project + In the terminal window or from a command prompt, navigate to an empty folder for your project, and run the following command: + ``` + func init + ``` + You will also be prompted to choose a runtime for the project. Select **python**. + +1. Select a worker runtime + ``` + Select a number for worker runtime: + 1. dotnet + 2. dotnet (isolated process) + 3. node + 4. python + 5. java + 6. powershell + 7. custom + Choose option: 4 + ``` + Choose option: **4. python** + + Output: + + ``` + python + Found Python version 3.7.3 (python3). + Writing requirements.txt + Writing .gitignore + Writing host.json + Writing local.settings.json + ``` + +1. [Create a function](https://docs.microsoft.com/en-us/azure/azure-functions/functions-run-local?tabs=macos%2Ccsharp%2Cbash#create-func). + To create a function, run the following command: + + ``` + func new + ``` + + You will also be prompted to choose a runtime for the project. Select **9. HTTP trigger**. + + ``` + Select a number for template: + 1. Azure Blob Storage trigger + 2. Azure Cosmos DB trigger + 3. Durable Functions activity + 4. Durable Functions entity + 5. Durable Functions HTTP starter + 6. Durable Functions orchestrator + 7. Azure Event Grid trigger + 8. Azure Event Hub trigger + 9. HTTP trigger + 10. Azure Queue Storage trigger + 11. RabbitMQ trigger + 12. Azure Service Bus Queue trigger + 13. Azure Service Bus Topic trigger + 14. Timer trigger + + ``` + **Choose option: 9** + + Next you will have to name your function. The default name is: `HttpTrigger`. + Here we entered **HelloWorld** + + + `HTTP trigger` + + `Function name: [HttpTrigger]` **HelloWorld** + + Output: + + ``` + The function "HelloWorld" was created successfully from the "HTTP trigger" template. + ``` + +1. Verify that the function and all the files were created. + + `azure-function-workshop/app#> ls` + + ``` + HelloWorld(This is a directory) host.json local.settings.json requirements.txt + ``` + + `cd HelloWorld` + + `azure-function-workshop/app/HelloWorld#>ls -a` + + ``` + __init__.py function.json + ``` + +1. Change the `anonymous` user in the **`function.json`** + + This is because `Unless the HTTP access level on an HTTP triggered function is set to anonymous, requests must include an API access key in the request` as per + [Function access keys](https://docs.microsoft.com/en-us/azure/azure-functions/security-concepts#function-access-keys). + + Before: + ``` + "authLevel": "function", + + ``` + + After + ``` + "authLevel": "anonymous", + + ``` + +1. Update the **`__init__.py__`** (Optional) + This the file where your python code that you want. + You can keep what you have. We changed ours to simplify the output to + ``` + import logging + import azure.functions as func + + def main(req: func.HttpRequest) -> func.HttpResponse: + logging.info('Python HTTP trigger function processed a request.') + return func.HttpResponse(f"Hello from Python in Pulumi! You have stood up a serverless function in Azure!") + ``` + + +## Deploy your code to Azure via azure cli + +1. You need the function name. The name doesn't exist yet + because you haven't created it. + +1. comment out the following line in `__main__.py__` from your code from the section where the **web.WebApp** is: + + ``` + app = web.WebApp("functionapp", + ... + ... + #web.NameValuePairArgs(name= "WEBSITE_RUN_FROM_PACKAGE", value="https://github.com/..." <- THIS IS THE LINE TO COMMENT OUT + .. + .. + ) + ``` + +1. Deploy the Pulumi stack via `pulumi up -y` + +1. Find the function name via `pulumi stack output` or via checking the azure console + +1. To publish your Functions project into Azure, enter the following command: + + `azure-function-workshop/app#> func azure functionapp publish` **functionappe7f5313d** + +1. Check the azure console and view that the python code shows up inside he. + + Add + +## Clean Up +1. Azure does not allow you edit/delete python functions via the console. + Destroy the stack: `pulumi destroy -y` + +1. Update the ```__main__.py``` to external URL. + ``` + app = web.WebApp("functionapp", + ... + ... + web.NameValuePairArgs(name= "WEBSITE_RUN_FROM_PACKAGE", value="https://github.com/..." <- PUT THIS BACK IN + .. + .. + ) + ``` +1. Return back to your original steps to continue. \ No newline at end of file diff --git a/azure-py-functions/app/host.json b/azure-py-functions/app/host.json new file mode 100644 index 000000000..506376e88 --- /dev/null +++ b/azure-py-functions/app/host.json @@ -0,0 +1,7 @@ +{ + "version": "2.0", + "extensionBundle": { + "id": "Microsoft.Azure.Functions.ExtensionBundle", + "version": "[2.*, 3.0.0)" + } +} \ No newline at end of file diff --git a/azure-py-functions/app/images/python_function_uploaded_to_azure_function_via_cli.png b/azure-py-functions/app/images/python_function_uploaded_to_azure_function_via_cli.png new file mode 100644 index 0000000000000000000000000000000000000000..d19027dad91bd9f716548fb4016eb01f43f7e3ed GIT binary patch literal 71374 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 literal 0 HcmV?d00001 diff --git a/azure-py-functions/app/local.settings.json b/azure-py-functions/app/local.settings.json new file mode 100644 index 000000000..f5f7783b5 --- /dev/null +++ b/azure-py-functions/app/local.settings.json @@ -0,0 +1,7 @@ +{ + "IsEncrypted": false, + "Values": { + "FUNCTIONS_WORKER_RUNTIME": "python", + "AzureWebJobsStorage": "" + } +} \ No newline at end of file diff --git a/azure-py-functions/app/requirements.txt b/azure-py-functions/app/requirements.txt new file mode 100644 index 000000000..6bb1e59d0 --- /dev/null +++ b/azure-py-functions/app/requirements.txt @@ -0,0 +1,3 @@ +# Do not include azure-functions-worker as it may conflict with the Azure Functions platform + +azure-functions \ No newline at end of file diff --git a/azure-py-functions/requirements.txt b/azure-py-functions/requirements.txt new file mode 100644 index 000000000..d1109fefc --- /dev/null +++ b/azure-py-functions/requirements.txt @@ -0,0 +1,2 @@ +pulumi>=3.2.0,<4.0.0 +pulumi-azure-native>=1.5.0,<2.0.0 \ No newline at end of file