Ruby
 Computer >> コンピューター >  >> プログラミング >> Ruby

AWSElasticBeanstalkとRDSを使用してRails6アプリをホストする理由と方法

アプリケーションを作成するとき、考慮しなければならない主要な問題の1つは、アプリケーションが他の世界とどのように共有されるかです。

一般的なアプローチの1つは、Herokuで起動することです。セットアップは簡単で、完全に管理されています。ただし、チームが後でHerokuを削除することもよくあります。トラフィックが増えると、Herokuは高額になり、柔軟性がなくなります。

AWSのようなより汎用的なプラットフォームから得られる柔軟性とコスト削減をあきらめることなく、Herokuのような簡単さで新しいアプリケーションをデプロイできたらどうでしょうか。 AWSのサービスであるElasticBeanstalkを使用することで可能です。

この記事では、Rails 6アプリケーションをセットアップし、Elasticbeanstalkをコンピューティングベースとして使用し、RDS(Relational Database Service)、特にPostgresサービスをデータストアとして使用してAWSで実行する方法について説明します。

このチュートリアルを終了すると、次のことができるようになります。

  1. いくつかのルートを使用してRails6アプリをセットアップし、ローカルで実行します。
  2. AWSアカウントを作成します。
  3. 無料利用枠のリソースを使用して、アプリをセットアップして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を超えるものが表示された場合は、このチュートリアルの残りの部分に進んでください。

Postgresの設定

このチュートリアルのデータストアとして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を使用して健全性チェックを実行できます。 すべてが正しく機能していることを確認するコマンド。次のようなものを含む出力が表示されます。 AWSElasticBeanstalkとRDSを使用してRails6アプリをホストする理由と方法

サーバーを実行する前に、シードデータを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サイトにアクセスしてください。アカウントをまだお持ちでない場合、またはブラウザからアカウントにサインインしていない場合は、次のようなページが表示されます。

AWSElasticBeanstalkとRDSを使用してRails6アプリをホストする理由と方法

