SQLAlchemy 使用時に SSL 証明書を使用して TCP 接続を作成する

SQLAlchemy と SSL(セキュア ソケット レイヤ)証明書を使用して、Cloud SQL for MySQL への TCP 接続を作成します。

コードサンプル

Python

# Remember - storing secrets in plaintext is potentially unsafe. Consider using
# something like https://cloud.google.com/secret-manager/docs/overview to help keep
# secrets secret.
db_user = os.environ["DB_USER"]
db_pass = os.environ["DB_PASS"]
db_name = os.environ["DB_NAME"]
db_host = os.environ["DB_HOST"]
db_root_cert = os.environ["DB_ROOT_CERT"]
db_cert = os.environ["DB_CERT"]
db_key = os.environ["DB_KEY"]

# Extract port from db_host if present,
# otherwise use DB_PORT environment variable.
host_args = db_host.split(":")
if len(host_args) == 1:
    db_hostname = host_args[0]
    db_port = int(os.environ["DB_PORT"])
elif len(host_args) == 2:
    db_hostname, db_port = host_args[0], int(host_args[1])

ssl_args = {
    "ssl_ca": db_root_cert,
    "ssl_cert": db_cert,
    "ssl_key": db_key
}

pool = sqlalchemy.create_engine(
    # Equivalent URL:
    # mysql+pymysql://<db_user>:<db_pass>@<db_host>:<db_port>/<db_name>
    sqlalchemy.engine.url.URL.create(
        drivername="mysql+pymysql",
        username=db_user,  # e.g. "my-database-user"
        password=db_pass,  # e.g. "my-database-password"
        host=db_hostname,  # e.g. "127.0.0.1"
        port=db_port,  # e.g. 3306
        database=db_name  # e.g. "my-database-name"
    ),
    connect_args=ssl_args,
    **db_config
)

次のステップ

他の Google Cloud プロダクトに関連するコードサンプルの検索およびフィルタ検索を行うには、Google Cloud のサンプルをご覧ください。