Cloud Functions を使用して Cloud SQL に接続する

最終更新日: 2020 年 6 月 17 日

Cloud SQL とは

Cloud SQL は、Google Cloud Platform 上のリレーショナル データベースの設定、維持、運用、管理を簡単にできるようにするフルマネージド データベース サービスです。

Cloud Functions の概要

Cloud Functions は軽量なコンピューティング ソリューションであり、デベロッパーはサーバーやランタイム環境を管理することなく、Cloud イベントに応答する単一目的のスタンドアロン関数を作成できます。

作成するアプリの概要

この Codelab では、Cloud Functions の関数を Python で作成します。関数:

  • Cloud SQL Database インスタンスに接続します。
  • データベースのテーブルに insert ステートメントを送信します。

ラボの内容

  • Google Cloud Console で Cloud Functions ウェブ UI にアクセスする方法。
  • Cloud Functions の関数を作成する方法。
  • Cloud Functions の関数をテストする方法。
  • Python を使用して Cloud SQL データベース インスタンスに接続する方法(MySQL または PostgreSQL)。
  • Python を使用して Cloud SQL データベースに書き込む方法。
  • ブラウザ(ChromeFirefox など)
  • Cloud SQL インスタンスを含む Google Cloud Platform プロジェクト。
  • まだお持ちでない場合は、それに関するチュートリアルを用意しています。インスタンスを削除する以外のすべての手順を行います。
  • インスタンスには、テーブルを備えた MySQL または PostgreSQL データベースが含まれます。
  • インスタンス接続名、データベースとテーブル名、データベース ユーザー名、ユーザーのパスワード。
  • Cloud SQL クライアントのロールを持つサービス アカウント

Cloud SQL データベースに接続するための Cloud Functions のコードはここにあります。一部の変数値は Cloud SQL データベースが MySQL か PostgreSQL かによって異なり、独自のデータベース情報に依存します。

Cloud Console の Cloud Functions UI にはテキスト エディタがあります。 コードのコピー、貼り付け、編集が可能です。また、ローカルで編集してから UI に貼り付けることもできます。

requirements.txt

# This file tells Python which modules it needs to import
SQLAlchemy==1.3.12
# If your database is MySQL, uncomment the following line:
#PyMySQL==0.9.3
# If your database is PostgreSQL, uncomment the following line:
#pg8000==1.13.2

main.py

# This file contains all the code used in the codelab.
import sqlalchemy

# Depending on which database you are using, you'll set some variables differently.
# In this code we are inserting only one field with one value.
# Feel free to change the insert statement as needed for your own table's requirements.

# Uncomment and set the following variables depending on your specific instance and database:
#connection_name = ""
#table_name = ""
#table_field = ""
#table_field_value = ""
#db_name = ""
#db_user = ""
#db_password = ""

# If your database is MySQL, uncomment the following two lines:
#driver_name = 'mysql+pymysql'
#query_string = dict({"unix_socket": "/cloudsql/{}".format(connection_name)})

# If your database is PostgreSQL, uncomment the following two lines:
#driver_name = 'postgres+pg8000'
#query_string =  dict({"unix_sock": "/cloudsql/{}/.s.PGSQL.5432".format(connection_name)})

# If the type of your table_field value is a string, surround it with double quotes.

def insert(request):
    request_json = request.get_json()
    stmt = sqlalchemy.text('insert into table_name (table_field) values (table_field_value)')

    db = sqlalchemy.create_engine(
      sqlalchemy.engine.url.URL(
        drivername=driver_name,
        username=db_user,
        password=db_password,
        database=db_name,
        query=query_string,
      ),
      pool_size=5,
      max_overflow=2,
      pool_timeout=30,
      pool_recycle=1800
    )
    try:
        with db.connect() as conn:
            conn.execute(stmt)
    except Exception as e:
        return 'Error: {}'.format(str(e))
    return 'ok'
  1. ブラウザで、Google Cloud Platform Console の UI に移動します。
  2. ナビゲーション メニューで [Cloud Functions] を選択します。
  3. ボタンバーの [関数を作成] をクリックします。
  4. 関数の名前を入力します。
  5. [HTTP] トリガーを選択します。(トリガー項目の下に表示される URL をメモします。形式は https://REGION-PROJECT_ID.cloudfunctions.net/FUNCTION_NAME です。)
  6. ソースコード オプションには [インライン エディタ] を選択します。
  7. ランタイム オプションには [Python 3.7] を選択します。
  8. ソースコード エディタで requirements.txtmain.py の既存のコンテンツを削除し、上記の編集済みのコードに置き換えます。
  9. 実行する関数の名前として「insert」と入力します。
  10. [詳細オプション] で、Cloud SQL クライアントのロールを持つサービス アカウントを選択します。
  11. [作成] をクリックし、スピナーが停止するのを待ちます。緑色のチェックマークが表示されたら、関数が使用できる状態です。
  1. ブラウザで、Google Cloud Platform Console の UI に移動します。
  2. ナビゲーション メニューで [Cloud Functions] を選択します。
  3. 前の手順で作成した関数の名前をクリックします。
  4. ページの中央にある [テスト] リンクを選択します。
  5. [関数をテスト] を選択します。
  6. 結果は「ok」になります(テストが失敗した場合、デバッグに役立つスタック トレースが表示されます)。
  7. ブラウザで、関数を作成した際にメモした URL に移動します。
  8. okの結果もブラウザに表示されます。

これで、Cloud SQL で動作する Cloud Function が作成されました。

具体的には、Cloud SQL データベース インスタンスに接続して書き込みを行う Cloud Function が作成されました。

以下の Codelab をご覧ください。

関連情報

リファレンス ドキュメント