Kết nối Google Cloud Build với Google Cloud SQL

Dec 16 2020

Google Cloud Run cho phép sử dụng Cloud SQL. Nhưng điều gì sẽ xảy ra nếu bạn cần Cloud SQL khi xây dựng vùng chứa của mình trong Google Cloud Build? Điều đó có thể không?

Lý lịch

Tôi có một dự án Next.js, chạy trong Vùng chứa trên Google Cloud Run. Đẩy mã của tôi lên Cloud Build (cài đặt nội dung, tạo các trang tĩnh và đưa mọi thứ vào Vùng chứa) và triển khai lên Cloud Run hoạt động hoàn hảo. 👌

Cloud SQL

Tuy nhiên, tôi vừa thêm một số chức năng trong đó nó cũng cần một số dữ liệu từ phiên bản PostgreSQL của tôi chạy trên Google Cloud SQL. Dữ liệu này được sử dụng khi xây dựng dự án (tạo các trang tĩnh).

Tại địa phương, trên máy của tôi, điều này hoạt động tốt vì dự án có thể kết nối với proxy CloudSQL của tôi. Trong khi chạy trong CloudRun, điều này cũng sẽ hoạt động, vì Cloud Run cho phép kết nối với phiên bản Postgres của tôi trên Cloud SQL .

Vấn đề của tôi

Khi xây dựng dự án của mình với Cloud Build, tôi cần truy cập vào cơ sở dữ liệu của mình để có thể tạo các trang tĩnh của mình. Tôi đang tìm cách kết nối trình tạo đám mây Docker của mình với Cloud SQL, có lẽ giống như Cloud Run (được quản lý hoàn toàn) cung cấp cơ chế kết nối bằng Cloud SQL Proxy.

Bằng cách đó tôi có thể kết nối /cloudsql/INSTANCE_CONNECTION_NAMEtrong khi xây dựng dự án của mình!

Câu hỏi

Vì vậy, câu hỏi của tôi là: Làm cách nào để kết nối với phiên bản PostgreSQL của tôi trên Google Cloud SQL thông qua Cloud SQL Proxy trong khi xây dựng dự án của tôi trên Google Cloud Build?

Những thứ như thông tin đăng nhập cơ sở dữ liệu của tôi, v.v. đã có trong Trình quản lý bí mật, vì vậy tôi đoán tôi sẽ có thể sử dụng những thông tin chi tiết đó 🤔

Trả lời

5 guillaumeblaquiere Dec 16 2020 at 23:42

Bạn có thể sử dụng vùng chứa mà bạn muốn (và bạn cần) để tạo các trang tĩnh của mình và tải xuống proxy sql đám mây để mở một đường hầm với cơ sở dữ liệu

  - 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

Công cụ ứng dụng có một trình bao bọc thực thi có lợi khi ủy quyền Cloud SQL của bạn cho bạn, vì vậy tôi sử dụng công cụ đó để kết nối với DB trong xây dựng đám mây ( một số hướng dẫn của google cũng vậy ).

Tuy nhiên, hãy cảnh báo về sự cố ở phía trước: Cloud Build chạy riêng * us-central1, điều đó có nghĩa là nó sẽ chậm một cách bệnh lý để kết nối từ bất kỳ nơi nào khác. Đối với một hoặc hai hoạt động, tôi không quan tâm nhưng nếu bạn đang chạy toàn bộ bộ kiểm tra tích hợp đơn giản là sẽ không hoạt động.

Ngoài ra, bạn sẽ cần cấp quyền cho GCB để truy cập 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

* trừ khi bạn sẵn sàng trả nhiều tiền hơn và bị phần mềm Beta gây khó chịu, trong trường hợp đó, bạn có thể sử dụng công nhân xây dựng đám mây (dù sao thì tại thời điểm viết bài này cũng là bản Beta ... Tôi sẽ quay lại và cập nhật nếu họ nó vào sản xuất và khắc phục sự cố)