Azure FunctionsからAzure Databaseに接続する時に使うSSL証明書を構成情報に格納して利用する

2022年7月26日

以前、Azure Database for MySQLにAzure Functionsから接続するサンプルを作成しました。
こちらをデプロイ使用する際に、証明書をどうやって管理するのか悩んでいました。

正解かどうかはわかりませんが、構成情報に持たせる方法を思いついたので調査しました。

以下を参考に設定しました。

https://stackoverflow.com/questions/66501428/how-to-add-an-ssl-certificate-ca-cert-to-node-js-environment-variables-in-orde

証明書の情報を加工する

SSL証明書ですが、改行されているのでこれをこのままコピペして構成情報として使用するとエラーが出てしまいます。
エラーが出ないように\nを各行末に入れることで構成情報から使えるようになります。

ローカルではlocal.settings.jsonで構成情報を設定する

構成情報をローカルで持たせる時は、local.settings.jsonに値を設定します。

SQL_CRT="-----BEGIN CERTIFICATE-----\nすべての行末に\nをいれる-----END CERTIFICATE-----"

こんな感じにします。
しつこいですが、もともとの証明書で改行されているところで\nをいれてます。

ただ、最後の方に書きますが、上記だけでは不十分です。
構成情報の値はエスケープされてしまうので、その対応を入れる必要があります。

Azure Potrtalで構成情報を設定する

実際にデプロイした時は、Azure上から構成情報を取得することになります。
なので、実際のFunctionsの構成情報から値を設定します。

詳しくは以下を確認してください。

設定するの内容は、local.settings.jsonで設定した内容と同じです。

構成情報の値はエスケープされる

下記記事のアプリケーションの 設定の構成で書かれているように、アプリ設定の値の特集文字はエスケープする必要があります。 クライアント側で復元するときにここは注意しないといけません。
復元は以下のようにreplaceで対応できると思います。

someValue.replace(/\\n/g, '\n')

https://learn.microsoft.com/ja-jp/azure/app-service/configure-common?tabs=portal