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

1. Giriş

Last Updated: 2021-05-06

Bağlantı hakkında düşünme

Piyasada birçok uygulama ve çerçeve türü vardır. Bu codelab'de, Cloud SQL Proxy'yi kullanarak Google Compute Engine'deki yönetilen bir sanal makinede çalışan bir uygulamadan Cloud SQL'e dahili özel IP adresi üzerinden bağlanmayı ele alacağız. Bu, durum bilgisi olan bir uygulamayı bulutta çalıştırmanın son derece güvenli bir yoludur. Yalnızca özel bir IP kullanmayı ve SSL bağlantısını sizin için işleyen SQL Proxy'yi kullanarak internete maruz kalma durumunuzu en aza indirirsiniz.

Bunun yaygın bir kullanım alanı, örneğin yerel olarak çalışmak yerine Cloud'da çalışmaya geçirilen şirket içi bir uygulamadır.

Ne oluşturacaksınız?

Bu codelab çok minimalisttir. Buradaki amaç, uygulamanın kendisi hakkında çok fazla düşünmeden bağlantı kısmının temel unsurlarını size adım adım anlatmaktır. İdeal durumda, Cloud SQL'e bağlanmak diğer SQL veritabanı örneklerine bağlanmak gibidir. Bu nedenle, bu codelab'de oluşturduğunuz öğeleri alıp herhangi bir üretim uygulamasına uygulayabilirsiniz.

Talimatlarda, GCP Console'da işlemlerin nasıl yapılacağı ve komut satırında veya otomasyonda kullanılacak gcloud komutlarının eşdeğerleri yer alır.

Adımlar şunlardır:

  • Cloud SQL örneğine bağlantıyı etkinleştirmek için minimum düzeyde bir hizmet hesabı oluşturun
  • Google Compute Engine'de (GCE) sanal makine oluşturma
  • Cloud SQL örneği oluşturun (bu eğitimde Postgres kullanılmaktadır ancak MySQL veya SQL Server için de benzer şekilde çalışır)
  • Cloud SQL Proxy'yi GCE örneğine indirip çalıştırma

Gerekenler

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

2. Hizmet hesabı oluşturma

Hizmet hesapları, GCP projenizdeki farklı hizmetleri kullanma izni vermek için kullanılır. Bu codelab'de, Cloud SQL Proxy'ye Cloud SQL örneğimize bağlanma izni vermek için bir tane oluşturmamız gerekiyor.

Konsolda

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

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

Sonraki sayfada, "Bir rol seçin" açılır listesini tıklayın. "Cloud SQL" için filtreleyin ve 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şlem, hizmet hesabını oluşturur ancak şu anda hesaba atanmış herhangi bir rol/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

Örneğin, hizmet hesabınız oluşturulurken sa-test olarak adlandırıldıysa ve projeniz my-project-test ise komut şu şekilde olur:

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, sanal makinenin çalışacağı ve bağlanmak istediğimiz uygulamamızı barındıracağı yönetilen hizmettir. Bu codelab'de uygulama oluşturmayacağız ancak psql'yi çalıştırarak bağlantıyı doğrulayacağız.

Konsolda

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

Burada birçok seçenek vardır. Yapmanız gereken tek şey şudur:

  1. Örneğinize ad verin
  2. Machine type değerini f1-micro olarak değiştirin.
  3. Kimlik ve API erişimi bölümünde, Service account için açılır listeyi Default compute service account'den önceki adımda oluşturduğunuz listeye değiştirin.
  4. Sayfanın en alt kısmındaki 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çimindedir.

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, yönetilen ilişkisel veritabanı teklifimizdir. MySQL, PostgreSQL ve SQL Server'ı destekler. Bu codelab'de bir Postgres veritabanı oluşturacağız ancak talimatlar üçü için de benzerdir.

Konsolda

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

Belirttiğim gibi, bu codelab'in çoğu herhangi bir SQL türü için geçerlidir ancak bu codelab için PostgreSQL'i seçin.

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

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

gcloud'u kullanma

Buradan API'leri etkinleştirmek için uygun istemler olmadığından bunu manuel olarak yapmamız gerekir.

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ğimizde kullanılacak 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

Ardından, bu IP aralığını dahili hizmetlerimize atarız (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 oluşturulması şu anda yalnızca beta sürümünde kullanılabilir. Özel IP bağlantısı, --no-assign-ip ve --network=default kombinasyonuyla sağlanır. Şu anda hem özel IP hem de genel IP'yi aynı anda etkinleştirmenin bir yolu yoktur. Bu nedenle, genel 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ı dizesine ihtiyacımız olacak. Önce bunu alacağız, ardından SSH üzerinden sanal makineye bağlanacağız. Bu parçalarla ilgili talimatlar, Console ve gcloud için kendi bölümlerinde yer alacak. Geri kalanlar ise kendi bölümünde sanal makinedeki kabuktan çalıştırılan komutlar olacak.

Konsolda

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

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

Google Compute Engine örnekleri liste sayfasına gidin ve sanal makinenizin bulunduğu 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ı olduğundan, talimatların geri kalanı için Using gcloud bölümünü atlayın.

gcloud'u kullanma

<INSTANCE NAME> yerine Cloud SQL örneğinizin adını yazın:

gcloud sql instances describe <INSTANCE NAME> | grep connectionName

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

<ZONE> kısmını, örneği oluşturduğunuz sırada kullanılan bölgeyle değiştirmeniz gerekir. Değişikliği siz yapmadıysanız bu ayar us-central1-b olarak belirlenmiştir. Ayrıca <INSTANCE_NAME> kısmını daha önce belirttiğiniz değerle değiştirin.

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

Sanal makineye bağlandıktan sonra

İlk olarak proxy'yi indirmemiz gerekiyor. İşletim sisteminize bağlıdır. Sanal makine oluşturma sırasında 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 sisteminiz için proxy'yi alacak doğru komutu öğrenmek üzere buraya gidebilirsiniz.

Proxy'yi çalıştırmak için Cloud SQL örneği ayrıntılarından kopyaladığınız örnek bağlantı adını alıp <INSTANCE_CONNECTION_NAME> yerine yapıştırın. Ayrıca, Postgres veritabanı 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 unutmayın.

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

6. Bağlantıyı test etme ve sonlandırma

Daha önce de belirtildiği gibi, test etmek için GCE örneğinde kullanmak istediğiniz bir uygulamanız varsa bunu da kullanabilirsiniz. Bu codelab'de psql'i yükleyip bu istemciyi kullanarak veritabanımıza bağlanabildiğimizi doğrulayacağız.

Sanal makinedeki 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 belirlediğiniz varsayılan kullanıcının şifresini belirtin.

Tebrikler! Her şey yolunda gittiyse Postgres istemini görmeniz ve veritabanınızda komut çalıştırmanız gerekir.

Yapabilecekleriniz

Şu codelab'lere göz atın:

Referans belgeler