1. Giriş
Bu codelab'de, yapay zeka destekli bir diyet planlayıcıyı nasıl oluşturup dağıtacağınızı öğreneceksiniz. Streamlit'in kullanıldığı kullanıcı arayüzü, Gemini Pro 2.5'in kullanıldığı LLM modeli, geliştirme amaçlı Agentic AI için Vertex AI'ın kullanıldığı Agentic AI Engine Orchestrator, verileri depolamak için BigQuery ve dağıtım için Cloud Run.
Bu codelab'de aşağıdaki gibi adım adım bir yaklaşım kullanacaksınız:
- Google Cloud projenizi hazırlayın ve gerekli tüm API'leri etkinleştirin.
- Streamlit, Vertex AI ve BigQuery kullanarak yapay zeka destekli bir diyet planlayıcı oluşturma
- Uygulamayı Cloud Run'a dağıtma
Mimariye Genel Bakış
Ön koşul
- Faturalandırmanın etkin olduğu bir Google Cloud Platform (GCP) projesi.
- Temel Python bilgisi
Neler öğreneceksiniz?
- Streamlit, Vertex AI ve BigQuery'de veri depolama kullanarak Agentic AI Diet Planner oluşturma
- Uygulamayı Cloud Run'a dağıtma
Gerekenler
- Chrome web tarayıcısı
- Gmail hesabı
- Faturalandırmanın etkin olduğu bir Cloud projesi
2. Temel kurulum ve şartlar
Kendi hızınızda ortam kurulumu
- Google Cloud Console'da oturum açın ve yeni bir proje oluşturun veya mevcut bir projeyi yeniden kullanın. Henüz bir Gmail veya Google Workspace hesabınız yoksa oluşturmanız gerekir.
- Proje adı, bu projenin katılımcıları için görünen addır. Google API'leri tarafından kullanılmayan bir karakter dizesidir. Bu bilgiyi istediğiniz zaman güncelleyebilirsiniz.
- Proje kimliği, tüm Google Cloud projelerinde benzersizdir ve sabittir (ayarlandıktan sonra değiştirilemez). Cloud Console, benzersiz bir dizeyi otomatik olarak oluşturur. Genellikle bu dizenin ne olduğuyla ilgilenmezsiniz. Çoğu codelab'de proje kimliğinize (genellikle
PROJECT_ID
olarak tanımlanır) başvurmanız gerekir. Oluşturulan kimliği beğenmezseniz başka bir rastgele kimlik oluşturabilirsiniz. Dilerseniz kendi adınızı deneyerek kullanılabilir olup olmadığını kontrol edebilirsiniz. Bu adım tamamlandıktan sonra değiştirilemez ve proje süresince geçerli kalır. - Bazı API'lerin kullandığı üçüncü bir değer olan Proje Numarası da vardır. Bu üç değer hakkında daha fazla bilgiyi belgelerde bulabilirsiniz.
- Ardından, Cloud kaynaklarını/API'lerini kullanmak için Cloud Console'da faturalandırmayı etkinleştirmeniz gerekir. Bu codelab'i tamamlamak neredeyse hiç maliyetli değildir. Bu eğitimin ötesinde faturalandırılmayı önlemek için kaynakları kapatmak üzere oluşturduğunuz kaynakları veya projeyi silebilirsiniz. Yeni Google Cloud kullanıcıları 300 ABD doları değerinde ücretsiz deneme programından yararlanabilir.
3. Başlamadan önce
Cloud Shell Düzenleyici'de Cloud Projesi Kurulumu
Bu codelab'de, faturalandırmanın etkin olduğu bir Google Cloud projenizin olduğu varsayılmaktadır. Henüz kullanmıyorsanız başlamak için aşağıdaki talimatları uygulayabilirsiniz.
- Google Cloud Console'daki proje seçici sayfasında bir Google Cloud projesi seçin veya oluşturun.
- Cloud projeniz için faturalandırmanın etkinleştirildiğinden emin olun. Faturalandırmanın bir projede etkin olup olmadığını kontrol etmeyi öğrenin .
- bq'nun önceden yüklendiği, Google Cloud'da çalışan bir komut satırı ortamı olan Cloud Shell'i kullanacaksınız. Google Cloud Console'un üst kısmından Cloud Shell'i etkinleştir'i tıklayın.
- Cloud Shell'e bağlandıktan sonra aşağıdaki komutu kullanarak kimliğinizin doğrulanıp doğrulanmadığını ve projenin proje kimliğinize ayarlanıp ayarlanmadığını kontrol edin:
gcloud auth list
- gcloud komutunun projeniz hakkında bilgi sahibi olduğunu doğrulamak için Cloud Shell'de aşağıdaki komutu çalıştırın.
gcloud config list project
- Projeniz ayarlanmamışsa ayarlamak için aşağıdaki komutu kullanın:
gcloud config set project <YOUR_PROJECT_ID>
Alternatif olarak, PROJECT_ID
kimliğini konsolda da görebilirsiniz.
Bu seçeneği tıkladığınızda sağ tarafta tüm projenizi ve proje kimliğini görürsünüz.
- Aşağıda gösterilen komutu kullanarak gerekli API'leri etkinleştirin. Bu işlem birkaç dakika sürebilir. Lütfen bekleyin.
gcloud services enable aiplatform.googleapis.com \
run.googleapis.com \
cloudbuild.googleapis.com \
cloudresourcemanager.googleapis.com \
bigquery.googleapis.com
Komut başarıyla yürütüldüğünde aşağıda gösterilene benzer bir mesaj görürsünüz:
Operation "operations/..." finished successfully.
Gcloud komutuna alternatif olarak, her ürünü arayarak veya bu bağlantıyı kullanarak konsolu kullanabilirsiniz.
Herhangi bir API atlanırsa uygulama sırasında istediğiniz zaman etkinleştirebilirsiniz.
gcloud komutları ve kullanımı için belgelere bakın.
Uygulama Çalışma Dizini Kurulumu
- Düzenleyiciyi aç düğmesini tıklayın. Bu işlemle Cloud Shell Düzenleyici açılır. Kodumuzu buraya yazabiliriz.
- Cloud Code projesinin, aşağıdaki resimde vurgulandığı gibi Cloud Shell düzenleyicisinin sol alt köşesinde (durum çubuğu) ayarlandığından ve faturalandırmanın etkin olduğu etkin Google Cloud projesine ayarlandığından emin olun. İstenirse Yetkilendir'i seçin. Cloud Shell Düzenleyici'yi başlattıktan sonra Cloud Code - Sign In (Cloud Code - Oturum Aç) düğmesinin görünmesi biraz zaman alabilir. Lütfen bekleyin.
Ardından, Python ortamımızı hazırlayacağız.
Ortam Kurulumu
Python Sanal Ortamını Hazırlama
Bir sonraki adım, geliştirme ortamını hazırlamaktır. Bu codelab'de Python 3.12'yi kullanacağız. Python sürümü ve sanal ortam oluşturma ve yönetme ihtiyacını basitleştirmek için Python virtualenv'i kullanacağız.
- Terminali henüz açmadıysanız Terminal -> Yeni Terminal'i tıklayarak açın veya Ctrl + Üst Karakter + C tuşlarını kullanın.
- Aşağıdaki komutu çalıştırarak yeni bir klasör oluşturun ve konumu bu klasör olarak değiştirin.
mkdir agent_diet_planner
cd agent_diet_planner
- Aşağıdaki komutu çalıştırarak yeni bir virtualenv oluşturun.
python -m venv .env
- Aşağıdaki komutla virtualenv'i etkinleştirin.
source .env/bin/activate
- Oluşturma
requirements.txt
Dosya → Yeni Metin Dosyası'nı tıklayın ve aşağıdaki içerikle doldurun. Ardındanrequirements.txt
olarak kaydedin.
streamlit==1.33.0
google-cloud-aiplatform
google-cloud-bigquery
pandas==2.2.2
db-dtypes==1.2.0
pyarrow==16.1.0
- Ardından, aşağıdaki komutu çalıştırarak requirements.txt dosyasındaki tüm bağımlılıkları yükleyin.
pip install -r requirements.txt
- Tüm Python kitaplığı bağımlılıklarının yüklendiğini kontrol etmek için aşağıdaki komutu yazın.
pip list
Yapılandırma dosyalarını ayarlama
Şimdi bu proje için yapılandırma dosyaları oluşturmamız gerekiyor. Yapılandırma dosyaları, değişkenleri ve hizmet hesabı kimlik bilgilerini depolamak için kullanılır.
- İlk adım, bir hizmet hesabı oluşturmaktır. Arama alanına hizmet hesabı yazıp hizmet hesabını tıklayın.
- + Hizmet hesabı oluştur'u tıklayın. Hizmet hesabı adını girip oluştur ve devam et'i tıklayın.
- İzin bölümünde, rol olarak Hizmet Hesabı Kullanıcısı'nı seçin. + Başka bir rol ekle'yi tıklayın ve IAM rolü olarak BigQuery Admin, Cloud Run Admin, Cloud Run Invoker, Vertex AI Service Agent ve Vertex AI User'ı seçin, ardından Bitti'yi tıklayın
- Hizmet hesabı e-postasını, sekme tuşunu, anahtar ekle'yi ve ardından yeni anahtar oluştur'u tıklayın.
- JSON'u seçip Oluştur'u tıklayın. Bu hizmet hesabı dosyasını, sonraki adım için yerel olarak kaydedin
- Aşağıdaki yapılandırmayla .streamlit adlı bir klasör oluşturun. Fareyi sağ tıklayın, Yeni Klasör'ü tıklayın ve klasör adını yazın
.streamlit
.streamlit
klasörünü sağ tıklayın, ardından Yeni Dosya'yı tıklayın ve aşağıdaki değeri girin. Ardındansecrets.toml
olarak kaydedin.
# 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"
- Önceki adımda oluşturulan hizmet hesabınıza göre
project_id
,private_key_id
,private_key
,client_email
,client_id , and auth_provider_x509_cert_url
değerini güncelleyin.
BigQuery veri kümesini hazırlama
Sonraki adım, oluşturma sonuçlarını BigQuery'ye kaydetmek için bir BigQuery veri kümesi oluşturmaktır.
- Arama kutusuna BigQuery yazıp BigQuery'yi tıklayın.
simgesini ve ardından Veri Kümesi Oluştur'u tıklayın.
- Veri kümesi kimliğini
diet_planner_data
girin ve Veri kümesi oluştur'utıklayın.
4. Ajan Diet Planner uygulamaları oluşturma
Aşağıdaki gibi görünen 4 girişli basit bir web arayüzü oluşturacağız.
Profilinize göre ağırlığı, boyu, yaşı ve cinsiyeti değiştirin, ardından oluştur'u tıklayın. Vertex AI kitaplığında Gemini Pro 2.5 adlı LLM modelini çağırır ve oluşturulan sonuçları BigQuery'de depolar.
Kodun çok uzun olmaması için 6 parçaya ayrılır.
Create function calculate bmi status (BMI durumunu hesaplayan işlev oluştur)
agent_diet_planner
klasörünü sağ tıklayın → Yeni Dosya'yı seçin → dosya adını girinbmi_calc.py
ardından Enter tuşuna basın.- Kodu aşağıdakilerle doldurma
# 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
}
Temsilci diyet planlayıcı ana uygulamaları oluşturma
agent_diet_planner
klasörünü sağ tıklayın → Yeni Dosya'yı seçin → dosya adını girinapp.py
ve Enter tuşuna basın.- Kodu aşağıdakilerle doldurma
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()
your_gcp_project_id
değerini proje kimliğinizle değiştirin.
Create agent diet planner main apps - setup_bq_tables
Bu bölümde, setup_bq_table
adlı bir işlev oluşturacağız. Bu işlevin 1 giriş parametresi (bq_client
) olacak. Bu işlev, BigQuery tablosunda şemayı tanımlar ve tablo yoksa oluşturur.
app.py
içinde önceki kodun altına aşağıdaki kodu girin.
# 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")
Create agent diet planner main apps - generate_diet_plan
Bu bölümde, 1 giriş parametresi olan generate_diet_plan
adlı bir işlev oluşturacağız. Bu işlev, tanımlama istemiyle Gemini Pro 2.5 LLM modelini çağırır ve sonuçlar oluşturur.
app.py
içinde önceki kodun altına aşağıdaki kodu girin.
# 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
Create agent diet planner main apps - save_to_bq
Bu bölümde, bq_client
, user_id
ve plan
olmak üzere 3 giriş parametresi içeren save_to_bq
adlı bir işlev oluşturacağız. Bu işlev, oluşturma sonucunu BigQuery tablosuna kaydeder.
app.py
içinde önceki kodun altına aşağıdaki kodu girin.
# 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
Create agent diet planner main apps - main
Bu bölümde, giriş parametresi olmayan main
adlı bir işlev oluşturacağız. Bu işlev, çoğunlukla Streamlit kullanıcı arayüzü komut dosyasını, oluşturulan sonucu görüntülemeyi, BigQuery tablosundan geçmişte oluşturulan sonucu görüntülemeyi ve verileri Markdown dosyasına indirmeyi işler.
app.py
içinde önceki kodun altına aşağıdaki kodu girin.
# 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()
Kodu app.py adıyla kaydedin.
5. Uygulamaları Cloud Run'a dağıtmak için Cloud Build'i kullanma
Elbette bu harika uygulamayı diğer kullanıcılara da göstermek istiyoruz. Bunu yapmak için bu uygulamayı paketleyip başkalarının erişebileceği herkese açık bir hizmet olarak Cloud Run'a dağıtabiliriz. Bunu yapmak için mimariyi tekrar gözden geçirelim.
Öncelikle Dockerfile'a ihtiyacımız var. Dosya > Yeni Metin Dosyası'nı tıklayın, aşağıdaki kodu kopyalayıp yapıştırın ve Dockerfile olarak kaydedin.
# 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"]
Ardından, uygulamaları Docker görüntüleri haline getirmek, Artifact Registry'ye aktarmak ve Cloud Run'a dağıtmak için cloudbuild.yaml dosyasını oluşturacağız.
Dosya->Yeni Metin Dosyası'nı tıklayın,aşağıdaki kodu kopyalayıp yapıştırın ve cloudbuild.yaml olarak kaydedin.
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'
Bu noktada, uygulamaları Docker görüntüleri haline getirmek, Artifact Registry'ye aktarmak ve Cloud Run'a dağıtmak için gereken tüm dosyalarımız var. Şimdi dağıtımı yapalım. Cloud Shell terminaline gidin ve mevcut projenin etkin projeniz olarak yapılandırıldığından emin olun. Aksi takdirde, proje kimliğini ayarlamak için gcloud configure komutunu kullanmanız gerekir:
gcloud config set project [PROJECT_ID]
Ardından, uygulamaları Docker görüntüleri haline getirmek, Artifact Registry'ye aktarmak ve Cloud Run'a dağıtmak için aşağıdaki komutu çalıştırın:
gcloud builds submit --config cloudbuild.yaml
Bu komut, daha önce sağladığımız Dockerfile'a göre Docker container'ını oluşturur ve Artifact Registry'ye aktarır. Ardından oluşturulan görüntüyü Cloud Run'a dağıtırız. Bu sürecin tamamı cloudbuild.yaml
adımda tanımlanmıştır.
Bunun bir demo uygulaması olması nedeniyle burada kimliği doğrulanmamış erişime izin verildiğini unutmayın. Kurumsal ve üretim uygulamalarınız için uygun kimlik doğrulama yöntemini kullanmanız önerilir.
Dağıtım tamamlandıktan sonra Cloud Run sayfasında kontrol edebiliriz. Üstteki Cloud Console arama çubuğunda Cloud Run'ı arayıp Cloud Run ürününü tıklayın.
Ardından, Cloud Run Hizmeti sayfasında listelenen dağıtılmış hizmeti inceleyebilirsiniz. Hizmet URL'sini almak için hizmeti tıklayın.
Hizmet URL'si üst çubukta yer alır.
Uygulamanızı gizli pencereden veya mobil cihazınızdan kullanmaya başlayabilirsiniz. Bu özellik şu anda kullanılabilir.
6. Temizleme
Bu codelab'de kullanılan kaynaklar için Google Cloud hesabınızın ücretlendirilmesini istemiyorsanız şu adımları uygulayın:
- Google Cloud Console'da Kaynakları yönetin sayfasına gidin.
- Proje listesinde silmek istediğiniz projeyi seçin ve Sil'i tıklayın.
- İletişim kutusunda proje kimliğini yazın ve projeyi silmek için Kapat'ı tıklayın.
- Alternatif olarak, konsolda Cloud Run'a gidebilir, yeni dağıttığınız hizmeti seçip silebilirsiniz.