26
ElasticBeanstalk Rails 7 Amazon JAWS-UG

ElasticBeanstalkでのRailsアプリ運用

Embed Size (px)

Citation preview

Page 1: ElasticBeanstalkでのRailsアプリ運用

ElasticBeanstalkでのRailsアプリ運用第7回 Amazonクラウド(JAWS-UG) 岡山

Page 2: ElasticBeanstalkでのRailsアプリ運用

自己紹介

小西雅也

株式会社リゾーム勤務

Webアプリケーション開発 Webアプリケーション運用

Page 3: ElasticBeanstalkでのRailsアプリ運用

今日話すこと

ElasticBeanStalkとは EBで運用しているアプリの概要 EBで運用することにした理由 EB上のアプリケーションサーバーのセットアップ バッチ処理について

cronWorker Tier

Page 4: ElasticBeanstalkでのRailsアプリ運用

ElasticBeanStalkAWSにWebアプリケーションをデプロイできるEC2, RDS, ELB, SQSなどで構成された環境を作れるアプリケーションサーバーのAuto Scaleも可能スケールする条件を色々設定出来る(CPU稼働率, Disk IO, Network etc)

Page 5: ElasticBeanstalkでのRailsアプリ運用

今日話すこと

ElasticBeanStalkとは EBで運用しているアプリの概要 EBで運用することにした理由 EB上のアプリケーションサーバーのセットアップ バッチ処理について

cronWorker Tier

Page 6: ElasticBeanstalkでのRailsアプリ運用

EBで運用しているアプリアプリケーション間のデータ連携を管理する

RDB→JSON  データ変換機能JSONの準備完了を連携先へ通知

Page 7: ElasticBeanstalkでのRailsアプリ運用

SC GATE(連携元アプリケーション)

Page 8: ElasticBeanstalkでのRailsアプリ運用

MallNavi(連携先アプリケーション)

Page 9: ElasticBeanstalkでのRailsアプリ運用

配布管理

Page 10: ElasticBeanstalkでのRailsアプリ運用

配布管理の概要配布管理の構成

Heroku

AWS

EB

SC GATE«Database»データベース

«Storage»S3

配布管理«Database»RDS

MallNavi アプリケーションA

Page 11: ElasticBeanstalkでのRailsアプリ運用

配布管理の要件

SC GATEとは独立したアプリケーションにしたいデータ連携側の仕様変更などの場合に、SC GATEのリリーススケジュールの調整をしたくない

連携先のアプリケーション登録UI  →  Railsで構築Heroku Toolbeltの実行(SC GATEのDBダンプを取得するため)SC GATEのDBダンプをRDSへリストアリストアされたRDSをRailsのModelのto_jsonでJSONエクスポート当初はSC GATEのDBダンプをローカルに持ってきて手動でJSONを作っていたので、同じ形式のデータを作りたかった

Page 12: ElasticBeanstalkでのRailsアプリ運用

今日話すこと

ElasticBeanStalkとは EBで運用しているアプリの概要 EBで運用することにした理由 EB上のアプリケーションサーバーのセットアップ バッチ処理について

cronWorker Tier

Page 13: ElasticBeanstalkでのRailsアプリ運用

EBになった理由要件的に外部コマンドを呼んで実行するバッチになりそう

なので最初はEC2単体 or その他VPSに構築するつもりだった既に社内でEBの利用事例があった(Mall Navi)環境変数の管理

社内でのRails運用環境の別パターンを押さえておきたかった

Page 14: ElasticBeanstalkでのRailsアプリ運用

今日話すこと

ElasticBeanStalkとは EBで運用しているアプリの概要 EBで運用することにした理由 EB上のアプリケーションサーバーのセットアップ バッチ処理について

cronWorker Tier

Page 15: ElasticBeanstalkでのRailsアプリ運用

ebextensionsソースコード上に追加するElasticBeanStalkの設定ファイルElasticBeanStalk上のAWSのリソースをカスタマイズ出来るアプリケーションが稼働するEC2上に必要なパッケージを入れたりするのに使用EC2にssh出来るがそこで直接サーバーをセットアップしたら駄目 (セットアップ中に色々試すのは逆にsshしてやってみたほうがいいかも)今日の話のメイン

