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

1. مقدمة

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

التفكير في نوع الرابط

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

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

ما الذي ستنشئه

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

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

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

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

المتطلبات

  • حساب Google Cloud Platform (GCP) لديك أذونات لتفعيل واجهات برمجة التطبيقات وإنشاء خدمات عليه

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 وتشغيله

بمجرد أن نتصل بالجهاز الافتراضي، سنحتاج إلى سلسلة اتصال بالمثيل. سنحصل أولاً على ذلك، ثم سنتصل بالجهاز الافتراضي نفسه عبر بروتوكول النقل الآمن. ستتوفر التعليمات الخاصة بهذه الأجزاء في الأقسام الخاصة بها لكل من Console وgcloud، وسيكون الباقي عبارة عن أوامر يتم تنفيذها من واجهة الأوامر على الجهاز الافتراضي في القسم الخاص به.

على وحدة التحكّم

انقر هنا وانقر على اسم مثيل 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 واستخدامه للتحقق من قدرتنا على الاتصال بقاعدة البيانات لدينا.

من جلسة بروتوكول النقل الآمن على الجهاز الافتراضي:

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

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

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

الخطوات التالية

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

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