Connect to a Cloud SQL for PostgreSQL instance with private IP
This page shows you how to create and connect to a PostgreSQL instance using a private IP. The resources created in this quickstart typically cost less than a dollar, assuming you complete the steps, including the clean up, in a timely manner.
To follow step-by-step guidance for this task directly in the Google Cloud console, click Guide me:
Before you begin
- Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
- Verify that you have the permissions required to complete this quickstart.
-
Enable the necessary Google Cloud APIs.
Console
In the Google Cloud console, go to the APIs page.
Enable the Cloud SQL Admin API. By enabling this API, you can run the Cloud SQL Auth Proxy.gcloud
Click the following button to open Cloud Shell, which provides command-line access to your Google Cloud resources directly from the browser. Cloud Shell can be used to run the
gcloudcommands presented throughout this quickstart.Run the
gcloud services enablecommand as follows using Cloud Shell to enable the APIs required for this quickstart.:gcloud services enable sqladmin.googleapis.com
This command enables the following APIs:
- Cloud SQL Admin API. By enabling this API, you can run the Cloud SQL Auth Proxy.
Required roles
To get the permissions that you need to set up Cloud SQL with a private IP address, ask your administrator to grant you the following IAM roles on the project that you want to set up and connect to:
-
Create or delete an instance, database, and user:
Cloud SQL Administrator role (
roles/cloudsql.admin). -
Create or delete an IAM service account:
IAM Service Account Administrator role (
roles/iam.serviceAccountAdmin). -
Create or delete a compute instance:
-
Compute Administrator role (
roles/compute.admin) -
Compute Instance Administrator role (
roles/compute.instanceAdmin.v1).
-
Compute Administrator role (
-
Create a connection:
-
Service Networking Admin (
roles/servicenetworking.networksAdmin)) -
Service Usage Admin (
roles/serviceusage.serviceUsageAdmin).
-
Service Networking Admin (
For more information about granting roles, see Manage access to projects, folders, and organizations.
You might also be able to get the required permissions through custom roles or other predefined roles.
Overview
There are many ways to connect to a Cloud SQL instance with a private IP address, depending on where the source is located. The key factor is that the source machine must be in the same VPC network as the Cloud SQL instance. If the source is not in Google Cloud or not in the same Google Cloud project, then you have to configure connectivity differently than we show here.
In this quickstart, we configure connectivity through the most direct path. The source and target are in the same Google Cloud project and in the same VPC network. We create a Cloud SQL instance with a private IP address (the target) and a Compute Engine VM (the source). We use the VM to install and use the tools required to connect from the VM to the Cloud SQL instance.
Perform the following actions:
- Create a Cloud SQL instance with a private
IP address.
Find and save the instance's
connection namefor later use. - Create a Compute Engine VM.
- Open two SSH connections to the Compute Engine VM.
You'll use the first window to install the psql and install and start the Cloud SQL Auth Proxy. Then you'll use the second window to connect to the Cloud SQL instance by connecting to the Cloud SQL Auth Proxy.
- In SSH window #1, do the following:
- Install the psql client.
- Install the Cloud SQL Auth Proxy.
The Cloud SQL Auth Proxy acts as a connector between the psql client and the Cloud SQL instance.
- Start the Cloud SQL Auth Proxy.
On success, the Cloud SQL Auth Proxy listens for connection requests.
- In SSH window #2, connect to the Cloud SQL
instance by having the psql client connect to
the Cloud SQL Auth Proxy.
On success, you see your psql prompt in this window, and a successful connection message in SSH window #1, where the Cloud SQL Auth Proxy is running.
- Clean up.
Create a Cloud SQL instance with a private IP address
To create an instance that uses private IP connections, do the following:
-
In the Google Cloud console, go to the Cloud SQL Instances page.
- Select the PostgreSQL tab and click Create Sandbox instance in the Sandbox box. Alternatively, you can clickCreate Instance and do the following:
- Click Choose PostgreSQL.
- Select the Enterprise edition.
- Choose the Sandbox preset.
- If you're prompted to enable the Compute API, click the Enable API button.
- In the Instance info section, enter a name for the Instance ID.
- Enter a password for the postgres user. Take note of the password you create, because you'll need it later.
- In the Choose region and zonal availability section, select the Single zone option.
- Expand Show configuration options.
- Expand Connections.
- Clear Public IP.
- Select Private IP.
- Select Private Service Access (PSA).
- From the VPC Network drop-down, select default.
- If you're using a new project, you're prompted by the message: Network connection is not set up, and a box titled Network setup confirmation required directs you to VPC documentation for setting up PSA.
- In the Google Cloud console, go to the VPC networks page:
- Select the default VPC network.
- Set a firewall rule that allows access to TCP port 22:
- Select the Firewall tab.
- At VPC firewall rules, select Create VPC firewall rule.
- Give the firewall rule a name.
- Under Targets, select All instances in the network.
- Under Source IPv4 ranges, enter
0.0.0.0/0. - Under Protocols and Ports, check TCP and then in
the Ports box directly below, enter
22. - Select Create.
- Allocate an IP address range:
- Select the Private services access tab.
- On the Private services access tab, select the Allocated IP ranges for services tab.
- Click Allocate IP range.
- Enter a Name and optionally a Description for the allocated range.
- To let Google select an available range, select Automatic.
- Enter a prefix length between
16and 124 (the number of addresses allocated is equal to 2 to the (32 - prefix length). - Click Allocate to create the allocated range.
- Create a private connection:
- On the Private services access tab, switch to the Private connections to services tab.
- Click the Create Connection button.
- In the Assigned allocation drop-down in the Create a private connection box, select the name of the IP address range that you just created.
- Click Connect.
- When the connection has been created, return to where you were creating your Cloud SQL instance and click Confirm connection.
- When the PSA connection is successfully created, click Create instance.
You're taken to the instance Overview page as the new instance is being created.
After the instance creation is complete, scroll to the Connect to
this instance section and save the instance's Connection name.
The connection name is in the format projectID:region:instanceID.
You'll use this connection name later when starting the Cloud SQL Auth Proxy.
Create a database
To create a database, select Databases in the navigation pane on the left, and then:
- Select Create database.
- Enter a DB_NAME in the Database name field.
- Click Create.
You'll use this db_name later when connecting using the Cloud SQL Auth Proxy.
Create a Compute Engine VM
Follow these steps to create a VM:
-
In the Google Cloud console, go to the VM instances page.
- Click Create instance.
- Enter a Name for the instance.
- Select Data protection in the navigation pane and select No backups.
- Select Security in the navigation pane, and under Access scopes, select Allow full access to all Cloud APIs.
- Click Create and wait for the VM to finish being created.
Open two SSH connections to the Compute Engine VM
We use two windows in the VM. The first window is used to install the psql client and the Cloud SQL Auth Proxy, get the instance connection name, and use this name to start the proxy. The second window is used to connect to the Cloud SQL instance through the proxy.
- Expand the SSH menu in the Connect column for your Compute Engine VM instance.
- Select Open in browser window to open SSH window #1.
It might take a few seconds for the prompt in the window to become available for you.
- When the prompt appears, enter
pwdto verify that you're in the/home/$USERdirectory.You'll install the psql client and the Cloud SQL Auth Proxy, and also start the Cloud SQL Auth Proxy, in this window.
- Select Open in browser window again to open SSH window #2.
You'll use this window to connect to your Cloud SQL instance.
Install the psql client
Use SSH window #1 for this step.
Install the psql client from the package manager:
sudo apt-get update sudo apt-get install postgresql-client
Install the Cloud SQL Auth Proxy
Use SSH window #1 for this step.
- Install
wget:sudo apt-get install wget
- Download the Cloud SQL Auth Proxy:
wget https://storage.googleapis.com/cloud-sql-connectors/cloud-sql-proxy/v2.8.2/cloud-sql-proxy.linux.amd64 \ -O cloud-sql-proxy
- Make the Cloud SQL Auth Proxy executable:
chmod +x cloud-sql-proxy
Start the Cloud SQL Auth Proxy
Use SSH window #1 for this step.
Start the Cloud SQL Auth Proxy so you can monitor its output. Replace
INSTANCE_CONNECTION_NAME with the connection name you copied
when you created the Cloud SQL instance.
./cloud-sql-proxy --private-ip INSTANCE_CONNECTION_NAME
When the Cloud SQL Auth Proxy starts successfully, a message similar to the following appears in the SSH window:
Listening on 127.0.0.1:5432 for myInstance Ready for new connections
Connect to your Cloud SQL instance
Use SSH window #2 for this step.
Run the following command after replacing DB_NAME with the name of the Cloud SQL database:
psql "host=127.0.0.1 port=5432 sslmode=disable dbname=DB_NAME user=postgres"
At the Enter password: prompt, enter the password of your PostgreSQL account.
Verify that the PostgreSQL prompt appears. You have connected to your database using the psql client.
Return to the terminal window where you started the Cloud SQL Auth Proxy. You should see a message similar to the following:
New connection for myInstance
Clean up
To avoid incurring charges to your Google Cloud account for the resources used on this page, follow these steps.
-
In the Google Cloud console, go to the Cloud SQL Instances page.
- Select the
myinstanceinstance to open the Instance details page. - In the icon bar at the top of the page, click Delete.
- In the Delete instance window, type your instance's name and then click Delete.
Optional cleanup steps
If you're not using the APIs that were enabled as part of this quickstart, you can disable them.
- APIs that were enabled within this quickstart:
- Cloud SQL Admin API
In the Google Cloud console, go to the APIs page.
Select the Cloud SQL Admin API and then click the Disable API button.
In the Google Cloud console, go to the VM instances page.
Select your instance's name.
Select Delete from the More actions menu.
What's next
Based on your needs, you can learn more about creating Cloud SQL instances.
You also can learn about creating PostgreSQL users and databases for your Cloud SQL instance.
Additionally, you can learn about connecting to a Cloud SQL instance from other Google Cloud applications: