Déploiement de démonstration

Le déploiement de démonstration offre une expérience simplifiée à l'aide d'un exemple d'ensemble de données brutes prédéfini. Il fournit un workflow de bout en bout pour déployer les pipelines Dataform de Cortex Framework à des fins d'orchestration et pour initialiser les ensembles de données BigQuery correspondants avec des exemples de données.

Avant de commencer

Avant de poursuivre avec le déploiement de démonstration, assurez-vous d'avoir rempli les conditions préalables décrites sur la Prerequisites page.

Obtenir les rôles et autorisations IAM requis

Obtenez les autorisations IAM (Identity and Access Management) requises pour déployer le contenu de Cortex Framework dans le projet cible Google Cloud .

Rôles pour le projet cible

Pour obtenir les autorisations nécessaires pour déployer Cortex Framework, demandez à votre administrateur de vous accorder les rôles IAM suivants sur votre projet cible :

Pour en savoir plus sur l'attribution de rôles, consultez la page Gérer l'accès aux projets, aux dossiers et aux organisations.

Vous pouvez également obtenir les autorisations requises via des rôles personnalisés ou d'autres rôles prédéfinis.

Pour accorder les rôles demandés à un utilisateur, vous pouvez utiliser le script suivant :

# Grant BigQuery JobUser to the user
gcloud projects add-iam-policy-binding PROJECT_ID --member="user:USER_EMAIL" \
        --role="roles/bigquery.jobUser"

# Grant BigQuery DataEditor to the user
gcloud projects add-iam-policy-binding PROJECT_ID --member="user:USER_EMAIL" \
        --role="roles/bigquery.dataEditor"

# Grant BigQuery Dataform admin to the user
gcloud projects add-iam-policy-binding PROJECT_ID --member="user:USER_EMAIL" \
        --role="roles/dataform.admin"

# Grant Service Usage Consumer to the user
gcloud projects add-iam-policy-binding PROJECT_ID --member="user:USER_EMAIL" \
        --role="roles/serviceusage.serviceUsageConsumer"

Facultatif : Obtenir les rôles IAM requis pour un déploiement de démonstration à l'aide d'un compte de service

Les rôles suivants ne sont requis que pour un déploiement de démonstration avec le paramètre facultatif --service_account activé. Fournir un compte de service simplifie les tâches post-déploiement en configurant la planification des pipelines de données. Vous pouvez déclencher manuellement cette configuration de workflow dans Dataform sous l'onglet Release and Scheduling (Publication et planification) à l'aide du menu à trois points.

Pour obtenir les autorisations nécessaires pour déployer la démonstration de Cortex Framework, demandez à votre administrateur de vous accorder le rôle IAM Créateur de jetons de compte de service (roles/iam.serviceAccountTokenCreator) sur votre projet source et votre projet cible. Pour en savoir plus sur l'attribution de rôles, consultez la page Gérer l'accès aux projets, aux dossiers et aux organisations.

Vous pouvez également obtenir les autorisations requises via des rôles personnalisés ou d'autres rôles prédéfinis.

Pour créer le compte de service et accorder les rôles nécessaires, vous pouvez utiliser le script suivant :

# Create the service account
gcloud iam service-accounts create cortex-dataform \
        --description="Service account for Cortex Dataform execution" \
        --display-name="Cortex Dataform Service Account" \
        --project=PROJECT_ID

# Wait for the service account to propagate (IAM eventual consistency)
sleep 10

# Grant BigQuery DataEditor to the service account
gcloud projects add-iam-policy-binding PROJECT_ID \
        --member="serviceAccount:cortex-dataform@PROJECT_ID.iam.gserviceaccount.com" \
        --role="roles/bigquery.dataEditor"

# Grant BigQuery jobUser to the service account
gcloud projects add-iam-policy-binding PROJECT_ID \
        --member="serviceAccount:cortex-dataform@PROJECT_ID.iam.gserviceaccount.com" \
        --role="roles/bigquery.jobUser"

# Grant Dataform Editor to the service account
gcloud projects add-iam-policy-binding PROJECT_ID \
        --member="serviceAccount:cortex-dataform@PROJECT_ID.iam.gserviceaccount.com" \
        --role="roles/dataform.editor"