Page 16: ElasticBeanstalkでのRailsアプリ運用

ebextensions

ファイル名順に実行される

Page 17: ElasticBeanstalkでのRailsアプリ運用

ebextensionsサーバーのタイムゾーン設定

commands:   set_time_zone:     command: ln -f -s /usr/share/zoneinfo/Japan /etc/localtime

必要パッケージのインストール

packages:   yum:     jq: []    libxml2-devel: []    libxslt-devel: []

Page 18: ElasticBeanstalkでのRailsアプリ運用

ebextensionsEBの環境変数を ebextensionsで使う方法

files:   "/home/ec2-user/pgpass.sh":     mode: "000755"    owner: root    group: root    content: |      #!/bin/bash      jq  -r "to_entries|map(\"\(.key)=\(.value|tostring)\")|.[]" <(/opt/elasticbeanstalk/bin/get-config environment) > /tmp/envs      . /tmp/envs      echo $RDS_HOSTNAME:$RDS_PORT:scgate:$RDS_USERNAME:$RDS_PASSWORD > /home/ec2-user/.pgpass

Page 19: ElasticBeanstalkでのRailsアプリ運用

ebextensionsheroku toolbelt用にパスワードを保管

  "/home/ec2-user/.netrc":     mode: "000600"    owner: ec2-user    group: ec2-user    content: |      machine api.heroku.com        login [email protected]        password xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx      machine git.heroku.com        login [email protected]        password xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx

Page 20: ElasticBeanstalkでのRailsアプリ運用

ebextensionscommands:   01_heroku_toolbelt_install:     command: /bin/bash -lc 'wget -O- https://toolbelt.heroku.com/install.sh | sh'  02_add_toolbelt_path:     command: echo 'PATH="/usr/local/heroku/bin:$PATH"' >> /home/ec2-user/.bashrc  03_heroku:     command: su - ec2-user -c "/bin/bash -lc '/usr/local/heroku/bin/heroku apps'"    env:       HOME: /home/ec2-user  04_scgate_pgpass_create:     command: /home/ec2-user/pgpass.sh  05_scgate_pgpass_permission:     command: chown ec2-user.ec2-user /home/ec2-user/.pgpass; chmod 600 /home/ec2-user/.pgpass

Page 21: ElasticBeanstalkでのRailsアプリ運用

ebextensions必要な設定が出来たら、最初から環境を作り直して確認する

試行錯誤中の手動操作が前提で動いている可能性がある

簡単にsshしていじれる安心感から、やってしまいがち(やった)

Page 22: ElasticBeanstalkでのRailsアプリ運用

今日話すこと

ElasticBeanStalkとは EBで運用しているアプリの概要 EBで運用することにした理由 EB上のアプリケーションサーバーのセットアップ バッチ処理について

cronWorker Tier

Page 23: ElasticBeanstalkでのRailsアプリ運用

バッチ処理 cron現状の配布管理はこれで管理している

EBのAuto Scalingで複数EC2が動くようになっていると、それぞれのサーバーでcronが動くので良くない

Page 24: ElasticBeanstalkでのRailsアプリ運用

Worker TierアプリケーションがデプロイされたWeb非公開のEC2と、Amazon SQSで構成されるSQSのキューを受け取ると、キューの本文を Worker TierのアプリケーションにPOSTしてくれるアプリ側でPOSTに反応してバッチが動くように作って運用するworker tierはずっと起動している配布管理のバッチは月に数回起動なので、この方法は見送った

それなりに実行することが多いならWorker Tierがいいと思う

Page 25: ElasticBeanstalkでのRailsアプリ運用

試してみたいこと

AWS Batchシェルスクリプトや、コンテナイメージをジョブとして登録して実行出来る

処理している時間だけEC2が稼働する?配布管理のRailsアプリをDockerイメージにしてEBで運用してから、AWS Batchにもするといいのかも?

Page 26: ElasticBeanstalkでのRailsアプリ運用

まとめ

要件としてサーバーに色々と入れないといけないサービスでは、ElasticBeanStalkでRailsを動かすと便利