yagish履歴書でも裏で使っているHTML→PDFの変換サーバー。
GitHubでも公開してます。
github.com
これがGoogle App Engineでも動きそうなので試してみた。
さすがにChromeはインストールできないのでPuppeteer付属のChroniumを使う点と、日本語フォントでちょっとはまったけど問題なく動いた。
でも現時点ではβなのでいろいろ注意。
Puppeteerを動かすのは下記に公式ドキュメントあり。PDF、スクリーンショットの他、テストもはかどりそう。
基本的なことは公式を読んでおく。
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