0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

【IBM Cloud】CodeEngineで改行を含む環境変数を扱う

Last updated at Posted at 2023-10-06

発生した問題

Node.jsで開発したアプリで認証ありのRedisサーバーに接続しようとした際、ローカルで動作させて接続できていたものが、CodeEngineにデプロイしたアプリでは正常に接続されなかった。
正確には接続する際の認証に失敗していたようだ。

REDIS_CERTIFICATE="-----BEGIN CERTIFICATE-----
MIIDHTCCAgWgAwIBAgIUFIO1EGeecAJjDhDdmSdOfCWPboYwDQYJKoZIhvcNAQEL
...
FTel34h4s8q8kPTaEWuohkoV80IYKLSZthAzzXtJpTW1
-----END CERTIFICATE-----"

証明書を上のような形で環境変数に入れることでローカルでは動作していたが、CodeEngineの環境変数にはこのまま突っ込んでも認識されないようだった。

"値"の部分にペーストした時点で改行コードから見た目同様の半角スペースになってしまうようだ。

解決策

REDIS_CERTIFICATE=-----BEGIN CERTIFICATE-----\nMIIDHTCCAgWgAwIBAgIUFIO1EGeecAJjDhDdmSdOfCWPboYwDQYJKoZIhvcNAQEL...\nFTel34h4s8q8kPTaEWuohkoV80IYKLSZthAzzXtJpTW1\n-----END CERTIFICATE-----

このように、文字列を囲うダブルクォーテーションを外し、改行を\nに置き換えた。
その後Node.js側でREDIS_CERTIFICATEを読み取り、.replace(/\\n/gm, "\n")を行うことで無事接続が行えた。

考察?

CodeEngineでは、改行は半角スペースへ。
ダブルクォーテーションやバックスラッシュなどは環境変数の一部としてエスケープされるようだ。

CodeEngine上の環境変数で設定した値 アプリケーション側で認識される値

(改行)

(半角スペース)
\ \\
"" \"\"
\n \\n

わかりづらいと思うのは私だけ?

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?