Skip to content

Commit

Permalink
add: deployment with azd cli
Browse files Browse the repository at this point in the history
  • Loading branch information
raykao committed Nov 13, 2023
1 parent 0bc84d6 commit 6294153
Show file tree
Hide file tree
Showing 15 changed files with 283 additions and 3 deletions.
7 changes: 6 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -261,4 +261,9 @@ paket-files/

# Python Tools for Visual Studio (PTVS)
__pycache__/
*.pyc
*.pyc

# Environment variables
.env

.azure
3 changes: 3 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,9 @@
# aks-docs-gpt-chat
A GPT Chat application for Azure Kubernetes Service Documentation

## Deploy

- Using the Azure Developer CLI

## Application Diagram

Expand Down
25 changes: 25 additions & 0 deletions aks-docs-gpt-chat.sln
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@

Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio Version 17
VisualStudioVersion = 17.5.002.0
MinimumVisualStudioVersion = 10.0.40219.1
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "AksChatBot", "src\AksChatBot.csproj", "{054E6CFD-3E6D-49F2-8E52-43E302056DC1}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Release|Any CPU = Release|Any CPU
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{054E6CFD-3E6D-49F2-8E52-43E302056DC1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{054E6CFD-3E6D-49F2-8E52-43E302056DC1}.Debug|Any CPU.Build.0 = Debug|Any CPU
{054E6CFD-3E6D-49F2-8E52-43E302056DC1}.Release|Any CPU.ActiveCfg = Release|Any CPU
{054E6CFD-3E6D-49F2-8E52-43E302056DC1}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {03C59C30-345F-4D4B-923D-CC3E563B6A00}
EndGlobalSection
EndGlobal
8 changes: 8 additions & 0 deletions azure.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
name: gbb-aks-llm-chat-bot
metadata:
template: [email protected]
services:
api:
project: ./src
language: dotnet
host: appservice
Empty file.
17 changes: 17 additions & 0 deletions infra/app/app-service-app-settings.bicep
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
metadata description = 'Updates app settings for an Azure App Service.'
@description('The name of the app service resource within the current resource group scope')
param name string

@description('The app settings to be applied to the app service')
@secure()
param appSettings object

resource appService 'Microsoft.Web/sites@2022-03-01' existing = {
name: name
}

resource settings 'Microsoft.Web/sites/config@2022-03-01' = {
name: 'appsettings'
parent: appService
properties: appSettings
}
22 changes: 22 additions & 0 deletions infra/app/app-service-plan.bicep
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
metadata description = 'Creates an Azure App Service plan.'
param name string
param location string = resourceGroup().location
param tags object = {}

param kind string = ''
param reserved bool = true
param sku object

resource appServicePlan 'Microsoft.Web/serverfarms@2022-03-01' = {
name: name
location: location
tags: tags
sku: sku
kind: kind
properties: {
reserved: reserved
}
}

output id string = appServicePlan.id
output name string = appServicePlan.name
118 changes: 118 additions & 0 deletions infra/app/app-service.bicep
Original file line number Diff line number Diff line change
@@ -0,0 +1,118 @@
metadata description = 'Creates an Azure App Service in an existing Azure App Service plan.'
param name string
param location string = resourceGroup().location
param tags object = {}

// Reference Properties
param applicationInsightsName string = ''
param appServicePlanId string
param keyVaultName string = ''
param managedIdentity bool = !empty(keyVaultName)

// Runtime Properties
@allowed([
'dotnet', 'dotnetcore', 'dotnet-isolated', 'node', 'python', 'java', 'powershell', 'custom'
])
param runtimeName string
param runtimeNameAndVersion string = '${runtimeName}|${runtimeVersion}'
param runtimeVersion string

// Microsoft.Web/sites Properties
param kind string = 'app,linux'

// Microsoft.Web/sites/config
param allowedOrigins array = []
param alwaysOn bool = true
param appCommandLine string = ''
@secure()
param appSettings object = {}
param clientAffinityEnabled bool = false
param enableOryxBuild bool = contains(kind, 'linux')
param functionAppScaleLimit int = -1
param linuxFxVersion string = runtimeNameAndVersion
param minimumElasticInstanceCount int = -1
param numberOfWorkers int = -1
param scmDoBuildDuringDeployment bool = false
param use32BitWorkerProcess bool = false
param ftpsState string = 'FtpsOnly'
param healthCheckPath string = ''

resource appService 'Microsoft.Web/sites@2022-03-01' = {
name: name
location: location
tags: tags
kind: kind
properties: {
serverFarmId: appServicePlanId
siteConfig: {
linuxFxVersion: linuxFxVersion
alwaysOn: alwaysOn
ftpsState: ftpsState
minTlsVersion: '1.2'
appCommandLine: appCommandLine
numberOfWorkers: numberOfWorkers != -1 ? numberOfWorkers : null
minimumElasticInstanceCount: minimumElasticInstanceCount != -1 ? minimumElasticInstanceCount : null
use32BitWorkerProcess: use32BitWorkerProcess
functionAppScaleLimit: functionAppScaleLimit != -1 ? functionAppScaleLimit : null
healthCheckPath: healthCheckPath
cors: {
allowedOrigins: union([ 'https://portal.azure.com', 'https://ms.portal.azure.com' ], allowedOrigins)
}
}
clientAffinityEnabled: clientAffinityEnabled
httpsOnly: true
}

identity: { type: managedIdentity ? 'SystemAssigned' : 'None' }

resource configLogs 'config' = {
name: 'logs'
properties: {
applicationLogs: { fileSystem: { level: 'Verbose' } }
detailedErrorMessages: { enabled: true }
failedRequestsTracing: { enabled: true }
httpLogs: { fileSystem: { enabled: true, retentionInDays: 1, retentionInMb: 35 } }
}
}

resource basicPublishingCredentialsPoliciesFtp 'basicPublishingCredentialsPolicies' = {
name: 'ftp'
properties: {
allow: false
}
}

resource basicPublishingCredentialsPoliciesScm 'basicPublishingCredentialsPolicies' = {
name: 'scm'
properties: {
allow: false
}
}
}

module config './app-service-app-settings.bicep' = if (!empty(appSettings)) {
name: '${name}-appSettings'
params: {
name: appService.name
appSettings: union(appSettings,
{
SCM_DO_BUILD_DURING_DEPLOYMENT: string(scmDoBuildDuringDeployment)
ENABLE_ORYX_BUILD: string(enableOryxBuild)
},
runtimeName == 'python' && appCommandLine == '' ? { PYTHON_ENABLE_GUNICORN_MULTIWORKERS: 'true'} : {},
!empty(applicationInsightsName) ? { APPLICATIONINSIGHTS_CONNECTION_STRING: applicationInsights.properties.ConnectionString } : {},
!empty(keyVaultName) ? { AZURE_KEY_VAULT_ENDPOINT: keyVault.properties.vaultUri } : {})
}
}

resource keyVault 'Microsoft.KeyVault/vaults@2022-07-01' existing = if (!(empty(keyVaultName))) {
name: keyVaultName
}

resource applicationInsights 'Microsoft.Insights/components@2020-02-02' existing = if (!empty(applicationInsightsName)) {
name: applicationInsightsName
}

output identityPrincipalId string = managedIdentity ? appService.identity.principalId : ''
output name string = appService.name
output uri string = 'https://${appService.properties.defaultHostName}'
Empty file.
Empty file.
65 changes: 65 additions & 0 deletions infra/main.bicep
Original file line number Diff line number Diff line change
@@ -0,0 +1,65 @@
targetScope = 'subscription'

@minLength(3)
@maxLength(3)
@description('A prefix string to generate a short unique hash used in all resources.')
param prefix string = 'gbb'

@minLength(4)
@description('Primary location for all resources')
param location string = 'eastus2'

@description('Resource Group to deploy all resources to')
param resourceGroupName string = '${prefix}-rg'

@description('Name of the App Service Plan to create')
param appServicePlanName string = ''

@description('Name of the API Service to create')
param apiServiceName string = ''

// @description('Name of the front end UI app to create')
// param frontEndName string = 'frontend'

var resourceToken = toLower(uniqueString(subscription().id, prefix, location))

// Organize resources in a resource group
resource rg 'Microsoft.Resources/resourceGroups@2021-04-01' = {
name: resourceGroupName
location: location
}

// Create an App Service Plan to group applications under the same payment plan and SKU
module appServicePlan './app/app-service-plan.bicep' = {
name: 'appserviceplan'
scope: rg
params: {
name: !empty(appServicePlanName) ? appServicePlanName : resourceToken
location: location
sku: {
name: 'B1'
}
}
}

module appService './app/app-service.bicep' = {
name: 'appservice'
scope: rg
dependsOn: [
appServicePlan
]
params: {
name: !empty(apiServiceName) ? apiServiceName : resourceToken
location: location
appServicePlanId: appServicePlan.outputs.id
runtimeName: 'dotnet-isolated'
runtimeVersion: '7.0'
tags: {
'azd-service-name': apiServiceName
}
}
}

// Data outputs
output AZURE_LOCATION string = location
output AZURE_TENANT_ID string = tenant().tenantId
15 changes: 15 additions & 0 deletions infra/main.parameters.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentParameters.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"environmentName": {
"value": "${AZURE_ENV_NAME}"
},
"location": {
"value": "${AZURE_LOCATION}"
},
"principalId": {
"value": "${AZURE_PRINCIPAL_ID}"
}
}
}
2 changes: 1 addition & 1 deletion rest-samples/query-aks.http
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
POST http://localhost:7071/api/Chat
POST http://localhost:8080/api/Chat
Content-Type: application/json

{
Expand Down
3 changes: 2 additions & 1 deletion src/.dockerignore
Original file line number Diff line number Diff line change
@@ -1 +1,2 @@
local.settings.json
local.settings.json
.env
1 change: 1 addition & 0 deletions src/AksChatBot.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
<OutputType>Exe</OutputType>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
<UserSecretsId>837887e9-bab1-40c9-8261-3f8ca0d1c5a0</UserSecretsId>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="HtmlAgilityPack" Version="1.11.53" />
Expand Down

0 comments on commit 6294153

Please sign in to comment.