4
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

無料で10万リクエスト/日まで使えるDeno Deployでのリリースが超カンタンだったので使用感紹介

Last updated at Posted at 2023-06-12

EC2でGo言語+RDS:MySQLでたてていた放映しているTVアニメ情報を返すAnime APIサーバーをコストダウンを目的としてDeno Deployに移植しました。

Go言語
https://github.com/Project-ShangriLa/anime_api_golang

Deno版
https://github.com/Project-ShangriLa/anime_api_deno

今回は言語の話にはふれずDeno Deployが超カンタンだったのに衝撃をうけたのでまったく使ったことがない人向けにイメージがつくように紹介してみます。

※本文にでてくるURLはテスト用のものなので後に削除されます

Deno Deployとは

Deno(TypeScript)で書いたWEBアプリケーションをデプロイできるサービスです。
Vercelなどと同じくDenoランタイムの普及を目的として無料で一定数使えます。

スクリーンショット 2023-06-12 15.49.39.png

  • 10万リクエスト/日 まで無料
  • HTTPSにも対応(後述
  • カスタムドメインにも対応

対象のコードを書く

mkdir denotime
cd denotime
deno init
vi main.ts
import {
  Application,
  Router,
} from "https://deno.land/x/oak@v12.5.0/mod.ts";

// アプリケーションを起動する
async function startApp() {
  const app = new Application();
  const router = new Router();
  // 時刻を返すエンドポイントの登録
  router.get("/time", (ctx) => {
    const now = new Date(); // 現在の時刻を取得
    ctx.response.body = { "time": now.toISOString() }; // JSON形式で現在の時刻を返す
  })
  // ルートを登録
  app.use(router.routes());
  app.use(router.allowedMethods());

  // アプリケーションを起動
  await app.listen({ port: 8001 });
}

// アプリケーションの起動を開始
startApp();

ローカルで動作確認

/denotime:deno task dev
Task dev deno run --watch main.ts   
Watcher Process started.
├ Requested by `Deno.listen()` API.   
├ Run again with --allow-net to bypass this prompt.
└ Allow? [y/n/A] (y = yes, allow; n = no, deny; A = allow all net permissions)  <-listen許可を求められるのでyをおす
✅ Granted net access to "0.0.0.0:8001".

ブラウザでひらく http://localhost:8001/time

スクリーンショット 2023-06-12 16.14.19.png

時間がかってくればローカル動作確認はOK

起動するポートはなんでもいい

一番疑問に思ったのは公式にかかれてあるサンプルコードはport8000を開けているのですが
特に「8000を指定してね」という記述もありません。上記のコードをデプロイしてhttpsのport443にうまくつながるのか不安でしたが、ポートがあいていれば自動的にそこにフォワードするようになっているようです。
なので管理画面でポートを指定する必要もありませんでした。(謎便利機能)

GitHubにレポジトリをつくっておく

プライベートでもパブリックでもOK

Deno Deployにサインアップ

ここは画面に従うだけなので省略 GitHubアカウントが必要
ここで自動的にGitHubに連携される

Deno Deployのプロジェクトを作成

スクリーンショット 2023-06-12 16.19.38.png

スクリーンショット 2023-06-12 16.20.26.png

すでにGitHubにソースがある場合は右を選ぶ

対象の組織やアカウントから連携するレポジトリを選択する

スクリーンショット 2023-06-12 16.21.17.png

デプロイ方法を決める

スクリーンショット 2023-06-12 16.24.10.png

デプロイ時にGitHub Actionを実行できるが、シンプルなのは何もしない左のほう。
左のほうを選ぶとmainブランチにコミットしたときに同時にリリースされる(便利)

起動対象となるWEBアプリケーションのソースファイルを選ぶ

スクリーンショット 2023-06-12 16.26.03.png

起動に必要なライブラリのインストール

Advanced Setupを選ぶとデプロイされる

スクリーンショット 2023-06-12 16.27.21.png

リリース完了

スクリーンショット 2023-06-12 16.29.12.png

自動で deno.devドメインに2つわりあてがされる
上記であれば

などでアクセスが可能

長い名前のほうはリビジョンにひも付きリリースするたびに毎回変わる

動作確認

ブラウザで開く

スクリーンショット 2023-06-12 16.31.10.png

デプロイできました!

ドメインを変更する (.deno.devドメイン版)

デフォルトではランダムななにかの単語が割り当てられますが
サブドメイン名は好きな名前に変更できます
画面のSettingsに移動しプロジェクト名をつけます

スクリーンショット 2023-06-12 16.35.22.png

ここではsample-zikanとしました

Overview画面に戻ると
ドメイン名が変わっているのがわかります

sample-zikan.deno.dev/time でアクセスが可能になりました

スクリーンショット 2023-06-12 16.37.04.png

スクリーンショット 2023-06-12 16.37.42.png

カスタムドメインに変更する

ここが一番便利と感じた点
カスタムドメイン変更する際ガイドがしっかりしていました

スクリーンショット 2023-06-12 16.39.03.png

settingsのDomainsを押す

ここからは私が実際に運用しているプロジェクトのほうの画面で紹介します

自分が持っているドメイン名をまず入力します
なんでも入力できてしまうため「本当にこれで設定できんのか?」という不安になるインターフェースでもありますが
やってみるとシンプルイズベストでかなり快適でした。

スクリーンショット 2023-06-11 14.08.43.png

そうするとPENDING状態になるためSetupボタンを押します

スクリーンショット 2023-06-11 14.08.54.png

そうすると契約しているドメイン会社の設定画面に入れるべき値のガイドがでてきます。
例えばお名前.comの画面にはいってAレコード、AAAAレコード、検証用のCNAMEを設定して
DNSの反映まで数分待ちます。お名前.comであれば3〜5分で反映されるので
反映できたらValidateボタンを押します。

スクリーンショット 2023-06-11 14.18.15.png

カスタムドメインに対してSSL証明書の自動設定 (これも無料

ドメイン検証が終わったら上記のようなメッセージになり
今度はSSL証明書を設定してくれ的なメッセージになります。
初期画面では「いったいどこでSSL証明書設定すんだ」と思ったのですがチュートリアル形式で出現する仕様でした。
自分でSSL証明書をもっている場合はアップロード、そうでない場合は左で自動生成(Let's Encrypt)してくれます。超絶便利です。

スクリーンショット 2023-06-11 14.18.44.png

成功すると緑マークがつきます

スクリーンショット 2023-06-11 14.19.17.png

ここまででデプロイは終了です
お疲れ様でした。
たぶん慣れれば10分で1サービスのリリースができます。

その他便利機能1 リアルタイムログ

管理画面からリアルタイムログが閲覧できます

  • どのリージョンで起動しているか
  • いつ起動したか
  • アプリケーションにしこんでいるログ(console.log)

がみれます
実際にGCPのアジヤやヨーロッパで起動しているのが確認できます

スクリーンショット 2023-06-12 16.56.35.png

スクリーンショット 2023-06-12 16.56.40.png

ログからわかることは常時稼働ではないということ

数分単位で起動しているのがわかるため常時稼働しているタイプではなくサーバーレスタイプでリクエストがあったときに起動するようになっているのがわかります。またリージョンもバラバラなので、アプリケーションにメモリキャッシュするようなコードは意味をなさないので避ける必要があります。

リリースリビジョンを保持して過去のものが起動できる

Deployments画面にいくとリリース履歴(今回の場合mainブランチへのコミットと同等)が見えて
リンクを押すと過去のリビジョンでのページの見え方が確認できます。

スクリーンショット 2023-06-12 16.59.14.png

まとめ

無料でWEBアプリケーションをデプロイできるサービスとしては数少ない1つだと思いました。
あくまでもDenoが普及するまでのサービスタイムだとは思いますが、簡単にデプロイできる工夫も考えられており完動しました。サクっとAPIサービスを作りたい場合や、コストをかけたくないホビー用途、プログラミング学習+講座の場合の選択肢の一つになりえるのではないでしょうか。

4
3
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
4
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?