Cloud SQL'e bağlanma: Compute Engine, Özel IP ve Cloud SQL Proxy

1. Giriş

Son Güncelleme Tarihi: 06.05.2021

Bağlantı kurma

Birçok türde uygulama ve çerçeve bulunur. Bu codelab'de, dahili bir özel IP adresi aracılığıyla Cloud SQL Proxy kullanarak Google Compute Engine'deki yönetilen bir sanal makinede çalıştırılmakta olan bir uygulamadan Cloud SQL'e bağlanma konusunu ele alacağız. Bu, Cloud'da durum bilgili bir uygulama çalıştırmanın son derece güvenli bir yoludur. Sadece özel bir IP kullanarak ve sizin yerinize SSL bağlantısı sunan SQL Proxy'yi kullanarak internet kullanımınızı en aza indirmiş olursunuz.

Bunun yaygın kullanım alanlarından biri, yerel olarak değil, bulutta çalışacak şekilde taşınmış şirket içi bir uygulama olabilir.

Oluşturacaklarınız

Bu codelab son derece minimalisttir. Buradaki amaç, uygulamanın kendisini çok fazla düşünmeden bağlantı parçasının somunları arasında size yol göstermektir. Mükemmel bir kullanım için Cloud SQL'e bağlanmak, bir SQL veritabanının diğer örneğine bağlanmaya benzer. Bu nedenle, bu codelab'de oluşturduğunuz öğeleri alıp herhangi bir üretim uygulamasına uygulayabilmeniz gerekir.

Talimatlar, hem GCP Console'da neler yapmanın adım adım açıklamalı kılavuzunu hem de CLI veya otomasyonda kullanmak üzere gcloud komutu eşdeğerlerini içerir.

Adımlar tek tek şunlardır:

  • Cloud SQL örneğiyle bağlantıyı etkinleştirmek için minimal bir Hizmet Hesabı oluşturun
  • Google Compute Engine'de (GCE) sanal makine oluşturma
  • Cloud SQL örneği oluşturma (Bu eğitimde Postgres kullanılmıştır ancak MySQL veya SQL Server için de benzer şekilde çalışır)
  • GCE örneğinde Cloud SQL Proxy'yi indirip çalıştırma

Gerekenler

  • API'leri etkinleştirme ve hizmet oluşturma izinlerine sahip olduğunuz bir GCP hesabı

2. Hizmet hesabı oluşturma

Hizmet hesapları, GCP projenizdeki farklı hizmetleri kullanma izinleri vermek için kullanılır. Bu codelab'de Cloud SQL Proxy'ye Cloud SQL örneğimize bağlanma izni vermek için koda ihtiyacımız var.

Konsolda

IAM hizmet hesapları sayfasına gidin ve sayfanın üst kısmındaki f8393a08b37a422c.png düğmesini tıklayın.

Hizmet hesabınıza benzersiz bir ad ve kimlik verin ve OLUŞTUR'u tıklayın.

Sonraki sayfada, Rol seçin açılır menüsünü tıklayın. "Cloud SQL" filtresi Cloud SQL İstemcisi rolünü seçin. DEVAM'ı tıklayın.

BİTTİ'yi tıklayın.

gcloud'u kullanma

Hizmet hesabını oluşturun:

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

Bu işlemle hizmet hesabı oluşturulur ancak şu anda bu hesaba atanmış bir rol veya izin yoktur. Uygun rolü atamak için şu komutu çalıştırın:

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

Ör. Hizmet hesabınız, oluşturduğunuzda sa-test olarak adlandırıldıysa ve projeniz my-project-test ise komut şu şekilde olacaktır:

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 sanal makinesi oluşturma

Google Compute Engine, bağlanmak istediğimiz uygulamamızı barındıran ve sanal makinenin çalışacağı yönetilen hizmettir. Bu codelab'de uygulama geliştirmiyoruz ancak bağlantıyı psql çalıştırarak onaylayacağız.

Konsolda

Google Compute Engine sayfasına gidin ve 77c46cd1f51bed5c.png düğmesini tıklayın.

Burada çok sayıda seçenek var. Tek yapmanız gereken:

  1. Örneğinize bir ad verin
  2. Machine type ayarını, f1-micro olarak değiştirin
  3. Kimlik ve API erişimi altında, Service account açılır menüsünü Default compute service account yerine önceki adımda oluşturduğunuz listeyle değiştirin.
  4. Sayfanın en altında Tamamen Oluştur'u tıklayın

gcloud'u kullanma

Hizmet hesabı, daha önce oluşturduğunuz hizmet hesabının tam adıdır. Bu nedenle, <NAME>@<PROJECT>.iam.gserviceaccount.com biçiminde olur.

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 örneğini oluşturma

Cloud SQL, sunduğumuz yönetilen ilişkisel veritabanlarıdır. MySQL, PostgreSQL ve SQL Server'ı destekler. Bu codelab için Postgres veritabanı oluşturacağız ancak üçü için de talimatlar benzerdir.

Konsolda

Cloud SQL sayfasına gidip 241836b315e11bf5.png düğmesini tıklayın.

