Deployment demo
Penerapan demo menawarkan pengalaman yang disederhanakan menggunakan sample-dataset mentah yang telah ditentukan sebelumnya. Fitur ini menyediakan alur kerja menyeluruh untuk men-deploy pipeline Dataform Cortex Framework untuk orkestrasi dan menginisialisasi set data BigQuery yang sesuai dengan data contoh.
Sebelum memulai
Pastikan Anda telah menyelesaikan prasyarat yang diuraikan di halaman Prasyarat, sebelum melanjutkan penyebaran demo.
Mendapatkan peran dan izin IAM yang diperlukan
Dapatkan izin Identity and Access Management (IAM) yang diperlukan untuk men-deploy konten Cortex Framework dalam project target. Google Cloud
Peran untuk project target
Untuk mendapatkan izin yang Anda perlukan guna men-deploy Cortex Framework, minta administrator untuk memberi Anda peran IAM berikut di project target Anda:
- BigQuery Job User (
roles/bigquery.jobUser) - BigQuery Data Editor (
roles/bigquery.dataEditor) - Dataform Admin (
roles/dataform.admin) - Service Usage Consumer (
roles/serviceusage.serviceUsageConsumer)
Untuk mengetahui informasi selengkapnya tentang pemberian peran, lihat Mengelola akses ke project, folder, dan organisasi.
Anda mungkin juga bisa mendapatkan izin yang diperlukan melalui peran khusus atau peran bawaan lainnya.
Untuk memberikan peran yang diminta kepada pengguna, Anda dapat menggunakan skrip:
# 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"
Opsional: Dapatkan peran IAM yang diperlukan untuk deployment demo menggunakan akun layanan
Peran berikut hanya diperlukan untuk deployment demo dengan parameter
--service_account opsional yang diaktifkan. Menyediakan akun layanan menyederhanakan tugas pasca-deployment dengan menyiapkan penjadwalan pipeline data. Anda dapat memicu konfigurasi alur kerja ini secara manual di Dataform pada tab Rilis dan Penjadwalan menggunakan menu tiga titik.
Untuk mendapatkan izin yang
diperlukan untuk men-deploy demo Cortex Framework,
minta administrator Anda untuk memberi Anda
peran IAM Service Account Token Creator (roles/iam.serviceAccountTokenCreator) di project sumber dan target Anda.
Untuk mengetahui informasi selengkapnya tentang cara memberikan peran, lihat Mengelola akses ke project, folder, dan organisasi.
Anda mungkin juga bisa mendapatkan izin yang diperlukan melalui peran khusus atau peran bawaan lainnya.
Untuk membuat akun layanan dan memberikan peran yang diperlukan, Anda dapat menggunakan skrip berikut:
# 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
Deployment
Ikuti langkah-langkah berikut untuk membuat lingkungan Python virtual, menyinkronkan
dependensi, dan memicu pipeline data. Jangan lupa untuk menggunakan skrip uv Cortex Framework untuk membangun dan mengirim aset data ke project Google Cloud , mengubah konfigurasi lokal Anda menjadi arsitektur data yang aktif dan skalabel. Untuk mengetahui informasi selengkapnya, lihat
penginstalan uv
di bagian Prasyarat.
Menjalankan deployment demo
Jalankan perintah berikut untuk memicu deployment. Proses ini akan melakukan tindakan berikut:
- Pastikan semua prasyarat sudah selesai.
- Muat data sampel ke dalam set data BigQuery untuk berfungsi sebagai lapisan mentah untuk tujuan demonstrasi.
- Buat pipeline Dataform untuk memproses data sampel melalui lapisan data Cortex Framework.
- Buat repositori dan ruang kerja Dataform, lalu sinkronkan artefak yang dikompilasi dengan repositori.
*Opsional: Jika Akun Layanan telah diberi
--service_account- buat jadwal alur kerja dan picu eksekusi alur kerja Dataform awal.
Untuk deployment demo dengan nilai default, jalankan perintah berikut:
uv run cortex-demo --project_id=PROJECT_ID --sap_version s4
Untuk deployment demo dengan akun layanan, jalankan perintah berikut:
uv run cortex-demo --project_id=PROJECT_ID \
--service_account="cortex-dataform@PROJECT_ID.iam.gserviceaccount.com" \
--create_workflow_configs
Verifikasi
Setelah deployment selesai:
Buka Dataform untuk memeriksa kode baru yang dibuat di repositori:
- Membuat repositori Dataform:
cortex-framework-demo - Di dalam repositori Dataform, ruang kerja pengembangan:
demo - Kode yang dikompilasi dan disinkronkan (Anda dapat melihat grafik dengan mengklik
Compiled graph).
- Membuat repositori Dataform:
Eksekusi tindakan Dataform secara manual:
- Buka ruang kerja Dataform: "demo" dari repositori cortex-framework-demo di konsol Dataform Google Cloud .
- Klik Start execution.
- Klik Execute actions.
- Klik Semua tindakan.
Klik Start execution.
Pantau keberhasilan eksekusi semua tindakan di repositori Dataform Anda menggunakan tab: Log Eksekusi Alur Kerja.
Eksekusi tindakan Dataform terjadwal
Hanya berlaku jika Anda telah menggunakan parameter --service_account dan --create_workflow_configs selama deployment:
- Buka repositori Dataform cortex-framework-demo di konsol Dataform Google Cloud .
- Klik Rilis & penjadwalan
Di bagian: Konfigurasi alur kerja, klik menu tiga titik untuk tindakan yang ingin Anda jalankan, lalu klik Mulai sekarang.
Pantau keberhasilan eksekusi semua tindakan di repositori Dataform Anda menggunakan tab: Log Eksekusi Alur Kerja.
Buka konsol BigQuery, lalu klik
Datasetsuntuk melihat set data yang baru dibuat, serta memverifikasi skema dan data. Set data yang dibuat:cortex_demo_sap_s4_raw: Set data ini berisi data mentah dari sistem sumber (dalam contoh ini, SAP S/4HANA).cortex_demo_sap_s4_data_foundation: Set data ini merepresentasikan lapisan dasar data, tempat data mentah dari lapisan mentah diproses CDC.cortex_demo_data_product: Set data ini berisi produk data demo yang telah disempurnakan, tampilan atau tabel berperforma tinggi yang dirancang untuk penggunaan oleh pengguna akhir.cortex_demo_samples: Set data ini berisi data demo untuk produk data konsumsi sampel.
Membersihkan resource deployment demo
Setelah deployment demo berhasil, Anda dapat menghapus resource Google Cloud yang digunakan untuk menghindari biaya berkelanjutan. Skrip berikut menghapus set data BigQuery yang dibuat, ruang kerja Dataform, dan repositori 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."
Langkah berikutnya
Ikuti Deployment produksi untuk mempelajari cara men-deploy Google Cloud Cortex Framework di lingkungan produksi.
Baca Integrasi sistem sumber untuk mempelajari cara menghubungkan sistem produksi Anda.