從 App Engine 連線

本頁面包含從 App Engine 應用程式連線至 Cloud SQL 執行個體的資訊與範例。

設定 Cloud SQL 與 App Engine

如需設定 Cloud SQL 執行個體或設定 App Engine 應用程式的相關資訊,請參閱以下操作說明:

  • 找到 Cloud SQL 執行個體的連線名稱。這是每個執行個體的唯一字串,格式為 <PROJECT_ID>:<REGION>:<INSTANCE_ID>。這個名稱列在執行個體「Instance details」(執行個體詳細資料) 頁面的「Instance connection name」(執行個體連線名稱) 底下;如果您使用 gcloud sql instances describe <INSTANCE_ID> 指令,該名稱則列在 connectionName 下方。

  • 確認已為包含 Cloud SQL 執行個體的專案啟用 Cloud SQL Admin API。

    啟用 API

如要獲得最佳效能與回應時間,應用程式應使用連線集區。如需連線集區的特定範例,請參閱管理資料庫連線一文。

將 App Engine 標準環境連線至 Cloud SQL

App Engine 標準環境提供 Unix 網域通訊端,用於連線至 Cloud SQL 執行個體。系統會使用 App Engine 預設服務帳戶自動授權這些連線。

通訊端可在 /cloudsql/INSTANCE_CONNECTION_NAME 中找到,且可直接由應用程式使用。如需使用範例,請參閱下方說明。

針對 PostgreSQL,您可能需要為通訊端路徑加上 .s.PGSQL.5432 後置字串。某些連接器程式庫會自動套用後置字串,但其他程式庫則需要您依照下列方式指定通訊端路徑:/cloudsql/INSTANCE_CONNECTION_NAME/.s.PGSQL.5432

Python

# The SQLAlchemy engine will help manage interactions, including automatically
# managing a pool of connections to your database
db = sqlalchemy.create_engine(
    # Equivalent URL:
    # postgres+pg8000://<db_user>:<db_pass>@/<db_name>?unix_socket=/cloudsql/<cloud_sql_instance_name>
    sqlalchemy.engine.url.URL(
        drivername='postgres+pg8000',
        username=db_user,
        password=db_pass,
        database=db_name,
        query={
            'unix_sock': '/cloudsql/{}'.format(cloud_sql_connection_name)
        }
    ),
    # ... Specify additional properties here.
    # ...
)
如要在應用程式的內容中查看上述程式碼片段,您可以在這裡找到整個專案。

Java

// The configuration object specifies behaviors for the connection pool.
HikariConfig config = new HikariConfig();

// Configure which instance and what database user to connect with.
config.setJdbcUrl(String.format("jdbc:postgresql:///%s", DB_NAME));
config.setUsername(DB_USER); // e.g. "root", "postgres"
config.setPassword(DB_PASS); // e.g. "my-password"

// For Java users, the Cloud SQL JDBC Socket Factory can provide authenticated connections.
// See https://github.com/GoogleCloudPlatform/cloud-sql-jdbc-socket-factory for details.
config.addDataSourceProperty("socketFactory", "com.google.cloud.sql.postgres.SocketFactory");
config.addDataSourceProperty("cloudSqlInstance", CLOUD_SQL_CONNECTION_NAME);

// ... Specify additional connection properties here.

// ...

// Initialize the connection pool using the configuration object.
DataSource pool = new HikariDataSource(config);
如要在應用程式的內容中查看上述程式碼片段,您可以在這裡找到整個專案。

Node.js

// Initialize Knex, a Node.js SQL query builder library with built-in connection pooling.
const knex = connect();

function connect() {
  // Configure which instance and what database user to connect with.
  // Remember - storing secrets in plaintext is potentially unsafe. Consider using
  // something like https://cloud.google.com/kms/ to help keep secrets secret.
  const config = {
    user: process.env.DB_USER, // e.g. 'my-user'
    password: process.env.DB_PASS, // e.g. 'my-user-password'
    database: process.env.DB_NAME, // e.g. 'my-database'
  };

  config.host = `/cloudsql/${process.env.CLOUD_SQL_CONNECTION_NAME}`;

  // Establish a connection to the database
  const knex = Knex({
    client: 'pg',
    connection: config,
  });

  // ... Specify additional properties here.
  // ...
  return knex;
如要在應用程式內容中查看上述程式碼片段,您可以在這裡找到整個專案。

將 App Engine 彈性環境連線至 Cloud SQL

App Engine 彈性環境使用 Unix 網域通訊端或 TCP 連線,為 Cloud SQL 執行個體提供安全連線選項。

Unix 網域通訊端

將以下內容加到專案的 app.yaml,啟用提供的 Unix 通訊端:
beta_settings:
  cloud_sql_instances: <INSTANCE_CONNECTION_NAME> 
應用程式可使用位於 /cloudsql/<INSTANCE_CONNECTION_NAME> 的 Unix 通訊端,連線至 Cloud SQL 執行個體。
連線至多個 Cloud SQL 執行個體時,請使用執行個體連線名稱的逗號分隔清單。列出的每個執行個體都將建立不同的通訊端,這些通訊端衍生自執行個體連線名稱。

TCP 連線

將以下內容加到專案的 app.yaml,啟用提供的 TCP 通訊埠:
beta_settings:
  cloud_sql_instances: <INSTANCE_CONNECTION_NAME>=tcp:<TCP_PORT>
應用程式可使用監聽 127.0.0.1:<TCP_PORT> 的 TCP 通訊埠,連線至 Cloud SQL 執行個體。
連線至多個 Cloud SQL 執行個體時,請使用執行個體連線名稱的逗號分隔清單。每個執行個體都必須使用不同的本機通訊埠。

其他資訊

不同專案中的 App Engine 與 Cloud SQL

針對不同專案中的 App Engine 應用程式和 Cloud SQL 執行個體,您必須將下列其中一個身分與存取權管理角色授予給預設的 App Engine 服務帳戶 ([PROJECT-ID]@appspot.gserviceaccount.com):

  • Cloud SQL Client
  • Cloud SQL Editor
  • Cloud SQL Admin

如需將身分與存取權管理角色新增至服務帳戶的詳細操作說明,請參閱為服務帳戶授予角色一文。

最佳做法

從 App Engine 連線至 Cloud SQL 時,請記住以下最佳做法:

  • App Engine 可以在負載增加時自動建立更多執行個體。如果 App Engine 執行個體數增加到超出 Cloud SQL 執行個體可以處理的設定範圍,則您的 Cloud SQL 執行個體將無法滿足需求。如要避免發生此狀況,請限制 App Engine 執行個體數量上限。詳情請參閱調整元素的資源配置

  • 資料庫連線會耗用資源;因此您的應用程式應使用最佳做法進行連線管理,以降低所需連線數。在 App Engine 標準環境中,App Engine 執行個體可以開啟的 Cloud SQL 連線數有硬性限制

後續步驟

本頁內容對您是否有任何幫助?請提供意見:

傳送您對下列選項的寶貴意見...

這個網頁
PostgreSQL 適用的 Cloud SQL