اتصال به Cloud SQL: Compute Engine، Private IP و Cloud SQL Proxy

1. مقدمه

آخرین به روز رسانی: 06-05-2021

فکر کردن به ارتباط

انواع مختلفی از برنامه ها و چارچوب ها وجود دارد. در این کد، ما اتصال به Cloud SQL از برنامه‌ای را پوشش می‌دهیم که بر روی یک ماشین مجازی مدیریت شده در Google Compute Engine از طریق یک آدرس IP خصوصی داخلی با استفاده از Cloud SQL Proxy اجرا می‌شود. این یک راه فوق‌العاده امن برای اجرای یک برنامه stateful در Cloud است. شما با محدود کردن تنها به استفاده از یک IP خصوصی و استفاده از SQL Proxy که اتصال SSL را برای شما انجام می دهد، قرار گرفتن در معرض اینترنت خود را به حداقل می رسانید.

یکی از موارد استفاده رایج برای این می‌تواند، به‌عنوان مثال، یک برنامه کاربردی در محل است که به جای محلی، در فضای ابری اجرا شده است.

چیزی که خواهی ساخت

این کد لبه بسیار مینیمالیستی است. ایده این است که شما را از طریق مهره‌ها و پیچ‌های قطعه اتصال راهنمایی کنیم، بدون اینکه زیاد به خود برنامه فکر کنید. در یک دنیای عالی، اتصال به Cloud SQL درست مانند اتصال به هر نمونه دیگری از پایگاه داده SQL است، بنابراین باید بتوانید آنچه را که در این Codelab ایجاد می کنید، بردارید و آن را در هر برنامه تولیدی اعمال کنید.

دستورالعمل ها شامل مراحل انجام کارها در کنسول GCP و همچنین شامل معادل های دستور gcloud برای استفاده در CLI یا اتوماسیون می شود.

تک تک مراحل عبارتند از:

  • برای فعال کردن اتصال به نمونه Cloud SQL یک حساب سرویس حداقل ایجاد کنید
  • ایجاد یک VM در موتور محاسباتی گوگل (GCE)
  • یک نمونه Cloud SQL ایجاد کنید (این آموزش از Postgres استفاده می کند، اما به طور مشابه برای MySQL یا SQL Server کار می کند)
  • Cloud SQL Proxy را در نمونه GCE دانلود و اجرا کنید

آنچه شما نیاز دارید

  • یک حساب GCP که مجوز فعال کردن APIها و ایجاد خدمات در آن را دارید

2. یک حساب کاربری ایجاد کنید

حساب های سرویس برای اعطای مجوز برای استفاده از سرویس های مختلف در پروژه GCP شما استفاده می شود. برای این کد لبه، ما به یکی نیاز داریم تا به Cloud SQL Proxy اجازه اتصال به نمونه Cloud SQL خود را بدهیم.

روی کنسول

به صفحه حساب های خدمات IAM بروید و روی آن کلیک کنید f8393a08b37a422c.png دکمه بالای صفحه

به حساب سرویس خود یک نام و شناسه منحصر به فرد بدهید و روی ایجاد کلیک کنید.

در صفحه بعد، روی منوی کشویی انتخاب نقش کلیک کنید. برای "Cloud SQL" فیلتر کنید و نقش Cloud SQL Client را انتخاب کنید. روی ادامه کلیک کنید.

روی انجام شد کلیک کنید.

استفاده از gcloud

ایجاد حساب سرویس:

gcloud iam service-accounts create <SERVICE_ACCOUNT_NAME> --display-name "<SERVICE_ACCOUNT_NAME> service account"

این حساب سرویس را ایجاد می کند، اما در حال حاضر هیچ نقش/مجوز اختصاص داده شده به آن وجود ندارد. برای اختصاص نقش مناسب، اجرا کنید:

gcloud projects add-iam-policy-binding <GCP PROJECT ID> --member serviceAccount:<SERVICE_ACCOUNT_NAME>@<GCP PROJECT ID>.iam.gserviceaccount.com --role roles/cloudsql.client

به عنوان مثال اگر حساب سرویس شما هنگام ایجاد آن sa-test نامیده می شود و پروژه شما my-project-test است، دستور به این صورت خواهد بود:

gcloud projects add-iam-policy-binding my-project-test --member serviceAccount:sa-test@my-project-test.iam.gserviceaccount.com --role roles/cloudsql.client
gcloud iam service-accounts keys create service-account.json --iam-account <SERVICE_ACCOUNT_NAME>@<GCP PROJECT ID>.iam.gserviceaccount.com