先に進み、オレンジ色のCreate an AWS Accountをクリックします 右上隅にあるボタン(または、アカウントをお持ちの場合は、コンソールにサインインします)。サインアップフォームに入力したら(必ずAccount Typeを選択してください Personalとして 住所を入力すると、コンソールに直接ドロップされます。メールアドレスを確認することを忘れないでください!

物事が圧倒的に見えても心配しないでください。行きたい場所がわかれば、UIの操作は非常に簡単です。

IAMユーザーを設定する

次に行う必要があるのは、IAMユーザーを設定することです。これにより、SSHに使用できるAPIキーにアクセスし、AWSの外部からリソースにアクセスできるようになります。

また、セキュリティ上の目的でデフォルトの管理者資格情報を使用するのではなく、ユーザーが必要とするリソースのみにアクセスできる別のIAMユーザーを用意することもお勧めします。

ホームページでIAMを検索し、IAMホームページに移動します。 AWSElasticBeanstalkとRDSを使用してRails6アプリをホストする理由と方法

IAMホームページのIAM Resources, Users: 0. AWSElasticBeanstalkとRDSを使用してRails6アプリをホストする理由と方法

その後、Add User.をクリックします。 選択したユーザー名を入力してから、Programmatic access.のチェックボックスを選択できます。 AWSElasticBeanstalkとRDSを使用してRails6アプリをホストする理由と方法

次の画面で、[Attach existing policies directly]を選択します 次に、検索ボックスを使用してAdministratorAccess.を検索します。 AWSElasticBeanstalkとRDSを使用してRails6アプリをホストする理由と方法

次のページで、名前タグを追加して、後でIAMクレデンシャルのリストからユーザーを識別できるようにします。 AWSElasticBeanstalkとRDSを使用してRails6アプリをホストする理由と方法

最後に、レビューページで、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.をクリックします。 AWSElasticBeanstalkとRDSを使用してRails6アプリをホストする理由と方法

次のページで、Standard Createを選択します;次に、[Engine Options,]で PostgreSQL.を選択します AWSElasticBeanstalkとRDSを使用してRails6アプリをホストする理由と方法

スクロールを続けながら、Free tierを選択します Templatesの下 、およびSettings,の下 DB instance identifier movie-api.になります Master usernameはそのままにしておくことができます postgres,として ただし、先に進んでパスワードを追加してください。 AWSElasticBeanstalkとRDSを使用してRails6アプリをホストする理由と方法

DB instance size,のセクションをスキップします Storage, およびAvailability & durability. Connectivity,の下 Additional connectivity configurationを選択します Publicly accessibleを設定します Yesへ およびVPC Security group Create new. AWSElasticBeanstalkとRDSを使用してRails6アプリをホストする理由と方法

続行して、Database authentication.をスキップします。 Additional configuration,の下 必ずInitial database nameを追加してください; movie_api_db しましょう。設定したら、他のすべてをスキップして、Create database.をクリックします ページの下部にあります。

最後に、RDSダッシュボードに戻り、VPC Security groupsの下のデフォルトグループをクリックします。 右の列: AWSElasticBeanstalkとRDSを使用してRails6アプリをホストする理由と方法

次のページの下部で、Inboundを選択します 次のようにルールを編集します。 AWSElasticBeanstalkとRDSを使用してRails6アプリをホストする理由と方法

また、Outboundを確認してください ルールは次のようになります。 AWSElasticBeanstalkとRDSを使用してRails6アプリをホストする理由と方法

Elasticbeanstalkアプリを作成

Elastic Beanstalkホームページに移動し、Create New Application.をクリックします。 AWSElasticBeanstalkとRDSを使用してRails6アプリをホストする理由と方法

必要に応じて、新しい申請書に記入してください。 AWSElasticBeanstalkとRDSを使用してRails6アプリをホストする理由と方法

次に、「No environments currently exist for this application. Create one now. Create one now.をクリックします

次に、Web server environment.を選択します。 AWSElasticBeanstalkとRDSを使用してRails6アプリをホストする理由と方法

次のセクションで、Environment nameを変更します production-env.Domainを離れる 空欄。次に、Base Configuration, Preconfigured platformを選択します Rubyを選択します ドロップダウンから。 Application codeを残すことができます Sample application;次に、先に進んでCreate environment.をクリックします。 これにはしばらく時間がかかりますので、しばらくお待ちください。 AWSElasticBeanstalkとRDSを使用してRails6アプリをホストする理由と方法

完了すると、次のようなページが表示されます。 AWSElasticBeanstalkとRDSを使用してRails6アプリをホストする理由と方法

環境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の場合 部分:

AWSElasticBeanstalkとRDSを使用してRails6アプリをホストする理由と方法

次に、DATABASE_URLを追加します およびRAILS_ENV 、[適用]をクリックします:

AWSElasticBeanstalkとRDSを使用してRails6アプリをホストする理由と方法

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をクリックします :

AWSElasticBeanstalkとRDSを使用してRails6アプリをホストする理由と方法

バージョンラベルをより意味のあるものに変更できます:

AWSElasticBeanstalkとRDSを使用してRails6アプリをホストする理由と方法

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で世界と共有される動作するアプリに移行する方法を学びました。


  1. iPad と iPhone で QR コードをスキャンする方法

    2018 年の初めに、技術大手の Apple が展開した驚くべき機能は iOS 12 です。iPad と電話で QR コードをスキャンすることは、Apple のユーザー エクスペリエンスを次のレベルに引き上げるために追加された機能の 1 つです。この機能は、生活を楽にするだけでなく、チケット、クーポン、製品の成分などに関する情報を取得するのにも役立ちます。さらに、スマートフォンの助けを借りて QR コードをスキャンできる固有の QR コード認識が付属しています。無意味にカメラ。 QR コードをスキャンすることで、購入前に商品に関する情報を数秒以内に収集できます。 この投稿では、iPad

  2. 個人用リマインダー アプリの使用方法とその理由

    オーマイゴッド!すっかり忘れてました 物事を忘れ続けるので、私は上記のステートメントを少なくとも 1 日に数回使用します。今、私は自分の脳や健康に何の問題もないことを知っています.この物忘れは、今日の世界が速いペースで動いているためです.やることがたくさんあり、会わなければならない人がたくさんいて、Netflix には見たいシリーズがたくさんあるので、何かを忘れてしまうことでしょう。 忘れて後で実行できるものもありますが、重要なものもあり、見逃すことはお勧めできません。そのような最優先事項の 1 つは時間通りに薬を服用することですが、特に自宅で仕事をしている場合は、オフィスでの会議を含める