Skip to content

Commit

Permalink
Merge pull request #72 from Azure-Samples/refresh-functions-v3
Browse files Browse the repository at this point in the history
Upgrade functions to v3
  • Loading branch information
DanielLarsenNZ authored Jan 11, 2022
2 parents cec98b9 + 18f424d commit a063e1d
Show file tree
Hide file tree
Showing 77 changed files with 26,466 additions and 10,332 deletions.
8 changes: 7 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/Docs/*
#.vscode/
.vscode/

# Exclude temporary files:
*.tmp
Expand All @@ -17,3 +17,9 @@

# Build temp package lock
pipelines/package-lock.json

bicep/parameters.local.json
local.settings.json
test/settings.example.dan.js

__azurite__
9 changes: 8 additions & 1 deletion .vscode/settings.json
Original file line number Diff line number Diff line change
Expand Up @@ -2,5 +2,12 @@
"azureFunctions.projectRuntime": "~1",
"azureFunctions.projectLanguage": "JavaScript",
"appService.zipIgnorePattern": ["node_modules{,/**}"],
"appService.deploySubpath": "serverless-microservices-web"
"appService.deploySubpath": "serverless-microservices-web",
"WhiteSource Advise.Diff.BaseBranch": "main",
"markdownlint.config": {
"MD028": false,
"MD025": {
"front_matter_title": ""
}
}
}
79 changes: 43 additions & 36 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,12 @@ description: "This architecture walks you through the process involved in develo

# Serverless Microservices reference architecture

[![.NET](https://github.com/Azure-Samples/Serverless-microservices-reference-architecture/actions/workflows/dotnet.yml/badge.svg)](https://github.com/Azure-Samples/Serverless-microservices-reference-architecture/actions/workflows/dotnet.yml)
[![Node.js CI](https://github.com/Azure-Samples/Serverless-microservices-reference-architecture/actions/workflows/nodejs.yml/badge.svg)](https://github.com/Azure-Samples/Serverless-microservices-reference-architecture/actions/workflows/nodejs.yml)
[![spa build](https://github.com/Azure-Samples/Serverless-microservices-reference-architecture/actions/workflows/spa.yml/badge.svg)](https://github.com/Azure-Samples/Serverless-microservices-reference-architecture/actions/workflows/spa.yml)

> This sample has been upgraded to Azure Functions v3. An upgrade to Azure Functions v4 is in progress. See [PR #43](https://github.com/Azure-Samples/Serverless-microservices-reference-architecture/pull/43) for details.
## The reference architecture

![RideShare Macro Architecture](documentation/media/macro-architecture.png)
Expand All @@ -34,48 +40,49 @@ During their initial research phase consisting of comparing serverless offerings

## Explore Relecloud's solution using serverless and microservices

[Read about Relecloud's solution](https://github.com/Azure-Samples/Serverless-microservices-reference-architecture/blob/master/documentation/introduction.md) and overall architecture design and decisions. The article will briefly explain the concepts around both serverless and microservices, and how they can be used together to build solutions with little to no infrastructure overhead. It will then walk you through the sample solution you will deploy in the lab, broken down into its architectural components.
[Read about Relecloud's solution](/documentation/introduction.md) and overall architecture design and decisions. The article will briefly explain the concepts around both serverless and microservices, and how they can be used together to build solutions with little to no infrastructure overhead. It will then walk you through the sample solution you will deploy in the lab, broken down into its architectural components.

## Deploy Relecloud's solution today with a hands-on lab

After learning about Relecloud's [serverless microservices architecture](https://github.com/Azure-Samples/Serverless-microservices-reference-architecture/blob/master/documentation/introduction.md), deploy the companion solution by following the step-by-step [hands-on lab](https://github.com/Azure-Samples/Serverless-microservices-reference-architecture/blob/master/documentation/setup.md), or take the shortcut and deploy with a few clicks [using our templates](https://github.com/Azure-Samples/Serverless-microservices-reference-architecture/blob/master/documentation/setup.md#cake-provision).
After learning about Relecloud's [serverless microservices architecture](/documentation/introduction.md), deploy the companion solution by following the step-by-step [hands-on lab](/documentation/setup.md), or take the shortcut and deploy with a few clicks [using our templates](/documentation/setup.md#cake-provision).

Each section of the lab will briefly explain what you are trying to accomplish and why. It will also link you to the relative portion of the [architecture document](https://github.com/Azure-Samples/Serverless-microservices-reference-architecture/blob/master/documentation/introduction.md).
Each section of the lab will briefly explain what you are trying to accomplish and why. It will also link you to the relative portion of the [architecture document](/documentation/introduction.md).

## Detailed documentation

Use the table of contents below for detailed documentation of each component of the reference architecture.

- [Introduction to serverless microservices](https://github.com/Azure-Samples/Serverless-microservices-reference-architecture/blob/master/documentation/introduction.md)
- [What are microservices?](https://github.com/Azure-Samples/Serverless-microservices-reference-architecture/blob/master/documentation/introduction.md#what-are-microservices)
- [What is serverless?](https://github.com/Azure-Samples/Serverless-microservices-reference-architecture/blob/master/documentation/introduction.md#what-is-serverless)
- [Architecture overview](https://github.com/Azure-Samples/Serverless-microservices-reference-architecture/blob/master/documentation/architecture-overview.md)
- [Macro architecture](https://github.com/Azure-Samples/Serverless-microservices-reference-architecture/blob/master/documentation/architecture-overview.md#macro-architecture)
- [Data flow](https://github.com/Azure-Samples/Serverless-microservices-reference-architecture/blob/master/documentation/architecture-overview.md#data-flow)
- [Initial setup](https://github.com/Azure-Samples/Serverless-microservices-reference-architecture/blob/master/documentation/setup.md)
- [API endpoints using Azure Functions](https://github.com/Azure-Samples/Serverless-microservices-reference-architecture/blob/master/documentation/api-endpoints.md)
- [RideShare APIs](https://github.com/Azure-Samples/Serverless-microservices-reference-architecture/blob/master/documentation/api-endpoints.md#rideshare-apis)
- [Durable Orchestrators](https://github.com/Azure-Samples/Serverless-microservices-reference-architecture/blob/master/documentation/api-endpoints.md#durable-orchestrators)
- [Services intercommunication using Event Grid](https://github.com/Azure-Samples/Serverless-microservices-reference-architecture/blob/master/documentation/services-intercommunication.md)
- [Logic App handler](https://github.com/Azure-Samples/Serverless-microservices-reference-architecture/blob/master/documentation/services-intercommunication.md#logic-app-handler)
- [SignalR handler](https://github.com/Azure-Samples/Serverless-microservices-reference-architecture/blob/master/documentation/services-intercommunication.md#signalr-handler)
- [.NET SignalR client](https://github.com/Azure-Samples/Serverless-microservices-reference-architecture/blob/master/documentation/services-intercommunication.md#dotnet-signalr-client)
- [JavaScript SignalR client](https://github.com/Azure-Samples/Serverless-microservices-reference-architecture/blob/master/documentation/services-intercommunication.md#javascript-signalr-client)
- [Power BI handler](https://github.com/Azure-Samples/Serverless-microservices-reference-architecture/blob/master/documentation/services-intercommunication.md#power-bi-handler)
- [Trip Archiver handler](https://github.com/Azure-Samples/Serverless-microservices-reference-architecture/blob/master/documentation/services-intercommunication.md#trip-archiver-handler)
- [Gateway with API Management](https://github.com/Azure-Samples/Serverless-microservices-reference-architecture/blob/master/documentation/api-management.md)
- [Data storage](https://github.com/Azure-Samples/Serverless-microservices-reference-architecture/blob/master/documentation/data-storage.md)
- [Client application](https://github.com/Azure-Samples/Serverless-microservices-reference-architecture/blob/master/documentation/client-application.md)
- [Passengers page](https://github.com/Azure-Samples/Serverless-microservices-reference-architecture/blob/master/documentation/client-application.md#passengers-page)
- [Drivers page](https://github.com/Azure-Samples/Serverless-microservices-reference-architecture/blob/master/documentation/client-application.md#drivers-page)
- [Authentication](https://github.com/Azure-Samples/Serverless-microservices-reference-architecture/blob/master/documentation/client-application.md#authentication)
- [Wrapping HTTP calls with authentication token](https://github.com/Azure-Samples/Serverless-microservices-reference-architecture/blob/master/documentation/client-application.md#wrapping-http-calls-with-authentication-token)
- [Monitoring and testing](https://github.com/Azure-Samples/Serverless-microservices-reference-architecture/blob/master/documentation/monitoring-testing.md)
- [Integration testing](https://github.com/Azure-Samples/Serverless-microservices-reference-architecture/blob/master/documentation/monitoring-testing.md#integration-testing)
- [Monitoring](https://github.com/Azure-Samples/Serverless-microservices-reference-architecture/blob/master/documentation/monitoring-testing.md#monitoring)
- [Telemetry correlation](https://github.com/Azure-Samples/Serverless-microservices-reference-architecture/blob/master/documentation/monitoring-testing.md#telemetry-correlation)
- [Monitoring for different audiences](https://github.com/Azure-Samples/Serverless-microservices-reference-architecture/blob/master/documentation/monitoring-testing.md#monitoring-for-different-audiences)
- [Source code structure](https://github.com/Azure-Samples/Serverless-microservices-reference-architecture/blob/master/documentation/source-code-structure.md)
- [.NET](https://github.com/Azure-Samples/Serverless-microservices-reference-architecture/blob/master/documentation/source-code-structure.md#net)
- [Node.js](https://github.com/Azure-Samples/Serverless-microservices-reference-architecture/blob/master/documentation/source-code-structure.md#nodejs)
- [Web](https://github.com/Azure-Samples/Serverless-microservices-reference-architecture/blob/master/documentation/source-code-structure.md#web)
- [Introduction to serverless microservices](/documentation/introduction.md)
- [What are microservices?](/documentation/introduction.md#what-are-microservices)
- [What is serverless?](/documentation/introduction.md#what-is-serverless)
- [Architecture overview](/documentation/architecture-overview.md)
- [Macro architecture](/documentation/architecture-overview.md#macro-architecture)
- [Data flow](/documentation/architecture-overview.md#data-flow)
- [Initial setup](/documentation/setup.md)
- [Getting started](/documentation/setup.md#getting-started)
- [API endpoints using Azure Functions](/documentation/api-endpoints.md)
- [RideShare APIs](/documentation/api-endpoints.md#rideshare-apis)
- [Durable Orchestrators](/documentation/api-endpoints.md#durable-orchestrators)
- [Services intercommunication using Event Grid](/documentation/services-intercommunication.md)
- [Logic App handler](/documentation/services-intercommunication.md#logic-app-handler)
- [SignalR handler](/documentation/services-intercommunication.md#signalr-handler)
- [.NET SignalR client](/documentation/services-intercommunication.md#dotnet-signalr-client)
- [JavaScript SignalR client](/documentation/services-intercommunication.md#javascript-signalr-client)
- [Power BI handler](/documentation/services-intercommunication.md#power-bi-handler)
- [Trip Archiver handler](/documentation/services-intercommunication.md#trip-archiver-handler)
- [Gateway with API Management](/documentation/api-management.md)
- [Data storage](/documentation/data-storage.md)
- [Client application](/documentation/client-application.md)
- [Passengers page](/documentation/client-application.md#passengers-page)
- [Drivers page](/documentation/client-application.md#drivers-page)
- [Authentication](/documentation/client-application.md#authentication)
- [Wrapping HTTP calls with authentication token](/documentation/client-application.md#wrapping-http-calls-with-authentication-token)
- [Monitoring and testing](/documentation/monitoring-testing.md)
- [Integration testing](/documentation/monitoring-testing.md#integration-testing)
- [Monitoring](/documentation/monitoring-testing.md#monitoring)
- [Telemetry correlation](/documentation/monitoring-testing.md#telemetry-correlation)
- [Monitoring for different audiences](/documentation/monitoring-testing.md#monitoring-for-different-audiences)
- [Source code structure](/documentation/source-code-structure.md)
- [.NET](/documentation/source-code-structure.md#net)
- [Node.js](/documentation/source-code-structure.md#nodejs)
- [Web](/documentation/source-code-structure.md#web)
133 changes: 133 additions & 0 deletions bicep/main.bicep
Original file line number Diff line number Diff line change
@@ -0,0 +1,133 @@
param applicationName string = 'Rideshare'

@allowed([
'centralus'
'eastus2'
'eastasia'
'westeurope'
'westus2'
])
param staticWebAppLocation string
param sqlAdminLogin string

@secure()
param sqlAdminPassword string
param resourceTags object = {
ProjectType: 'Azure Serverless Microservices'
Purpose: 'Sample'
}

var location = resourceGroup().location
var functionAppServicePlanName = '${applicationName}Plan'
var keyVaultName = '${applicationName}KeyVault'
var cosmosdbName = '${applicationName}Cosmos'
var eventGridName = '${applicationName}TripExternalizations'
var signalRName = applicationName
var applicationInsightsName = '${applicationName}Insights'
var apimName = '${applicationName}Apim'
var sqlServerName = '${applicationName}-db'
var staticWebAppName = '${applicationName}Web'
var storageAccountName = take(toLower(replace('${applicationName}func', '-', '')), 24)
var functionsApps = [
'Trips'
'Drivers'
'Passengers'
'TripArchiver'
'Orchestrators'
]

module cosmos 'modules/cosmosdb.bicep' = {
name: cosmosdbName
params: {
accountName: cosmosdbName
location: location
databaseName: applicationName
resourceTags: resourceTags
}
}

module sqlDb 'modules/sqldb.bicep' = {
name: 'sqldb'
params: {
sqlServerName: sqlServerName
sqlDatabaeName: applicationName
administratorLogin: sqlAdminLogin
administratorPassword: sqlAdminPassword
location: location
resourceTags: resourceTags
}
}

module eventGrid 'modules/eventgrid.bicep' = {
name: eventGridName
params: {
eventGridTopicName: eventGridName
location: location
resourceTags: resourceTags
}
}

module signalR 'modules/signalr.bicep' = {
name: signalRName
params: {
signalRName: signalRName
location: location
resourceTags: resourceTags
}
}

module applicationInsights 'modules/applicationInsights.bicep' = {
name: applicationInsightsName
params: {
applicationInsightsName: applicationInsightsName
location: location
resourceTags: resourceTags
}
}

module apim 'modules/apim.bicep' = {
name: apimName
params: {
apimName: apimName
appInsightsName: applicationInsights.outputs.appInsightsName
appInsightsInstrumentationKey: applicationInsights.outputs.appInsightsInstrumentationKey
resourceTags: resourceTags
}
}

module staticeWebApp 'modules/staticwebapp.bicep' = {
name: staticWebAppName
params: {
staticWebAppName: staticWebAppName
location: staticWebAppLocation
resourceTags: resourceTags
}
}

module functions 'modules/functions.bicep' = {
name: 'functions'
params: {
storageAccountName: storageAccountName
functionAppPrefix: applicationName
functionApps: functionsApps
appServicePlanName: functionAppServicePlanName
location: location
staticWebAppURL: staticeWebApp.outputs.staticWebAppURL
appInsightsInstrumentationKey: applicationInsights.outputs.appInsightsInstrumentationKey
resourceTags: resourceTags
}
}

module keyVault 'modules/keyvault.bicep' = {
name: keyVaultName
params: {
keyVaultName: keyVaultName
functionAppPrefix: applicationName
functionApps: functionsApps
resourceTags: resourceTags
}
dependsOn: [
functions
]
}

Loading

0 comments on commit a063e1d

Please sign in to comment.