Herokuの移行先候補「Render」を試した

Feb 19, 2023 18:45 · 1893 words · 4 minute read Render Heroku

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のダッシュボードがこちら。

Render Dashboard

静的サイトの公開や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よりもビルド時間が圧倒的に早いですし。

ブラウザ javascript 側で global ip を取得する | あのぞんブログ (anozon.me)

tweet Share