AWSElasticBeanstalkとRDSを使用してRails6アプリをホストする理由と方法
アプリケーションを作成するとき、考慮しなければならない主要な問題の1つは、アプリケーションが他の世界とどのように共有されるかです。
一般的なアプローチの1つは、Herokuで起動することです。セットアップは簡単で、完全に管理されています。ただし、チームが後でHerokuを削除することもよくあります。トラフィックが増えると、Herokuは高額になり、柔軟性がなくなります。
AWSのようなより汎用的なプラットフォームから得られる柔軟性とコスト削減をあきらめることなく、Herokuのような簡単さで新しいアプリケーションをデプロイできたらどうでしょうか。 AWSのサービスであるElasticBeanstalkを使用することで可能です。
この記事では、Rails 6アプリケーションをセットアップし、Elasticbeanstalkをコンピューティングベースとして使用し、RDS(Relational Database Service)、特にPostgresサービスをデータストアとして使用してAWSで実行する方法について説明します。
このチュートリアルを終了すると、次のことができるようになります。
- いくつかのルートを使用してRails6アプリをセットアップし、ローカルで実行します。
- AWSアカウントを作成します。
- 無料利用枠のリソースを使用して、アプリをセットアップしてElasticbeanstalkにデプロイします。
飛び込みましょう。
ElasticbeanstalkとRDSとは何ですか?
Elasticbeanstalkとは何か、そしてそれが解決する問題を明確に理解するために、まず、AmazonのEC2製品について話しましょう。
EC2はElasticComputeCloud 2の略です。このサービスを使用すると、VPCをプロビジョニングできます。これは、基本的には単なるコンピューターであり、選択したOS(Ubuntuなど)を実行します。その後、アプリはこのコンピューター内に存在し、ファイルシステムやRAMなどのリソースにアクセスして、タスクを実行します。最終的に、アプリはローカルマシンで実行されるのと同じように実行されますが、Amazonが所有し、Amazonのインフラストラクチャを使用してインターネット経由でアクセスできるマシンでのみ実行されます。
ここで、EC2でインスタンスをプロビジョニングしたAliceという名前のユーザーを想像してみてください。アリスは次のことを行う必要があります:
- 彼女のアプリへのリクエストを許可するセキュリティグループを設定します。
- ロードバランサーを設定します。
- インスタンスにSSHで接続し、アプリと環境のシークレットを設定します。
これにより、マシンとその実行内容および実行方法を完全に制御できますが、インフラストラクチャではなくアプリに焦点を合わせたい場合があります。これがElasticbeanstalkの出番です。
Elasticbeanstalkは、これらすべてを簡単に実行できるCLIを提供し、セキュリティグループやロードバランサーの作成など、ほとんどのことを自動化します。基盤となるインフラストラクチャはEC2のままですが、その上に抽象化レイヤーが追加され、環境変数、データベース、自動スケーリングを設定したり、ログを取得したり、その他の機能を実行したりできるビジュアルダッシュボードが追加されます。非常に簡単な方法です。
Railsとは何ですか?
多くのツールを使用して、Webアプリケーションを稼働させることができます。通常、最終的に使用するライブラリまたはフレームワークは、プログラムされている言語によってほとんど決定されます。
選択した言語がたまたまRubyである場合、使用することを選択できる人気のあるフレームワークはRails(正式にはRuby on Railsと呼ばれます)です。 Railsは2003年にBasecampで作成され、何年にもわたって、最新のウェブアプリを構築するために考えられるほとんどすべてのものを含むフル機能の非常に成熟したフレームワークに進化しました。
Railsで構築できるものには、個人のブログのような単純なものから、AirbnbやGithubのような複雑なものまであります。あなたはこれらの2つの会社に精通していると確信しています、そしてそうです、彼らはRailsで運営されています!
この記事では、RailsアプリをAWSにデプロイする例を使用していますが、Python/DjangoやPHP/Laravelなど、使用する言語やフレームワークに関係なく、主要な概念のほとんどは同じです。
示されているコマンドは、すぐに使用できるUNIX/Linuxベースのシステムで機能することに注意してください。 Windowsを使用している場合は、Windows SubsystemforLinuxやMicrosoftWindowsTerminalの使用を検討してください。
手始めに、Rubyのバージョンを確認してください:
ruby -v
何でも2.5.0
以上が良いです。そうでない場合は、ここにアクセスして最新バージョンを入手してください。バージョン2.6.5をインストールしています。
Rubyのインストールで問題がないように見える場合は、先に進んでRailsをインストールしてください。
gem install rails
そのコマンドが実行されたら、Railsのバージョンを確認します:
rails --version
6.0.0を超えるものが表示された場合は、このチュートリアルの残りの部分に進んでください。
このチュートリアルのデータストアとしてPostgresDBを使用します。これは、任意のプラットフォームにインストールするための優れたガイドです。
名前、リリース年、ジャンルなどの映画データを保存するためのシンプルなAPIを構築します。 APIには、デモンストレーション用にGETとPOSTの2つのエンドポイントしかありません。
次のコマンドを使用して、新しいRailsAPIアプリを作成します。
rails new movie-api --api --database=postgresql
上記のコマンドが正常に実行されたら、次のコマンドを実行する前に、ディレクトリを作成したプロジェクトフォルダに変更してください。
次に、次のコマンドを実行してモデルを生成できます。
rails generate model Movie name:string year:integer genre:string
次に、データベースをセットアップして移行を実行しましょう。
rails db:setup
rails db:migrate
これらの2つのコマンドが成功すると、db/migrate
で新しい移行を確認できるはずです。 次のようなコードのフォルダ:
class CreateMovies < ActiveRecord::Migration[6.0]
def change
create_table :movies do |t|
t.string :name
t.integer :year
t.string :genre
t.timestamps
end
end
end
次に、APIエンドポイントのコントローラーロジックコードを追加します。
rails g controller api/Movies
次に、次のコードをファイルapp/controllers/movies_controller.rb
に追加します。 :
class Api::MoviesController < ApplicationController
# GET /movies
def show
@movies = Movie.all
render json: @movies
end
# POST /movies
def create
@movie = Movie.new(movie_params)
if @movie.save
render json: @movie
else
render error: {error: 'Failed to add movie record'}, status: 400
end
end
private
def movie_params
params.require(:movie).permit(:name, :year, :genre)
end
end
ルートを設定しましょう。このコードはconfig/routes.rb.
に入ります
Rails.application.routes.draw do
# For details on the DSL available within this file, see https://guides.rubyonrails.org/routing.html
namespace :api do
resource :movies
end
end
この時点で、rails routes
を使用して健全性チェックを実行できます。 すべてが正しく機能していることを確認するコマンド。次のようなものを含む出力が表示されます。
サーバーを実行する前に、シードデータをdb/seeds.rb
に追加しましょう。 :
# This file should contain all the record creation needed to seed the database with its default values.
# The data can then be loaded with the Rails db:seed command (or created alongside the database with db:setup).
movies = Movie.create([
{ name: 'Star Wars', year: 1977, genre: 'SCI-FI'},
{ name: 'Lord of the Rings', year: 2001, genre: 'Fantasy' }
])
次のコマンドを実行して、データをDBに追加します。
rails db:seed
これで、次のコマンドを使用してAPIを実行できます。
rails s
https://127.0.0.1:3000/api/movies,
に移動すると、 シードデータが表示されます:
[
{
"id": 1,
"name": "Star Wars",
"year": 1977,
"genre": "SCI-FI",
"created_at": "2020-01-01T10:04:56.100Z",
"updated_at": "2020-01-01T10:04:56.100Z"
},
{
"id": 2,
"name": "Lord of the Rings",
"year": 2001,
"genre": "Fantasy",
"created_at": "2020-01-01T10:04:56.108Z",
"updated_at": "2020-01-01T10:04:56.108Z"
}
]
AWSアカウントの作成
手始めに、このWebサイトにアクセスしてください。アカウントをまだお持ちでない場合、またはブラウザからアカウントにサインインしていない場合は、次のようなページが表示されます。
先に進み、オレンジ色のCreate an AWS Account
をクリックします 右上隅にあるボタン(または、アカウントをお持ちの場合は、コンソールにサインインします)。サインアップフォームに入力したら(必ずAccount Type
を選択してください Personal
として 住所を入力すると、コンソールに直接ドロップされます。メールアドレスを確認することを忘れないでください!
物事が圧倒的に見えても心配しないでください。行きたい場所がわかれば、UIの操作は非常に簡単です。
IAMユーザーを設定する
次に行う必要があるのは、IAMユーザーを設定することです。これにより、SSHに使用できるAPIキーにアクセスし、AWSの外部からリソースにアクセスできるようになります。
また、セキュリティ上の目的でデフォルトの管理者資格情報を使用するのではなく、ユーザーが必要とするリソースのみにアクセスできる別のIAMユーザーを用意することもお勧めします。
ホームページでIAMを検索し、IAMホームページに移動します。
IAMホームページのIAM Resources,
Users: 0.
その後、Add User.
をクリックします。 選択したユーザー名を入力してから、Programmatic access.
のチェックボックスを選択できます。
次の画面で、[Attach existing policies directly
]を選択します 次に、検索ボックスを使用してAdministratorAccess.
を検索します。
次のページで、名前タグを追加して、後でIAMクレデンシャルのリストからユーザーを識別できるようにします。
最後に、レビューページで、Create User.
をクリックします。
次のページで、資格情報を使用してCSVファイルをダウンロードします。最後の部分で必要になります。
credentials.csv,
スプレッドシートアプリまたはエディターで開いて、値を確認できます。私たちは主にAccess key ID
に関心があります およびSecret accesss key.
最後に行う必要があるのは、HOMEフォルダーに移動して、.aws
というフォルダーを作成することです。 。このフォルダ内に、config.
というファイルを配置します。 フォルダ名が.
で始まることに注意してください。 ファイルには拡張子がありません。フルパスは、/Users/your-user/.aws/config.
のようになります。
.aws
を作成できない場合 フォルダとconfig
ファイル、あなたは今のところそれをスキップすることができます。重要なことは、後で使用できるように、資格情報を含むCSVファイルを手元に用意しておくことです。
以下をconfig
に配置します ファイル:
[profile eb-cli]
region = us-east-1
aws_access_key_id = your-aws-access-key-id
aws_secret_access_key = your-aws-secret-access-key
サインインすると、AWSアカウントページの右上隅にAWSリージョンが表示されます。
RDSDBを作成
次に、アプリが通信するPostgresDBを作成します。 IAMと同様に、ホームページの検索ボックスを使用してRDSを検索し、そこに移動できます。
RDSのホームページで、Create database.
をクリックします。
次のページで、Standard Create
を選択します;次に、[Engine Options,
]で PostgreSQL.
を選択します
スクロールを続けながら、Free tier
を選択します Templates
の下 、およびSettings,
の下 DB instance identifier
movie-api.
になります Master username
はそのままにしておくことができます postgres,
として ただし、先に進んでパスワードを追加してください。
DB instance size,
のセクションをスキップします Storage,
およびAvailability & durability.
Connectivity,
の下 Additional connectivity configuration
を選択します Publicly accessible
を設定します Yes
へ およびVPC Security group
Create new.
。
続行して、Database authentication.
をスキップします。 Additional configuration,
の下 必ずInitial database name
を追加してください; movie_api_db
しましょう。設定したら、他のすべてをスキップして、Create database.
をクリックします ページの下部にあります。
最後に、RDSダッシュボードに戻り、VPC Security groups
の下のデフォルトグループをクリックします。 右の列:
次のページの下部で、Inbound
を選択します 次のようにルールを編集します。
また、Outbound
を確認してください ルールは次のようになります。
Elasticbeanstalkアプリを作成
Elastic Beanstalkホームページに移動し、Create New Application.
をクリックします。
必要に応じて、新しい申請書に記入してください。
次に、「No environments currently exist for this application. Create one now.
Create one now.
をクリックします
次に、Web server environment.
を選択します。
次のセクションで、Environment name
を変更します production-env.
へ Domain
を離れる 空欄。次に、Base Configuration,
Preconfigured platform
を選択します Ruby
を選択します ドロップダウンから。 Application code
を残すことができます Sample application
;次に、先に進んでCreate environment.
をクリックします。 これにはしばらく時間がかかりますので、しばらくお待ちください。
完了すると、次のようなページが表示されます。
環境IDの後に提供されているURLを見つけます。それをクリックして、elasticbeanstalkのデフォルトのRubyアプリをチェックしてください。間もなく、APIは同じURLで実行されます。
アプリをデプロイできるようにするには、最初にウェブサーバーを構成する必要があります。
Railsには本番環境に対応したWebサーバーであるPumaがデフォルトのサーバーとして付属しているため、config/puma.rb.
で構成ファイルを直接編集できます。
次のようにファイルを編集します。
max_threads_count = ENV.fetch("RAILS_MAX_THREADS") { 5 }
min_threads_count = ENV.fetch("RAILS_MIN_THREADS") { max_threads_count }
threads min_threads_count, max_threads_count
# Specifies the `port` that Puma will listen on to receive requests; default is 3000.
#
port ENV.fetch("PORT") { 3000 }
# Specifies the `environment` that Puma will run in.
#
environment ENV.fetch("RAILS_ENV") { "development" }
# Specifies the `pidfile` that Puma will use.
pidfile ENV.fetch("PIDFILE") { "tmp/pids/server.pid" }
# Specifies the number of `workers` to boot in clustered mode.
# Workers are forked web server processes. If using threads and workers together,
# the concurrency of the application would be max `threads` * `workers.`
# Workers do not work on JRuby or Windows (both of which do not support
# processes).
#
workers ENV.fetch("WEB_CONCURRENCY") { 2 } # <------ uncomment this line
# Use the `preload_app!` method when specifying a `workers` number.
# This directive tells Puma to first boot the application and load code
# before forking the application. This takes advantage of Copy On Write
# process behavior so workers use less memory.
#
preload_app! # <------ uncomment this line
# Allow Puma to be restarted by the `Rails restart` command.
plugin :tmp_restart
また、config/database.yml
の下部を編集します 既存のproduction
をコメントアウトする 構成し、代わりにこれを使用します:
production:
url: <%= ENV['DATABASE_URL'] %>
最後に、AWSのElasticbeanstalkコンソールに移動し、production-env
を選択します 環境をクリックしてから、Configuration.
に移動します。
構成の概要画面で、[Modify
]をクリックします Software
の場合 部分:
。
次に、DATABASE_URL
を追加します およびRAILS_ENV
、[適用]をクリックします:
DBURLは
Endpoint
を使用して作成されていることに注意してください 以前、RDSダッシュボードからメモしました。postgresql://postgres:YOURPASSWORD@ENDPOINT:5432/movie_api_db
の形式です。 。選択したパスワードを覚えていない場合は、Modify
でパスワードを変更できます。 DBのRDSダッシュボードのセクション。
これは、コマンドラインからアプリのzipファイルを作成し、それをElasticbeanstalkコンソールにアップロードするのと同じくらい簡単です。
まず、cd
プロジェクトフォルダに。 zipファイルを作成するには、次のコマンドを実行できます。
zip -r deploy_1.zip .
deploy_1.zip
作成されたzipフォルダーの名前になり、他のファイルと一緒にプロジェクトディレクトリに表示されます。終わり?優秀な。 AWSへ。
Elasticbeanstalkのダッシュボードから、Upload and Deploy
をクリックします :
バージョンラベルをより意味のあるものに変更できます:
Elasticbeanstalkが環境の更新を完了したら、環境のURLにアクセスして、APIが実行されていることを確認できます。このような無料のサービスを使用して、いくつかのリクエストを送信し、AWSにDBを取り込むことができます。
EBCLIを使用した展開
Elasticbeanstalk CLIを使用すると、これまで手動で実行しなければならなかったことのほとんどを、いくつかのコマンドで非常に簡単に実行できます。設定方法と現在のプロジェクトでの使用方法を紹介します。これはすべて、IAMユーザーが正しく設定されているかどうかに依存するため、その手順のすべてに問題がないこと、または資格情報を含むCSVが用意されていることを確認してください。
ほとんどのコンピューターでは、Pythonがすでにインストールされているはずです。したがって、インストールは次のように簡単になります。
pip install awsebcli --user
MacOSでは、次も使用できます:
brew install awsebcli
インストールについて詳しくは、こちらをご覧ください。
インストールが完了したら、cd
プロジェクトフォルダに移動し、eb init.
を実行します
AWS環境に従ってプロンプトに従います。正しい番号選択を入力して地域を選択します:
Select a default region
1) us-east-1 : US East (N. Virginia)
2) us-west-1 : US West (N. California)
3) us-west-2 : US West (Oregon)
4) eu-west-1 : EU (Ireland)
5) eu-central-1 : EU (Frankfurt)
6) ap-south-1 : Asia Pacific (Mumbai)
7) ap-southeast-1 : Asia Pacific (Singapore)
8) ap-southeast-2 : Asia Pacific (Sydney)
9) ap-northeast-1 : Asia Pacific (Tokyo)
10) ap-northeast-2 : Asia Pacific (Seoul)
11) sa-east-1 : South America (Sao Paulo)
12) cn-north-1 : China (Beijing)
13) cn-northwest-1 : China (Ningxia)
14) us-east-2 : US East (Ohio)
15) ca-central-1 : Canada (Central)
16) eu-west-2 : EU (London)
17) eu-west-3 : EU (Paris)
Rubyバージョンの部分については、Pumaを使用して関連するバージョンを選択します。
1) Ruby 2.6 (Passenger Standalone)
2) Ruby 2.6 (Puma)
3) Ruby 2.5 (Passenger Standalone)
4) Ruby 2.5 (Puma)
5) Ruby 2.4 (Passenger Standalone)
6) Ruby 2.4 (Puma)
7) Ruby 2.3 (Passenger Standalone)
8) Ruby 2.3 (Puma)
9) Ruby 2.2 (Passenger Standalone)
10) Ruby 2.2 (Puma)
11) Ruby 2.1 (Passenger Standalone)
12) Ruby 2.1 (Puma)
13) Ruby 2.0 (Passenger Standalone)
14) Ruby 2.0 (Puma)
15) Ruby 1.9.3
2を選びました。
残りのプロンプトに目を通し、「いいえ」を選択してCodeCommit
を使用します SSHを設定するには「no」を使用します。
AWS設定を設定しなかった場合、CLIはAWSキーの入力を求めます。必要に応じて追加してください。
これが完了すると、CLIは終了します。その後、eb status,
などのコマンドを実行できます。 デプロイしたアプリのステータスを確認します。
Environment details for: production-env
Application name: movie-api
Region: us-east-2
Deployed Version: Deploy 2-2
Environment ID: e-mab3kjy6pp
Platform: arn:aws:elasticbeanstalk:us-east-2::platform/Puma with Ruby 2.6 running on 64bit Amazon Linux/2.11.1
Tier: WebServer-Standard-1.0
CNAME: production-env.qnbznvpp2t.us-east-2.elasticbeanstalk.com
Updated: 2020-01-22 23:37:17.183000+00:00
Status: Ready
Health: Green
新しいバージョンをデプロイするには、eb deploy.
を実行するだけです。
以上です!ここで試すことができる他のCLIコマンドの詳細を読むことができます
このチュートリアルでは、単純なRails APIのセットアップ方法、ElasticbeanstalkやRDSなどのAWSリソースのセットアップ方法、およびそれらを使用するためのアプリのデプロイ方法を学習しました。
また、ElasticbeanstalkCLIを使用してクラウドアプリへのデプロイを自動化する方法についても説明しました。これで、ローカルマシンで動作するアプリから、AWSで世界と共有される動作するアプリに移行する方法を学びました。
-
iPad と iPhone で QR コードをスキャンする方法
2018 年の初めに、技術大手の Apple が展開した驚くべき機能は iOS 12 です。iPad と電話で QR コードをスキャンすることは、Apple のユーザー エクスペリエンスを次のレベルに引き上げるために追加された機能の 1 つです。この機能は、生活を楽にするだけでなく、チケット、クーポン、製品の成分などに関する情報を取得するのにも役立ちます。さらに、スマートフォンの助けを借りて QR コードをスキャンできる固有の QR コード認識が付属しています。無意味にカメラ。 QR コードをスキャンすることで、購入前に商品に関する情報を数秒以内に収集できます。 この投稿では、iPad
-
個人用リマインダー アプリの使用方法とその理由
オーマイゴッド!すっかり忘れてました 物事を忘れ続けるので、私は上記のステートメントを少なくとも 1 日に数回使用します。今、私は自分の脳や健康に何の問題もないことを知っています.この物忘れは、今日の世界が速いペースで動いているためです.やることがたくさんあり、会わなければならない人がたくさんいて、Netflix には見たいシリーズがたくさんあるので、何かを忘れてしまうことでしょう。 忘れて後で実行できるものもありますが、重要なものもあり、見逃すことはお勧めできません。そのような最優先事項の 1 つは時間通りに薬を服用することですが、特に自宅で仕事をしている場合は、オフィスでの会議を含める