從 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」(執行個體連線名稱) 下。如果您使用 connectionName 指令,該名稱則列在 gcloud sql instances describe <INSTANCE_ID> 下。

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

    啟用 API

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

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

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

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

Python

# The SQLAlchemy engine will help manage interactions, including automatically
# managing a pool of connections to your database
db = sqlalchemy.create_engine(
    # Equivalent URL:
    # mysql+pymysql://<db_user>:<db_pass>@/<db_name>?unix_socket=/cloudsql/<cloud_sql_instance_name>
    sqlalchemy.engine.url.URL(
        drivername='mysql+pymysql',
        username=db_user,
        password=db_pass,
        database=db_name,
        query={
            'unix_socket': '/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:mysql:///%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.mysql.SocketFactory");
config.addDataSourceProperty("cloudSqlInstance", CLOUD_SQL_CONNECTION_NAME);
config.addDataSourceProperty("useSSL", "false");

// ... Specify additional connection properties here.
// ...

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

將 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 執行個體,您必須將下列其中一個 IAM 角色,授予給預設的 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 連線數有固定限制

將 App Engine 標準環境連線到第一代 Cloud SQL

第一代 Cloud SQL 執行個體只支援來自 App Engine 標準環境的連線,且必須獲得授權。如要獲得授權,請按照下方步驟操作。

主控台

  1. 前往 Google Cloud Platform 主控台的「Cloud SQL Instances」(Cloud SQL 執行個體) 頁面。

    前往 Cloud SQL「Instances」(執行個體) 頁面

  2. 按一下執行個體名稱,開啟「執行個體詳細資料」頁面。
  3. 選取 [連線設定] 分頁標籤。
  4. 在「已獲授權的 App Engine Standard 應用程式」區段中,按一下 [新增專案 ID] 並輸入您要授予應用程式權限的專案 ID。
  5. 按一下 [完成] 以結束編輯模式。
  6. 按一下 [儲存] 以更新執行個體。

gcloud

  1. 列出執行個體現有的已獲授權 App Engine 專案。
    gcloud sql instances describe [INSTANCE_NAME]
    
  2. 使用 sql instances patch 指令,將專案 ID 提供給所有可存取這個執行個體的應用程式。請使用逗號分隔多個 ID。
    gcloud sql instances patch [INSTANCE_NAME] --authorized-gae-apps [GAE_APP_PROJECT_ID]
    

後續步驟

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

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

這個網頁
MySQL 適用的 Cloud SQL