AWS Lambdaで日本語フォントを使う時のメモ
はじめに
例えば、Lambdaでpuppeteerを使ってサイトのスクリーンショットを撮る時など、日本語サイトの場合文字化け、あるいは空白になってしまいます。日本語フォントを使う必要があるのですが、今回ここでつまずいたのでメモ。
環境
- AWS Lambda
- ランタイム:node.js 20(18でも確認)
- puppeteer:”puppeteer-core”: “^21.6.1”
- chromium:’@sparticuz/chromium’を使用
Lambdaで日本語フォントを使う
結論
日本語フォントを入手してLambdaレイヤーに登録します。それだけです!
おそらく使うランタイムやライブラリ等によって方法は様々だと思いますが、今回の環境においてうまくいった方法をご紹介します。
手順
細かい手順は省略してますが、つまずいた点など書いているのでよかったら参考にしてください。
日本語フォントを入手
例えば、Noto Sansなどの人気の日本語フォントをダウンロードします。
参考
notofonts/noto-cjk
https://github.com/notofonts/noto-cjk
ixkaito/NotoSansJP-subset
https://github.com/ixkaito/NotoSansJP-subset
Lambdaレイヤーに登録
ダウンロードしたフォントファイルを「fonts」という名前のフォルダを作って入れます。それをzipに圧縮します。名前は何でもいいです。
圧縮したzipファイルをLambdaレイヤーとして登録します。ファイルサイズが10MBを超える場合はS3に保存してからS3リンクURLを使って登録します。
今回ここでつまずいてました。検索で出てきたサイトを参考に進めていたのですが、ほとんどのサイトで「.fonts」フォルダに入れるとなっていましたが、うまく読み込めませんでした。「.」(ドット)を無くしたらフォントを読み込むようになりました。
Lambda関数に日本語フォントレイヤーを追加
作成した日本語フォントレイヤーを対象のLambda関数に追加します。こちらも簡単なので手順は省略します。
以上です!
まとめ
Lambda関数内では、特にフォントに関する記述は必要ありませんでした。環境変数を設定したり、フォントに関するstyleを挿入したり、いろいろ試しましたがすべて書かなくてもうまくいきました。
「.fonts」の「.」(ドット)がなぜ不要だったのか、結局わかりませんでしたが、わかったら追記します。
-
前の記事
AWS LambdaのNode.jsランタイムを16から18にしたらaws-sdkがインポートできなくなった 2023.12.23
-
次の記事
記事がありません
コメントを書く