Bahsettiğim gibi, bu codelab'in çoğu tüm SQL türlerine genel bir bakış sağlar ancak bu codelab'de PostgreSQL'i seçin.

  1. Örneğinize bir kimlik verin
  2. Varsayılan kullanıcı için bir şifre girin (kullanıcı adı, seçilen DB için varsayılan ayardır, ör. MySQL için root veya PostgreSQL için postgres)
  3. Compute örneğinizin bölgesini değiştirdiyseniz buradaki bölgeyi de eşleşecek şekilde değiştirmeniz gerekir.
  4. Aşağı kaydırın ve show configuration options simgesini tıklayın
  5. Connectivity bölümünü genişlet
  6. Public IP seçeneğinin işaretini kaldırın ve Private IP onay kutusunu işaretleyin
  7. Özel IP kontrol edildiğinde gösterilen açılır menüde default öğesinin seçili olduğundan emin olun
  8. Sayfayı aşağı kaydırın ve Oluştur'u tıklayın.

Örneğin başlatılması genellikle birkaç dakika sürer.

gcloud'u kullanma

Burada API'leri etkinleştirmek için elimizde iyi bir istem olmadığı için bunu manuel olarak yapmamız gerekecek.

gcloud services enable servicenetworking.googleapis.com

Ardından, varsayılan VPC ağımızda özel hizmet bağlantısını etkinleştirmemiz gerekir. Bunu yapmanın ilk adımı, örneğimiz için kullanmak üzere adlandırılmış bir IP adresi aralığı ayırmaktır.

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

Sıradaki adım, dahili hizmetlerimize bu IP aralığını atamaktır (Bu işlem yaklaşık bir dakika sürer).

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

Son olarak, örneğin kendisi şu anda yalnızca beta sürümünde oluşturulabilir. --no-assign-ip ve --network=default kombinasyonu, özel IP bağlantısını etkinleştirir. Şu anda hem Özel IP hem de Genel IP'yi aynı anda etkinleştirmek mümkün değildir. Bu nedenle, herkese açık erişime ihtiyacınız varsa örneği oluşturduktan sonra düzenlemeniz gerekir. Bu işlemin tamamlanması birkaç dakika sürebilir.

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'yi kurma ve çalıştırma

Sanal makineye bağlandıktan sonra örnek bağlantı dizesi almamız gerekir. Önce SSH aracılığıyla sanal makineye bağlanacağız. Bu parçalarla ilgili talimatlar, Console ve gcloud için ilgili bölümlerde, diğerleri ise sanal makine üzerindeki kabuktan çalıştırılan komutlardan oluşur.

Konsolda

Buraya gidin ve Cloud SQL örneğinizin adını tıklayın.

Biraz aşağı kaydırın ve Connection name öğesini daha sonra kullanmak üzere bir yere kopyalayın.

Google Compute Engine örnek listesi sayfasına gidin ve sanal makinenizin yer aldığı satırı bulun.

Connect sütununda SSH düğmesini tıkladığınızda sanal makineye güvenli bir şekilde bağlanan ayrı bir pencere açılır.

Her ikisi için de aynı kullanıldığından, talimatların geri kalanı için Using gcloud bölümünü atlayın.

gcloud'u kullanma

<INSTANCE NAME> kısmını Cloud SQL örneğinizin adıyla değiştirin:

gcloud sql instances describe <INSTANCE NAME> | grep connectionName

Örnek bağlantı adını daha sonra kullanmak üzere kaydedin.

<ZONE> değerini, örneği oluşturduğunuzda kullanılan alt bölgeyle değiştirmeniz gerekir. Siz değiştirmediyseniz us-central1-b olarak ayarlanmıştır. Ayrıca, <INSTANCE_NAME> bununla aynı olacaktır.

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

Sanal makineye bağlandıktan sonra

İlk olarak, proxy'yi indirmemiz gerekir. İşletim sisteminize göre değişir. Sanal makine oluştururken işletim sistemini değiştirmediyseniz işletim sistemi Linux olur ve şunları kullanabilirsiniz:

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

İşletim sistemini değiştirdiyseniz işletim sisteminizin proxy'sini almak için buraya giderek doğru komutu bulabilirsiniz.

Proxy'yi çalıştırmak için <INSTANCE_CONNECTION_NAME> öğesini değiştirmek üzere Cloud SQL örneği ayrıntılarından kopyaladığınız örnek bağlantı adını alın. Postgres db kullanmıyorsanız veya veritabanının dinlediği varsayılan bağlantı noktasını değiştirdiyseniz TCP bağlantı noktası numarasının değişebileceğini de unutmayın.

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

6. Bağlantıyı ve süreci test edin.

Daha önce belirtildiği gibi, GCE örneğinde test etmek istediğiniz bir uygulamanız varsa elbette sorun yoktur. Bu codelab'de psql'yi yükleyeceğiz ve veritabanımıza bağlanabildiğimizi doğrulamak için bu istemciyi kullanacağız.

Sanal makine üzerindeki SSH oturumundan:

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

Ardından, Cloud SQL örneğini oluştururken ayarladığınız varsayılan kullanıcı şifresini belirtin.

Tebrikler! Her şey yolunda gittiyse Postgres istemi görüntülenir ve veritabanınızda komut çalıştırabilirsiniz.

Sırada ne var?

Bu codelab'lerden bazılarına göz atın...

Referans belgeler