การเรียกใช้แอปพลิเคชัน AI แบบเอเจนต์โดยใช้เหตุการณ์แบบไม่พร้อมกัน

1. บทนำ

ภาพรวม

แล็บนี้แสดงวิธีติดตั้งใช้งานการเรียกใช้ที่ขับเคลื่อนด้วยเหตุการณ์ของเอเจนต์ ADK ที่ทําให้ใช้งานได้ใน Cloud Run อย่างปลอดภัยโดยใช้บริการ Eventarc และ Pub/Sub ส่วนใหญ่แล้วผู้ใช้หรือตัวแทนรายอื่นจะเรียกใช้ตัวแทนโดยตรง อย่างไรก็ตาม เมื่อผสานรวมเอเจนต์เข้ากับเวิร์กโฟลว์ที่อิงตามเหตุการณ์ที่มีอยู่ การโทรโดยตรงจะต้องมีการเปลี่ยนแปลงซอฟต์แวร์ที่มีอยู่ การทริกเกอร์การเรียกใช้เอเจนต์ตามเหตุการณ์ช่วยให้คุณรวมเอเจนต์เข้ากับเวิร์กโฟลว์ที่มีอยู่ได้โดยไม่ต้องเปลี่ยนแปลงเวิร์กโฟลว์

สิ่งที่คุณต้องทำ

ในแล็บนี้ คุณจะได้สร้างแอปพลิเคชันที่ใช้ ZooKeeper ซึ่งมีเอเจนต์ AI และใช้เครื่องมือ 2-3 อย่างเพื่อแสดงข้อมูลเกี่ยวกับสัตว์ในสวนสัตว์สมมติ

ภาพประกอบ Zoo-Keeper

คุณจะทำให้แอปพลิเคชัน ZooKeeper ใช้งานได้เป็นบริการใน Cloud Run ซึ่งเป็นแพลตฟอร์มการประมวลผลแบบ Serverless ที่มีการจัดการครบวงจรซึ่งเรียกใช้คอนเทนเนอร์แบบไม่เก็บสถานะในโครงสร้างพื้นฐานของ Google จากนั้นคุณจะตั้งค่าทริกเกอร์ Eventarc ที่จะเรียกใช้ปลายทางของบริการเพื่อจัดการข้อความที่เผยแพร่ไปยังหัวข้อ Pub/Sub แบบไม่พร้อมกัน คุณจะตรวจสอบว่าการติดตั้งใช้งานเป็นไปตามแนวทางปฏิบัติแนะนำ ซึ่งรวมถึงการใช้บัญชีบริการ IAM ที่กำหนด การให้สิทธิ์เข้าถึงที่มีสิทธิ์น้อยที่สุด และการลดพื้นผิวการโจมตีที่อาจเกิดขึ้นโดยการเปิดเผยปลายทางของแอปพลิเคชัน ZooKeeper ให้ Eventarc เท่านั้น คุณจะทำได้โดยใช้ Cloud Shell และ Cloud Console คุณจะใช้ไลบรารี ADK และ Cloud SDK สำหรับ Python หากต้องการตรวจสอบลักษณะการทำงาน คุณจะต้องใช้ gcloud CLI

สิ่งที่คุณจะได้เรียนรู้

  • ทำให้เอเจนต์ ADK ใช้งานได้กับ Google Cloud Run
  • ผสานรวมทริกเกอร์ Eventarc กับเอเจนต์ ADK ที่ทำงานใน Google Cloud Run
  • รักษาความปลอดภัยในการติดตั้งใช้งานและการผสานรวมกับ Eventarc โดยใช้หลักการให้สิทธิ์เข้าถึงน้อยที่สุดด้วยความช่วยเหลือจาก Google Cloud IAM
  • เผยแพร่และดึงข้อความไปยังและจาก Pub/Sub
  • ลดการเปิดเผยต่อสาธารณะของแอปพลิเคชันที่ติดตั้งใช้งานใน Google Cloud Run