# Grant the user Service Account Token Creator role on the Cortex service account
gcloud iam service-accounts add-iam-policy-binding \
        cortex-dataform@PROJECT_ID.iam.gserviceaccount.com \
        --member="user:USER_EMAIL" \
        --role="roles/iam.serviceAccountTokenCreator" \
        --project=PROJECT_ID

PROJECT_NUMBER=$(gcloud projects describe PROJECT_ID --format="value(projectNumber)")

## Note: In case the commands below should fail with message: 
# "serviceAccount:service-$PROJECT_NUMBER@gcp-sa-dataform.iam.gserviceaccount.com" not found
# the default dataform service accounts hasn't been yet provisioned for given project.
# In such case, please execute the commands after initial run of `uv run cortex-*`

# Grant the Dataform Service Account the Token Creator role on the Cortex service account
gcloud iam service-accounts add-iam-policy-binding \
        cortex-dataform@PROJECT_ID.iam.gserviceaccount.com \
        --member="serviceAccount:service-$PROJECT_NUMBER@gcp-sa-dataform.iam.gserviceaccount.com" \
        --role="roles/iam.serviceAccountTokenCreator" \
        --project=PROJECT_ID

# Grant the Dataform Service Account the Service Account User role on the Cortex service account
gcloud iam service-accounts add-iam-policy-binding \
        cortex-dataform@PROJECT_ID.iam.gserviceaccount.com \
        --member="serviceAccount:service-$PROJECT_NUMBER@gcp-sa-dataform.iam.gserviceaccount.com" \
        --role="roles/iam.serviceAccountUser" \
        --project=PROJECT_ID

Déploiement

Procédez comme suit pour créer un environnement Python virtuel, synchroniser les dépendances et déclencher les pipelines de données. N'oubliez pas d'utiliser les scripts uvde Cortex Framework pour créer et envoyer vos actifs de données à votre Google Cloud projet, en transformant vos configurations locales en une architecture de données évolutive et en direct. Pour en savoir plus, consultez l' uv installation dans la section Conditions préalables.

Exécuter le déploiement de démonstration

Exécutez la commande suivante pour déclencher le déploiement. Ce processus effectuera les actions suivantes :

  • Vérifiez que toutes les conditions préalables sont remplies.
  • Chargez des exemples de données dans un ensemble de données BigQuery pour servir de couche brute à des fins de démonstration.
  • Créez des pipelines Dataform pour traiter les exemples de données via les couches de données de Cortex Framework.
  • Créez le dépôt et l'espace de travail Dataform, puis synchronisez les artefacts compilés avec le dépôt. *Facultatif : Si un compte de service a été fourni avec --service_account, créez une planification de workflow et déclenchez l'exécution initiale du workflow Dataform

Pour un déploiement de démonstration avec des valeurs par défaut, exécutez la commande suivante :

uv run cortex-demo --project_id=PROJECT_ID --sap_version s4

Pour un déploiement de démonstration avec un compte de service, exécutez la commande suivante :

uv run cortex-demo --project_id=PROJECT_ID \
  --service_account="cortex-dataform@PROJECT_ID.iam.gserviceaccount.com" \
  --create_workflow_configs 

Validation

Une fois le déploiement terminé :

  1. Ouvrez Dataform pour inspecter le nouveau code créé dans le dépôt :

    1. Dépôt Dataform créé : cortex-framework-demo
    2. Dans le dépôt Dataform, l'espace de travail de développement : demo
    3. Code compilé et synchronisé (vous pouvez voir le graphique en cliquant sur Compiled graph).
  2. Exécution manuelle des actions Dataform :

    1. Ouvrez l'espace de travail Dataform : "demo" à partir du dépôt cortex-framework-demo dans Google Cloud la console Dataform.
    2. Cliquez sur Démarrer l'exécution.
    3. Cliquez sur Actions à exécuter.
    4. Cliquez sur Toutes les actions.
    5. Cliquez sur Démarrer l'exécution.

    6. Surveillez l'exécution réussie de toutes les actions dans votre dépôt Dataform à l'aide de l'onglet Workflow Execution Logs (Journaux d'exécution du workflow).

  3. Exécution des actions Dataform planifiées

