Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

ElasticBeanstalkでのRailsアプリ運用

365 views

Published on

JAWS UG 岡山の第7回勉強会での発表資料です。

Published in: Engineering
  • Be the first to comment

  • Be the first to like this

ElasticBeanstalkでのRailsアプリ運用

  1. 1. ElasticBeanstalkでのRailsアプリ運用 第7回Amazonクラウド(JAWS-UG)岡山
  2. 2. 自己紹介 小西雅也 株式会社リゾーム勤務 Webアプリケーション開発 Webアプリケーション運用
  3. 3. 今日話すこと ElasticBeanStalkとは EBで運用しているアプリの概要 EBで運用することにした理由 EB上のアプリケーションサーバーのセットアップ バッチ処理について cron Worker Tier
  4. 4. ElasticBeanStalk AWSにWebアプリケーションをデプロイできる EC2, RDS, ELB, SQSなどで構成された環境を作れる アプリケーションサーバーのAuto Scaleも可能 スケールする条件を色々設定出来る(CPU稼働率, Disk IO, Network etc)
  5. 5. 今日話すこと ElasticBeanStalkとは EBで運用しているアプリの概要 EBで運用することにした理由 EB上のアプリケーションサーバーのセットアップ バッチ処理について cron Worker Tier
  6. 6. EBで運用しているアプリ アプリケーション間のデータ連携を管理する RDB→JSON  データ変換機能 JSONの準備完了を連携先へ通知
  7. 7. SC GATE(連携元アプリケーション)
  8. 8. MallNavi(連携先アプリケーション)
  9. 9. 配布管理
  10. 10. 配布管理の概要 配布管理の構成 Heroku AWS EB SC GATE «Database» データベース «Storage» S3 配布管理 «Database» RDS MallNavi アプリケーションA
  11. 11. 配布管理の要件 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を作っていた ので、同じ形式のデータを作りたかった
  12. 12. 今日話すこと ElasticBeanStalkとは EBで運用しているアプリの概要 EBで運用することにした理由 EB上のアプリケーションサーバーのセットアップ バッチ処理について cron Worker Tier
  13. 13. EBになった理由 要件的に外部コマンドを呼んで実行するバッチになりそう なので最初はEC2単体or その他VPSに構築するつもりだった 既に社内でEBの利用事例があった(Mall Navi) 環境変数の管理 社内でのRails運用環境の別パターンを押さえておきたかった
  14. 14. 今日話すこと ElasticBeanStalkとは EBで運用しているアプリの概要 EBで運用することにした理由 EB上のアプリケーションサーバーのセットアップ バッチ処理について cron Worker Tier
  15. 15. ebextensions ソースコード上に追加するElasticBeanStalkの設定ファイル ElasticBeanStalk上のAWSのリソースをカスタマイズ出来る アプリケーションが稼働するEC2上に必要なパッケージを入れたりするのに使用 EC2にssh出来るがそこで直接サーバーをセットアップしたら駄目 (セットアップ中に色々試すのは逆にsshしてやってみたほうがいいかも) 今日の話のメイン
  16. 16. ebextensions ファイル名順に実行される
  17. 17. ebextensions サーバーのタイムゾーン設定 commands:    set_time_zone:      command: ln -f -s /usr/share/zoneinfo/Japan /etc/localtime 必要パッケージのインストール packages:    yum:      jq: []     libxml2-devel: []     libxslt-devel: []
  18. 18. ebextensions EBの環境変数を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/el asticbeanstalk/bin/get-config environment) > /tmp/envs       . /tmp/envs       echo $RDS_HOSTNAME:$RDS_PORT:scgate:$RDS_USERNAME:$RDS_PASSWORD > /ho me/ec2-user/.pgpass
  19. 19. ebextensions heroku toolbelt用にパスワードを保管   "/home/ec2-user/.netrc":      mode: "000600"     owner: ec2-user     group: ec2-user     content: |       machine api.heroku.com         login hoge@hoge.com         password xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx       machine git.heroku.com         login hoge@hoge.com         password xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
  20. 20. ebextensions commands:    01_heroku_toolbelt_install:      command: /bin/bash -lc 'wget -O- https://toolbelt.heroku.com/install.s h | sh'   02_add_toolbelt_path:      command: echo 'PATH="/usr/local/heroku/bin:$PATH"' >> /home/ec2-user/.b ashrc   03_heroku:      command: su - ec2-user -c "/bin/bash -lc '/usr/local/heroku/bin/herok u 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 /hom e/ec2-user/.pgpass
  21. 21. ebextensions 必要な設定が出来たら、最初から環境を作り直して確認する 試行錯誤中の手動操作が前提で動いている可能性がある 簡単にsshしていじれる安心感から、やってしまいがち(やった)
  22. 22. 今日話すこと ElasticBeanStalkとは EBで運用しているアプリの概要 EBで運用することにした理由 EB上のアプリケーションサーバーのセットアップ バッチ処理について cron Worker Tier
  23. 23. バッチ処理cron 現状の配布管理はこれで管理している EBのAuto Scalingで複数EC2が動くようになっていると、それぞれのサーバーでcron が動くので良くない
  24. 24. Worker Tier アプリケーションがデプロイされたWeb非公開のEC2と、Amazon SQSで構成される SQSのキューを受け取ると、キューの本文をWorker Tierのアプリケーションに POSTしてくれる アプリ側でPOSTに反応してバッチが動くように作って運用する worker tierはずっと起動している 配布管理のバッチは月に数回起動なので、この方法は見送った それなりに実行することが多いならWorker Tierがいいと思う
  25. 25. 試してみたいこと AWS Batch シェルスクリプトや、コンテナイメージをジョブとして登録して実行出来る 処理している時間だけEC2が稼働する? 配布管理のRailsアプリをDockerイメージにしてEBで運用してから、AWS Batchにも するといいのかも?
  26. 26. まとめ 要件としてサーバーに色々と入れないといけないサービスでは、ElasticBeanStalkで Railsを動かすと便利

×