สิ่งที่คุณต้องมี

โปรดทราบว่าบัญชีของคุณต้องมีสิทธิ์เข้าถึง IAM ในโปรเจ็กต์ที่อนุญาตให้คุณจัดสรรทรัพยากรและกำหนดค่าสิทธิ์เข้าถึง IAM สำหรับทรัพยากรเหล่านี้

ประสบการณ์ของผู้ใช้ที่ใช้เบราว์เซอร์อื่นอาจแตกต่างจากที่อธิบายไว้ในห้องทดลอง

การใช้บัญชีของบริษัทหรือโรงเรียนอาจถูกจำกัดในการดำเนินการบางอย่างที่อธิบายไว้ใน Lab

2. การตั้งค่าสภาพแวดล้อม

เพื่อให้มั่นใจว่าสภาพแวดล้อมการพัฒนาที่ใช้งานได้อย่างเต็มรูปแบบสำหรับแล็บ คุณจะต้องใช้ Google Cloud Shell ซึ่งติดตั้งเครื่องมือที่จำเป็นทั้งหมดไว้ล่วงหน้า ทำตามวิธีการเพื่อตั้งค่าสภาพแวดล้อม

สร้างบัญชี Google หากยังไม่มี

วิธีการตั้งค่า

  1. ใช้บัญชี Google เพื่อลงชื่อเข้าใช้ Google Cloud Console
  2. 👉 เปิดเครื่องมือเลือกโปรเจ็กต์ในแถบนำทางด้านบน (อาจระบุว่า "เลือกโปรเจ็กต์" หรือแสดงชื่อโปรเจ็กต์ที่มีอยู่) หรือคลิกแป้นพิมพ์ลัด Ctrl+O แล้วเลือกโปรเจ็กต์ที่มีอยู่หรือสร้างโปรเจ็กต์ใหม่ ระบบจะใช้เวลา 2-3 วินาทีในการสร้างโปรเจ็กต์ใหม่ รอจนกว่าจะพร้อม แล้วเลือกโดยใช้เครื่องมือเลือกโปรเจ็กต์
  1. 👉 คลิกไอคอน Cloud Shell ที่ด้านบนของคอนโซล Google Cloud (ทำเครื่องหมายด้วยสี่เหลี่ยมผืนผ้าสีแดง):ปุ่ม Cloud Shell
    หากระบบขอ ให้คลิก **ให้สิทธิ์** ในกล่องโต้ตอบป๊อปอัปเพื่ออนุมัติให้ Cloud Shell ใช้ข้อมูลเข้าสู่ระบบของบัญชี
    กล่องโต้ตอบการให้สิทธิ์
  2. 👉💻 ตรวจสอบว่าได้กำหนดค่า gcloud CLI ให้ใช้โปรเจ็กต์ที่คุณเลือก (หรือสร้าง) แล้ว เรียกใช้คำสั่งต่อไปนี้เพื่อตรวจสอบรหัสโปรเจ็กต์ที่กำหนดค่าไว้
    gcloud config get-value project
    
    คุณควรเห็นเอาต์พุตที่คล้ายกับต่อไปนี้
    Your active configuration is: [cloudshell-19597]
    [PROJECT_ID]
    
    โดยที่ [PROJECT_ID] จะเป็นรหัสของโปรเจ็กต์ที่คุณเลือกหรือสร้าง👉💻 หากเห็นค่าอื่น ให้เรียกใช้คำสั่งต่อไปนี้เพื่อกำหนดค่ารหัสโปรเจ็กต์เป็นรหัสโปรเจ็กต์เริ่มต้นสำหรับคำสั่ง gcloud CLI
    gcloud config set project [YOUR_PROJECT_ID]
    
    เช่น หากรหัสโปรเจ็กต์คือ lab-project-id-example-123 คำสั่งควรเป็นดังนี้
    gcloud config set project lab-project-id-example-123
    
    🤔💻 หากจำรหัสโปรเจ็กต์ไม่ได้ ให้ใช้คำสั่งต่อไปนี้เพื่อแสดงรหัสโปรเจ็กต์ทั้งหมดที่คุณมีสิทธิ์เข้าถึง โดยเริ่มจากรหัสล่าสุด
    gcloud projects list \
        --format='value(projectId)' \
        --sort-by='~createTime'
    
  1. 👉💻 ตั้งค่าสถานที่สำหรับการจัดสรรทรัพยากร รวมถึงรหัสและหมายเลขของโปรเจ็กต์ในตัวแปรสภาพแวดล้อม
    export LOCATION="us-central1"
    export PROJECT_ID=$(gcloud config get-value project)
    export PROJECT_NUMBER=$(gcloud projects describe $PROJECT_ID --format="value(projectNumber)")
    
  2. 👉💻 เปิดใช้ Google API ที่จำเป็นสำหรับแล็บนี้
    gcloud services enable \
        aiplatform.googleapis.com \
        eventarc.googleapis.com \
        run.googleapis.com \
        artifactregistry.googleapis.com \
        cloudbuild.googleapis.com \
        pubsub.googleapis.com
    
    โปรดอดใจรอ คำสั่งนี้อาจใช้เวลาสักครู่ เมื่อเรียกใช้คำสั่งสำเร็จ คุณจะเห็นข้อความคล้ายกับข้อความต่อไปนี้
    Operation "operations/ab12345c-6e7f-8ghi-jkl9-m0e1d23456f7" finished successfully.
    

