เชื่อมต่อ Google Cloud Build กับ Google Cloud SQL

Dec 16 2020

Google Cloud Run อนุญาตให้ใช้ Cloud SQL แต่ถ้าคุณต้องการ Cloud SQL เมื่อสร้างคอนเทนเนอร์ใน Google Cloud Build ล่ะ? เป็นไปได้หรือไม่?

พื้นหลัง

ฉันมีโปรเจ็กต์ Next.js ที่ทำงานใน Container บน Google Cloud Run การพุชโค้ดของฉันไปยัง Cloud Build (การติดตั้งสิ่งต่างๆสร้างเพจแบบคงที่และวางทุกอย่างไว้ในคอนเทนเนอร์) และการปรับใช้กับ Cloud Run จะทำงานได้อย่างสมบูรณ์ 👌

Cloud SQL

แต่ฉันเพิ่งเพิ่มฟังก์ชันบางอย่างซึ่งจำเป็นต้องใช้กับข้อมูลบางอย่างจากอินสแตนซ์ PostgreSQL ที่ทำงานบน Google Cloud SQL ข้อมูลนี้ใช้เมื่อสร้างโครงการ (สร้างเพจแบบคงที่)

ในเครื่องของฉันสิ่งนี้ใช้งานได้ดีเนื่องจากโปรเจ็กต์สามารถเชื่อมต่อกับพร็อกซี CloudSQL ของฉัน ในขณะที่ทำงานใน CloudRun นี้ยังต้องทำงานเป็นเมฆเรียกใช้ช่วยให้การเชื่อมต่อกับอินสแตนซ์ Postgres ของฉันบน Cloud SQL

ปัญหาของฉัน

เมื่อสร้างโปรเจ็กต์ด้วย Cloud Build ฉันต้องเข้าถึงฐานข้อมูลเพื่อสร้างเพจแบบคงที่ ฉันกำลังมองหาวิธีเชื่อมต่อ Docker cloud builder กับ Cloud SQL บางทีอาจเหมือนกับ Cloud Run (มีการจัดการอย่างสมบูรณ์) มีกลไกที่เชื่อมต่อโดยใช้ Cloud SQL Proxy

ด้วยวิธีนี้ฉันสามารถเชื่อมต่อได้/cloudsql/INSTANCE_CONNECTION_NAMEในขณะที่สร้างโครงการของฉัน!

คำถาม

คำถามของฉันคือ: ฉันจะเชื่อมต่อกับอินสแตนซ์ PostgreSQL บน Google Cloud SQL ผ่าน Cloud SQL Proxy ในขณะที่สร้างโปรเจ็กต์บน Google Cloud Build ได้อย่างไร

สิ่งต่างๆเช่นข้อมูลรับรองฐานข้อมูลของฉัน ฯลฯ มีอยู่แล้วใน Secrets Manager ดังนั้นฉันควรจะสามารถใช้รายละเอียดเหล่านั้นที่ฉันเดาได้🤔

คำตอบ

5 guillaumeblaquiere Dec 16 2020 at 23:42

คุณสามารถใช้คอนเทนเนอร์ที่คุณต้องการ (และคุณต้องการ) เพื่อสร้างเพจแบบสแตติกของคุณและดาวน์โหลดพร็อกซี cloud sql เพื่อเปิดทันเนลกับฐานข้อมูล

  - name: '<YOUR CONTAINER>'
    entrypoint: 'sh'
    args:
      - -c
      - |
        wget https://dl.google.com/cloudsql/cloud_sql_proxy.linux.amd64 -O cloud_sql_proxy
        chmod +x cloud_sql_proxy
        ./cloud_sql_proxy -instances=<my-project-id:us-central1:myPostgresInstance>=tcp:5432 &
        <YOUR SCRIPT>        

1 thclark Dec 21 2020 at 01:05

App Engine มีexec wrapperซึ่งมีประโยชน์ในการพร็อกซี Cloud SQL ให้กับคุณดังนั้นฉันจึงใช้สิ่งนั้นเพื่อเชื่อมต่อกับ DB ในการสร้างคลาวด์ ( ทำแบบฝึกหัดของ Googleด้วยเช่นกัน)

อย่างไรก็ตามโปรดเตือนถึงปัญหาข้างหน้า: Cloud Build ทำงานโดยเฉพาะ * us-central1ซึ่งหมายความว่าจะเชื่อมต่อจากที่อื่นได้ช้า สำหรับการดำเนินการหนึ่งหรือสองครั้งฉันไม่สนใจ แต่ถ้าคุณกำลังเรียกใช้การทดสอบการรวมชุดทั้งหมดซึ่งจะไม่ได้ผล

นอกจากนี้คุณจะต้องให้สิทธิ์ GCB ในการเข้าถึง GCSQL

steps:
  - id: 'Connect to DB using appengine wrapper to help'
    name: gcr.io/google-appengine/exec-wrapper
    args:
      [
        '-i',  # The image you want to connect to the db from
        '$_GCR_HOSTNAME/$PROJECT_ID/$REPO_NAME:$SHORT_SHA',
        '-s',  # The postgres instance
        '${PROJECT_ID}:${_POSTGRES_REGION}:${_POSTGRES_INSTANCE_NAME}', '-e', # Get your secrets here... 'GCLOUD_ENV_SECRET_NAME=${_GCLOUD_ENV_SECRET_NAME}',
        '--', # And then the command you want to run, in my case a database migration
        'python',
        'manage.py',
        'migrate',
      ]

substitutions:
  _GCLOUD_ENV_SECRET_NAME: mysecret
  _GCR_HOSTNAME: eu.gcr.io
  _POSTGRES_INSTANCE_NAME: my-instance
  _POSTGRES_REGION: europe-west1

* เว้นแต่คุณจะเต็มใจจ่ายเงินเพิ่มและรับซอฟต์แวร์เบต้าซึ่งในกรณีนี้คุณสามารถใช้คนงานสร้างระบบคลาวด์ได้ (ในขณะที่เขียนอยู่ในรุ่นเบต้า ... ฉันจะกลับมาและอัปเดตหากพวกเขาทำ ในการผลิตและแก้ไขปัญหา)