الاتصال بخدمة Cloud SQL: Compute Engine وعنوان IP خاص وخادم وكيل Cloud SQL

1. مقدمة

تاريخ آخر تعديل: 2021-05-06

التفكير في الاتصال

هناك العديد من أنواع التطبيقات والأُطر المتاحة. في هذا الدرس التطبيقي حول الترميز، سنتناول كيفية الاتصال بخدمة Cloud SQL من تطبيق يتم تشغيله على جهاز افتراضي مُدار في Google Compute Engine من خلال عنوان IP خاص داخلي باستخدام Cloud SQL Proxy. هذه طريقة آمنة للغاية لتشغيل تطبيق ذي حالة في السحابة الإلكترونية. يمكنك تقليل تعرّضك للإنترنت من خلال حصر الاستخدام على عنوان IP خاص فقط، واستخدام SQL Proxy الذي يتعامل مع اتصال SSL نيابةً عنك.

أحد حالات الاستخدام الشائعة لذلك هو، على سبيل المثال، تطبيق محلي تم نقله للتشغيل في السحابة الإلكترونية بدلاً من تشغيله محليًا.

ما ستنشئه

هذا الدرس العملي بسيط للغاية. الفكرة هي أن نوضّح لك أساسيات عملية الربط، بدون التفكير كثيرًا في التطبيق نفسه. في عالم مثالي، يكون الربط بخدمة Cloud SQL تمامًا مثل الربط بأي مثيل آخر لقاعدة بيانات SQL، لذا يجب أن تتمكّن من استخدام ما تنشئه في هذا الدرس التطبيقي وتطبيقه على أي تطبيق إنتاج.

ستتضمّن التعليمات شرحًا تفصيليًا لكيفية تنفيذ الإجراءات في وحدة تحكّم Google Cloud Platform، بالإضافة إلى تضمين معادِلات أوامر gcloud لاستخدامها في واجهة سطر الأوامر أو التشغيل الآلي.

في ما يلي الخطوات الفردية:

  • إنشاء حساب خدمة بسيط لتفعيل الاتصال بمثيل Cloud SQL
  • إنشاء جهاز افتراضي على Google Compute Engine (GCE)
  • إنشاء مثيل Cloud SQL (يستخدم هذا البرنامج التعليمي Postgres، ولكنّه يعمل بشكل مشابه مع MySQL أو SQL Server)
  • تنزيل خادم Cloud SQL الوكيل وتشغيله على آلة GCE الافتراضية

المتطلبات

  • حساب على "منصة Google السحابية" لديك أذونات لتفعيل واجهات برمجة التطبيقات وإنشاء الخدمات عليه

2. إنشاء حساب خدمة

تُستخدَم حسابات الخدمة لمنح أذونات استخدام خدمات مختلفة ضمن مشروعك على Google Cloud Platform. في هذا الدرس التطبيقي حول الترميز، نحتاج إلى واحد لمنح الخادم الوكيل Cloud SQL إذن الاتصال بمثيل Cloud SQL.

في "وحدة التحكّم"

انتقِل إلى صفحة حسابات الخدمة في "إدارة الهوية وإمكانية الوصول" وانقر على الزر f8393a08b37a422c.png في أعلى الصفحة.

امنح حساب الخدمة اسمًا ورقم تعريف فريدَين، ثم انقر على "إنشاء".

في الصفحة التالية، انقر على القائمة المنسدلة "اختيار دور". فلتر حسب "Cloud SQL" واختَر دور "عميل Cloud SQL". النقر على CONTINUE (متابعة)

انقر على "تم".

استخدام 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- إنشاء جهاز Compute Engine الافتراضي

‫Google Compute Engine هي الخدمة المُدارة التي سيتم تشغيل الجهاز الافتراضي عليها، والتي ستستضيف تطبيقنا الذي نريد الاتصال منه. في هذا الدرس التطبيقي حول الترميز، لن ننشئ تطبيقًا، ولكن سنتأكّد من الاتصال من خلال تشغيل psql.

في "وحدة التحكّم"

انتقِل إلى صفحة Google Compute Engine وانقر على الزر 77c46cd1f51bed5c.png.