3. ทําให้แอปพลิเคชันสาธิต ZooKeeper ใช้งานได้

ขั้นตอนต่อไปนี้จะจัดสรรและกำหนดค่าทรัพยากร รวมถึงการติดตั้งใช้งานแอปพลิเคชัน AI ที่มีเอเจนต์

การตั้งค่าทรัพยากร Pub/Sub

คุณจะสร้างหัวข้อ Pub/Sub 2 หัวข้อ โดยบริการของบุคคลที่สามจะใช้หมายเลขหนึ่งเพื่อส่งเหตุการณ์ไปยังแอปพลิเคชัน AI แบบเอเจนต์ อีกรายการหนึ่งสำหรับแอปพลิเคชันในการเผยแพร่ผลลัพธ์ของการประมวลผลเหตุการณ์

  1. 👉💻 สร้างหัวข้อ Pub/Sub ที่ใช้เพื่อทริกเกอร์แอปพลิเคชัน AI แบบเอเจนต์
    gcloud pubsub topics create invoke_agent
    export INVOKE_TOPIC_ID=$(gcloud pubsub topics describe invoke_agent --format="value(name)")
    
  2. 👉💻 สร้างหัวข้อ Pub/Sub ที่แอปพลิเคชันสามารถโพสต์การตอบกลับได้
    gcloud pubsub topics create agent_responses
    export RESPONSE_TOPIC_ID=$(gcloud pubsub topics describe agent_responses --format="value(name)")
    gcloud pubsub subscriptions create agent_responses \
        --topic=agent_responses
    
    คำสั่งเหล่านี้จะสร้างการสมัครใช้บริการสำหรับหัวข้อ Pub/Sub ที่สร้างขึ้นด้วย ระบบจะใช้การสมัครใช้บริการเมื่อคุณเรียกใช้เดโมเพื่อดูผลลัพธ์

การตั้งค่าบัญชีบริการและนโยบาย IAM ระดับโปรเจ็กต์

