Skip to content

Commit a063e1d

Browse files
Merge pull request #72 from Azure-Samples/refresh-functions-v3
Upgrade functions to v3
2 parents cec98b9 + 18f424d commit a063e1d

File tree

77 files changed

+26466
-10332
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

77 files changed

+26466
-10332
lines changed

.gitignore

+7-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/Docs/*
2-
#.vscode/
2+
.vscode/
33

44
# Exclude temporary files:
55
*.tmp
@@ -17,3 +17,9 @@
1717

1818
# Build temp package lock
1919
pipelines/package-lock.json
20+
21+
bicep/parameters.local.json
22+
local.settings.json
23+
test/settings.example.dan.js
24+
25+
__azurite__

.vscode/settings.json

+8-1
Original file line numberDiff line numberDiff line change
@@ -2,5 +2,12 @@
22
"azureFunctions.projectRuntime": "~1",
33
"azureFunctions.projectLanguage": "JavaScript",
44
"appService.zipIgnorePattern": ["node_modules{,/**}"],
5-
"appService.deploySubpath": "serverless-microservices-web"
5+
"appService.deploySubpath": "serverless-microservices-web",
6+
"WhiteSource Advise.Diff.BaseBranch": "main",
7+
"markdownlint.config": {
8+
"MD028": false,
9+
"MD025": {
10+
"front_matter_title": ""
11+
}
12+
}
613
}

README.md

+43-36
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,12 @@ description: "This architecture walks you through the process involved in develo
1818

1919
# Serverless Microservices reference architecture
2020

21+
[![.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)
22+
[![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)
23+
[![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)
24+
25+
> 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.
26+
2127
## The reference architecture
2228

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

3541
## Explore Relecloud's solution using serverless and microservices
3642

37-
[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.
43+
[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.
3844

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

41-
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).
47+
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).
4248

43-
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).
49+
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).
4450

4551
## Detailed documentation
4652

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

49-
- [Introduction to serverless microservices](https://github.com/Azure-Samples/Serverless-microservices-reference-architecture/blob/master/documentation/introduction.md)
50-
- [What are microservices?](https://github.com/Azure-Samples/Serverless-microservices-reference-architecture/blob/master/documentation/introduction.md#what-are-microservices)
51-
- [What is serverless?](https://github.com/Azure-Samples/Serverless-microservices-reference-architecture/blob/master/documentation/introduction.md#what-is-serverless)
52-
- [Architecture overview](https://github.com/Azure-Samples/Serverless-microservices-reference-architecture/blob/master/documentation/architecture-overview.md)
53-
- [Macro architecture](https://github.com/Azure-Samples/Serverless-microservices-reference-architecture/blob/master/documentation/architecture-overview.md#macro-architecture)
54-
- [Data flow](https://github.com/Azure-Samples/Serverless-microservices-reference-architecture/blob/master/documentation/architecture-overview.md#data-flow)
55-
- [Initial setup](https://github.com/Azure-Samples/Serverless-microservices-reference-architecture/blob/master/documentation/setup.md)
56-
- [API endpoints using Azure Functions](https://github.com/Azure-Samples/Serverless-microservices-reference-architecture/blob/master/documentation/api-endpoints.md)
57-
- [RideShare APIs](https://github.com/Azure-Samples/Serverless-microservices-reference-architecture/blob/master/documentation/api-endpoints.md#rideshare-apis)
58-
- [Durable Orchestrators](https://github.com/Azure-Samples/Serverless-microservices-reference-architecture/blob/master/documentation/api-endpoints.md#durable-orchestrators)
59-
- [Services intercommunication using Event Grid](https://github.com/Azure-Samples/Serverless-microservices-reference-architecture/blob/master/documentation/services-intercommunication.md)
60-
- [Logic App handler](https://github.com/Azure-Samples/Serverless-microservices-reference-architecture/blob/master/documentation/services-intercommunication.md#logic-app-handler)
61-
- [SignalR handler](https://github.com/Azure-Samples/Serverless-microservices-reference-architecture/blob/master/documentation/services-intercommunication.md#signalr-handler)
62-
- [.NET SignalR client](https://github.com/Azure-Samples/Serverless-microservices-reference-architecture/blob/master/documentation/services-intercommunication.md#dotnet-signalr-client)
63-
- [JavaScript SignalR client](https://github.com/Azure-Samples/Serverless-microservices-reference-architecture/blob/master/documentation/services-intercommunication.md#javascript-signalr-client)
64-
- [Power BI handler](https://github.com/Azure-Samples/Serverless-microservices-reference-architecture/blob/master/documentation/services-intercommunication.md#power-bi-handler)
65-
- [Trip Archiver handler](https://github.com/Azure-Samples/Serverless-microservices-reference-architecture/blob/master/documentation/services-intercommunication.md#trip-archiver-handler)
66-
- [Gateway with API Management](https://github.com/Azure-Samples/Serverless-microservices-reference-architecture/blob/master/documentation/api-management.md)
67-
- [Data storage](https://github.com/Azure-Samples/Serverless-microservices-reference-architecture/blob/master/documentation/data-storage.md)
68-
- [Client application](https://github.com/Azure-Samples/Serverless-microservices-reference-architecture/blob/master/documentation/client-application.md)
69-
- [Passengers page](https://github.com/Azure-Samples/Serverless-microservices-reference-architecture/blob/master/documentation/client-application.md#passengers-page)
70-
- [Drivers page](https://github.com/Azure-Samples/Serverless-microservices-reference-architecture/blob/master/documentation/client-application.md#drivers-page)
71-
- [Authentication](https://github.com/Azure-Samples/Serverless-microservices-reference-architecture/blob/master/documentation/client-application.md#authentication)
72-
- [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)
73-
- [Monitoring and testing](https://github.com/Azure-Samples/Serverless-microservices-reference-architecture/blob/master/documentation/monitoring-testing.md)
74-
- [Integration testing](https://github.com/Azure-Samples/Serverless-microservices-reference-architecture/blob/master/documentation/monitoring-testing.md#integration-testing)
75-
- [Monitoring](https://github.com/Azure-Samples/Serverless-microservices-reference-architecture/blob/master/documentation/monitoring-testing.md#monitoring)
76-
- [Telemetry correlation](https://github.com/Azure-Samples/Serverless-microservices-reference-architecture/blob/master/documentation/monitoring-testing.md#telemetry-correlation)
77-
- [Monitoring for different audiences](https://github.com/Azure-Samples/Serverless-microservices-reference-architecture/blob/master/documentation/monitoring-testing.md#monitoring-for-different-audiences)
78-
- [Source code structure](https://github.com/Azure-Samples/Serverless-microservices-reference-architecture/blob/master/documentation/source-code-structure.md)
79-
- [.NET](https://github.com/Azure-Samples/Serverless-microservices-reference-architecture/blob/master/documentation/source-code-structure.md#net)
80-
- [Node.js](https://github.com/Azure-Samples/Serverless-microservices-reference-architecture/blob/master/documentation/source-code-structure.md#nodejs)
81-
- [Web](https://github.com/Azure-Samples/Serverless-microservices-reference-architecture/blob/master/documentation/source-code-structure.md#web)
55+
- [Introduction to serverless microservices](/documentation/introduction.md)
56+
- [What are microservices?](/documentation/introduction.md#what-are-microservices)
57+
- [What is serverless?](/documentation/introduction.md#what-is-serverless)
58+
- [Architecture overview](/documentation/architecture-overview.md)
59+
- [Macro architecture](/documentation/architecture-overview.md#macro-architecture)
60+
- [Data flow](/documentation/architecture-overview.md#data-flow)
61+
- [Initial setup](/documentation/setup.md)
62+
- [Getting started](/documentation/setup.md#getting-started)
63+
- [API endpoints using Azure Functions](/documentation/api-endpoints.md)
64+
- [RideShare APIs](/documentation/api-endpoints.md#rideshare-apis)
65+
- [Durable Orchestrators](/documentation/api-endpoints.md#durable-orchestrators)
66+
- [Services intercommunication using Event Grid](/documentation/services-intercommunication.md)
67+
- [Logic App handler](/documentation/services-intercommunication.md#logic-app-handler)
68+
- [SignalR handler](/documentation/services-intercommunication.md#signalr-handler)
69+
- [.NET SignalR client](/documentation/services-intercommunication.md#dotnet-signalr-client)
70+
- [JavaScript SignalR client](/documentation/services-intercommunication.md#javascript-signalr-client)
71+
- [Power BI handler](/documentation/services-intercommunication.md#power-bi-handler)
72+
- [Trip Archiver handler](/documentation/services-intercommunication.md#trip-archiver-handler)
73+
- [Gateway with API Management](/documentation/api-management.md)
74+
- [Data storage](/documentation/data-storage.md)
75+
- [Client application](/documentation/client-application.md)
76+
- [Passengers page](/documentation/client-application.md#passengers-page)
77+
- [Drivers page](/documentation/client-application.md#drivers-page)
78+
- [Authentication](/documentation/client-application.md#authentication)
79+
- [Wrapping HTTP calls with authentication token](/documentation/client-application.md#wrapping-http-calls-with-authentication-token)
80+
- [Monitoring and testing](/documentation/monitoring-testing.md)
81+
- [Integration testing](/documentation/monitoring-testing.md#integration-testing)
82+
- [Monitoring](/documentation/monitoring-testing.md#monitoring)
83+
- [Telemetry correlation](/documentation/monitoring-testing.md#telemetry-correlation)
84+
- [Monitoring for different audiences](/documentation/monitoring-testing.md#monitoring-for-different-audiences)
85+
- [Source code structure](/documentation/source-code-structure.md)
86+
- [.NET](/documentation/source-code-structure.md#net)
87+
- [Node.js](/documentation/source-code-structure.md#nodejs)
88+
- [Web](/documentation/source-code-structure.md#web)

bicep/main.bicep

+133
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,133 @@
1+
param applicationName string = 'Rideshare'
2+
3+
@allowed([
4+
'centralus'
5+
'eastus2'
6+
'eastasia'
7+
'westeurope'
8+
'westus2'
9+
])
10+
param staticWebAppLocation string
11+
param sqlAdminLogin string
12+
13+
@secure()
14+
param sqlAdminPassword string
15+
param resourceTags object = {
16+
ProjectType: 'Azure Serverless Microservices'
17+
Purpose: 'Sample'
18+
}
19+
20+
var location = resourceGroup().location
21+
var functionAppServicePlanName = '${applicationName}Plan'
22+
var keyVaultName = '${applicationName}KeyVault'
23+
var cosmosdbName = '${applicationName}Cosmos'
24+
var eventGridName = '${applicationName}TripExternalizations'
25+
var signalRName = applicationName
26+
var applicationInsightsName = '${applicationName}Insights'
27+
var apimName = '${applicationName}Apim'
28+
var sqlServerName = '${applicationName}-db'
29+
var staticWebAppName = '${applicationName}Web'
30+
var storageAccountName = take(toLower(replace('${applicationName}func', '-', '')), 24)
31+
var functionsApps = [
32+
'Trips'
33+
'Drivers'
34+
'Passengers'
35+
'TripArchiver'
36+
'Orchestrators'
37+
]
38+
39+
module cosmos 'modules/cosmosdb.bicep' = {
40+
name: cosmosdbName
41+
params: {
42+
accountName: cosmosdbName
43+
location: location
44+
databaseName: applicationName
45+
resourceTags: resourceTags
46+
}
47+
}
48+
49+
module sqlDb 'modules/sqldb.bicep' = {
50+
name: 'sqldb'
51+
params: {
52+
sqlServerName: sqlServerName
53+
sqlDatabaeName: applicationName
54+
administratorLogin: sqlAdminLogin
55+
administratorPassword: sqlAdminPassword
56+
location: location
57+
resourceTags: resourceTags
58+
}
59+
}
60+
61+
module eventGrid 'modules/eventgrid.bicep' = {
62+
name: eventGridName
63+
params: {
64+
eventGridTopicName: eventGridName
65+
location: location
66+
resourceTags: resourceTags
67+
}
68+
}
69+
70+
module signalR 'modules/signalr.bicep' = {
71+
name: signalRName
72+
params: {
73+
signalRName: signalRName
74+
location: location
75+
resourceTags: resourceTags
76+
}
77+
}
78+
79+
module applicationInsights 'modules/applicationInsights.bicep' = {
80+
name: applicationInsightsName
81+
params: {
82+
applicationInsightsName: applicationInsightsName
83+
location: location
84+
resourceTags: resourceTags
85+
}
86+
}
87+
88+
module apim 'modules/apim.bicep' = {
89+
name: apimName
90+
params: {
91+
apimName: apimName
92+
appInsightsName: applicationInsights.outputs.appInsightsName
93+
appInsightsInstrumentationKey: applicationInsights.outputs.appInsightsInstrumentationKey
94+
resourceTags: resourceTags
95+
}
96+
}
97+
98+
module staticeWebApp 'modules/staticwebapp.bicep' = {
99+
name: staticWebAppName
100+
params: {
101+
staticWebAppName: staticWebAppName
102+
location: staticWebAppLocation
103+
resourceTags: resourceTags
104+
}
105+
}
106+
107+
module functions 'modules/functions.bicep' = {
108+
name: 'functions'
109+
params: {
110+
storageAccountName: storageAccountName
111+
functionAppPrefix: applicationName
112+
functionApps: functionsApps
113+
appServicePlanName: functionAppServicePlanName
114+
location: location
115+
staticWebAppURL: staticeWebApp.outputs.staticWebAppURL
116+
appInsightsInstrumentationKey: applicationInsights.outputs.appInsightsInstrumentationKey
117+
resourceTags: resourceTags
118+
}
119+
}
120+
121+
module keyVault 'modules/keyvault.bicep' = {
122+
name: keyVaultName
123+
params: {
124+
keyVaultName: keyVaultName
125+
functionAppPrefix: applicationName
126+
functionApps: functionsApps
127+
resourceTags: resourceTags
128+
}
129+
dependsOn: [
130+
functions
131+
]
132+
}
133+

0 commit comments

Comments
 (0)