3. ایجاد ماشین مجازی کامپیوتری

Google Compute Engine سرویس مدیریت شده ای است که ماشین مجازی در آن اجرا می شود و برنامه ما را که می خواهیم به آن متصل شویم نگه می دارد. در این کد لبه، ما برنامه‌ای نمی‌سازیم، اما اتصال را با اجرای psql تأیید می‌کنیم.

روی کنسول

به صفحه موتور محاسباتی گوگل بروید و روی آن کلیک کنید 77c46cd1f51bed5c.png دکمه

گزینه های زیادی در اینجا وجود دارد، تنها کارهایی که باید انجام دهید عبارتند از:

  1. برای نمونه خود یک نام بگذارید
  2. Machine type به f1-micro تغییر دهید
  3. در قسمت Identity and API Access، منوی کرکره‌ای برای Service account را از Default compute service account به چیزی که در مرحله قبل ایجاد کردید تغییر دهید.
  4. روی Create all way در پایین صفحه کلیک کنید

استفاده از gcloud

حساب سرویس نام کامل حساب سرویسی است که قبلاً ایجاد کردید، بنابراین در قالب: <NAME>@<PROJECT>.iam.gserviceaccount.com خواهد بود.

gcloud compute instances create <INSTANCE NAME> --machine-type=f1-micro --zone=us-central1-b --service-account=<SERVICE ACCOUNT FULL NAME>
gcloud compute zones list

4. ایجاد نمونه Cloud SQL

Cloud SQL ارائه دهنده پایگاه داده های رابطه ای مدیریت شده ما است. از MySQL، PostgreSQL و SQL Server پشتیبانی می کند. برای این کد، ما یک پایگاه داده Postgres ایجاد می کنیم، اما دستورالعمل ها برای هر سه مشابه است.

روی کنسول

به صفحه Cloud SQL بروید و روی آن کلیک کنید 241836b315e11bf5.png دکمه

همانطور که اشاره کردم، بیشتر این کد لبه برای هر طعم SQL عمومی است، اما برای این کد، PostgreSQL را انتخاب کنید.

  1. به نمونه خود یک شناسه بدهید
  2. یک رمز عبور برای کاربر پیش فرض وارد کنید (نام کاربری پیش فرض برای DB انتخاب شده خواهد بود، به عنوان مثال root برای MySQL یا postgres برای PostgreSQL)
  3. اگر منطقه نمونه محاسباتی خود را تغییر دادید، باید منطقه را در اینجا نیز تغییر دهید تا مطابقت داشته باشد.
  4. به پایین اسکرول کنید و روی show configuration options کلیک کنید
  5. بخش Connectivity را باز کنید
  6. تیک گزینه Public IP را بردارید و چک باکس Private IP را علامت بزنید
  7. مطمئن شوید که در منوی کشویی که هنگام بررسی IP خصوصی نشان داده می شود، default انتخاب شده باشد
  8. به پایین اسکرول کنید و روی Create کلیک کنید

شروع این نمونه معمولاً چند دقیقه طول می کشد.

استفاده از gcloud

از آنجایی که ما هیچ درخواست خوبی برای فعال کردن API ها از اینجا نداریم، باید این کار را به صورت دستی انجام دهیم.

gcloud services enable servicenetworking.googleapis.com

در مرحله بعد، ما باید اتصال سرویس خصوصی را در شبکه پیش فرض VPC خود فعال کنیم. اولین قدم برای انجام این کار این است که یک محدوده نامگذاری شده از آدرس های IP را برای استفاده برای نمونه خود اختصاص دهیم.

gcloud compute addresses create sql-codelab-allocation --global --purpose=VPC_PEERING --prefix-length=24 --network=default

مرحله بعدی تخصیص آن محدوده IP به سرویس های داخلی ما است (این حدود یک دقیقه طول می کشد).

gcloud services vpc-peerings update --service=servicenetworking.googleapis.com  --network=default     --project=<PROJECT ID> --ranges=sql-codelab-allocation --force

و در نهایت، ایجاد خود نمونه فقط در حال حاضر با نسخه بتا در دسترس است. ترکیب --no-assign-ip و --network=default چیزی است که اتصال IP خصوصی را فعال می کند. در حال حاضر، هیچ راهی برای فعال کردن IP خصوصی و عمومی به طور همزمان وجود ندارد، بنابراین اگر به دسترسی عمومی نیاز دارید، باید نمونه پس از ایجاد را ویرایش کنید. چند دقیقه طول می کشد تا کامل شود.

