Membangun dan Men-deploy Perencana Diet Agen yang Didukung AI dengan Streamlit, Gemini Pro, Vertex AI, dan BigQuery

1. Pengantar

9370c0f92c692ebb.png

Dalam codelab ini, Anda akan mempelajari cara membuat dan men-deploy Perencana Diet Agen yang Didukung AI. Untuk UI menggunakan Streamlit, model LLM menggunakan Gemini Pro 2.5, Agentic AI Engine Orchestrator menggunakan Vertex AI untuk pengembangan Agentic AI, BigQuery untuk menyimpan data, dan Cloud Run untuk deployment.

Selama mengikuti codelab, Anda akan menggunakan pendekatan langkah demi langkah sebagai berikut:

  1. Siapkan project Google Cloud Anda dan Aktifkan semua API yang diperlukan di project tersebut
  2. Membangun Perencana Diet AI Agentik menggunakan streamlit, Vertex AI, dan BigQuery
  3. Men-deploy aplikasi ke Cloud Run

Ringkasan Arsitektur

84e3f3620dc4ed68.png

Prasyarat

  • Project Google Cloud Platform (GCP) dengan penagihan diaktifkan.
  • Pengetahuan dasar Python

Yang akan Anda pelajari

  • Cara membuat Perencana Diet AI Agentik menggunakan streamlit, Vertex AI, dan menyimpan data ke BigQuery
  • Cara men-deploy aplikasi ke Cloud Run

Yang Anda butuhkan

  • Browser web Chrome
  • Akun Gmail
  • Project Cloud dengan penagihan diaktifkan

2. Penyiapan Dasar dan Persyaratan

Penyiapan lingkungan mandiri

  1. Login ke Google Cloud Console dan buat project baru atau gunakan kembali project yang sudah ada. Jika belum memiliki akun Gmail atau Google Workspace, Anda harus membuatnya.

fbef9caa1602edd0.png

37d264871000675d.png

5e3ff691252acf41.png

  • Nama project adalah nama tampilan untuk peserta project ini. String ini adalah string karakter yang tidak digunakan oleh Google API. Anda dapat memperbaruinya kapan saja.
  • Project ID bersifat unik di semua project Google Cloud dan tidak dapat diubah (tidak dapat diubah setelah ditetapkan). Cloud Console otomatis membuat string unik; biasanya Anda tidak mementingkan kata-katanya. Di sebagian besar codelab, Anda harus merujuk Project ID-nya (umumnya diidentifikasi sebagai PROJECT_ID). Jika tidak suka dengan ID yang dibuat, Anda dapat membuat ID acak lainnya. Atau, Anda dapat mencobanya sendiri, dan lihat apakah ID tersebut tersedia. ID tidak dapat diubah setelah langkah ini dan tersedia selama durasi project.
  • Sebagai informasi, ada nilai ketiga, Project Number, yang digunakan oleh beberapa API. Pelajari lebih lanjut ketiga nilai ini di dokumentasi.
  1. Selanjutnya, Anda harus mengaktifkan penagihan di Konsol Cloud untuk menggunakan resource/API Cloud. Menjalankan operasi dalam codelab ini tidak akan memakan banyak biaya, bahkan mungkin tidak sama sekali. Guna mematikan resource agar tidak menimbulkan penagihan di luar tutorial ini, Anda dapat menghapus resource yang dibuat atau menghapus project-nya. Pengguna baru Google Cloud memenuhi syarat untuk mengikuti program Uji Coba Gratis senilai $300 USD.

3. Sebelum memulai

Menyiapkan Project Cloud di Cloud Shell Editor

Codelab ini mengasumsikan bahwa Anda sudah memiliki project Google Cloud dengan penagihan yang diaktifkan. Jika belum memilikinya, Anda dapat mengikuti petunjuk di bawah untuk memulai.

  1. Di Konsol Google Cloud, di halaman pemilih project, pilih atau buat project Google Cloud.
  2. Pastikan penagihan diaktifkan untuk project Cloud Anda. Pelajari cara memeriksa apakah penagihan telah diaktifkan pada suatu project .
  3. Anda akan menggunakan Cloud Shell, lingkungan command line yang berjalan di Google Cloud yang telah dilengkapi dengan bq. Klik Activate Cloud Shell di bagian atas konsol Google Cloud.

