2020年12月13日PRAWSを使ってアプリをデプロイしたい、運用したいといった時に、EC2インスタンスを立てて、RDSインスタンスを立てて、ネットワーク等を設定して、とやることが多くとても面倒です。Beanstalkの良いところです。Beanstalkの使い方を記載していきます。ちなみに、「Beanstalk」とは「豆の木」という意味です。Beanstalkとはすべて自分で構築していきたいという方には、こちらの本がオススメです。サーバー・ネットワークと、全てを自分で構築していくことになりますので、より理解が深まります。改訂3版AWSアカウントの作成とIAMの作成アカウントをまだ持っていない方は、まずはアカウントを作りましょう。Beanstalkも無料枠で利用可能です。Beanstalkによって展開されるインスタンス等を無料枠のものを選択することで、無料で利用できるようになります。AWSでIAMを作成する手順awsでアカウントを開設したあとは、rootユーザーのみが存在しています。実際にサービスを運用していくには、ドメインの取得が必須です。必要に応じて取得してください。AWSでドメインを取得しSSL証明書を発行するサービスを開発するときに欠かせないのがドメインですが、AWSでサーバーを構築する場合は、ドメインもAWSで取得したほうが楽です。Beanstalkのサービスを用いて環境を構築していきます。Beanstalk」のダッシュボードを開き、「新しいアプリケーションの作成」を選択します。「アプリケーション名」を入力し、「作成」をクリックします。今回は「rails-aws-sample」というアプリケーション名にします。タグを追加することも可能ですが、特に必要はありません。環境の作成アプリケーションの作成が完了したら、その配下に「環境」を作成します。「新しい環境の作成」をクリックします。「ウェブサーバー環境」が選択されていることを確認して、「選択」をクリックします。今回は「rails-dev」とします。ドメイン・説明は空欄のままでOKです。プラットフォームは「管理されたプラットフォーム」が選択されていることを確認します。Railsのアプリケーションをデプロイするので、「プラットフォーム」のプルダウンで「Ruby」を選択します。ブランチ・バージョンの指定も可能ですが、デフォルトのままでOKです。アプリケーションコードは、今は、「サンプルアプリケーション」が選択されている状態でOKです。ここまでの入力を確認し、「より多くのオプション設定」をクリックし、詳細設定に進みます。「環境の作成」をクリックして、一旦環境を作成しても良いですが、環境構築の段階では、何度も設定を調整・修正することになります。それにより、より詳細な設定が行えるようになります。「ソフトウェア」の設定ソフトウェアの設定では、今回は主に環境変数を設定します。Logsの設定もここで行いますが、サービスを運用していく中で変更すれば良いと思います。Logsをすべてオンにして運用しています。オンにしていると料金が掛かってくるので、X-Rayは月に数日のみここでオンオフを設定しています。今回は必要ないでしょう。環境変数(AWSコンソール上では環境プロパティと表示されている)には、デフォルトで、以下の5つが設定されています。BUNDLER_DEPLOYMENT_MODEBUNDLE_WITHOUTRACK_ENVRAILS_SKIP_ASSET_COMPILATIONRAILS_SKIP_MIGRATIONSこれらには触らずに、Railsをデプロイするためにいくつか環境変数を追加していきます。development)SECRET_KEY_BASE(このあと解説)(上記の環境変数名は一般的な例です。)前回の記事でDockerで作成した環境変数を設定しましたが、同じことをEC2で設定しているとの認識で大丈夫です。プログラミング学習において、初学者がつまずいてやる気を失くしてしまうのが環境構築です。Dockerは設定ファイルを共有すること...SECRET_KEY_BASEは本番環境で必要になる暗号キーです。ターミナルで以下のコマンドを打ち込み生成します。secretそうすると生成されたキーがターミナル上に表示されるので、それをコピーして先程の環境変数として入力します。secret”等で実行してください。)くれぐれも紛失・流出しないように注意してください。ここまで入力が完了したら、「保存」をクリックします。これで「ソフトウェア」の設定はひとまず完了です。グループの設定等を行うことが可能です。構築するWEBサーバーのEC2インスタンスタイプを指定することが出来ます。試しに環境を構築してみるだけならデフォルトのままで大丈夫です。Scalingを有効にするには、「環境タイプ」を「負荷分散」にして、インスタンスの最大数を2以上にすれば良いです。この設定では結局EC2インスタンスは1台しか展開されません。「インスタンスタイプ」はデフォルトでは「t2.micro」(無料枠の範囲内)となっていますが、実際に運用する際には、最低でも「t3.small」ぐらいは欲しいところです。Railsを稼働させるのにメモリ等がある程度消費されるので、状況に応じて、ここは修正します。今回は無料枠の範囲で行きたいので、ひとまず「t2.micro」のままにします。画面下側の「保存」をクリックして「容量」の設定を完了させます。「ローリング更新とデプロイ」の設定デプロイメントポリシーを「ローリング」にします。(インスタンスの数は1の場合は、特に設定しなくても大丈夫です。)「セキュリティ」の設定ここでは、EC2のキーペアを設定する必要があります。AWSのEC2ダッシュボードを開いて、左側のメニューから「キーペア」を選択します。画面上部に表示される「キーペアを作成」をクリックします。キーペアの名前を入力し、ファイル形式が「pem」になっていることを確認して、「キーペアを作成」をクリックします。自動でダウンロードされます。ダウンロードしたpemファイルを紛失すると、作り直す必要がありますので注意していください。このpemファイルを、user配下の「.ssh」フォルダに格納しておきます。Beanstalkのセキュリティ設定に戻り、「EC2キーペア」の右横のリロードボタンをクリックすると、先程作成したキーペアが選択できるようになります。無視」にチェックを入れます。「インスタンス」「ロードバランサー」の設定こちらは特に触る必要がないので、次に行きます。興味があるなら中身をさらっと確認してみましょう。環境の構築ここまででひとまずの設定が完了しました。これで、環境を作成すると、以下のような表示に切り替わります。環境名のすぐ下に表示されているURLをクリックすると、デプロイされているサンプルアプリの画面が表示されます。次はRDSインスタンスです。system)専用のDBサーバーのサービスです。Beanstalkと連携させて、WEBサーバー・DBサーバーという構成を構築していきます。RDSインスタンスを構築する「標準作成」を選択し、「エンジンタイプ」を選択します。今回はPostgreSQLを選択します。バージョンはデフォルトで最新のものを選択しておけばOKです。「テンプレート」は今回は最小構成でいくので、「無料利用枠」を選択します。「認証情報の設定」では、マスターユーザー名・マスターパスワードを入力します。Beanstalkの環境変数に入力した「RAILS_DB_USERNAME」と「RAILS_DB_PASSWORD」と同じ値を入力します。「インスタンスサイズ」は無料枠でいくなら、「t2.micro」にします。「接続」のセクションでは、環境構築段階では、「パブリックアクセス可能」を「あり」に設定しておくと良いでしょう。その他ポート等はデフォルトのままでOKです。「データベース認証」もデフォルトのまま「パスワード認証」を選択しておきます。最後に「追加設定」のセクションを開き、「最初のデータベース名」を入力します。ここは、デプロイするrailsの”database.yml”に指定しているデータベース名を入力します。db:create”する必要がなくなります。後ほどsshでインスタンスに入ってコマンドでcreateしても良いです。最後に、画面下の「データベースの作成」をクリックします。Beanstalkと連携させる作成したDBインスタンスを選択し、「接続とセキュリティ」タブを開きます。Beanstalkの環境変数に設定します。進み、先程確認した「エンドポイント」を”RAILS_DB_HOST”の値として貼り付けます。「適応」をクリックして、環境変数の変更を反映させます。デプロイいよいよアプリをデプロイしますが、その前にawsコマンドを使えるように準備する必要があります。作成しているIAMのprofileを作成します。json.elasticbeanstalkアプリ直下に、”.elasticbeanstalk”フォルダを作成し、その中に”config.yml”ファイルを作成します。rails_dev_user「environment」「application_name」「default_region」「profile」はそれぞれの環境に併せて修正してください。最後に、以下のコマンドを入力します。successfully.このように表示されれば完了です。エラーが出る場合は、AWSコンソールから、ログを確認することも可能です。ssh”で環境に接続し、”/var/log/”のeb-engine.log等を確認して適宜対応します。【AWS】独自ドメインでウェブアプリを公開するドメインはサービスの住所のようなものであり、実際にサービスを運用していくにあたって必須となります。