Herokuの移行先候補「Render」を試した
Feb 19, 2023 18:45 · 1893 words · 4 minute read
2022年11月、Herokuの無償プランが廃止されました。
「Heroku」の無償プランが廃止へ ~Webアプリを開発・運用できるプラットフォーム - 窓の杜 (impress.co.jp)
これまで、ちょっとした個人開発や検証でHeroku無償プランのお世話になっていて、
PodcastのエピソードをSNSにシェアするツールを作ったり、
PodcastのエピソードをSNSにシェアするWebアプリを作った · kapieciiのブログ
数年前に流行った「ちょっといですか?iTunesカードを買ってきてもらえませんか?」系の詐欺を働く犯人を調査するWebアプリをHerokuで動かしていました。
Herokuで罠サイトを作ってアクセスログを確認した - kapieciiのブログ (hatenablog.com)
私の用途では有償版を契約するのは悩ましいので、Herokuの代替として有名なRenderを試してみました。
目次
Renderでできること
Renderのダッシュボードがこちら。
静的サイトの公開やWebアプリの公開、Cronの実行、PostgresやRedisが使えます。
Cron Jobsなど一部の機能は決済情報の登録が必要ですが、それでも無料枠でかなりのサービスが使えます。 Custom Domainが無料で使えるのも嬉しいですね。
Pricing | Render · Cloud Hosting for Developers
Web ServicesでFlaskアプリの公開を試す
今回は、RenderのWeb Services+Flaskを試します。
こちらの公式ドキュメントに沿って進めます。
Deploy a Flask App | Render · Cloud Hosting for Developers
ドキュメントに記載されたRepositoryをForkして、
kapiecii/flask-hello-world-with-render: Flask Hello World Example for Render (github.com)
せっかくなので少しだけ書き換えます。
from flask import Flask
app = Flask(__name__)
@app.route('/')
def hello_world():
return 'Hello, Render!'
Renderのダッシュボードから新しいWeb Servicesを作成し、Githubで先程ForkしたRepositoryへのアクセス権限を追加します。
RepositoryをConnectしたら、
RegionやBuild Command、インスタンスを指定します。
無料で試す場合はFreeのインスタンスを選択します。
Advanced Settingで環境変数なども設定可能
設定が終わったら「Create Web Service」でデプロイが始まります。
ログを見るとFeb 17 12:52:38 PMにビルドがスタートして、Feb 17 01:06:50 PMにデプロイが終了。 15分ほどかかりました。 時間帯や内容にもよるのでしょうが、想定よりもビルド時間が長いですね。
Web Servicesのアクセスログ機能
アクセスログには127.0.0.1のIPアドレスが残っており、アクセス元のグローバルIPは確認できませんでした。 Renderの内部ネットワーク構成に起因するとは思うのですが、ドキュメントを読んでも理由がわかりませんでした。
Feb 19 03:20:44 PM 127.0.0.1 - - [19/Feb/2023:06:20:44 +0000] "GET /favicon.ico HTTP/1.1" 404 207 "https://render-flask-sample.onrender.com/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/110.0.0.0 Safari/537.36 Edg/110.0.1587.46"
Feb 19 03:21:23 PM 127.0.0.1 - - [19/Feb/2023:06:21:23 +0000] "GET / HTTP/1.1" 200 14 "-" "Mozilla/5.0 (iPhone; CPU iPhone OS 16_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/16.3 Mobile/15E148 Safari/604.1"
Feb 19 03:21:32 PM 127.0.0.1 - - [19/Feb/2023:06:21:32 +0000] "GET / HTTP/1.1" 200 14 "-" "Mozilla/5.0 (iPhone; CPU iPhone OS 16_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/16.3 Mobile/15E148 Safari/604.1"
ログについてのドキュメントはこのあたり。
Log Streams | Render · Cloud Hosting for Developers
Web Services以外の気になった機能
Web Services以外の機能も、少し触ったり公式ドキュメントを確認しました。
Cron Job
無料で使えるはずですが、決済情報を登録する必要がありました。
Cron Jobs | Render · Cloud Hosting for Developers
Static Sites
Jekyll、Hugo、Next.js、Vue.jsなど著名なSSGが使えます。
Static Sites | Render · Cloud Hosting for Developers
HTTP Headers for Static Sites | Render
DDoS Protection
無料&デフォルトでCloudflareのDDoS Protectionが有効化されるらしいです。太っ腹。
DDoS Protection | Render · Cloud Hosting for Developers
Free DDoS Protection for All Users | Render
Infrastructure as Code (IaC)
Blueprint Specでインフラを表現できます。 Infrastructure as Code (IaC)は業務では関わったことがないですが、興味がある分野です。
Infrastructure as Code (IaC) | Render
Blueprint Specification | Render
最後に
RenderのWeb Servicesを試し、その他の機能も少しだけ触ってみました。
「悪い人のしっぽをつかむための罠サイトを公開する」みたいな使い方ができないのは少し残念ですね。
Herokuで罠サイトを作ってアクセスログを確認した - kapieciiのブログ (hatenablog.com)
Renderで同じことを実現しようと思うと、JavaScriptで対応することになりそうです。 ただJavaScriptを使うのであればVercel+Next.jsなど、他の環境でも良いですね。 Renderよりもビルド時間が圧倒的に早いですし。