Azure Python template

This commit is contained in:
Tanner Barlow 2019-10-11 15:55:16 -07:00
parent aba4e09c7b
commit faebd6f72b
No known key found for this signature in database
GPG Key ID: AF465F20FD4A848D
8 changed files with 307 additions and 0 deletions

View File

@ -0,0 +1,3 @@
# Azure Functions
Refer to [Serverless docs](https://serverless.com/framework/docs/providers/azure/guide/intro/) for more information.

View File

@ -0,0 +1,103 @@
# Logs
logs
*.log
npm-debug.log*
yarn-debug.log*
yarn-error.log*
lerna-debug.log*
# Diagnostic reports (https://nodejs.org/api/report.html)
report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json
# Runtime data
pids
*.pid
*.seed
*.pid.lock
# Directory for instrumented libs generated by jscoverage/JSCover
lib-cov
# Coverage directory used by tools like istanbul
coverage
# nyc test coverage
.nyc_output
# Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files)
.grunt
# Bower dependency directory (https://bower.io/)
bower_components
# node-waf configuration
.lock-wscript
# Compiled binary addons (https://nodejs.org/api/addons.html)
build/Release
# Dependency directories
node_modules/
jspm_packages/
# TypeScript v1 declaration files
typings/
# Optional npm cache directory
.npm
# Optional eslint cache
.eslintcache
# Optional REPL history
.node_repl_history
# Output of 'npm pack'
*.tgz
# Yarn Integrity file
.yarn-integrity
# dotenv environment variables file
.env
.env.test
# parcel-bundler cache (https://parceljs.org/)
.cache
# next.js build output
.next
# nuxt.js build output
.nuxt
# vuepress build output
.vuepress/dist
# Serverless directories
.serverless/
# FuseBox cache
.fusebox/
# DynamoDB Local files
.dynamodb/
# TypeScript output
dist
out
# Azure Functions artifacts
bin
obj
appsettings.json
local.settings.json
.python_packages/
# Python
__pycache__/
# Virtual Environments
env/
.env/
.venv/

View File

@ -0,0 +1,3 @@
{
"version": "2.0"
}

View File

@ -0,0 +1,2 @@
azure.functions
azure-functions-worker

View File

@ -0,0 +1,148 @@
# Welcome to Serverless!
#
# This file is the main config file for your service.
# It's very minimal at this point and uses default values.
# You can always add more config options for more control.
# We've included some commented out config examples here.
# Just uncomment any of them to get that config option.
#
# For full config options, check the docs:
# docs.serverless.com
#
# Happy Coding!
service: tabarlow-azure-python # NOTE: update this with your service name
# You can pin your service to only deploy with a specific Serverless version
# Check out our docs for more details
# frameworkVersion: "=X.X.X"
provider:
name: azure
region: West Europe
runtime: python3.6
# prefix: "sample" # prefix of generated resource name
# subscriptionId: A356AC8C-E310-44F4-BF85-C7F29044AF99
# stage: dev
# type: premium # premium azure functions
environment: # these will be created as application settings
VARIABLE_FOO: 'foo'
# you can define apim configuration here
# apim:
# apis:
# - name: v1
# subscriptionRequired: false # if true must provide an api key
# displayName: v1
# description: V1 sample app APIs
# protocols:
# - https
# path: v1
# tags:
# - tag1
# - tag2
# authorization: none
# cors:
# allowCredentials: false
# allowedOrigins:
# - "*"
# allowedMethods:
# - GET
# - POST
# - PUT
# - DELETE
# - PATCH
# allowedHeaders:
# - "*"
# exposeHeaders:
# - "*"
plugins: # look for additional plugins in the community plugins repo: https://github.com/serverless/plugins
- serverless-azure-functions
# you can add packaging information here
package:
# include:
# - include-me.py
# - include-me-dir/**
exclude:
- env/**
- .env/**
# # - exclude-me.py
# # - exclude-me-dir/**
# - local.settings.json
# - .vscode/**
# - node_modules/**
# - .gitignore
# - .git/**
# - env/**
# - package.json
# - package-lock.json
functions:
hello:
handler: src/handlers/hello.main
events:
- http: true
x-azure-settings:
methods:
- GET
authLevel: anonymous
goodbye:
handler: src/handlers/goodbye.main
events:
- http: true
x-azure-settings:
methods:
- GET
authLevel: anonymous
# The following are a few examples of other events you can configure:
# storageBlob:
# handler: src/handlers/storageBlob
# events:
# - blob:
# x-azure-settings:
# name: blob # Specifies which name is available on `context`
# path: blob-sample/{blobName}
# connection: AzureWebJobsStorage # App Setting/environment variable which contains Storage Account Connection String
# storageQueue:
# handler: src/handlers/storageQueue
# events:
# - queue: queue-sample
# x-azure-settings:
# name: message # Specifies which naem is available on `context`
# connection: AzureWebJobsStorage
# timer:
# handler: src/handlers/timer
# events:
# - timer:
# x-azure-settings:
# schedule: '*/10 * * * * *'
# eventhub:
# handler: src/handlers/eventHub
# events:
# - eventHub:
# x-azure-settings:
# name: eventHubMessages # Specifies which name it's available on `context`
# eventHubName: sample-hub # Specifies the Name of the Event Hub
# consumerGroup: $Default # Specifies the consumerGroup to listen with
# connection: EVENT_HUBS_CONNECTION # App Setting/environment variable which contains Event Hubs Namespace Connection String
# serviceBusQueue:
# handler: src/handlers/serviceBusQueue
# events:
# - serviceBus:
# x-azure-settings:
# name: message # Specifies which name is available on `context`
# queueName: sample-queue # Name of the service bus queue to consume
# connection: SERVICE_BUS_CONNECTION # App Setting/environment variable variable which contains Service Bus Namespace Connection String
# serviceBusTopic:
# handler: src/handlers/serviceBusTopic
# events:
# - serviceBus:
# x-azure-settings:
# name: message # Specifies which name it's available on `context`
# topicName: sample-topic # Name of the service bus topic to consume
# subscriptionName: sample-subscription # Name of the topic subscription to retrieve from
# connection: SERVICE_BUS_CONNECTION # App Setting/environment variable variable which contains Service Bus Namespace Connection String

View File

@ -0,0 +1,24 @@
import logging
import azure.functions as func
def main(req: func.HttpRequest) -> func.HttpResponse:
logging.info('Python HTTP trigger function processed a request.')
name = req.params.get('name')
if not name:
try:
req_body = req.get_json()
except ValueError:
pass
else:
name = req_body.get('name')
if name:
return func.HttpResponse(f'Goodbye {name}!')
else:
return func.HttpResponse(
"Please pass a name on the query string or in the request body",
status_code=400
)

View File

@ -0,0 +1,24 @@
import logging
import azure.functions as func
def main(req: func.HttpRequest) -> func.HttpResponse:
logging.info('Python HTTP trigger function processed a request.')
name = req.params.get('name')
if not name:
try:
req_body = req.get_json()
except ValueError:
pass
else:
name = req_body.get('name')
if name:
return func.HttpResponse(f"Hello {name}!")
else:
return func.HttpResponse(
"Please pass a name on the query string or in the request body",
status_code=400
)