26f20e837ff06119.png

  1. Setelah terhubung ke Cloud Shell, Anda dapat memeriksa bahwa Anda sudah diautentikasi dan project sudah ditetapkan ke project ID Anda menggunakan perintah berikut:
gcloud auth list
  1. Jalankan perintah berikut di Cloud Shell untuk mengonfirmasi bahwa perintah gcloud mengetahui project Anda.
gcloud config list project
  1. Jika project Anda belum ditetapkan, gunakan perintah berikut untuk menetapkannya:
gcloud config set project <YOUR_PROJECT_ID>

Atau, Anda juga dapat melihat ID PROJECT_ID di konsol

bb98435b79995b15.jpeg

Klik project tersebut dan Anda akan melihat semua project dan project ID di sisi kanan

ffa73dee57de5307.jpeg

  1. Aktifkan API yang diperlukan melalui perintah yang ditampilkan di bawah. Proses ini mungkin memerlukan waktu beberapa menit, jadi harap bersabar.
gcloud services enable aiplatform.googleapis.com \
                           run.googleapis.com \
                           cloudbuild.googleapis.com \
                           cloudresourcemanager.googleapis.com \
                    bigquery.googleapis.com

Jika perintah berhasil dieksekusi, Anda akan melihat pesan yang mirip dengan yang ditampilkan di bawah:

Operation "operations/..." finished successfully.

Alternatif untuk perintah gcloud adalah melalui konsol dengan menelusuri setiap produk atau menggunakan link ini.

Jika ada API yang terlewat, Anda dapat mengaktifkannya kapan saja selama pelaksanaan.

Baca dokumentasi untuk mempelajari perintah gcloud dan penggunaannya.

Menyiapkan Direktori Kerja Aplikasi

  1. Klik tombol Open Editor, yang akan membuka Cloud Shell Editor, kita dapat menulis kode di sini 6f8e18e89d3198c0.png
  2. Pastikan project Cloud Code ditetapkan di pojok kiri bawah (status bar) editor Cloud Shell, seperti yang ditandai dalam gambar di bawah dan ditetapkan ke project Google Cloud aktif tempat Anda mengaktifkan penagihan. Authorize jika diminta. Mungkin perlu waktu beberapa saat setelah menginisialisasi Editor Cloud Shell hingga tombol Cloud Code - Sign In muncul, jadi harap bersabar.

4e372d87c51afa30.png

Selanjutnya, kita akan menyiapkan lingkungan Python

Penyiapan Lingkungan

Menyiapkan Lingkungan Virtual Python

Langkah berikutnya adalah menyiapkan lingkungan pengembangan. Kita akan menggunakan Python 3.12 dalam codelab ini dan kita akan menggunakan virtualenv Python untuk menyederhanakan kebutuhan pembuatan dan pengelolaan versi Python serta lingkungan virtual

  1. Jika Anda belum membuka terminal, buka dengan mengklik Terminal -> New Terminal , atau gunakan Ctrl + Shift + C

8635b60ae2f45bbc.jpeg

  1. Buat folder baru dan ubah lokasi ke folder ini dengan menjalankan perintah berikut
mkdir agent_diet_planner
cd agent_diet_planner
  1. Buat virtualenv baru dengan menjalankan perintah berikut
python -m venv .env
  1. Aktifkan virtualenv dengan perintah berikut
source .env/bin/activate
  1. Buat requirements.txt. Klik File → New Text File, lalu isi dengan konten di bawah. Kemudian simpan sebagai requirements.txt
streamlit==1.33.0
google-cloud-aiplatform
google-cloud-bigquery
pandas==2.2.2
db-dtypes==1.2.0
pyarrow==16.1.0
  1. Kemudian, instal semua dependensi dari requirements.txt dengan menjalankan perintah berikut
pip install -r requirements.txt
  1. Ketik perintah berikut di bawah untuk memeriksa apakah semua dependensi library python telah diinstal
pip list

Menyiapkan File Konfigurasi

