Skip to content

Latest commit

 

History

History
239 lines (236 loc) · 7.62 KB

File metadata and controls

239 lines (236 loc) · 7.62 KB

Lab_3: Déploiement d’une application dans Azure Container Apps


Objectif:

L'objectif de ce Lab 3 c'est de déployer une application (en micro-services) dans le service "Azure Container Apps"

Etapes du Lab:

  • Création de la Base de donnée
  • Déploiement de "Azure Apps Environnment"
  • Déploiement d'une "Azure Container Registry"
  • "Build & Push" de l'image API
  • Déploiement et tests de "App Container" API
  • "Build & Push" de l'image Front
  • Déploiement et tests de "App Container" FRONT

Variables pour ce Lab

RESOURCE_GROUP="RG_Lab_3_pg"
LOCATION="westeurope"
POSTGRESQL_NAME="pglab3"
POSTGRESQL_ADMINUSER="adminDB"
POSTGRESQL_ADMINPASSWORD="Password123$"
POSTGRESQL_SKUNAME="Standard_B1ms"
POSTGRESQL_TIER="Burstable"
POSTGRESQL_VERSION="14"
POSTGRESQL_STORAGESIZE="32"
POSTGRESQL_DBNAME="rugby_api"
ACR_NAME="acrlab3pg"
ACR_SKUNAME="Standard"
APP_API_NAME="rugby-api"
APP_API_IMAGE_VERSION="1.0.0"
APP_FRONT_NAME="rugby-front"
APP_FRONT_IMAGE_VERSION="1.0.0"
ENVIRONMENT_NAME="Lab-3-pg-env"

Création de "resource group"

az group create \
  --name $RESOURCE_GROUP \
  --location $LOCATION

Test -> Création de "resource group"

az group show --resource-group $RESOURCE_GROUP -o table

Création du "logical server"

az postgres flexible-server create \
  --name $POSTGRESQL_NAME \
  --resource-group $RESOURCE_GROUP \
  --location $LOCATION \
  --admin-user $POSTGRESQL_ADMINUSER \
  --admin-password $POSTGRESQL_ADMINPASSWORD \
  --sku-name $POSTGRESQL_SKUNAME \
  --tier $POSTGRESQL_TIER \
  --version $POSTGRESQL_VERSION \
  --storage-size $POSTGRESQL_STORAGESIZE \
  --public-access 0.0.0.0 --yes

Test -> Création du "logical server"

az postgres flexible-server show --resource-group $RESOURCE_GROUP --name $POSTGRESQL_NAME -o table

Création "Firewall rule to allow access from internet"

az postgres flexible-server firewall-rule create \
  --name $POSTGRESQL_NAME \
  --resource-group $RESOURCE_GROUP \
  --rule-name allowall \
  --start-ip-address 0.0.0.0 \
  --end-ip-address 255.255.255.255

Authorisation "Allow non-SSL connections" (Pas conseillé / Mode Workshop ! ...)

az postgres flexible-server parameter set \
  --resource-group $RESOURCE_GROUP \
  --server-name $POSTGRESQL_NAME \
  --name require_secure_transport --value off

Création de la base

az postgres flexible-server db create \
  --resource-group $RESOURCE_GROUP \
  --server-name $POSTGRESQL_NAME \
  --database-name $POSTGRESQL_DBNAME

Test -> Création de la base

az postgres flexible-server db show --resource-group $RESOURCE_GROUP --server-name $POSTGRESQL_NAME --database-name $POSTGRESQL_DBNAME -o table

Création des tables
Allez dans ./Lab_3_pg/DB

az postgres flexible-server execute \
  --admin-password $POSTGRESQL_ADMINPASSWORD \
  --admin-user $POSTGRESQL_ADMINUSER \
  --name $POSTGRESQL_NAME \
  --database-name $POSTGRESQL_DBNAME \
  --file-path create_tables.sql

Création de "Container Apps environment":

az containerapp env create \
  --name $ENVIRONMENT_NAME \
  --resource-group $RESOURCE_GROUP \
  --location $LOCATION \
  --logs-destination none

Test -> Visualisation de "Container Apps environment"

az containerapp env list --resource-group $RESOURCE_GROUP -o jsonc

Création de "Azure Container Registry"

az acr create \
  --resource-group $RESOURCE_GROUP \
  --name $ACR_NAME \
  --sku $ACR_SKUNAME \
  --admin-enabled true

Test -> Création de "Azure Container Registry"

az acr list --resource-group $RESOURCE_GROUP -o table

Build et Push Image API
Allez dans ./Lab_3_pg/API

az acr build -t $ACR_NAME.azurecr.io/$APP_API_NAME:$APP_API_IMAGE_VERSION -r $ACR_NAME .

