💣

[Node.js+GCP] error:1E08010C:DECODER routines::unsupported

2024/06/11に公開

発生した事象

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を扱う際でも踏んでしまう可能性は高そうです。自分自身忘れた頃にまた踏みそうなので、こちらの記事として残しておきます。

ファンタラクティブテックブログ

Discussion