คุณจะสร้างบัญชีบริการ 2 บัญชีเพื่อจำกัดขอบเขตการเข้าถึงของบริการ Cloud Run และทริกเกอร์ Eventarc ให้อยู่ในระดับต่ำสุดตามหลักการให้สิทธิ์ขั้นต่ำที่สุด บริการ Cloud Run ต้องมีสิทธิ์ในการเขียนบันทึกและร่องรอย เพื่อเรียกใช้ Gemini LLM ใน Google Vertex AI และโพสต์ผลลัพธ์ไปยังหัวข้อ Pub/Sub สิทธิ์เข้าถึงขั้นต่ำของทริกเกอร์ Eventarc ต้องมีสิทธิ์ในการเรียกใช้บริการ ZooKeeper ของ Cloud Run และเข้าถึง Pub/Sub เพื่ออ่านเหตุการณ์ที่โพสต์ วิธีการเหล่านี้จะแนะนำให้คุณให้สิทธิ์ที่จำเป็นแก่บัญชีบริการของทริกเกอร์เพื่อแอบอ้างบริการของระบบ Pub/Sub หลังจากสร้างทรัพยากรทริกเกอร์ Eventarc แล้ว คุณจะเรียกใช้คำสั่งที่ให้บทบาท roles/run.invoker เพื่อเปิดใช้บัญชีบริการของทริกเกอร์ให้เรียกใช้บริการ Cloud Run ได้

  1. 👉💻 สร้างบัญชีบริการสำหรับบริการ Cloud Run โดยทำดังนี้
    gcloud iam service-accounts create zookeeper-cloudrun-sa
    export ZOOKEEPER_SA="zookeeper-cloudrun-sa@${PROJECT_ID}.iam.gserviceaccount.com"
    
  2. 👉💻 ให้สิทธิ์บัญชีบริการในการเขียนบันทึกและ Trace รวมถึงใช้โมเดล Gemini ใน Vertex AI โดยทำดังนี้
    gcloud projects add-iam-policy-binding "${PROJECT_ID}" \
         --member="serviceAccount:${ZOOKEEPER_SA}" \
         --role="roles/logging.logWriter" \
         --condition=None
    gcloud projects add-iam-policy-binding "${PROJECT_ID}" \
        --member="serviceAccount:${ZOOKEEPER_SA}" \
        --role="roles/cloudtrace.agent" \
        --condition=None
    gcloud projects add-iam-policy-binding "${PROJECT_ID}" \
        --member="serviceAccount:${ZOOKEEPER_SA}" \
        --role="roles/aiplatform.user" \
        --condition=None
    
  3. 👉💻 ให้สิทธิ์บัญชีบริการในการโพสต์ข้อความไปยังหัวข้อ "agent_responses" โดยทำดังนี้
    gcloud pubsub topics add-iam-policy-binding agent_responses \
        --member="serviceAccount:${ZOOKEEPER_SA}" \
        --role="roles/pubsub.publisher"
    
  4. 👉💻 สร้างบัญชีบริการสำหรับทริกเกอร์ Eventarc โดยทำดังนี้
    gcloud iam service-accounts create zookeeper-trigger-sa
    export TRIGGER_SA="zookeeper-trigger-sa@${PROJECT_ID}.iam.gserviceaccount.com"
    
  5. 👉💻 มอบสิทธิ์ให้บัญชีบริการของระบบ Pub/Sub เพื่อส่งคำขอแบบพุชที่ผ่านการตรวจสอบสิทธิ์
    gcloud iam service-accounts add-iam-policy-binding "${TRIGGER_SA}" \
           --member="serviceAccount:service-${PROJECT_NUMBER}@gcp-sa-pubsub.iam.gserviceaccount.com" \
        --role="roles/iam.serviceAccountTokenCreator"
    
    คำสั่งนี้ไม่บังคับหากสร้างโปรเจ็กต์หลังจากวันที่ 8 เมษายน 2021

การทำให้แอป ZooKeeper ใช้งานได้กับ Cloud Run