Sekarang kita perlu menyiapkan file konfigurasi untuk project ini. File konfigurasi digunakan untuk menyimpan kredensial variabel dan akun layanan.

  1. Langkah pertama adalah membuat akun layanan. Ketik akun layanan di penelusuran, lalu klik akun layanan. 18c210d5d1e2a666.png
  2. Klik + Buat akun layanan. Masukkan Nama akun layanan, lalu klik buat dan lanjutkan. 67cad62d367e236a.png
  3. Di izin, Pilih peran Service Account User. Klik + Add another role, lalu pilih peran IAM : BigQuery Admin, Cloud Run Admin, Cloud Run Invoker, Vertex AI Service Agent, dan Vertex AI User, lalu klik Done be84afdc13678f6c.png
  4. Klik Email akun layanan, klik tombol tab, klik tambahkan kunci → Buat kunci baru. 50989af3bb9e1538.png
  5. Pilih json, lalu klik Buat. Simpan file akun layanan ini ke lokal untuk langkah berikutnya a4a119672da532da.png
  6. Buat folder bernama .streamlit dengan konfigurasi berikut. Klik kanan mouse, Klik Folder Baru, lalu ketik nama folder .streamlit
  7. Klik Kanan di folder .streamlit, lalu klik File Baru dan isi dengan nilai di bawah. Kemudian simpan sebagai secrets.toml
# secrets.toml (for Streamlit sharing)
# Store in .streamlit/secrets.toml

[gcp]
project_id = "your_gcp_project"
location = "us-central1"

[gcp_service_account]
type = "service_account"
project_id = "your-project-id"
private_key_id = "your-private-key-id"
private_key = '''-----BEGIN PRIVATE KEY-----
YOUR_PRIVATE_KEY_HERE
-----END PRIVATE KEY-----'''
client_email = "your-sa@project-id.iam.gserviceaccount.com"
client_id = "your-client-id"
auth_uri = "https://accounts.google.com/o/oauth2/auth"
token_uri = "https://oauth2.googleapis.com/token"
auth_provider_x509_cert_url = "https://www.googleapis.com/oauth2/v1/certs"
client_x509_cert_url = "https://www.googleapis.com/robot/v1/metadata/x509/your-sa%40project-id.iam.gserviceaccount.com"
  1. Perbarui nilai untuk project_id, private_key_id, private_key, client_email , client_id , and auth_provider_x509_cert_url berdasarkan akun layanan yang Anda buat di langkah sebelumnya

Siapkan Set Data BigQuery

Langkah berikutnya adalah membuat Set Data BigQuery untuk menyimpan hasil pembuatan ke BigQuery.

  1. Ketik BigQuery di penelusuran, lalu klik BigQuery.
  2. Klik 2f2e87396859bc74.png, lalu klik Buat Set Data
  3. Masukkan ID set data diet_planner_data, lalu klik Buat set data 2055cda1ee0360bd.png

4. Membangun aplikasi Perencana Diet Agen

Kita akan membuat antarmuka web sederhana dengan 4 input yang terlihat seperti ini

43b20db2d5f94f38.png

Ubah berat badan, tinggi badan, usia, dan jenis kelamin berdasarkan profil Anda, lalu klik buat. Notebook ini akan memanggil model LLM Gemini Pro 2.5 di library Vertex AI dan menyimpan hasil yang dihasilkan ke BigQuery.

Kode akan dipisahkan menjadi 6 bagian agar tidak terlalu panjang.

Buat fungsi untuk menghitung status BMI

  1. Klik Kanan folder agent_diet_planner → File Baru .. → masukkan nama file bmi_calc.py, lalu tekan enter
  2. Isi kode dengan berikut
# Add this function to calculate BMI and health status
def calculate_bmi_status(weight, height):
   """
   Calculate BMI and return status message
   """
   height_m = height / 100  # Convert cm to meters
   bmi = weight / (height_m ** 2)
  
   if bmi < 18.5:
       status = "underweight"
       message = "⚠️ Your BMI suggests you're underweight. Consider increasing calorie intake with nutrient-dense foods."
   elif 18.5 <= bmi < 25:
       status = "normal"
       message = "✅ Your BMI is in the healthy range. Let's maintain this balance!"
   elif 25 <= bmi < 30:
       status = "overweight"
       message = "⚠️ Your BMI suggests you're overweight. Focus on gradual weight loss through balanced nutrition."
   else:
       status = "obese"
       message = "❗ Your BMI indicates obesity. Please consult a healthcare provider for personalized guidance."
  
   return {
       "value": round(bmi, 1),
       "status": status,
       "message": message
   }

