AWS App Runner で Sinatra アプリを起動する

AWS App Runner が発表されました。

aws.amazon.com

Dockerfileを用意するだけでアプリケーションに必要なリソース(VPCとかロードバランサーとか)はマネージドで用意してくれる便利サービスのようです。

僕は使ったことが無いのですが Google Cloudの Cloud Runと似たサービスのようです。

デプロイ方法は2種類用意されており、

  1. Node.js or Python のアプリケーションをコミットしたGithubに接続する
  2. Dockerfileを用意する

1のやり方にはハンズオンが用意されています。

www.apprunnerworkshop.com

(例のごとく) 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 の設定については特に特筆することはないです。画面ポチポチでいけます。

f:id:jacoyutorius:20210520003547p:plain

f:id:jacoyutorius:20210520072613p:plain
サクッとできちゃう

Dockerfileだけあればアプリケーションをデプロイできるのでかなり便利なサービスだなーと思いました。

とはいえ、前段にNginxを立てたいとか、キャッシュサーバー用意したいとかはApp Runnerでは駄目なのでそういうやつはECSを使うことになるのでしょうね。

あと、RDSなど他のクラウドリソースを使う場合、パブリックネットワークでの通信になると思うので、その辺許容できるかどうかですね。お仕事での利用はちょっと厳しいのかなと。

ロードマップではVPC内での起動も視野に入っているみたいです。

github.com

ちょっとしたお遊びのWebアプリケーションをサクッとデプロイしたいときにはいいですね。

ロードバランサーとかSecurityGroupとか考えなくてもいい世界に近づいていてテンション上がります。