คุณจะดาวน์โหลดโค้ดของแอปพลิเคชันเดโมจาก GitHub และทำให้โค้ดใช้งานได้กับ Cloud Run

  1. 👉💻 ดาวน์โหลดแอปพลิเคชัน Agentic AI
    mkdir zoo-keeper-lab && cd zoo-keeper-lab
    git init
    git remote add origin https://github.com/GoogleCloudPlatform/devrel-demos
    git config set core.sparseCheckout true
    echo "ai-ml/agent-labs/adk_invoke_with_pubsub/" >> .git/info/sparse-checkout
    git pull origin main --depth 1
    cd ai-ml/agent-labs/adk_invoke_with_pubsub/
    
    คำสั่งเหล่านี้ใช้การชำระเงินแบบ Sparse ของ Git สำหรับโฟลเดอร์ที่มีแอปเดโมเพื่อลดเวลาในการดาวน์โหลด
  2. 👉💻 ทำให้แอปพลิเคชัน AI ที่มีเอเจนต์ใช้งานได้ใน Cloud Run
    gcloud run deploy zookeeper-agent \
        --region="${LOCATION}" \
        --source="." \
        --no-allow-unauthenticated \
        --quiet \
        --service-account="${ZOOKEEPER_SA}" \
        --set-env-vars="REPLY_TOPIC_ID=${RESPONSE_TOPIC_ID}"
    

กำหนดค่าทริกเกอร์ Eventarc

หลังจากเตรียมทรัพยากรทั้งหมด (หัวข้อ Pub/Sub, บัญชีบริการ IAM และบริการ Cloud Run) แล้ว ก็ถึงเวลาตั้งค่าทรัพยากรทริกเกอร์ Eventarc คุณจะสร้างทรัพยากรทริกเกอร์ Eventarc และให้สิทธิ์ในการเรียกใช้บริการ Cloud Run แก่บัญชีบริการของทริกเกอร์

  1. 👉💻 สร้างทริกเกอร์ Eventarc
    gcloud eventarc triggers create invoke-agent \
        --location="${LOCATION}" \
        --destination-run-service="zookeeper-agent" \
        --destination-run-path="/zookeeper" \
        --destination-run-region="${LOCATION}" \
        --event-filters="type=google.cloud.pubsub.topic.v1.messagePublished" \
        --transport-topic="${INVOKE_TOPIC_ID}" \
        --service-account="${TRIGGER_SA}"
    
  2. 👉💻 ให้สิทธิ์แก่บัญชีบริการของทริกเกอร์เพื่อเรียกใช้บริการ Cloud Run โดยทำดังนี้
    gcloud run services add-iam-policy-binding zookeeper-agent \
        --region="${LOCATION}" \
        --member="serviceAccount:${TRIGGER_SA}" \
        --role="roles/run.invoker"
    

4. ตรวจสอบวิธีการทำงานของโซลูชัน

ตอนนี้ให้ตรวจสอบสิ่งที่คุณเพิ่งติดตั้งใช้งาน แผนภาพต่อไปนี้แสดงทรัพยากรทั้งหมดและวิธีที่ทรัพยากรเหล่านั้นโต้ตอบกัน คุณจะใช้ gcloud CLI เพื่อเผยแพร่ข้อความไปยังหัวข้อ "invoke_agent" ซึ่งจะจำลองเหตุการณ์ที่บริการของบุคคลที่สามบันทึกลงในบริการรับส่งข้อความเพื่อเรียกใช้แอปพลิเคชัน Agentic AI

แผนภาพโซลูชัน

การติดตั้งใช้งานมีความปลอดภัยตามการเข้าถึงที่มีสิทธิ์ขั้นต่ำที่สุด บริการ Cloud Run บังคับใช้การตรวจสอบสิทธิ์ (ดูอาร์กิวเมนต์ --no-allow-unauthenticated ในขั้นตอนที่ 9 ในส่วนก่อนหน้า) มีเพียงข้อมูลประจำตัวที่มีบทบาท roles/run.invoker หรือสิทธิ์ที่คล้ายกันเท่านั้นที่เรียกใช้บริการได้ และจะมอบบทบาทนี้ให้กับบัญชีบริการของทริกเกอร์ Eventarc เท่านั้น ในทำนองเดียวกัน การเข้าถึงหัวข้อ "invoke_agent" จะได้รับการจำกัดเพื่อไม่อนุญาตให้เผยแพร่เหตุการณ์โดยไม่ได้รับอนุญาต คุณยังคงเรียกใช้ Agent ของ ZooKeeper ได้โดยตรงโดยข้ามการโพสต์ไปยังหัวข้อ Pub/Sub ดูส่วนที่ 6 เพื่อดูวิธีซ่อนปลายทางของแอปพลิเคชันจากการเข้าถึงแบบสาธารณะ

