0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Render上のアプリからRenderアプリを停止してみる

Posted at

概要

本記事はRenderを使用してアプリケーションを構築していることを前提としています
運用している中で、「もしも自分しか知らないURLにしているはずだけれども、誰かが適当に打ってみたらアクセスできてしまった!」「不正に利用されてアプリが起動したままになって、意図せずRenderの無料枠を超えてしまう!」みたいな状況を仮定してみようと思います

対策としてはIP制限などが考えられると思いますが、今回はID/パスワード認証に失敗した場合にRender側からAPIを使用してRenderを停止してみようと思います

Render APIを使ってみる

Renderを停止する方法ですが、APIがあるようです
https://render.com/docs/api

その中でも今回使用するのは、「Suspend service」というAPIです
https://api-docs.render.com/reference/suspend-service-1
(正直なところここまでしたくはないのですが、即時sleepできるAPIがないようで、、)

兎にも角にもAPIを利用するためには、まずはAPIキーを作成します

手順は公式ページの通りに進めればよいかと思います
手順通りに進めてcurlの確認が取れたら次のステップに行きたいと思います

suspend APIを実行してみます
実際にRender上でアプリを稼働させておいてください

curl --request POST \
     --url https://api.render.com/v1/services/${serviceId}/suspend \
     --header 'accept: application/json' \
     --header 'authorization: Bearer ${your_api_token}'

小さいですが、以下の感じで完全に利用することができなくなります

スクリーンショット 2025-03-29 0.34.18.png

再開させる時は「Resume service」というAPIを利用します

curl --request POST \
     --url https://api.render.com/v1/services/${serviceId}/resume \
     --header 'accept: application/json' \
     --header 'authorization: Bearer ${your_api_token}'

ということであとはRender上のアプリからこれらのAPIを呼び出せば問題なさそうですね

実装

今回はID/パスワード認証にしようと思いましたが、認証処理用のアプリを作ったりした方が良さそうだったので今回はリクエストを送るとアプリが停止するといった処理だけにとどめます

APIリクエストに必要な情報はハードコーディングしたくないので環境変数で管理しましょう
対象サービスの管理画面中のEnvironmentというところから設定が可能です

RENDER_API_KEY = os.getenv("RENDER_API_KEY")
RENDER_SERVICE_ID = os.getenv("RENDER_SERVICE_ID")

また、python上でのAPIリクエストはお馴染みのrequestsモジュールを使います(requirements.txtの更新もお忘れなきよう)

import requests

url = "https://api.render.com/v1/services/${RENDER_SERVICE_ID}/suspend"

headers = {
    "accept": "application/json",
    "authorization": "Bearer ${RENDER_API_KEY}"
}

response = requests.post(url, headers=headers)

print(response.text)

実際にgithubにコミット・プッシュしてみるとわかると思うのですが、アプリが即シャットダウンされるのでページが開けなくなっていることが確認できると思います

おわりに

今回はRender APIをRenderアプリ上から実行してみるということを試してみました
まだまだ、種類はあるので他も調べつつ自分のやりたいことを実現できる方法を具現化していきたいと思います

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?