Membuat aplikasi utama perencana diet agen

  1. Klik Kanan folder agent_diet_planner → File Baru .. → masukkan nama file app.py, lalu tekan enter.
  2. Isi kode dengan berikut
import os
from google.oauth2 import service_account
import streamlit as st
from google.cloud import bigquery
from vertexai.preview.generative_models import GenerativeModel
import vertexai
import datetime
import time
import pandas as pd
from bmi_calc import calculate_bmi_status

# Get configuration from environment
PROJECT_ID = os.environ.get("GCP_PROJECT_ID", "your_gcp_project_id")
LOCATION = os.environ.get("GCP_LOCATION", "us-central1")

#CONSTANTS Dataset and table in BigQuery
DATASET = "diet_planner_data"
TABLE = "user_plans"

# Initialize Vertex AI
vertexai.init(project=PROJECT_ID, location=LOCATION)

# Initialize BigQuery client
try:
   # For Cloud Run, use default credentials
   bq_client = bigquery.Client()
except:
   # For local development, use service account from secrets
   if "gcp_service_account" in st.secrets:
       service_account_info = dict(st.secrets["gcp_service_account"])
       credentials = service_account.Credentials.from_service_account_info(service_account_info)
       bq_client = bigquery.Client(credentials=credentials, project=PROJECT_ID)
   else:
       st.error("BigQuery client initialization failed")
       st.stop()

Ubah nilai your_gcp_project_id dengan project ID Anda.

Buat aplikasi utama perencana diet agen - setup_bq_tables

Di bagian ini, kita akan membuat fungsi bernama setup_bq_table dengan 1 parameter input bq_client. Fungsi ini akan menentukan skema di tabel BigQuery dan membuat tabel jika belum ada.

Isi kode dengan kode berikut di bawah kode sebelumnya di app.py

# Create BigQuery table if not exists
def setup_bq_table(bq_client):
   dataset_id = f"{st.secrets['gcp']['project_id']}.{DATASET}"
   table_id = f"{dataset_id}.{TABLE}"
  
   schema = [
       bigquery.SchemaField("user_id", "STRING", mode="REQUIRED"),
       bigquery.SchemaField("timestamp", "TIMESTAMP", mode="REQUIRED"),
       bigquery.SchemaField("weight", "FLOAT", mode="REQUIRED"),
       bigquery.SchemaField("height", "INTEGER", mode="REQUIRED"),
       bigquery.SchemaField("age", "INTEGER", mode="REQUIRED"),
       bigquery.SchemaField("gender", "STRING", mode="REQUIRED"),
       bigquery.SchemaField("diet_plan", "STRING", mode="REQUIRED")
   ]
  
   try:
       bq_client.get_table(table_id)
   except:
       table = bigquery.Table(table_id, schema=schema)
       bq_client.create_table(table)
       st.toast("BigQuery table created successfully")

Buat aplikasi utama perencana diet agen - generate_diet_plan

Di bagian ini, kita akan membuat fungsi bernama generate_diet_plan dengan 1 parameter input. Fungsi ini akan memanggil model LLM Gemini Pro 2.5 dengan perintah yang ditentukan dan menghasilkan hasil.

Isi kode dengan kode berikut di bawah kode sebelumnya di app.py

# Generate diet plan using Gemini Pro
def generate_diet_plan(params):
   try:
       model = GenerativeModel("gemini-2.5-pro")
       prompt = f"""
       Create a personalized 7-day diet plan for:
       - {params['gender']}, {params['age']} years old
       - Weight: {params['weight']} kg
       - Height: {params['height']} cm
      
       Include:
       1. Daily calorie target
       2. Macronutrient breakdown (carbs, protein, fat)
       3. Meal timing and frequency
       4. Food recommendations
       5. Hydration guidance
      
       Make the plan:
       - Nutritionally balanced
       - Practical for daily use
       - Culturally adaptable
       - With portion size guidance
       """
      
       response = model.generate_content(prompt)
       return response.text
   except Exception as e:
       st.error(f"AI generation error: {str(e)}")
       return None

