LoginSignup
2
1

「Loco」をCloud Runで実行する

Last updated at Posted at 2023-12-21

はじめに

PONOS Advent Calendar 2023の22日目の記事です。

最近Ruby on Rails(以下Rails)を触っていると、「うーん、型が欲しい」とわがままな悩みを抱えていました。
そこでC#のBlazorを触りはじめ、「おー!型だ!」と喜んでいました。
ただBlazorを触っていると「書きずらいな...」とさらに悩みを抱えました。(シンプルに努力不足)
そんな贅沢な悩みを抱えている中、
「RailsライクなWebフレームワークがRustからでたぞ!」
という記事を拝見し「どんなものか...」と触り、「あ、めっちゃRailsや」と感動したので今回のアドベントカレンダーの記事にすることにしました。

Locoとは?

クラスメソッドさんがまとめてくださっているので引用させていただきます。

Loco は、Rails からインスピレーションを得た Rust用のWebフレームワーク
ほぼすべての Rails 機能が含まれている

Controllerとaxum経由のルーティング
ActiveRecordライクにSeaORMでモデル操作

Rust の安全性・型指定・concurrency モデル・安定したライブラリとエコシステム
デプロイでは単一のバイナリをサーバーにコピーしています。
手間をかけずに100,000 req/secリクエスト捌ける
DB呼び出しでは 50,000 req/sec

前提条件

コマンドラインで扱うcargo、gcloudはインストール済み
GCPの課金も設定済み

開発・実行環境

  • ローカル環境
    Ubuntu22.04 on WSL2
    Visual Studio Code
    Docker
  • クラウドサービス
    Google Cloud Platform

準備

https://github.com/loco-rs/loco
のQuick Startを参考にし、一部変更を加えながら準備していきます。

$ cargo install loco-cli

次にloco newを実行

$ loco new
App name? > hello_loco
What would you like to build? › Stateless HTML

ディレクトリをhello_locoへ

$ cd hello_loco
> ~/hello_loco$

Dockerfileと.dockerignoreを準備

Dockerfile
# Use the official Rust image.
# https://hub.docker.com/_/rust
FROM rust:1.74.1-slim

# Copy local code to the container image.
WORKDIR /usr/src/app
COPY . .

# Install production dependencies and build a release artifact.
RUN cargo build --release

# Service must listen to $PORT environment variable.
# This default value facilitates local development.
ENV PORT 3000

# Run the web service on container startup.
ENTRYPOINT ["target/release/hello_loco"]

# cargo loco "start"
CMD ["start"]
.dockerignore
target
test

DockerとGCP

Docker

イメージ作成

docker build -t hello_loco .

Artifact Registry用にイメージを複製

docker tag hello_loco asia-northeast1-docker.pkg.dev/プロジェクトID/hello-loco-repo/hello_loco:latest

GCP

Artifact Registry

GCPへログイン

gcloud auth login

Artifact Registry へのリクエストを認証するように Docker を構成

gcloud auth configure-docker asia-northeast1-docker.pkg.dev

Artifact Registryの作成

gcloud artifacts repositories create hello-loco-repo --repository-format=docker --location=asia-northeast1 --description="loco Docker repository"

Artifact Registryへイメージをpush

docker push asia-northeast1-docker.pkg.dev/プロジェクトID/hello-loco-repo/hello_loco

Cloud Run

今回Cloud RunはGCP上で操作していきます

既存のコンテナ イメージから 1 つのリビジョンをデプロイする
選択 Artifact Registry pushしたイメージを選択
認証
未認証の呼び出しを許可
コンテナポート
3000

上記の操作ができたら「作成」をクリック

作成後にできたURLをクリックして「Welcom to Loco website」が表示されたら完了!

image.png

終わりに

いかがでしたでしょうか?
今回超ミニマムな環境構築を行いましたが、モデルやコントローラーもRailsライクに追加できるみたいなので色々試していきたいと思います。(あと型があるので最高)

それでは次回は@oryzae29さんです。

参考・引用

2
1
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
2
1