yagish履歴書でも裏で使っているHTML→PDFの変換サーバー。
GitHubでも公開してます。
github.com
これがGoogle App Engineでも動きそうなので試してみた。
さすがにChromeはインストールできないのでPuppeteer付属のChroniumを使う点と、日本語フォントでちょっとはまったけど問題なく動いた。
でも現時点ではβなのでいろいろ注意。
Puppeteerを動かすのは下記に公式ドキュメントあり。PDF、スクリーンショットの他、テストもはかどりそう。
Using Headless Chrome with Puppeteer | App Engine standard environment for Node.js docs | Google Cloud
基本的なことは公式を読んでおく。
Google App Engine Node.js Standard Environment Documentation | App Engine standard environment for Node.js docs | Google Cloud
アプリケーションのコードはGitHubとほぼ同じなので省略。
ファイル構成はこんな感じ。
fontsディレクトリに必要な日本語ファイルを置いておく。無駄に置くとアップロードに時間がかかるのとお金もかかるので最低限にした方がよさげ。
% tree
.
└── app
├── app.js
├── app.yaml
├── fonts
│ ├── fonts.conf
│ ├── google
│ │ ├── NotoSansJP-Medium.otf
│ │ └── NotoSansJP-Regular.otf
├── package-lock.json
└── package.json
app.yaml
runtime: nodejs8
instance_class: F4_1G
env_variables:
FONTCONFIG_PATH: "/srv/fonts/"
デプロイ設定はこんな感じ。
FONTCONFIG_PATHで上記フォントのディレクトリを指定する。
/srvはアプリケーションでカレントディレクトリをログに出して見て調べた。
何かで変わってしまうかもしれない。
フォントの設定ファイル
fonts.conf
<?xml version="1.0"?>
<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
<fontconfig>
<dir>/srv/fonts</dir>
</fontconfig>
フォントの設定は下記記事を参考にさせていただきました。
LambdaよりGAEの方が楽そう。
LambdaでPuppeteer/Headless Chrome | scratchpad
これで無事動いたのだけれど、既存のプロジェクトはリージョンがusになってしまっていて変えられない。そのため結構遅い。
新しくプロジェクトを作り直して日本においてみて、速度を試してみる。
もし問題がなかったら現在GKEで動いているものをGAEにしようと思う。
コードとファイルも整理してGAE用としてGitHubに上げる。
GAEもSecondで最新版の言語ランタイムや自由にパッケージが使えるようになってくるので、GKE、GAE、Cloud Functionsを使い分けるのがはかどりそう。
今度はPython3のDjangoかな
uyamazak.hatenablog.com