Buat aplikasi utama perencana diet agen - save_to_bq

Di bagian ini, kita akan membuat fungsi bernama save_to_bq dengan 3 parameter input : bq_client, user_id, dan plan. Fungsi ini akan menyimpan hasil pembuatan ke tabel BigQuery

Isi kode dengan kode berikut di bawah kode sebelumnya di app.py

# Save user data to BigQuery
def save_to_bq(bq_client, user_id, plan):
   try:
       dataset_id = f"{st.secrets['gcp']['project_id']}.{DATASET}"
       table_id = f"{dataset_id}.{TABLE}"
      
       row = {
           "user_id": user_id,
           "timestamp": datetime.datetime.utcnow().isoformat(),
           "weight": st.session_state.user_data["weight"],
           "height": st.session_state.user_data["height"],
           "age": st.session_state.user_data["age"],
           "gender": st.session_state.user_data["gender"],
           "diet_plan": plan
       }
      
       errors = bq_client.insert_rows_json(table_id, [row])
       if errors:
           st.error(f"BigQuery error: {errors}")
       else:
           return True
   except Exception as e:
       st.error(f"Data saving error: {str(e)}")
       return False

Buat aplikasi utama perencana diet agen - main

Di bagian ini, kita akan membuat fungsi bernama main tanpa parameter input. Fungsi ini sebagian besar menangani skrip UI streamlit, menampilkan hasil yang dihasilkan, menampilkan hasil yang dihasilkan sebelumnya dari tabel BigQuery, dan untuk mendownload data ke file markdown.

Isi kode dengan kode berikut di bawah kode sebelumnya di app.py

