AWS App Runner で Sinatra アプリを起動する
AWS App Runner が発表されました。
Dockerfileを用意するだけでアプリケーションに必要なリソース(VPCとかロードバランサーとか)はマネージドで用意してくれる便利サービスのようです。
僕は使ったことが無いのですが Google Cloudの Cloud Runと似たサービスのようです。
デプロイ方法は2種類用意されており、
1のやり方にはハンズオンが用意されています。
(例のごとく) 1の方法はRuby製のアプリケーションには対応していないので2の方法でデプロイしてみました。 以下のようなコードを用意します。
Gemfile
※ Ruby3.0からwebrickがバンドルされなくなったので、Sinatraと一緒にインストールするようにしています。
# frozen_string_literal: true source "https://rubygems.org" git_source(:github) {|repo_name| "https://github.com/#{repo_name}" } gem 'sinatra' gem 'sinatra-contrib' gem 'webrick'
app.rb
require 'sinatra' require 'sinatra/reloader' set :bind, '0.0.0.0' set :port, 80 get '/' do 'Hello Sinatra!' end
Dockerfile
FROM ruby:3.0.0-alpine WORKDIR /app COPY Gemfile* . COPY app.rb . RUN bundle install EXPOSE 80 CMD ["bundle", "exec", "ruby", "app.rb"]
(ローカルで実行する場合は以下のコマンド)
$ docker build -t sinatra_apprunner . $ docker run -p 80:80 --name sinatra sinatra_apprunner
肝心のApp Runnner の設定については特に特筆することはないです。画面ポチポチでいけます。
Dockerfileだけあればアプリケーションをデプロイできるのでかなり便利なサービスだなーと思いました。
とはいえ、前段にNginxを立てたいとか、キャッシュサーバー用意したいとかはApp Runnerでは駄目なのでそういうやつはECSを使うことになるのでしょうね。
あと、RDSなど他のクラウドリソースを使う場合、パブリックネットワークでの通信になると思うので、その辺許容できるかどうかですね。お仕事での利用はちょっと厳しいのかなと。
ロードマップではVPC内での起動も視野に入っているみたいです。
ちょっとしたお遊びのWebアプリケーションをサクッとデプロイしたいときにはいいですね。
ロードバランサーとかSecurityGroupとか考えなくてもいい世界に近づいていてテンション上がります。