S'applique uniquement si vous avez utilisé les paramètres --service_account et --create_workflow_configs lors du déploiement :

  1. Ouvrez le dépôt Dataform cortex-framework-demo dans Google Cloud la console Dataform.
  2. Cliquez sur Releases &scheduling (Publications et planification).
  3. Dans la section Workflow configurations (Configurations de workflow), cliquez sur le menu à trois points de l'action que vous souhaitez exécuter, puis sur Start now (Démarrer maintenant).

  4. Surveillez l'exécution réussie de toutes les actions dans votre dépôt Dataform à l'aide de l'onglet Workflow Execution Logs (Journaux d'exécution du workflow).

  5. Accédez à la console BigQuery et cliquez sur Datasets pour afficher les ensembles de données nouvellement créés, puis vérifiez le schéma et les données. Ensembles de données créés :

    • cortex_demo_sap_s4_raw: cet ensemble de données contient les données brutes du système source (dans cet exemple, SAP S/4HANA).
    • cortex_demo_sap_s4_data_foundation: cet ensemble de données représente la couche de base de données, où les données brutes de la couche brute sont traitées par CDC.
    • cortex_demo_data_product: cet ensemble de données contient les produits de données de démonstration, des vues ou des tables affinées et hautes performances conçues pour être utilisées par les utilisateurs finaux.
    • cortex_demo_samples : cet ensemble de données contient les données de démonstration pour les exemples de produits de données de consommation.

Nettoyer les ressources de déploiement de démonstration

Une fois le déploiement de démonstration réussi, vous pouvez supprimer les ressources Google Cloud utilisées pour éviter des frais continus. Le script suivant supprime les ensembles de données BigQuery créés, l'espace de travail Dataform et le dépôt Dataform :

#!/bin/bash

# Define variables using names from uv-run-cortex-demo.md
PROJECT_ID="PROJECT_ID"
SAP_VERSION="s4"

DATAFORM_REGION="us-central1"
SOURCE_SAP_RAW_DATASET_ID="cortex_demo_sap_s4_raw"
TARGET_SAP_FOUNDATION_DATASET_ID="cortex_demo_sap_s4_data_foundation"
if [[ "$SAP_VERSION" == "ecc" ]]; then
  SOURCE_SAP_RAW_DATASET_ID="cortex_demo_sap_ecc_raw"
  TARGET_SAP_FOUNDATION_DATASET_ID="cortex_demo_sap_ecc_data_foundation"
fi
TARGET_DP_DATASET_ID="cortex_demo_data_product"
TARGET_SAMPLES_DATASET_ID="cortex_demo_samples"
REPOSITORY_NAME="cortex-framework-demo"
WORKSPACE_NAME="demo"
SERVICE_ACCOUNT_NAME="cortex-dataform"


# Color codes for formatting status output
GREEN='\033[0;32m'
YELLOW='\033[0;33m'
RED='\033[0;31m'
NC='\033[0m' # No Color

# Helper function to delete a resource and report status
delete_resource() {
    local label=$1
    local url=$2
    local resource_type=$3
    
    echo -n "${label}... "
    
    local temp_file=$(mktemp)
    local code=$(curl -s -o "${temp_file}" -w "%{http_code}" -X DELETE \
        -H "Authorization: Bearer ${ACCESS_TOKEN}" \
        "${url}")
        
    if [ "$code" -eq 200 ] || [ "$code" -eq 204 ]; then
        echo -e "${GREEN}ok${NC}"
    elif [ "$code" -eq 404 ]; then
        echo -e "${YELLOW}skipped, ${resource_type} not found${NC}"
    else
        echo -e "${RED}failed (HTTP ${code})${NC}"
        if [ -s "${temp_file}" ]; then
            echo "  Error details:"
            sed 's/^/    /' "${temp_file}"
        fi
    fi
    rm -f "${temp_file}"
}

echo "Deleting BigQuery datasets..."
for DATASET_ID in "${SOURCE_SAP_RAW_DATASET_ID}" \
                  "${TARGET_SAP_FOUNDATION_DATASET_ID}" \
                  "${TARGET_DP_DATASET_ID}" \
                  "${TARGET_SAMPLES_DATASET_ID}"; do
    echo "deleting ${PROJECT_ID}:${DATASET_ID}"
    bq rm -r -f "${PROJECT_ID}:${DATASET_ID}"
