1. Giới thiệu
Lần cập nhật gần đây nhất: ngày 6 tháng 5 năm 2021
Suy nghĩ về mối liên kết
Có nhiều loại ứng dụng và khung trên thị trường. Trong lớp học lập trình này, chúng ta sẽ tìm hiểu cách kết nối với Cloud SQL từ một ứng dụng đang chạy trên một máy ảo được quản lý trong Google Compute Engine thông qua địa chỉ IP riêng tư nội bộ bằng Cloud SQL Proxy. Đây là một cách cực kỳ an toàn để chạy ứng dụng có trạng thái trên Cloud. Bạn đang giảm thiểu nguy cơ tiếp xúc với Internet bằng cách chỉ sử dụng một IP riêng tư và sử dụng SQL Proxy để xử lý kết nối SSL cho bạn.
Một trường hợp sử dụng phổ biến cho việc này là, chẳng hạn như một ứng dụng tại cơ sở đã được chuyển sang chạy trên Đám mây thay vì chạy cục bộ.
Sản phẩm bạn sẽ tạo ra
Lớp học lập trình này rất tối giản. Ý tưởng là hướng dẫn bạn các bước cơ bản của phần kết nối mà không cần suy nghĩ quá nhiều về chính ứng dụng. Trong một thế giới lý tưởng, việc kết nối với Cloud SQL cũng giống như kết nối với bất kỳ phiên bản nào khác của cơ sở dữ liệu SQL. Vì vậy, bạn có thể lấy những gì mình tạo trong lớp học lập trình này và áp dụng cho mọi ứng dụng sản xuất.
Hướng dẫn này sẽ bao gồm cả hướng dẫn từng bước về cách thực hiện các thao tác trong bảng điều khiển GCP, cũng như các lệnh gcloud tương đương để sử dụng trên CLI hoặc tự động hoá.
Các bước riêng lẻ như sau:
- Tạo một Tài khoản dịch vụ tối thiểu để cho phép kết nối với phiên bản Cloud SQL
- Tạo một máy ảo trên Google Compute Engine (GCE)
- Tạo một phiên bản Cloud SQL (hướng dẫn này sử dụng Postgres, nhưng hoạt động tương tự đối với MySQL hoặc SQL Server)
- Tải xuống và chạy Cloud SQL Proxy trên phiên bản GCE
Bạn cần có
- Một tài khoản GCP mà bạn có quyền bật API và tạo dịch vụ
2. Tạo một tài khoản dịch vụ
Tài khoản dịch vụ được dùng để cấp quyền sử dụng các dịch vụ khác nhau trong dự án GCP của bạn. Đối với lớp học lập trình này, chúng ta cần một lớp học lập trình để cấp cho Cloud SQL Proxy quyền kết nối với phiên bản Cloud SQL.
Trên bảng điều khiển
Chuyển đến trang tài khoản dịch vụ IAM rồi nhấp vào nút
ở đầu trang.
Đặt tên và mã nhận dạng riêng biệt cho tài khoản dịch vụ của bạn rồi nhấp vào TẠO.
Trên trang tiếp theo, hãy nhấp vào trình đơn thả xuống Chọn vai trò. Lọc theo "Cloud SQL" rồi chọn vai trò Cloud SQL Client. Nhấp vào TIẾP TỤC.
Nhấp vào XONG.
Sử dụng gcloud
Tạo tài khoản dịch vụ:
gcloud iam service-accounts create <SERVICE_ACCOUNT_NAME> --display-name "<SERVICE_ACCOUNT_NAME> service account"
Thao tác này sẽ tạo tài khoản dịch vụ, nhưng hiện tại tài khoản này chưa được chỉ định vai trò/quyền nào. Để chỉ định vai trò phù hợp, hãy chạy:
gcloud projects add-iam-policy-binding <GCP PROJECT ID> --member serviceAccount:<SERVICE_ACCOUNT_NAME>@<GCP PROJECT ID>.iam.gserviceaccount.com --role roles/cloudsql.client
Ví dụ: Nếu tài khoản dịch vụ của bạn có tên là sa-test khi bạn tạo tài khoản đó và dự án của bạn là my-project-test thì lệnh sẽ là:
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. Tạo máy ảo Compute Engine
Google Compute Engine là dịch vụ được quản lý, nơi máy ảo sẽ chạy và lưu trữ ứng dụng mà chúng ta muốn kết nối. Trong lớp học lập trình này, chúng ta sẽ không xây dựng một ứng dụng mà sẽ xác nhận khả năng kết nối bằng cách chạy psql.
Trên bảng điều khiển
Truy cập vào trang Google Compute Engine rồi nhấp vào nút
.
Có rất nhiều lựa chọn ở đây, bạn chỉ cần làm những việc sau:
- Đặt tên cho phiên bản
- Thay đổi
Machine typethànhf1-micro - Trong phần Identity and API access (Danh tính và quyền truy cập vào API), hãy thay đổi trình đơn thả xuống cho
Service accounttừDefault compute service accountthành trình đơn bạn đã tạo ở bước trước. - Nhấp vào Tạo ở cuối trang
Sử dụng gcloud
Tài khoản dịch vụ là tên đầy đủ của tài khoản dịch vụ mà bạn đã tạo trước đó, vì vậy, tài khoản này sẽ có dạng: <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. Tạo phiên bản Cloud SQL
Cloud SQL là dịch vụ cơ sở dữ liệu quan hệ được quản lý của chúng tôi. Dịch vụ này hỗ trợ MySQL, PostgreSQL và SQL Server. Trong lớp học lập trình này, chúng ta sẽ tạo một cơ sở dữ liệu Postgres, nhưng hướng dẫn cho cả 3 cơ sở dữ liệu này đều tương tự nhau.
Trên bảng điều khiển
Chuyển đến trang Cloud SQL rồi nhấp vào nút
.
Như tôi đã đề cập, hầu hết nội dung trong lớp học lập trình này đều áp dụng cho mọi loại SQL, nhưng trong lớp học lập trình này, hãy chọn PostgreSQL.
- Đặt mã nhận dạng cho phiên bản
- Nhập mật khẩu cho người dùng mặc định (tên người dùng sẽ là mặc định cho cơ sở dữ liệu đã chọn, ví dụ:
rootcho MySQL hoặcpostgrescho PostgreSQL) - Nếu đã thay đổi khu vực của phiên bản điện toán, bạn cũng nên thay đổi khu vực tại đây cho phù hợp.
- Di chuyển xuống rồi nhấp vào biểu tượng
show configuration options - Mở rộng phần
Connectivity - Bỏ chọn
Public IPvà đánh dấu vào hộpPrivate IP - Đảm bảo bạn đã chọn
defaulttrong trình đơn thả xuống xuất hiện khi bạn đánh dấu vào IP riêng tư - Di chuyển xuống rồi nhấp vào Tạo
Thông thường, phiên bản này mất vài phút để khởi động.
Sử dụng gcloud
Vì không có lời nhắc nào để bật API từ đây, nên chúng ta cần thực hiện việc này theo cách thủ công
gcloud services enable servicenetworking.googleapis.com
Tiếp theo, chúng ta cần bật chế độ kết nối dịch vụ riêng tư trên mạng VPC mặc định. Bước đầu tiên để thực hiện việc đó là phân bổ một dải địa chỉ IP có tên để sử dụng cho phiên bản của chúng tôi.
gcloud compute addresses create sql-codelab-allocation --global --purpose=VPC_PEERING --prefix-length=24 --network=default
Tiếp theo là chỉ định dải IP đó cho các dịch vụ nội bộ của chúng tôi (việc này mất khoảng một phút).
gcloud services vpc-peerings update --service=servicenetworking.googleapis.com --network=default --project=<PROJECT ID> --ranges=sql-codelab-allocation --force
Và cuối cùng, việc tạo chính thực thể này hiện chỉ có trong phiên bản thử nghiệm. Sự kết hợp giữa --no-assign-ip và --network=default giúp kết nối IP riêng tư. Hiện tại, bạn không thể bật cả IP riêng tư và IP công khai cùng một lúc. Vì vậy, nếu cần quyền truy cập công khai, bạn sẽ phải chỉnh sửa phiên bản sau khi tạo. Quá trình này mất vài phút để hoàn tất.
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. Thiết lập và chạy Cloud SQL Proxy
Sau khi kết nối với máy ảo, chúng ta sẽ cần một chuỗi kết nối phiên bản. Trước tiên, chúng ta sẽ lấy thông tin đó, sau đó kết nối với chính VM thông qua SSH. Hướng dẫn cho các phần này sẽ nằm trong các phần tương ứng cho Console so với gcloud, sau đó phần còn lại sẽ là các lệnh chạy từ shell trên VM trong phần riêng.
Trên bảng điều khiển
Truy cập vào đây rồi nhấp vào tên phiên bản Cloud SQL của bạn.
Di chuyển xuống một chút rồi sao chép Connection name vào một nơi nào đó để dùng sau.
Chuyển đến trang danh sách phiên bản Google Compute Engine rồi tìm hàng có VM của bạn.
Trong cột Connect, hãy nhấp vào nút SSH. Nút này sẽ mở một cửa sổ riêng biệt kết nối an toàn với máy ảo.
Bỏ qua phần Using gcloud để xem các hướng dẫn còn lại vì cả hai đều có quy trình như nhau.
Sử dụng gcloud
Thay thế <INSTANCE NAME> bằng tên phiên bản Cloud SQL của bạn:
gcloud sql instances describe <INSTANCE NAME> | grep connectionName
Lưu tên kết nối phiên bản để sử dụng sau này.
Bạn cần thay thế <ZONE> bằng vùng đã dùng khi bạn tạo phiên bản. Nếu bạn không thay đổi, thì ngày này sẽ được đặt thành us-central1-b. Ngoài ra, hãy thay thế <INSTANCE_NAME> bằng bất cứ tên nào bạn đã chỉ định trước đó.
gcloud compute ssh --zone <ZONE> <INSTANCE_NAME>
Sau khi kết nối với máy ảo
Trước tiên, chúng ta cần tải proxy xuống. Tuỳ thuộc vào hệ điều hành của bạn. Nếu không thay đổi hệ điều hành khi tạo máy ảo, thì hệ điều hành sẽ là Linux và bạn có thể sử dụng:
wget https://dl.google.com/cloudsql/cloud_sql_proxy.linux.amd64 -O cloud_sql_proxy && chmod +x cloud_sql_proxy
Nếu đã chuyển đổi hệ điều hành, bạn có thể truy cập vào đây để xem lệnh phù hợp nhằm lấy proxy cho hệ điều hành của mình.
Để chạy proxy, hãy lấy tên kết nối phiên bản mà bạn đã sao chép từ thông tin chi tiết về phiên bản Cloud SQL để thay thế <INSTANCE_CONNECTION_NAME>. Ngoài ra, xin lưu ý rằng số cổng tcp có thể thay đổi nếu bạn không sử dụng cơ sở dữ liệu Postgres hoặc nếu bạn đã thay đổi cổng mặc định mà cơ sở dữ liệu đang theo dõi.
./cloud_sql_proxy -instances=<INSTANCE_CONNECTION_NAME>=tcp:5432 &
6. Kiểm tra kết nối và kết thúc
Như đã đề cập trước đó, nếu bạn có một ứng dụng mà bạn muốn thiết lập trong phiên bản GCE để kiểm thử, thì điều đó cũng không sao. Trong lớp học lập trình này, chúng ta sẽ cài đặt psql và dùng ứng dụng đó để xác minh rằng chúng ta có thể kết nối với cơ sở dữ liệu.
Từ phiên SSH trên máy ảo:
sudo apt-get install postgresql-client
psql "host=127.0.0.1 port=5432 sslmode=disable user=postgres"
Sau đó, hãy chỉ định mật khẩu mặc định của người dùng mà bạn đã thiết lập khi tạo phiên bản Cloud SQL.
Xin chúc mừng! Nếu mọi thứ diễn ra đúng quy trình, bạn sẽ thấy lời nhắc Postgres và có thể chạy các lệnh đối với cơ sở dữ liệu của mình.
Tiếp theo là gì?
Hãy xem một số lớp học lập trình này...