gcloud beta sql instances create test-sql-codelab-00 --no-assign-ip --database-version=POSTGRES_11 --tier=db-f1-micro --region=us-central1 --network=default --root-password=<PASSWORD>

5. Cloud SQL Proxy را راه اندازی و اجرا کنید

هنگامی که ما به VM متصل شدیم، به یک رشته اتصال نمونه نیاز خواهیم داشت. ابتدا آن را می گیریم، سپس از طریق SSH به خود ماشین مجازی متصل می شویم. دستورالعمل‌های این قطعات در بخش‌های مربوط به کنسول در مقابل gcloud خواهد بود، و سپس بقیه فرمان‌هایی هستند که از پوسته روی VM در بخش خودش اجرا می‌شوند.

روی کنسول

به اینجا بروید و روی نام نمونه Cloud SQL خود کلیک کنید.

کمی به پایین اسکرول کنید و Connection name در جایی کپی کنید تا بعدا استفاده کنید.

به صفحه فهرست نمونه‌های موتور محاسباتی Google بروید و ردیف را با VM خود پیدا کنید.

در ستون Connect ، روی دکمه SSH کلیک کنید و پنجره جداگانه ای باز می شود که به طور ایمن به ماشین مجازی متصل می شود.

برای بقیه دستورالعمل ها از بخش Using gcloud عبور کنید زیرا برای هر دو یکسان است.

استفاده از gcloud

<INSTANCE NAME> را با نام نمونه Cloud SQL خود جایگزین کنید:

gcloud sql instances describe <INSTANCE NAME> | grep connectionName

نام اتصال نمونه را برای استفاده در آینده ذخیره کنید.

شما باید <ZONE> را با منطقه ای که در زمان ایجاد نمونه استفاده می شد جایگزین کنید. اگر آن را تغییر ندادید، روی us-central1-b تنظیم شده بود. و همچنین <INSTANCE_NAME> را با آنچه قبلاً مشخص کرده اید جایگزین کنید.

gcloud compute ssh --zone <ZONE> <INSTANCE_NAME>

پس از اتصال به VM

ابتدا باید پروکسی را دانلود کنیم. بستگی به سیستم عامل شما دارد. اگر سیستم عامل را در ایجاد VM تغییر نداده اید، لینوکس خواهد بود و می توانید از موارد زیر استفاده کنید:

wget https://dl.google.com/cloudsql/cloud_sql_proxy.linux.amd64 -O cloud_sql_proxy && chmod +x cloud_sql_proxy

اگر سیستم عامل را تغییر داده اید، می توانید برای دریافت دستور مناسب برای دریافت پروکسی برای سیستم عامل خود به اینجا بروید.

برای اجرای پراکسی، نام اتصال نمونه‌ای را که از جزئیات نمونه Cloud SQL کپی کرده‌اید بگیرید تا جایگزین <INSTANCE_CONNECTION_NAME> شوید. همچنین توجه داشته باشید، اگر از Postgres db استفاده نمی‌کنید، یا اگر پورت پیش‌فرض را که db به آن گوش می‌دهد، تغییر داده باشید، ممکن است شماره پورت tcp تغییر کند.

./cloud_sql_proxy -instances=<INSTANCE_CONNECTION_NAME>=tcp:5432 &

6. اتصال و بسته بندی را تست کنید

همانطور که قبلاً ذکر شد، اگر برنامه‌ای دارید که می‌خواهید در نمونه GCE برای آزمایش بایستید، البته این نیز خوب است. برای این کد لبه، ما psql را نصب می کنیم و از آن کلاینت برای تأیید اینکه می توانیم به پایگاه داده خود متصل شویم استفاده می کنیم.

از جلسه SSH در VM:

sudo apt-get install postgresql-client
psql "host=127.0.0.1 port=5432 sslmode=disable user=postgres"

سپس رمز عبور پیش فرض کاربر را که هنگام ایجاد نمونه Cloud SQL تنظیم کرده اید، مشخص کنید.

تبریک می گویم! اگر همه چیز به خوبی پیش رفته است، باید اعلان Postgres را داشته باشید و می توانید دستورات را در مقابل پایگاه داده خود اجرا کنید.

بعدش چی؟

برخی از این کدها را بررسی کنید...

اسناد مرجع