เรียกใช้เวิร์กโฟลว์

คุณจะจำลองเหตุการณ์ภายนอกโดยการเผยแพร่คำถามในภาษามนุษย์ไปยัง ZooKeeper

👉💻 ใช้คำสั่งต่อไปนี้เพื่อโพสต์ข้อความไปยังหัวข้อ Pub/Sub

gcloud pubsub topics publish invoke_agent \
    --message='{"user_id": "important_app", "prompt": "How many animals are in the zoo?"}'

ในความเป็นจริงแล้ว ข้อมูลกิจกรรมอาจอยู่ในรูปแบบที่อ่านยากกว่า แอปพลิเคชัน AI ที่มีเอเจนต์จะต้องมีวิธีการโดยละเอียดเกี่ยวกับรูปแบบของเหตุการณ์ ข้อมูล และสิ่งที่เอเจนต์ควรทำกับข้อมูลเหตุการณ์ เพื่อประมวลผล

คุณสามารถตรวจสอบว่าตัวแทนได้รับเหตุการณ์ ประมวลผลคำขอ และโพสต์การตอบกลับไปยังหัวข้อ "agent_responses" แล้ว หากต้องการอ่านคำตอบ คุณจะต้องใช้การสมัครใช้บริการ "agent_responses" (Codelab ใช้รหัสเดียวกันสำหรับทั้งหัวข้อและการสมัครใช้บริการสำหรับคำตอบ)

👉💻 ใช้คำสั่งต่อไปนี้เพื่ออ่านคำตอบของตัวแทนจากการสมัครใช้บริการ Pub/Sub

gcloud pubsub subscriptions pull agent_responses --auto-ack

เอาต์พุตจะพิมพ์ตารางที่มีข้อมูลเมตาของข้อความและเพย์โหลดที่มีคำตอบว่ามีสัตว์ 33 สายพันธุ์ในสวนสัตว์ ธง --auto-ack จะรับทราบข้อความโดยอัตโนมัติหลังจากที่ดึงข้อความแล้ว จึงจะไม่มีการส่งข้อความอีก

วิธีการทำงาน

ดูซอร์สโค้ดของแอปพลิเคชัน AI ที่มีเอเจนต์ได้โดยเปิด Cloud Shell Editor แล้วดูไฟล์ในโฟลเดอร์ ~/zoo-keeper-lab นอกจากนี้ คุณยังดูซอร์สโค้ดได้ใน GitHub

  • main.py จะติดตั้งใช้งานเว็บแอปพลิเคชัน FastAPI พื้นฐานที่มีตัวแฮนเดิลเดียวซึ่งประมวลผลเหตุการณ์ Eventarc
  • processor.py จะแยกวิเคราะห์ข้อความของเหตุการณ์เพื่อดึงรหัสผู้ใช้และคำขอ จากนั้นจะสร้างเซสชันใหม่ใน ADK Runner และเรียกใช้ตัวแทน Zookeeper เพื่อประมวลผลคำขอ ระบบจะโพสต์คำตอบจากตัวแทนไปยังหัวข้อ Pub/Sub ของ "agent_responses"
  • โฟลเดอร์ย่อย zookeeper_agent จะโฮสต์ซอร์สโค้ดของตัวแทน ADK คุณเรียกใช้คำสั่ง adk run zookeeper_agent จากโฟลเดอร์รูทของแอปพลิเคชันเพื่อโต้ตอบกับเอเจนต์โดยใช้ adk CLI ได้