# Streamlit UI
def main():
   st.set_page_config(page_title="AI Diet Planner", page_icon="🍏", layout="wide")
  
   # Initialize session state
   if "user_data" not in st.session_state:
       st.session_state.user_data = None
   if "diet_plan" not in st.session_state:
       st.session_state.diet_plan = None
  
   # Initialize clients
   #bq_client = init_clients()
   setup_bq_table(bq_client)
  
   st.title("🍏 AI-Powered Diet Planner")
   st.markdown("""
   <style>
   .stProgress > div > div > div > div {
       background-color: #4CAF50;
   }
   [data-testid="stForm"] {
       background: #f0f5ff;
       padding: 20px;
       border-radius: 10px;
       border: 1px solid #e6e9ef;
   }
   </style>
   """, unsafe_allow_html=True)
  
   # User input form
   with st.form("user_profile", clear_on_submit=False):
       st.subheader("Your Profile")
       col1, col2 = st.columns(2)
      
       with col1:
           weight = st.number_input("Weight (kg)", min_value=30.0, max_value=200.0, value=70.0)
           height = st.number_input("Height (cm)", min_value=100, max_value=250, value=170)
          
       with col2:
           age = st.number_input("Age", min_value=18, max_value=100, value=30)
           gender = st.selectbox("Gender", ["Man", "Woman"])
      
       submitted = st.form_submit_button("Generate Diet Plan")
      
       if submitted:
           user_data = {
               "weight": weight,
               "height": height,
               "age": age,
               "gender": gender
           }

           st.session_state.user_data = user_data
           # Calculate BMI
           bmi_result = calculate_bmi_status(weight, height)

           # Display BMI results in a visually distinct box
           with st.container():
               st.subheader("📊 Your Health Assessment")
               col1, col2 = st.columns([1, 3])
      
               with col1:
                   st.metric("BMI", bmi_result["value"])
          
               with col2:
                   if bmi_result["status"] != "normal":
                       st.warning(bmi_result["message"])
                   else:
                       st.success(bmi_result["message"])
      
           # Add BMI scale visualization
           st.markdown(f"""
           <div style="background:#f0f2f6;padding:10px;border-radius:10px;margin-top:10px">
           <small>BMI Scale:</small><br>
           <div style="display:flex;height:20px;background:linear-gradient(90deg,
           #4e79a7 0%,
           #4e79a7 18.5%,
           #60bd68 18.5%,
           #60bd68 25%,
           #f28e2b 25%,
           #f28e2b 30%,
           #e15759 30%,
           #e15759 100%);position:relative">
           <div style="position:absolute;left:{min(100, max(0, (bmi_result["value"]/40)*100))}%;top:-5px">

           </div>
           </div>
           <div style="display:flex;justify-content:space-between">
           <span>Underweight (<18.5)</span>
           <span>Healthy (18.5-25)</span>
           <span>Overweight (25-30)</span>
           <span>Obese (30+)</span>
           </div>
           </div>
           """, unsafe_allow_html=True)

           # Store BMI in session state
           st.session_state.bmi = bmi_result         
  
   # Plan generation and display
   if submitted and st.session_state.user_data:
       with st.spinner("🧠 Generating your personalized diet plan using Gemini AI..."):
           #diet_plan = generate_diet_plan(st.session_state.user_data)
           diet_plan = generate_diet_plan({**st.session_state.user_data,"bmi": bmi_result["value"],
                                           "bmi_status": bmi_result["status"]
           })

           if diet_plan:
               st.session_state.diet_plan = diet_plan
              
               # Generate unique user ID
               user_id = f"user_{int(time.time())}"
              
               # Save to BigQuery
               if save_to_bq(bq_client, user_id, diet_plan):
                   st.toast("✅ Plan saved to database!")
  
   # Display generated plan
   if st.session_state.diet_plan:
       st.subheader("Your Personalized Diet Plan")
       st.markdown("---")
       st.markdown(st.session_state.diet_plan)
      
       # Download button
       st.download_button(
           label="Download Plan",
           data=st.session_state.diet_plan,
           file_name="my_diet_plan.md",
           mime="text/markdown"
       )
      
       # Show history
       st.subheader("Your Plan History")
       try:
           query = f"""
               SELECT timestamp, weight, height, age, gender
               FROM `{st.secrets['gcp']['project_id']}.{DATASET}.{TABLE}`
               WHERE user_id LIKE 'user_%'
               ORDER BY timestamp DESC
               LIMIT 5
           """
           history = bq_client.query(query).to_dataframe()
           if not history.empty:
               history["timestamp"] = pd.to_datetime(history["timestamp"])
               st.dataframe(history.style.format({
                   "weight": "{:.1f} kg",
                   "height": "{:.0f} cm"
               }))
           else:
               st.info("No previous plans found")
       except Exception as e:
           st.error(f"History load error: {str(e)}")

if __name__ == "__main__":
   main()

Simpan kode dengan nama app.py.

5. Men-deploy aplikasi menggunakan Cloud Build ke Cloud Run

Sekarang, tentu saja kita ingin memamerkan aplikasi luar biasa ini kepada orang lain. Untuk melakukannya, kita dapat mengemas aplikasi ini dan men-deploy-nya ke Cloud Run sebagai layanan publik yang dapat diakses oleh orang lain. Untuk melakukannya, mari kita bahas kembali arsitekturnya

84e3f3620dc4ed68.png

Pertama, kita memerlukan Dockerfile. Klik File->New Text File, lalu salin dan tempel kode berikut, kemudian simpan sebagai Dockerfile

# Use official Python image
FROM python:3.12-slim

# Set environment variables
ENV PYTHONDONTWRITEBYTECODE 1
ENV PYTHONUNBUFFERED 1
ENV PORT 8080

