💣
[Node.js+GCP] error:1E08010C:DECODER routines::unsupported
発生した事象
GCPのBigQueryにNode.jsのClientライブラリを用いてアクセス実行を行おうとしたところ、以下のようなエラーに遭遇しました。
error:1E08010C:DECODER routines::unsupported
以下はBigQueryクライアントのコードイメージです。
import { BigQuery } from "@google-cloud/bigquery";
export const bigQueryClient = new BigQuery({
projectId: PROJECT_ID,
credentials: {
private_key: process.env.BIGQUERY_PRIVATE_KEY || "",
client_email: CLIENT_EMAIL,
.....
},
});
原因
GCPのプライベートキーは以下のような形式でエスケープシーケンスが含まれているが、.env
内の環境変数の \n がエスケープシーケンスとしてではなく純粋な文字列として扱われてしまっていたためでした。
.env
BIGQUERY_PRIVATE_KEY=-----BEGIN PRIVATE KEY-----\n1korehasampledayo2honnmonokoukaidamezettai.....\n-----END PRIVATE KEY-----\n
解決方法
環境変数に含まれている文字列として扱われている\n を実際のエスケープシーケンスに変換するだけです。
export const bigQueryClient = new BigQuery({
projectId: PROJECT_ID,
credentials: {
private_key: (process.env.BIGQUERY_PRIVATE_KEY || "").replace(/\\n/g, "\n"),
client_email: CLIENT_EMAIL,
.....
},
});
今回はBigQueryへのアクセス時に発生しましたが、おそらくどのGCPサービスもキーの形式は同じだと思うので、他のGCPを扱う際でも踏んでしまう可能性は高そうです。自分自身忘れた頃にまた踏みそうなので、こちらの記事として残しておきます。
ユーザーファーストなサービスを伴に考えながらつくる、デザインとエンジニアリングの会社です。エンジニア積極採用中です!hrmos.co/pages/funteractive/jobs
Discussion