วิธีแก้ปัญหา

หากคำสั่งก่อนหน้าไม่สำเร็จ โปรดอ่านข้อความแสดงข้อผิดพลาดอย่างละเอียด หากการติดตั้งใช้งานใน Cloud Run ไม่สำเร็จ ขั้นตอนแรกคือการพิจารณาว่ากระบวนการล้มเหลวในขั้นตอนใด

  • หากเอาต์พุตของคำสั่ง "gcloud run deploy..." รายงานว่าการสร้างล้มเหลว ให้ดู URL ของบันทึกการสร้างในเอาต์พุตและเปิดในหน้าต่างแยกต่างหาก
  • หากเอาต์พุตระบุว่า "service failed to start" หรือคล้ายกัน แสดงว่าบริการได้รับการติดตั้งใช้งาน แต่การดำเนินการไม่ผ่านการตรวจสอบสถานะ ในกรณีนี้ ให้เปิดตัวสํารวจบันทึกหรือดูย่อหน้าต่อไปนี้สําหรับคําสั่ง gcloud CLI อ่านบันทึกเพื่อหาสาเหตุหลักของความล้มเหลว

จะเกิดอะไรขึ้นหากคุณโพสต์ข้อความไปยัง Pub/Sub แต่เอเจนต์ไม่ตอบกลับหรือการตอบกลับดูแปลก

👉💻 ใช้คำสั่งต่อไปนี้เพื่ออ่านบันทึกของแอปพลิเคชันที่โพสต์จากการดำเนินการล่าสุด

gcloud logging read \
    'resource.type = "cloud_run_revision" AND \
     resource.labels.service_name = "zookeeper-agent" AND \
     resource.labels.location = "us-central1"'

บันทึกจะติดตามการดำเนินการและรายงานข้อผิดพลาด เช่น เพย์โหลดของข้อความที่ไม่ถูกต้องหรือไม่สามารถแยกวิเคราะห์ได้ การตอบกลับที่ไม่ถูกต้องจากโมเดล Gemini การตั้งค่าสภาพแวดล้อมที่ไม่ถูกต้อง และปัญหาอื่นๆ ที่อาจเกิดขึ้น

5. เพิ่มความปลอดภัยในการติดตั้งใช้งาน

บริการ Cloud Run ที่คุณติดตั้งใช้งานจะแสดงปลายทางสาธารณะที่ทุกคนบนอินเทอร์เน็ตเรียกใช้ได้ แม้ว่าปลายทางจะได้รับการปกป้องจากการเรียกใช้ที่ไม่ได้รับอนุญาตและตรวจสอบโครงสร้างของคำขออย่างเข้มงวด แต่ก็ยังคงมีเวกเตอร์การโจมตีนี้ซึ่งอนุญาตการโจมตีแบบปฏิเสธการให้บริการและการโจมตีแบบปฏิเสธการกระเป๋าเงิน เนื่องจากเส้นทางการเรียกใช้บริการเดียวในการออกแบบปัจจุบันคือผ่านทริกเกอร์ Eventarc บริการจึงไม่จำเป็นต้องแสดงปลายทางต่ออินเทอร์เน็ต

👉💻 ปิดเวกเตอร์การโจมตีนี้โดยจำกัดการเรียกใช้บริการให้มาจากแหล่งที่มาที่จำกัดเท่านั้น ซึ่งรวมถึงทริกเกอร์ Eventarc ดังนี้

gcloud run services update zookeeper-agent --region=${LOCATION} --ingress=internal

ตอนนี้หากคุณพยายามเรียกใช้ URL ของบริการจากเครื่องในพื้นที่ คุณจะได้รับข้อผิดพลาด "404 ไม่พบหน้าเว็บ"

👉💻 ใช้ curl เพื่อส่งคำขอไปยังปลายทางของบริการ

URL=$(gcloud run services describe zookeeper-agent --region=${LOCATION} --format='value(status.url)')
curl -X POST -d '{}' "${URL}/zookeeper"