Test -> Build et Push Image API

az acr repository list --name $ACR_NAME -o table

Avant de déployer l'API
Exécutez la commande az containerapp env list --resource-group $RESOURCE_GROUP -o jsonc
Vérifier l'état : "provisioningState": "Succeeded"
Déploiement API dans Azure Container Apps

REGISTRY_PASSWORD=$(az acr credential show --name $ACR_NAME -o tsv --query "passwords[0].value")
az containerapp create \
  --name $APP_API_NAME \
  --resource-group $RESOURCE_GROUP \
  --environment $ENVIRONMENT_NAME \
  --image $ACR_NAME.azurecr.io/$APP_API_NAME:$APP_API_IMAGE_VERSION \
  --registry-username $ACR_NAME \
  --registry-password $REGISTRY_PASSWORD \
  --secrets secret-db-host=pglab3.postgres.database.azure.com secret-db-user=adminDB secret-db-password=Password123$ secret-db-database=rugby_api secret-db-port=5432 \
  --env-vars DB_HOST=secretref:secret-db-host DB_USER=secretref:secret-db-user DB_PASS=secretref:secret-db-password DB_NAME=secretref:secret-db-database DB_PORT=secretref:secret-db-port \
  --target-port 3000 \
  --ingress external \
  --registry-server $ACR_NAME.azurecr.io \
  --query configuration.ingress.fqdn

Test API
Récupérer l'output de l'api ex:
Version API

curl https://rugby-api.purpleisland-7a4fc55f.westeurope.azurecontainerapps.io/api

Résultat

{"message":"API v.1.0.0"}

Nombre de plaquages OK

curl https://rugby-api.purpleisland-7a4fc55f.westeurope.azurecontainerapps.io/plaquage-ok/get

Résultat

[{"id":1,"sum_plaquage_ok":0}]

Ajout de plaquage OK

curl -X POST -H "Content-Type: application/json" https://rugby-api.purpleisland-7a4fc55f.westeurope.azurecontainerapps.io/plaquage-ok/add

Reset plaquage OK

curl -X POST -H "Content-Type: application/json" https://rugby-api.purpleisland-7a4fc55f.westeurope.azurecontainerapps.io/plaquage-ok/reset

On peut également faire également sur les plaquages KO

curl https://rugby-api.purpleisland-7a4fc55f.westeurope.azurecontainerapps.io/plaquage-ko/get
curl -X POST -H "Content-Type: application/json" https://rugby-api.purpleisland-7a4fc55f.westeurope.azurecontainerapps.io/plaquage-ko/add
curl -X POST -H "Content-Type: application/json" https://rugby-api.purpleisland-7a4fc55f.westeurope.azurecontainerapps.io/plaquage-ko/reset

Pour le Front
Récupération de l'url de l'api:

URL_API=$(az containerapp show --resource-group $RESOURCE_GROUP --name $APP_API_NAME --query properties.configuration.ingress.fqdn -o tsv) 

Test de l'url:

echo $URL_API

Résultat:

rugby-api.purpleisland-7a4fc55f.westeurope.azurecontainerapps.io

Allez dans ./Lab_3_pg/FRONT
Observez le fichier index.html
Il faut remplacer http://localhost:3000 par l'url de l'API (six lignes)
ex:

http://localhost:3000/plaquage-ok/get

en

https://rugby-api.purpleisland-7a4fc55f.westeurope.azurecontainerapps.io/plaquage-ok/get

Pour le faire facilement, nous le ferons dans ce lab avec la commande sed

sed -i -e 's%\http://localhost:3000%https://'$URL_API'%' ./index.html

Build et Push Image FRONT

az acr build -t $ACR_NAME.azurecr.io/$APP_FRONT_NAME:$APP_FRONT_IMAGE_VERSION -r $ACR_NAME .

Test -> Build et Push Image FRONT

az acr repository list --name $ACR_NAME -o table

Déploiement FRONT dans Azure Container Apps

REGISTRY_PASSWORD=$(az acr credential show --name $ACR_NAME -o tsv --query "passwords[0].value")
az containerapp create \
  --name $APP_FRONT_NAME \
  --resource-group $RESOURCE_GROUP \
  --environment $ENVIRONMENT_NAME \
  --image $ACR_NAME.azurecr.io/$APP_FRONT_NAME:$APP_FRONT_IMAGE_VERSION \
  --target-port 80 \
  --ingress external \
  --registry-server $ACR_NAME.azurecr.io \
  --registry-username $ACR_NAME \
  --registry-password $REGISTRY_PASSWORD \
  --query configuration.ingress.fqdn

Test du FRONT
Récupérez l'output et tester dans un navigateur