Submit Search
AWS上でのWebアプリケーションデプロイ
•
175 likes
•
54,891 views
Amazon Web Services Japan
Follow
1 of 46
Download now
Downloaded 260 times
More Related Content
AWS上でのWebアプリケーションデプロイ
1.
AWS上での Webアプリケーションデプロイ アマゾン データサービス ジャパン株式会社 2013/05/06
2.
本資料の対象 はじめに デプロイとは パターン1: AWSでのベーシックなデプロイ 1. AMI+SCMでデプロイ 2.
Auto Scalingを適用してみる 3. 更にデプロイツールで自動化してみる パターン2: Elastic Beanstalkを使ったデプロイ まとめ
3.
本資料の対象 はじめに デプロイとは パターン1: AWSでのベーシックなデプロイ 1. AMI+SCMでデプロイ 2.
Auto Scalingを適用してみる 3. 更にデプロイツールで自動化してみる パターン2: Elastic Beanstalkを使ったデプロイ まとめ
4.
本資料の対象 現在AWSでシステムを運用中のWeb サービス開発者の方 複数台のアプリケーションサーバーへ のコードのデプロイをどうすべきか悩 んでいる方
5.
本資料の対象 はじめに デプロイとは パターン1: AWSでのベーシックなデプロイ 1. AMI+SCMでデプロイ 2.
Auto Scalingを適用してみる 3. 更にデプロイツールで自動化してみる パターン2: Elastic Beanstalkを使ったデプロイ まとめ
6.
よく聞くデプロイ まわりの問題
7.
時間がかかる • 1回のデプロイに2時間かかるとすると、1日にデプ ロイができるのはせいぜい3回。それよりもリリー スしたい機能が多かったらどうする? • かといってリリースするコードの単位を大きくして しまうと問題がおきたときの対応が難しくなる。 •
更に、バグがあったときにも切り戻しに2時間も待 たなきゃいけないのは致命的
8.
ロールバックできない • バグは発生するもの。デプロイ後、バグが発見され たときに戻す手順がないと悲惨なことに。 • そういう状況が続くと、そもそもデプロイがリスク に見えてきて「リリースは危険なので時期をみて慎 重に判断しましょう」とかなって本末転倒! •
DB関連の変更を伴うときはより注意を払うこと。 スキーマ等の変更は必ず後半互換性を持たせる!
9.
前後条件や環境条件が多い • 「この作業は別の作業Aをやったあとじゃないとう まく動かない」とか「この作業をやってしまうと元 のコードは動かなくなる」みたいなのは事故の温床。 • 本番環境と開発環境ではコード内の定数を変えない といけない、みたいなのも事故の温床。 •
デプロイは何度やっても同じ結果になるようにする べき。
10.
こういった罠にはまらな いように適切なデプロイ ワークフローをつくりま しょう
11.
本資料の対象 はじめに デプロイとは パターン1: AWSでのベーシックなデプロイ 1. AMI+SCMでデプロイ 2.
Auto Scalingを適用してみる 3. 更にデプロイツールで自動化してみる パターン2: Elastic Beanstalkを使ったデプロイ まとめ
12.
新しいコードをサーバーに配って有効化 したり、サーバーを新規に配置してサー ビスに付け加えたり、構成変更やバー ジョンアップを実施すること。 この資料では主にアプリケーションコー ドのデプロイについて扱います。 ChefやPuppetなどを使ったインフラ のデプロイ自動化についてはこの資料で は扱いません。
13.
デプロイ どうやってますか?
14.
rsyncでコードを配る? gitでpullする? AMIにコードを埋め込む? Elastic Beanstalk使う? Capistrano使ってデプロイ? いろいろあってどれが最適なのか…
15.
素早くできること • 1回2時間かかったら1日に何回デプロイで きる? ロールバックできること • バグがあったらすぐにもどせないと致命的 条件を少なくすること •
いつだれが何度やっても同じ結果になるよ うにする デプロイで大事なこと
16.
本資料の対象 はじめに デプロイとは パターン1: AWSでのベーシックなデプロイ 1. AMI+SCMでデプロイ 2.
Auto Scalingを適用してみる 3. 更にデプロイツールで自動化してみる パターン2: Elastic Beanstalkを使ったデプロイ まとめ
17.
AMIとSCMでデプロイ 17 コード コード コード コードはgitなどのSCM、 サーバー構成はAMIで管理す る 開発環境と本番環境などにお いてサーバー構成を揃えやす いのがメリット デプロイされた後、コードは SCMを使って最新化する コード以外を更新する際は AMIを作り直す ①EC2を AMI化 ②コードは SCMへコミット ③AMIから 新しいEC2を起動 ④起動したEC2に SCMからコードを デプロイ
18.
SCMをつかって コードを最新化 AMIとSCMでデプロイ 18 コード コード コードごと AMI化 新規サーバーを デプロイ 新規にサーバーをデプロイするときはこの手順をすべて実施 コードだけのデプロイの場合はこ こだけやればOK例えばSSHでデプロイ対象にログインして $ git
pull $ sudo apachectl restart
19.
新しいサーバー追加したら • SSHでログインしてgit pull
& apachectl restart コードを新しくするときも • SSHでログインしてgit pull & apachectl restart この方式の問題点は? • それぞれデプロイ対象のサーバーにログイン してデプロイ作業をしなければいけない • 台数が増えてくるとつらい! 19 AMIとSCMでデプロイ まとめると
20.
デプロイツールで 作業を自動化しましょう
21.
前述の2つの方式で課題になっていた「各サーバーにSSH でログインしてコードの最新化やロールバックする」と いうような作業を自動化してくれるツール 有名どころとしてはCapistrano、Fabric、Mavenなど デプロイツールとは? デプロイ対象のサーバー 群すべてに対して自動的 にこういった作業を実施 してくれる。
22.
デプロイツールを組み合わせる 22 コード コード 新規サーバーを デプロイ デプロイツールで コードをデプロイ サーバーに関しては、前述の「AMI」もしくは「Auto Scaling」を 使って管理・デプロイする この部分を手動ではなくデ プロイツールで実施する
23.
デプロイツールを組み合わせる 23 Capistranoでデプロイするなら・・ • Capistranoはもともとrailsアプリケーションのデプロイ用に 作られたものだが、rails以外でも使える。(ただし、その場合 はrailsless-deployというプラグインが必要) • インストールはgemで。 •
次のページに続く $ gem install capistrano $ gem install capistrano_colors #あると便利 $ gem install capistrano-ext #あると便利 $ gem install railsless-deploy #rails以外に使うときに必要
24.
デプロイツールを組み合わせる 24 Capistranoでデプロイするなら・・ • 設定ファイルをつくる。デプロイ対象のアプリのルートディレ クトリで下記を実行。設定ファイル等が生成される。 • そうすると以下の様な設定ファイル群が生成される •
次のページに続く $ capify $ tree . ├── Capfile ├── config │ └── deploy.rb
25.
デプロイツールを組み合わせる 25 Capistranoでデプロイするなら・・ • config/deploy.rbを修正する • 設定項目はアプリケーション名、SCM種別、SCMリポジトリ URL、ブランチ、デプロイ対象サーバーのログインユーザーや ドキュメントルートなど。 •
roleを利用することによって複数サーバーのグループ化と一斉 デプロイができる https://gist.github.com/imaifactory/5613219
26.
デプロイツールを組み合わせる 26 Capistranoでデプロイするなら・・ • deployの準備コマンドを実行。デプロイ対象のサーバーに必要 なディレクトリ等が生成される。 • デプロイ! •
ロールバックも容易 $ cap deploy:setup $ cap deploy $ cap deploy:rollback
27.
新しいサーバー追加したら • デプロイツールで新しいサーバーに個別にデプロイ • その上で、デプロイツールの設定に新しいサーバー を追加 コードを新しくするときは •
対象サーバーに対して一斉にデプロイ この方式の問題点は? • サーバー追加時にまだ手動の手間が残る • 例えばAuto Scalingの時などは困る 27 デプロイツールで自動化 まとめると
28.
Auto Scalingと 組み合わせるには
29.
29 Auto Scalingとは? 負荷や時間に合わせてサーバーの台数を増減することの できる仕組み ELBの配下でも利用可能。 Auto scaling
Group CloudWatch Alarm Auto Scaling
30.
サーバーの起動のタイミングを完全にコント ロール出来ない(負荷などに合わせて自動的 に立ち上がってくる) 起動時のデプロイも自動化する必要がある! 30 Auto Scalingにすると・・
31.
AMIの中にコードの最新化を自動的に やってくれる仕組みを実装する必要があ る。(詳細は次のページで) Auto Scalingでデプロイ 31 コード コード 新規サーバーを デプロイ Auto
ScalingではAMIからサーバーをデプロイするところ まで面倒見てくれる Auto Scalingでは自分で AMIを用意する必要があ る。
32.
apache + mod_php
+ githubの環境でやるなら・・ • 例えばUser Dataを利用して、起動時に以下のような処理を実 行する。 • capistrano ready(setup相当)なディレクトリを作成し、 githubからリポジトリをクローンしてきてapacheを起動する 32 Auto Scalingでデプロイ https://gist.github.com/imaifactory/5612971
33.
apache + mod_php
+ githubの環境でやるなら・・ • User Dataとは、EC2起動時にテキスト情報をインスタンスに 渡す仕組み。前ページのようなシェルスクリプトを渡すと起動 時にルート権限で実行してくれる。 • gitをインストールしたり、httpd.confの設定を調整するなど についてはインフラ側で調整する(AMI化しておいたり、Chef 等で管理) 33 Auto Scalingでデプロイ
34.
apache + mod_php
+ githubの環境でやるなら・・ • User Dataで渡されたスクリプトが実行されることによって、 新しく起動してくるEC2は”cap deploy:setup”まで終わった 状態で、最新のコードが配置された状態でapacheが起動して きてくれる。 • 前ページの画面イメージはマネジメントコンソールでの設定だ が、実際にはAuto ScalingのLaunch Configurationに対し てUser Dataを設定する • あとは必要に応じてcap deloyすればコードの更新が可能。 • 新しく起動したEC2をどうやってcapistranoで管理するかにつ いては次のページで。 34 Auto Scalingでデプロイ
35.
Auto Scalingを利用すると、デプロイ対象の サーバーがダイナミックに変わっていくことに なる 静的なConfigファイルでは管理できない capistrano-ec2groupやcapistrano- autoscalingなどのプラグインを使ってデプロ イ対象のサーバーを動的に管理 他のデプロイツールを使う際にも同様なアプ ローチで 35 Auto Scaling
+ Capistrano
36.
新しいサーバー追加したら • 自動的に最新のコードをデプロイ コードを新しくするときは • 対象サーバーに対して一斉にデプロイ デプロイがだいぶ自動化された! 36 起動時のデプロイも自動化すると
37.
本資料の対象 はじめに デプロイとは パターン1: AWSでのベーシックなデプロイ 1. AMI+SCMでデプロイ 2.
Auto Scalingを適用してみる 3. 更にデプロイツールで自動化してみる パターン2: Elastic Beanstalkを使ったデプロイ まとめ
38.
Elastic Beanstalkでも デプロイ管理できます
39.
Instance Amazon RDS (OPTION) Elastic Load Balancer Instance Auto
scaling Group CloudWatch deploy! AWS上のおすすめ構成を自動作成 コードをデプロイするだけで、Webアプリケーションを開始 Elastic Beanstalkとは? ※gitが使えるのはnode.js, PHP, Python Rubyのみ
40.
新しいサーバー追加したら • 自動的に最新のコードをElastic Beanstalkがデ プロイしてくれる コードを新しくするときは •
これもElastic Beanstalkが自動的にデプロイし てくれる 複数バージョンのコードを管理・デプロイ可 能なのでロールバックも容易 40 Elastic Beanstalkを使うと
41.
Beanstalkでは 言語ごとにAMIが 予め用意されている。 カスタマイズも可能。 http://bit.ly/YyDNeM Elastic Beanstalkでデプロイ 41 コード 新規サーバーを デプロイ Beanstalkから コードが配布される Elastic Beanstalkでは言語ごとに予め決まった構成のAMIが デプロイされる Beanstalkへpushしたコードをそのままデプ ロイしたり、pushされたコードの中から任意 のものをデプロイできる 開発したコードは Beanstalkへpush
42.
apache + mod_phpの環境でやるなら・・ •
ebというElastic BeanstalkのCLIツールを使って作業する。 http://amzn.to/dSdtGP から取得可能。 42 Elastic Beanstalkでデプロイ #gitとebの初期化 $ cd /your/app/path $ git init $ eb init #プロンプトが立ち上がっていくつかのQAで設定が進む #コミット $ git add . $ git commit -a -m ‘first commit’ #Beanstalkへpush. ebの設定が済んでいればこのコマンドが使える。 #これだけでコードがサーバーにデプロイされる! $ git aws.push • git aws.pushを実行すると、Beanstalkへコードがpushされた上、 対象のenvironmentにコードがデプロイされる
43.
ロールバックするなら・・ • Elastic Beanstalkではアプリケーションのバージョンを管理 してくれるので、前のバージョンをデプロイしなおせばOK 43 Elastic
Beanstalkでデプロイ Application Environment Version WAR/ZIP URL Environment Configuration Configuration Template Environment URL Environment Configuration WAR/ZIP WAR/ZIP WAR/ZIP WAR/ZIP Environment URL Environment Configuration コンソール上から別バージョンをデプ ロイ可能 Elastic Beanstalkではアップロードされ たコードをバージョン管理してくれる
44.
本資料の対象 はじめに デプロイとは パターン1: AWSでのベーシックなデプロイ 1. AMI+SCMでデプロイ 2.
Auto Scalingを適用してみる 3. 更にデプロイツールで自動化してみる パターン2: Elastic Beanstalkを使ったデプロイ まとめ
45.
どの方法をとるべきか • これがベスト、というデプロイ方法は存在しない。 • 自分たちの運用フローに最適なものを選択する 早いうちにコストをかけてつくろう •
「規模が大きくなってきたらやろう」みたいなのもアンチパターン • 圧倒的に開発のスピードが上がるしコストも下がる 開発も本番も同じ環境、同じ手順でやろう • 「開発環境はまあいいよね」もよくあるアンチパターン • 本番だけ特別な環境・手順にしておくといざというときにハマる サーバーは出来る限りステートレスに • 負荷に合わせてサーバーを増減などを想定すると、サーバーはどんど ん新しいものを足したり捨てたりすることになる。この時にサーバー 単体にデータを貯めこんでしまうアーキテクチャは成り立たない。 • データはDBに、ログはS3に追いだそう 45
Download