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

۱. مقدمه

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

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

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

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

آنچه خواهید ساخت

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

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

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

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

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

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

۲. یک حساب کاربری سرویس ایجاد کنید

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

روی کنسول

به صفحه حساب‌های سرویس IAM بروید و روی f8393a08b37a422c.png دکمه در بالای صفحه.

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

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

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

استفاده از جی‌کلاود

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

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

۳. ایجاد ماشین مجازی موتور محاسباتی

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

روی کنسول

به صفحه Google Compute Engine بروید و روی آن کلیک کنید 77c46cd1f51bed5c.png دکمه

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

  1. به نمونه خود یک نام بدهید
  2. Machine type به f1-micro تغییر دهید.
  3. در زیر بخش «هویت و دسترسی به API»، منوی کشویی « Service account را از Default compute service account به حسابی که در مرحله قبل ایجاد کردید، تغییر دهید.
  4. روی «ایجاد» در پایین صفحه کلیک کنید.

استفاده از جی‌کلاود

حساب سرویس، نام کامل حساب سرویسی است که قبلاً ایجاد کرده‌اید، بنابراین به شکل <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

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

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

روی کنسول

به صفحه Cloud SQL بروید و روی آن کلیک کنید ۲۴۱۸۳۶b315e11bf5.png دکمه

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

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

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

استفاده از جی‌کلاود

از آنجایی که هیچ پیام خوبی برای فعال کردن 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

و در نهایت، ایجاد خودِ نمونه (instance) در حال حاضر فقط با نسخه بتا در دسترس است. ترکیب --no-assign-ip و --network=default چیزی است که اتصال IP خصوصی را فعال می‌کند. در حال حاضر، هیچ راهی برای فعال کردن همزمان 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>

۵. پروکسی Cloud SQL را راه‌اندازی و اجرا کنید

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

روی کنسول

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

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

به صفحه فهرست نمونه‌های موتور محاسبات گوگل بروید و ردیف مربوط به ماشین مجازی خود را پیدا کنید.

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

برای بقیه دستورالعمل‌ها، از بخش Using 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>

پس از اتصال به ماشین مجازی

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

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 استفاده نمی‌کنید، یا اگر پورت پیش‌فرض پایگاه داده را تغییر داده‌اید، ممکن است شماره پورت tcp تغییر کند.

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

۶. اتصال و جمع‌بندی را آزمایش کنید

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

از جلسه SSH روی ماشین مجازی:

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

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

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

بعدش چی؟

به برخی از این آزمایشگاه‌های کد نگاهی بیندازید...

اسناد مرجع