Skip to content

Commit

Permalink
Extended Terraform script with Application Insights and optimized zip…
Browse files Browse the repository at this point in the history
… step of CI/CD pipeline
  • Loading branch information
hvalfangst committed Jan 4, 2024
1 parent 7cb8e3d commit 8aa2f71
Show file tree
Hide file tree
Showing 5 changed files with 99 additions and 80 deletions.
Original file line number Diff line number Diff line change
@@ -1,75 +1,69 @@
# Docs for the Azure Web Apps Deploy action: https://github.com/azure/functions-action
# More GitHub Actions for Azure: https://github.com/Azure/actions
# More info on Python, GitHub Actions, and Azure Functions: https://aka.ms/python-webapps-actions

name: Build and deploy Python project to Azure Function App - hvalfangstlinuxfunctionapp

on:
push:
branches:
- main
workflow_dispatch:

env:
AZURE_FUNCTIONAPP_PACKAGE_PATH: '.' # set this to the path to your web app project, defaults to the repository root
PYTHON_VERSION: '3.10' # set this to the python version to use (supports 3.6, 3.7, 3.8)

jobs:
build:
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v4

- name: Setup Python version
uses: actions/setup-python@v1
with:
python-version: ${{ env.PYTHON_VERSION }}

- name: Create and start virtual environment
run: |
python -m venv venv
source venv/bin/activate
- name: Install dependencies
run: pip install -r requirements.txt

# Optional: Add step to run tests here

- name: Zip artifact for deployment
run: zip release.zip ./* -r

- name: Upload artifact for deployment job
uses: actions/upload-artifact@v3
with:
name: python-app
path: |
release.zip
!venv/
deploy:
runs-on: ubuntu-latest
needs: build
environment:
name: 'Production'
url: ${{ steps.deploy-to-function.outputs.webapp-url }}

steps:
- name: Download artifact from build job
uses: actions/download-artifact@v3
with:
name: python-app

- name: Unzip artifact for deployment
run: unzip release.zip

- name: 'Deploy to Azure Functions'
uses: Azure/functions-action@v1
id: deploy-to-function
with:
app-name: 'hvalfangstlinuxfunctionapp'
slot-name: 'Production'
package: ${{ env.AZURE_FUNCTIONAPP_PACKAGE_PATH }}
scm-do-build-during-deployment: true
enable-oryx-build: true
publish-profile: ${{ secrets.AZUREAPPSERVICE_PUBLISHPROFILE_D07B4CD95A574A438600A5F0A9A78160 }}
name: CI/CD

on:
push:
branches:
- main
workflow_dispatch:

env:
AZURE_FUNCTIONAPP_PACKAGE_PATH: '.'
PYTHON_VERSION: '3.10'

jobs:
build:
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v4

- name: Setup Python version
uses: actions/setup-python@v1
with:
python-version: ${{ env.PYTHON_VERSION }}

- name: Create and start virtual environment
run: |
python -m venv venv
source venv/bin/activate
- name: Install dependencies
run: pip install -r requirements.txt

- name: Zip artifact for deployment
run: zip -r release.zip host.json requirements.txt wsgi_middleware/* flask_api/*

- name: Upload artifact for deployment job
uses: actions/upload-artifact@v3
with:
name: python-app
path: |
release.zip
!venv/
deploy:
runs-on: ubuntu-latest
needs: build
environment:
name: 'Production'
url: ${{ steps.deploy-to-function.outputs.webapp-url }}

steps:
- name: Download artifact from build job
uses: actions/download-artifact@v3
with:
name: python-app

- name: Unzip artifact for deployment
run: unzip release.zip

- name: 'Deploy to Azure Functions'
uses: Azure/functions-action@v1
id: deploy-to-function
with:
app-name: 'hvalfangstlinuxfunctionapp'
slot-name: 'Production'
package: ${{ env.AZURE_FUNCTIONAPP_PACKAGE_PATH }}
scm-do-build-during-deployment: true
enable-oryx-build: true
publish-profile: ${{ secrets.PUBLISH_PROFILE }}
2 changes: 1 addition & 1 deletion down.sh
Original file line number Diff line number Diff line change
Expand Up @@ -4,4 +4,4 @@
set -e

echo "Deleting Azure resources..."
terraform destroy;
terraform -chdir=infra destroy;
8 changes: 8 additions & 0 deletions host.json
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,14 @@
"extensions": {
"http": {
"routePrefix": ""
},
"logging": {
"applicationInsights": {
"samplingSettings": {
"isEnabled": true,
"excludedTypes": "Request"
}
}
}
}
}
19 changes: 18 additions & 1 deletion terraform.tf → infra/terraform.tf
Original file line number Diff line number Diff line change
Expand Up @@ -32,16 +32,33 @@ resource "azurerm_service_plan" "hvalfangst" {
sku_name = "Y1"
}

resource "azurerm_linux_function_app" "example" {
resource "azurerm_application_insights" "hvalfangst" {
name = "hvalfangstapplicationinsights"
resource_group_name = azurerm_resource_group.hvalfangst.name
location = azurerm_resource_group.hvalfangst.location
application_type = "other"
}


resource "azurerm_linux_function_app" "hvalfangst" {
name = "hvalfangstlinuxfunctionapp"
resource_group_name = azurerm_resource_group.hvalfangst.name
location = azurerm_resource_group.hvalfangst.location
storage_account_name = azurerm_storage_account.hvalfangst.name
storage_account_access_key = azurerm_storage_account.hvalfangst.primary_access_key
service_plan_id = azurerm_service_plan.hvalfangst.id
site_config {
application_insights_key = azurerm_application_insights.hvalfangst.instrumentation_key
application_insights_connection_string = azurerm_application_insights.hvalfangst.connection_string
cors {
allowed_origins = ["https://portal.azure.com"]
}
application_stack{
python_version = "3.10"
}
}
app_settings = {
"APPINSIGHTS_INSTRUMENTATIONKEY" = azurerm_application_insights.hvalfangst.instrumentation_key
"FUNCTIONS_EXTENSION_VERSION" = "~3"
}
}
6 changes: 3 additions & 3 deletions up.sh
Original file line number Diff line number Diff line change
Expand Up @@ -4,10 +4,10 @@
set -e

echo "Initializing Terraform..."
terraform init;
terraform -chdir=infra init;

echo "Planning Azure resource provisioning..."
terraform plan;
terraform -chdir=infra plan;

echo "Applying planned Azure resource provisioning..."
terraform apply;
terraform -chdir=infra apply;

0 comments on commit 8aa2f71

Please sign in to comment.