AWS Lambdaで日本語フォントを使う時のメモ

はじめに

例えば、Lambdapuppeteerを使ってサイトのスクリーンショットを撮る時など、日本語サイトの場合文字化け、あるいは空白になってしまいます。日本語フォントを使う必要があるのですが、今回ここでつまずいたのでメモ。

環境

  • AWS Lambda
  • ランタイム:node.js 20(18でも確認)
  • puppeteer:”puppeteer-core”: “^21.6.1”
  • chromium:’@sparticuz/chromium’を使用

Lambdaで日本語フォントを使う

結論

日本語フォントを入手してLambdaレイヤーに登録します。それだけです!

おそらく使うランタイムやライブラリ等によって方法は様々だと思いますが、今回の環境においてうまくいった方法をご紹介します。

手順

細かい手順は省略してますが、つまずいた点など書いているのでよかったら参考にしてください。

日本語フォントを入手

例えば、Noto Sansなどの人気の日本語フォントをダウンロードします。

参考

Lambdaレイヤーに登録

ダウンロードしたフォントファイルを「fonts」という名前のフォルダを作って入れます。それをzipに圧縮します。名前は何でもいいです。

圧縮したzipファイルをLambdaレイヤーとして登録します。ファイルサイズが10MBを超える場合はS3に保存してからS3リンクURLを使って登録します。

今回ここでつまずいてました。検索で出てきたサイトを参考に進めていたのですが、ほとんどのサイトで「.fonts」フォルダに入れるとなっていましたが、うまく読み込めませんでした。「.」(ドット)を無くしたらフォントを読み込むようになりました。

Lambda関数に日本語フォントレイヤーを追加

作成した日本語フォントレイヤーを対象のLambda関数に追加します。こちらも簡単なので手順は省略します。

以上です!

まとめ

Lambda関数内では、特にフォントに関する記述は必要ありませんでした。環境変数を設定したり、フォントに関するstyleを挿入したり、いろいろ試しましたがすべて書かなくてもうまくいきました。

「.fonts」の「.」(ドット)がなぜ不要だったのか、結局わかりませんでしたが、わかったら追記します。