هناك العديد من الخيارات هنا، وكل ما عليك فعله هو:

  1. أدخِل اسمًا لآلتك الافتراضية
  2. تغيير Machine type إلى f1-micro
  3. ضمن "الوصول إلى الهوية وواجهة برمجة التطبيقات"، غيِّر القائمة المنسدلة Service account من Default compute service account إلى القائمة التي أنشأتها في الخطوة السابقة.
  4. انقر على "إنشاء" في أسفل الصفحة.

استخدام 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. أدخِل كلمة مرور للمستخدم التلقائي (سيكون اسم المستخدم هو الاسم التلقائي لقاعدة البيانات المحدّدة، مثل root لـ MySQL أو postgres لـ PostgreSQL).
  3. إذا غيّرت منطقة الجهاز الظاهري، عليك أيضًا تغيير المنطقة هنا لتتطابق معها.
  4. انتقِل إلى أسفل الصفحة وانقر على show configuration options
  5. توسيع القسم "Connectivity"
  6. أزِل العلامة من مربّع الاختيار Public IP وضع علامة في مربّع الاختيار Private IP
  7. تأكَّد من اختيار default في القائمة المنسدلة التي تظهر عند وضع علامة في المربّع "عنوان IP خاص".
  8. انتقِل إلى أسفل الصفحة وانقر على "إنشاء".

يستغرق بدء تشغيل الجهاز الافتراضي بضع دقائق عادةً.

استخدام gcloud

بما أنّه ليس لدينا أي طلبات لطيفة لتفعيل واجهات برمجة التطبيقات من هنا، علينا إجراء ذلك يدويًا

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 الخاص وعنوان 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 الوكيل وتشغيله

بعد الاتصال بالجهاز الافتراضي، سنحتاج إلى سلسلة اتصال مثيل. سنحصل على ذلك أولاً، ثم سنتصل بالجهاز الافتراضي (VM) نفسه من خلال بروتوكول النقل الآمن (SSH). ستكون التعليمات الخاصة بهذه الأجزاء في الأقسام الخاصة بها في "وحدة التحكّم" مقابل gcloud، ثم سيتم تشغيل بقية الأوامر من shell على الجهاز الظاهري (VM) في قسمه الخاص.

في "وحدة التحكّم"

انتقِل إلى هنا وانقر على اسم مثيل Cloud SQL.

انتقِل للأسفل قليلاً وانسخ Connection name في مكان ما لاستخدامه لاحقًا.

انتقِل إلى صفحة قائمة مثيلات Google Compute Engine، وابحث عن الصف الذي يتضمّن جهازك الافتراضي.

في العمود 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>

بعد الاتصال بالجهاز الافتراضي

أولاً، علينا تنزيل الخادم الوكيل. يعتمد ذلك على نظام التشغيل. إذا لم تغيّر نظام التشغيل أثناء إنشاء الجهاز الافتراضي، سيكون نظام التشغيل Linux ويمكنك استخدام ما يلي:

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>. يُرجى العِلم أيضًا أنّ رقم منفذ tcp قد يتغيّر إذا كنت لا تستخدم قاعدة بيانات Postgres أو إذا غيّرت المنفذ التلقائي الذي تستمع إليه قاعدة البيانات.

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

6. اختبار الاتصال والانتهاء من عملية الإعداد

كما ذكرنا سابقًا، إذا كان لديك تطبيق تريد إعداده في مثيل GCE لاختباره، لا بأس في ذلك أيضًا بالطبع. في هذا الدرس التطبيقي، سنثبّت psql ونستخدم هذا البرنامج للتحقّق من إمكانية الاتصال بقاعدة البيانات.

من جلسة SSH على الجهاز الظاهري:

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

بعد ذلك، حدِّد كلمة مرور المستخدم التلقائي التي أعددتها عند إنشاء مثيل Cloud SQL.

تهانينا! إذا سارت الأمور على ما يرام، من المفترض أن يظهر لك طلب Postgres ويمكنك تنفيذ الأوامر على قاعدة البيانات.

ما هي الخطوات التالية؟

اطّلِع على بعض دروس الترميز التطبيقية هذه...

المستندات المرجعية