done

ACCESS_TOKEN=$(gcloud auth print-access-token)
delete_resource "Deleting Dataform workspace ${WORKSPACE_NAME}" \
    "https://dataform.googleapis.com/v1beta1/projects/${PROJECT_ID}/locations/${DATAFORM_REGION}/repositories/${REPOSITORY_NAME}/workspaces/${WORKSPACE_NAME}" \
    "workspace"

echo "Deleting Dataform workflow configurations..."
WORKFLOW_CONFIGS_JSON=$(curl -s -H "Authorization: Bearer ${ACCESS_TOKEN}" \
    "https://dataform.googleapis.com/v1beta1/projects/${PROJECT_ID}/locations/${DATAFORM_REGION}/repositories/${REPOSITORY_NAME}/workflowConfigs")

WORKFLOW_CONFIGS=$(echo "${WORKFLOW_CONFIGS_JSON}" | grep '"name":' | sed -E 's/.*"name": "([^"]+)".*/\1/')

if [ -z "${WORKFLOW_CONFIGS}" ]; then
    echo -e "  No workflow configurations found. ${YELLOW}skipped${NC}"
else
    for config in ${WORKFLOW_CONFIGS}; do
        delete_resource "  Deleting workflow config: ${config##*/}" \
            "https://dataform.googleapis.com/v1beta1/${config}" \
            "workflow config"
    done
fi

echo "Deleting Dataform release configurations..."
RELEASE_CONFIGS_JSON=$(curl -s -H "Authorization: Bearer ${ACCESS_TOKEN}" \
    "https://dataform.googleapis.com/v1beta1/projects/${PROJECT_ID}/locations/${DATAFORM_REGION}/repositories/${REPOSITORY_NAME}/releaseConfigs")

RELEASE_CONFIGS=$(echo "${RELEASE_CONFIGS_JSON}" | grep '"name":' | sed -E 's/.*"name": "([^"]+)".*/\1/')

if [ -z "${RELEASE_CONFIGS}" ]; then
    echo -e "  No release configurations found. ${YELLOW}skipped${NC}"
else
    for config in ${RELEASE_CONFIGS}; do
        delete_resource "  Deleting release config: ${config##*/}" \
            "https://dataform.googleapis.com/v1beta1/${config}" \
            "release config"
    done
fi

delete_resource "Deleting Dataform repository ${REPOSITORY_NAME}" \
    "https://dataform.googleapis.com/v1beta1/projects/${PROJECT_ID}/locations/${DATAFORM_REGION}/repositories/${REPOSITORY_NAME}?force=true" \
    "repository"

if gcloud iam service-accounts describe "${SERVICE_ACCOUNT_NAME}@${PROJECT_ID}.iam.gserviceaccount.com" --project="${PROJECT_ID}" >/dev/null 2>&1; then
    read -p "Do you want to delete the service account ${SERVICE_ACCOUNT_NAME}? (y/N): " -r
    if [[ "$REPLY" =~ ^[Yy]$ ]]; then
        echo -n "Deleting service account ${SERVICE_ACCOUNT_NAME}... "
        ERROR_MSG=$(gcloud iam service-accounts delete "${SERVICE_ACCOUNT_NAME}@${PROJECT_ID}.iam.gserviceaccount.com" --project="${PROJECT_ID}" --quiet 2>&1)
        EXIT_CODE=$?
        if [ ${EXIT_CODE} -eq 0 ]; then
            echo -e "${GREEN}ok${NC}"
        else
            echo -e "${RED}failed${NC}"
            echo "  Error details:"
            echo "${ERROR_MSG}" | sed 's/^/    /'
        fi
    else
        echo -e "Deleting service account ${SERVICE_ACCOUNT_NAME}... ${YELLOW}skipped (user cancelled)${NC}"
    fi
else
    echo -e "Deleting service account ${SERVICE_ACCOUNT_NAME}... ${YELLOW}skipped, service account not found${NC}"
fi

echo "Cortex Framework demo deployment cleanup complete."

Étapes suivantes