Men-deploy tombol fitur
Panduan memulai ini menunjukkan cara membuat, meluncurkan, dan menggunakan tombol fitur dengan App Lifecycle Manager.
Dalam panduan memulai ini, Anda akan mempelajari cara menginstal dan mengonfigurasi penyedia tombol, serta melakukan pemberian tombol fitur dasar menggunakan tombol fitur App Lifecycle Manager.
Sebelum memulai
-
Login ke Akun Google Anda.
Jika Anda belum memilikinya, Daftar untuk membuat akun baru.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
Enable the App Lifecycle Manager, Artifact Registry, Infrastructure Manager, Developer Connect, Cloud Build, Cloud Storage, Cloud Run and SaaS Config APIs.
Roles required to enable APIs
To enable APIs, you need the Service Usage Admin IAM role (
roles/serviceusage.serviceUsageAdmin), which contains theserviceusage.services.enablepermission. Learn how to grant roles.-
Create a service account:
-
Ensure that you have the Create Service Accounts IAM role
(
roles/iam.serviceAccountCreator) and the Project IAM Admin role (roles/resourcemanager.projectIamAdmin). Learn how to grant roles. -
In the Google Cloud console, go to the Create service account page.
Go to Create service account - Select your project.
-
In the Service account name field, enter a name. The Google Cloud console fills in the Service account ID field based on this name.
In the Service account description field, enter a description. For example,
Service account for quickstart. - Click Create and continue.
-
Grant the Project > Owner role to the service account.
To grant the role, find the Select a role list, then select Project > Owner.
- Click Continue.
-
Click Done to finish creating the service account.
-
Ensure that you have the Create Service Accounts IAM role
(
-
Instal Google Cloud CLI.
-
Jika Anda menggunakan penyedia identitas (IdP) eksternal, Anda harus login ke gcloud CLI dengan identitas gabungan Anda terlebih dahulu.
-
Untuk melakukan inisialisasi gcloud CLI, jalankan perintah berikut:
gcloud init -
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
Enable the App Lifecycle Manager, Artifact Registry, Infrastructure Manager, Developer Connect, Cloud Build, Cloud Storage, Cloud Run and SaaS Config APIs.
Roles required to enable APIs
To enable APIs, you need the Service Usage Admin IAM role (
roles/serviceusage.serviceUsageAdmin), which contains theserviceusage.services.enablepermission. Learn how to grant roles.-
Create a service account:
-
Ensure that you have the Create Service Accounts IAM role
(
roles/iam.serviceAccountCreator) and the Project IAM Admin role (roles/resourcemanager.projectIamAdmin). Learn how to grant roles. -
In the Google Cloud console, go to the Create service account page.
Go to Create service account - Select your project.
-
In the Service account name field, enter a name. The Google Cloud console fills in the Service account ID field based on this name.
In the Service account description field, enter a description. For example,
Service account for quickstart. - Click Create and continue.
-
Grant the Project > Owner role to the service account.
To grant the role, find the Select a role list, then select Project > Owner.
- Click Continue.
-
Click Done to finish creating the service account.
-
Ensure that you have the Create Service Accounts IAM role
(
-
Instal Google Cloud CLI.
-
Jika Anda menggunakan penyedia identitas (IdP) eksternal, Anda harus login ke gcloud CLI dengan identitas gabungan Anda terlebih dahulu.
-
Untuk melakukan inisialisasi gcloud CLI, jalankan perintah berikut:
gcloud init - Buat penawaran SaaS. Anda memerlukan penawaran SaaS untuk menyelesaikan panduan memulai ini. Untuk mengetahui informasi selengkapnya tentang cara membuat penawaran SaaS, lihat Membuat penawaran SaaS.
Memberikan izin ke akun layanan App Lifecycle Manager
Saat Anda mengaktifkan App Lifecycle Manager API, App Lifecycle Manager akan membuat akun layanan. Akun layanan ini disebut
service-PROJECT-NUMBER@gcp-sa-saasservicemgmt.iam.gserviceaccount.com,
dengan PROJECT-NUMBER adalah nomor project Anda.
Berikan izin yang diperlukan ke akun layanan ini dengan menjalankan perintah berikut:
gcloud projects add-iam-policy-binding `PROJECT_ID` \
--member="serviceAccount:service-<var>`PROJECT_NUMBER`</var>@gcp-sa-saasservicemgmt.iam.gserviceaccount.com" \
--role="roles/saasservicemgmt.serviceAgent"
Ganti:
- PROJECT_ID: ID project Anda yang berupa string.
- PROJECT_NUMBER: Nomor project Anda.
Menemukan dokumentasi referensi
Akun layanan ini bertindak atas nama Anda untuk berbagai tugas seperti unit penyediaan.
Membuat repositori di Artifact Registry
Untuk menggunakan App Lifecycle Manager, Anda memerlukan repositori di Artifact Registry. Untuk membuat repositori ini, jalankan perintah berikut di terminal Anda:
gcloud artifacts repositories create flags-quickstart \
--repository-format=docker \
--location=us-central1
Repositori ini akan berisi cetak biru (file Terraform yang dikemas) yang menjelaskan cara menyediakan unit Anda.
Membuat cetak biru aplikasi pemberian tombol fitur
Buat skrip Python yang membaca tombol fitur dan gunakan untuk mem-build dan mengirim image Docker:
Buat direktori bernama
alm_dockeruntuk konteks build Docker Anda.Di direktori
alm_docker, buat fileflags.pydengan cuplikan ini:import google.auth.transport.grpc import google.auth.transport.requests import grpc import logging import time import os import sys from flask import Flask, jsonify from openfeature import api from openfeature.provider import ProviderEvent, ProviderStatus from openfeature.contrib.provider.flagd import FlagdProvider from openfeature.contrib.provider.flagd.config import ResolverType # --- Flask App Setup --- app = Flask(__name__) # --- Logging Setup --- logging.basicConfig(stream=sys.stdout) # Log to stdout for Cloud Run log = logging.getLogger(__name__) log.setLevel(logging.INFO) # Use INFO or DEBUG as needed # --- OpenFeature/Flagd Setup --- FLAG_KEY = "quickstart-flag" DEFAULT_FLAG_VALUE = False # Check for necessary environment variable provider_id = os.environ.get("FLAGD_SOURCE_PROVIDER_ID") if not provider_id: log.critical("FATAL: FLAGD_SOURCE_PROVIDER_ID environment variable not set.") sys.exit("FLAGD_SOURCE_PROVIDER_ID not set") # Exit if critical config is missing log.info(f"Initializing OpenFeature provider for ID: {provider_id}") def add_x_goog_request_params_header(config_name): return lambda context, callback: callback([("x-goog-request-params", f'name={config_name}')], None) try: # Configure gRPC credentials for Google Cloud service configservice_credentials = grpc.composite_channel_credentials( grpc.ssl_channel_credentials(), grpc.metadata_call_credentials( google.auth.transport.grpc.AuthMetadataPlugin( google.auth.default()[0], # Get just the credentials from the tuple google.auth.transport.requests.Request() ) ), grpc.metadata_call_credentials( add_x_goog_request_params_header(provider_id) ) ) # Set up the Flagd provider to connect to SaaS Config service # Using IN_PROCESS resolver type as recommended for direct gRPC connection provider = FlagdProvider( resolver_type=ResolverType.IN_PROCESS, host="saasconfig.googleapis.com", port=443, sync_metadata_disabled=True, # Important when using IN_PROCESS with direct service provider_id=provider_id, channel_credentials=configservice_credentials ) api.set_provider(provider) client = api.get_client() initial_flag_value = client.get_boolean_value(FLAG_KEY, DEFAULT_FLAG_VALUE) log.info(f"***** STARTUP FLAG CHECK ***** Flag '{FLAG_KEY}' evaluated to: {initial_flag_value}") except Exception as e: log.critical(f"FATAL: Failed to initialize OpenFeature provider: {e}", exc_info=True) # Depending on the desired behavior, you might exit or let Flask start # but log the critical failure. Exiting might be safer in production. sys.exit(f"Provider initialization failed: {e}") # --- Flask Routes --- @app.route('/') def home(): """Endpoint to check the feature flag's value.""" log.info(f"Request received for flag: {FLAG_KEY}") try: # Get the flag value. Use the client initialized earlier. # The default value (DEFAULT_FLAG_VALUE) is returned if the flag isn't found # or if the provider isn't ready/errors occur during evaluation. flag_value = client.get_boolean_value(FLAG_KEY, DEFAULT_FLAG_VALUE) log.info(f"Evaluated flag '{FLAG_KEY}': {flag_value}") return jsonify({ "flag_key": FLAG_KEY, "value": flag_value, }) except Exception as e: log.error(f"Error evaluating flag '{FLAG_KEY}': {e}", exc_info=True) # Return an error response but keep the server running return jsonify({ "error": f"Failed to evaluate flag {FLAG_KEY}", "details": str(e), }), 500 if __name__ == '__main__': port = int(os.environ.get('PORT', 8080)) log.info(f"Starting Flask server on port {port}") app.run(host='0.0.0.0', port=port)Skrip Python ini menunjukkan cara mengakses tombol fitur dalam aplikasi Anda yang berjalan sebagai image Docker di unit App Lifecycle Manager. Skrip ini menggunakan prinsip OpenFeature standar untuk berintegrasi dengan layanan konfigurasi tombol fitur App Lifecycle Manager (
saasconfig.googleapis.com).Buat file teks bernama
requirements.txtdi direktorialm_dockeryang berisi cuplikan ini:google-auth grpcio>=1.49.1,<2.0.0dev openfeature-sdk==0.8.0 openfeature-provider-flagd==0.2.2 requests typing_extensions Flask>=2.0Tambahkan
Dockerfiledi direktorialm_dockerdengan:FROM python:3.11-slim WORKDIR /app COPY requirements.txt . RUN pip install --no-cache-dir -r requirements.txt COPY flags.py . CMD ["python", "flags.py"]Jalankan perintah ini di lingkungan lokal Anda untuk mem-build dan mengirim image Docker:
export DOCKER_REGISTRY="us-central1-docker.pkg.dev/PROJECT_ID/flags-quickstart" export FULL_IMAGE_PATH="${DOCKER_REGISTRY}/flags-quickstart:latest" docker build -t "${FULL_IMAGE_PATH}" . docker push "${FULL_IMAGE_PATH}"Ganti:
- PROJECT_ID: ID project Anda yang berupa string.
Di lingkungan Docker Anda, buat direktori
alm_terraform.Di
alm_terraform, buat file berikut:main.tflocals { config_path = "projects/${var.system_unit_project}/locations/${var.system_unit_location}/featureFlagsConfigs/${var.system_unit_name}" docker_image_path = "${var.system_unit_location}-docker.pkg.dev/${var.system_unit_project}/${var.docker_repo_name}/${var.docker_tag}" } provider "google" { project = var.system_unit_project region = var.system_unit_location } resource "google_cloud_run_service" "flags_quickstart_service" { name = var.cloud_run_service_name location = var.system_unit_location project = var.system_unit_project template { spec { containers { image = local.docker_image_path env { name = "FLAGD_SOURCE_PROVIDER_ID" value = local.config_path } } service_account_name = var.actuation_sa } } }variables.tfvariable "actuation_sa" { description = "Actuation SA" type = string } variable "system_unit_project" { description = "Project id - variable set by App Lifecycle Manager" type = string } variable "system_unit_location" { description = "Location - variable set by App Lifecycle Manager" type = string } variable "system_unit_name" { description = "Unit name- variable set by App Lifecycle Manager" type = string } variable "docker_repo_name" { description = "The name of the Artifact Registry repository where the Docker image is stored." type = string default = "flags-quickstart" } variable "docker_tag" { description = "The tag of the Docker image to deploy." type = string default = "flags-quickstart:latest" } variable "cloud_run_service_name" { description = "Name for the Cloud Run service to be created." type = string default = "saas-flags-quickstart-svc" }Di direktori
alm_terraform, jalankan perintah ini untuk mengemas file cetak biru Terraform:zip terraform-files.zip main.tf variables.tf
Menggunakan cetak biru aplikasi untuk membuat unit
Setelah membuat cetak biru aplikasi yang menggunakan tombol fitur, Anda harus membuat jenis unit App Lifecycle Manager (flags-unit-kind), lalu membuat unit jenis ini (flags-quickstart-unit).
Untuk mengetahui informasi selengkapnya tentang unit dan jenis unit, lihat Unit model dan paket deployment.
Untuk menggunakan cetak biru aplikasi guna membuat unit, ikuti langkah-langkah gcloud CLI berikut:
Untuk mengemas konfigurasi Terraform Anda sebagai image OCI (cetak biru), buat file bernama
Dockerfiledi direktori Terraform Anda:# syntax=docker/dockerfile:1-labs FROM scratch COPY --exclude=Dockerfile --exclude=.git --exclude=.gitignore . /Build dan kirim
Dockerfileke repositori Artifact Registry Anda:IMAGE_NAME="us-central1-docker.pkg.dev/PROJECT_ID/flags-quickstart/flags-quickstart-blueprint:latest" ENGINE_TYPE=inframanager ENGINE_VERSION=1.5.7 docker buildx build -t $IMAGE_NAME \ --push \ --annotation "com.easysaas.engine.type=$ENGINE_TYPE" \ --annotation "com.easysaas.engine.version=$ENGINE_VERSION" \ --provenance=false .Ganti:
- PROJECT_ID: ID project Anda yang berupa string.
Buat resource
flags-unit-kinddanflags-release:# Create unit kind gcloud beta app-lifecycle-manager unit-kinds create flags-unit-kind \ --project=PROJECT_ID \ --location=global \ --saas=flags-quickstart-saas-offering # Create release referencing the Blueprint image gcloud beta app-lifecycle-manager releases create flags-release \ --project=PROJECT_ID \ --location=global \ --unit-kind=flags-unit-kind \ --blueprint-package=$IMAGE_NAMEGanti:
- PROJECT_ID: ID project Anda yang berupa string.
Buat unit
flags-quickstart-unit:gcloud beta app-lifecycle-manager units create flags-quickstart-unit \ --project=PROJECT_ID \ --location=us-central1 \ --unit-kind=flags-unit-kind \ --management-mode=userGanti:
- PROJECT_ID: ID project Anda yang berupa string.
Membuat dan menyediakan tombol fitur
Sebelum tombol fitur App Lifecycle Manager dapat digunakan oleh unit yang disediakan, Anda harus membuat resource tombol fitur dan memulai peluncuran untuk menyebarkan konfigurasi ke unit.
Jalankan perintah untuk membuat dan menyediakan tombol fitur quickstart-flag:
Di lingkungan Anda, tentukan variabel berikut:
export FLAG_ID="quickstart-flag" export FLAG_KEY="quickstart-flag" export SAAS_OFFERING_ID="flags-quickstart-saas-offering" export UNIT_KIND_ID="flags-unit-kind" export UNIT_ID="flags-quickstart-unit" export ROLLOUT_KIND_ID="flags-quickstart-rollout-kind" export ROLLOUT_ID="flags-quickstart-rollout"Buat resource tombol fitur:
gcloud beta app-lifecycle-manager flags create ${FLAG_ID} \ --project=${PROJECT_ID} \ --key=${FLAG_KEY} \ --flag-value-type=BOOL \ --location=global \ --unit-kind=${UNIT_KIND_ID}Buat revisi:
export FLAG_REVISION_ID="${FLAG_ID}-rev1" gcloud beta app-lifecycle-manager flags revisions create ${FLAG_REVISION_ID} \ --project=${PROJECT_ID} \ --flag=${FLAG_ID} \ --location=globalBuat rilis:
export FLAG_RELEASE_ID="${FLAG_ID}-rel1" gcloud beta app-lifecycle-manager flags releases create ${FLAG_RELEASE_ID} \ --project=${PROJECT_ID} \ --flag-revisions=${FLAG_REVISION_ID} \ --unit-kind=${UNIT_KIND_ID} \ --location=globalBuat jenis peluncuran:
gcloud beta app-lifecycle-manager rollout-kinds create ${ROLLOUT_KIND_ID} \ --project=${PROJECT_ID} \ --unit-kind=${UNIT_KIND_ID} \ --rollout-orchestration-strategy=Google.Cloud.Simple.AllAtOnce \ --location=globalBuat peluncuran:
gcloud beta app-lifecycle-manager rollouts create ${ROLLOUT_ID} \ --project=${PROJECT_ID} \ --flag-release=${FLAG_RELEASE_ID} \ --rollout-kind=${ROLLOUT_KIND_ID} \ --location=global
Anda dapat memantau status peluncuran dengan:
gcloud beta app-lifecycle-manager rollouts describe ${ROLLOUT_ID} --project=${PROJECT_ID} --location=global
Melihat nilai tombol di layanan yang berjalan
Setelah unit App Lifecycle Manager berhasil menyediakan layanan Cloud Run, Anda dapat memverifikasi bahwa aplikasi Anda berjalan dan mengevaluasi tombol fitur dengan benar:
Di Google Cloud konsol, buka Cloud Run:
Temukan layanan bernama
saas-flags-quickstart-svcdi regionus-central1. Tanda centang di sampingsaas-flags-quickstart-svcmenunjukkan bahwa layanan tersebut berjalan dengan sukses.Klik
saas-flags-quickstart-svcuntuk melihat detailnya.Pilih tab Logs.
Di entri log, cari pesan yang mirip dengan yang berikut ini:
INFO:__main__:***** STARTUP FLAG CHECK ***** Flag 'quickstart-flag' evaluated to: falseHal ini mengonfirmasi bahwa aplikasi dimulai, terhubung ke layanan Konfigurasi SaaS, dan mengevaluasi
quickstart-flag.
Untuk mengakses endpoint publik, klik tab Networking.
- Temukan URL publik yang tercantum di bagian Endpoints.
- Klik URL untuk membukanya di browser Anda, atau gunakan alat seperti
curluntuk mengaksesnya dari terminal Anda (misalnya,curl YOUR_SERVICE_URL). Setiap kali Anda mengakses URL, layanan akan mengevaluasi tombol fitur dan menampilkan nilai saat ini dalam format JSON. Contoh:
{ "flag_key": "quickstart-flag", "value": false }
Anda telah berhasil men-deploy layanan yang membaca tombol fitur terkelola App Lifecycle Manager. Google Cloud Anda dapat bereksperimen dengan mengubah nilai tombol dan membuat peluncuran baru untuk melihat aplikasi Anda mengambil perubahan tersebut.
Pembersihan
Agar akunAnda tidak dikenai biaya untuk resource yang digunakan pada halaman ini, ikuti langkah-langkah berikut. Google Cloud
Opsional: Menghapus project
Jika Anda men-deploy solusi di project baru Google Cloud , dan jika Anda tidak lagi memerlukan project tersebut, hapus project tersebut dengan menyelesaikan langkah-langkah berikut:
- Di Google Cloud konsol, buka halaman Manage resources.
- Pada daftar project, pilih project yang ingin Anda hapus, lalu klik Hapus.
- Pada layar perintah, ketik project ID, lalu klik Matikan.
Langkah berikutnya
- Coba panduan memulai mandiri Men-deploy tombol fitur untuk menggunakan tombol secara terpisah dari deployment terkelola App Lifecycle Manager.
- Pelajari panduan integrasi khusus bahasa (Python, Java, Go).
- Tinjau ringkasan App Lifecycle Manager untuk mempelajari App Lifecycle Manager lebih lanjut.