คุณจะเห็นเอาต์พุตในลักษณะนี้

<html><head>
<meta http-equiv="content-type" content="text/html;charset=utf-8">
<title>404 Page not found</title>
</head>
<body text=#000000 bgcolor=#ffffff>
<h1>Error: Page not found</h1>
<h2>The requested URL was not found on this server.</h2>
<h2></h2>
</body></html>

หลังจากทำการเปลี่ยนแปลงนี้แล้ว คุณจะเรียกใช้ ZooKeeper โดยตรงโดยการเรียกใช้ปลายทางของบริการ Cloud Run ไม่ได้อีกต่อไป เว้นแต่คุณจะทำการเรียกจาก VPC ในโปรเจ็กต์เดียวกัน เครือข่าย VPC ที่ใช้ร่วมกันที่กำหนดค่าให้รีวิชันส่งการรับส่งข้อมูลไป หรือโฮสต์ที่เป็นส่วนหนึ่งของขอบเขตการควบคุมบริการ VPC

6. สรุป

ยินดีด้วย คุณตั้งค่าสภาพแวดล้อมเพื่อเรียกใช้แอปพลิเคชัน AI ที่มีเอเจนต์แบบไม่พร้อมกันซึ่งทริกเกอร์โดยเหตุการณ์ขาเข้าเรียบร้อยแล้ว

ล้างข้อมูล

โปรดทราบว่าการเก็บทรัพยากรที่คุณจัดสรรไว้จะทำให้มีการเรียกเก็บเงินในบัญชีสำหรับการเรียกเก็บเงิน หากคุณไม่มีแผนที่จะใช้สภาพแวดล้อมนี้สำหรับการทดสอบเพิ่มเติมและเพื่อหลีกเลี่ยงการเรียกเก็บเงินในอนาคต เราขอแนะนำให้คุณลบทรัพยากรที่สร้างขึ้นระหว่างการทำโค้ดแล็บนี้

ซึ่งทำได้ 2 วิธีดังนี้

วิธีที่ 1: ปิดโปรเจ็กต์

การปิด (ลบ) โปรเจ็กต์จะปล่อยทรัพยากรและข้อมูลทั้งหมดของโปรเจ็กต์ และยกเลิกการลิงก์บัญชีสำหรับการเรียกเก็บเงิน การใช้วิธีนี้จะป้องกันไม่ให้มีการเรียกเก็บเงินเพิ่มเติมสำหรับทรัพยากรหรือข้อมูลที่ใช้ในโค้ดแล็บนี้ ใช้คำสั่งต่อไปนี้เพื่อปิดโปรเจ็กต์

gcloud projects delete $(gcloud config get-value project) --quiet

วิธีที่ 2: การลบทรัพยากรในโปรเจ็กต์

การลบบริการ Cloud Run จะช่วยป้องกันการเรียกเก็บเงินเพิ่มเติมสำหรับการใช้แพลตฟอร์มแบบไร้เซิร์ฟเวอร์ โปรดทราบว่าวิธีนี้ไม่ได้นำข้อมูลทั้งหมดที่สร้างขึ้นระหว่างการทำโค้ดแล็บออกโดยสมบูรณ์ เช่น บันทึกของ Cloud Build และแอปพลิเคชัน อิมเมจคอนเทนเนอร์ ฯลฯ ให้เรียกใช้คำสั่งต่อไปนี้เพื่อลบบริการ

gcloud run services delete zookeeper-agent --region=${LOCATION}

คำจำกัดความทริกเกอร์ Eventarc และหัวข้อ Pub/Sub ไม่ก่อให้เกิดค่าใช้จ่ายในการจัดการ (ดูรายละเอียดเพิ่มเติมได้ที่ราคาของ Eventarc และราคาของ Pub/Sub)

ดูข้อมูลเพิ่มเติมเกี่ยวกับการปิดโปรเจ็กต์

ขั้นตอนถัดไป