# Install system dependencies
RUN apt-get update && \
   apt-get install -y --no-install-recommends \
   build-essential \
   libpq-dev \
   && rm -rf /var/lib/apt/lists/*

# Set working directory
WORKDIR /app

# Copy requirements
COPY requirements.txt .

# Install Python dependencies
RUN pip install --no-cache-dir -r requirements.txt

# Copy application files
COPY . .

# Expose port
EXPOSE $PORT

# Run the application
CMD ["streamlit", "run", "app.py", "--server.port", "8080", "--server.address", "0.0.0.0"]

Selanjutnya, kita akan membuat cloudbuild.yaml untuk membangun aplikasi menjadi image Docker, mengirim ke Artifact Registry, dan men-deploy ke Cloud Run.

Klik File->New Text File, lalu salin dan tempel kode berikut, kemudian simpan sebagai cloudbuild.yaml

steps:
 # Build Docker image
 - name: 'gcr.io/cloud-builders/docker'
   args: ['build', '-t', 'gcr.io/$PROJECT_ID/diet-planner:$BUILD_ID', '--no-cache',
        '--progress=plain',
        '.']
   id: 'Build'
   timeout: 1200s
   waitFor: ['-']
   dir: '.'
  # Push to Container Registry
 - name: 'gcr.io/cloud-builders/docker'
   args: ['push', 'gcr.io/$PROJECT_ID/diet-planner:$BUILD_ID']
   id: 'Push'
   waitFor: ['Build']
  # Deploy to Cloud Run
 - name: 'gcr.io/google.com/cloudsdktool/cloud-sdk'
   entrypoint: gcloud
   args:
     - 'run'
     - 'deploy'
     - 'diet-planner-service'
     - '--image=gcr.io/$PROJECT_ID/diet-planner:$BUILD_ID'
     - '--port=8080'
     - '--region=us-central1'
     - '--platform=managed'
     - '--allow-unauthenticated'
     - '--set-env-vars=GCP_PROJECT_ID=$PROJECT_ID,GCP_LOCATION=us-central1'
     - '--cpu=1'
     - '--memory=1Gi'
     - '--timeout=300'
   waitFor: ['Push']

options:
 logging: CLOUD_LOGGING_ONLY
 machineType: 'E2_HIGHCPU_8'
 diskSizeGb: 100

images:
 - 'gcr.io/$PROJECT_ID/diet-planner:$BUILD_ID'

Pada tahap ini, kita sudah memiliki semua file yang diperlukan untuk membangun aplikasi menjadi image Docker, mengirimkannya ke Artifact Registry, dan men-deploy-nya ke Cloud Run. Mari kita deploy. Buka Terminal Cloud Shell dan pastikan project saat ini dikonfigurasi ke project aktif Anda. Jika tidak, Anda harus menggunakan perintah gcloud configure untuk menyetel project ID:

gcloud config set project [PROJECT_ID]

Kemudian, jalankan perintah berikut untuk mem-build aplikasi menjadi image Docker, mengirimkannya ke Artifact Registry, dan men-deploy-nya ke Cloud Run

gcloud builds submit --config cloudbuild.yaml

Langkah ini akan membangun container Docker berdasarkan Dockerfile yang telah kita berikan sebelumnya dan mengirimkannya ke Artifact Registry. Setelah itu, kita akan men-deploy image yang dibuat ke Cloud Run. Semua proses ini ditentukan dalam langkah-langkah cloudbuild.yaml.

Perhatikan bahwa kami mengizinkan akses tanpa autentikasi di sini karena ini adalah aplikasi demo. Sebaiknya gunakan autentikasi yang sesuai untuk aplikasi produksi dan perusahaan Anda.

Setelah deployment selesai, kita dapat memeriksanya di halaman Cloud Run. Telusuri Cloud Run di kotak penelusuran konsol cloud di bagian atas, lalu klik produk Cloud Run

3c460765656fc072.png

Setelah itu, Anda dapat memeriksa layanan yang di-deploy yang tercantum di halaman Cloud Run Service. Klik layanan tersebut agar kita bisa mendapatkan URL layanan

93dc975d3caeab0e.png

URL layanan akan berada di panel atas

9325464321c106f8.pngLanjutkan dan gunakan aplikasi Anda dari jendela Samaran atau perangkat seluler Anda. Fitur ini seharusnya sudah aktif.

6. Pembersihan

Agar tidak menimbulkan biaya pada akun Google Cloud Anda untuk resource yang digunakan dalam codelab ini, ikuti langkah-langkah berikut:

  1. Di konsol Google Cloud, buka halaman Manage resources.
  2. Dalam daftar project, pilih project yang ingin Anda hapus, lalu klik Delete.
  3. Pada dialog, ketik project ID, lalu klik Shut down untuk menghapus project.
  4. Atau, Anda dapat membuka Cloud Run di konsol, memilih layanan yang baru saja Anda deploy, lalu menghapusnya.