View
15
Download
0
Category
Preview:
Citation preview
AWSマイスターシリーズ ~AWS Elastic Beanstalk~
2012年04月16日
片山 暁雄( @c9katayama ) ソリューションアーキテクト
2011/11/22 リリース!
IAMを使用して、Elastic Beanstalkのアクセス制御が可能に!
アプリケーション毎に操作権限を付与可能
http://docs.amazonwebservices.com/elasticbeanstalk/latest/dg/index.html?AWS
HowTo.iam.html
2012/3/20 リリース!
PHP and Git Deployment for AWS Elastic Beanstalk
・PHP5.3
・Git リポジトリ
Agenda
AWS Elastic Beanstalkの概要
しくみ
HostManager
開発・デプロイ
各種設定
他サービスとの連携
その他Tips
まとめ
Copyright © 2011 Amazon Web Services
AWS Elastic Beanstalkの概要
AWS Elastic Beanstalkとは
Beanstalk = 豆の木
「アプリケーションが実る幹」のイメージ
Webアプリケーションの実行環境を構築・管理するサービス
使用可能な言語:Java(OpenJDK6),PHP 5.3
コンテナとして、Tomcat6、7、Apache(PHP)をサポート
AWS Elastic Beanstalkとは
利用出来るAPIの制約・処理時間の制約はない
ServletおよびPHPの機能はすべて利用可能
ライブラリやフレームワークの制約もない
Java:Warでデプロイ PHP:ZIP or Git デプロイ
ロードバランサー・オートスケーリング
ロードバランサーとオートスケーリングが標準装備
詳細な条件設定が可能
実行環境の設定
サーバスペック、VM設定など40項目以上の設定が可能
AWS Elastic Beanstalkとは
Webアプリケーションのバージョン管理
WARやZIPの世代管理が可能
アプリのロールバック・ロールフォワードが容易
複数環境の構築が可能
本番・テストなど目的別に構築可能
開発・管理ツールを提供
AWS Management Console
コマンドラインツール
Eclipseプラグイン
開発・管理ツール
AWS Management
Console
AWS Toolkit for
Eclipse
しくみ
アプリケーション管理の論理構成
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
用語説明
Application
トップレベルの論理単位
Applicationの中に、EnvironmentやVersionが入る
デプロイするアプリケーション(WAR/ZIPファイル)と混同しやすいので注意
Environment
ConfigurationTemplateを元に構成される
WARをデプロイする環境
環境毎にURLが付与される
• URLは、XXX.elasticbeanstalk.com
各環境毎にEC2、ELBなどが立ち上がる
ログも環境毎に取得できる(1時間おきにS3へ送信可能)
用語説明
Version
Webアプリケーションのバージョン管理
アプリケーションファイルの履歴管理が可能
S3上でファイルを保持
Versionで管理したWAR/ZIPファイルを、各Environmentと紐付け
Environment
テクニカルアーキテクチャ
Management
Console
S3
CloudWatch
ElasticLoadBalanceing
EC2
HM
EC2
HM
AutoScaling
Security Group
eclipse
SNS
URL
この環境が
自動で構成される
HostManager
各EC2インスタンス上で動作
Rubyで実装
/opt/elasticbeanstalk/srv/hostmanager/lib/
OS起動と同時に起動 動作に必要なパラメータはuserdataを通じて入手
プロセス起動と監視
Tomcat、Apache、Thin(HostManager用Webサーバ)
の起動
「Bluepill」というアプリでプロセスを監視
プロセスが落ちると、プロセスを再起動
HostManager
HostManager
Webアプリケーションの生存確認
ELBからの通信を受け取り、Webサーバ内部でWebアプリの生存を確認して返答
HostManager
EC2 HostManager
/_hostmanager/healthcheck
指定URL
を確認
WAR/ZIP入れ替え、アプリサーバ再起動、設定反映などの処理
各処理の指示が入ったHTTP通信を受け取り、指定の処理を実行
通信はAES-256で暗号化
Java->warファイル入れ替え PHP->htdocsにzip展開
HostManager
HostManager
/_hostmanager/tasks
暗号化データをPOST
処理を実行
開発・デプロイ
開発
AWS Toolkit for Eclipse
http://aws.amazon.com/jp/eclipse/
Eclipseマーケットプレースから「AWS」で検索
Eclipse IDE for Java EE Developers 3.6 or higher
開発
機能
AWSサービスのエクスプローラー
Webアプリ作成ウィザード
Beanstalkの環境構築・環境設定
Webアプリケーションのデプロイ
Tomcatのリモートデバッガー
Environmentのイベント・ログビューア
デプロイ
Java -> Eclipse、もしくはManagement Console
PHP -> Git、もしくはManagement Console
Eclipse:WARファイルのデプロイ
プロジェクト右クリック
>Run As
>Run on Server
デプロイ先のEnvironment
を選択
Finishを選択
Version管理時のラベルを入力
S3にアップロード開始
完了後に自動でデプロイ
イベントログで
デプロイ完了を確認
Git
Gitをインストール
AWSの開発キットをダウンロード
http://aws.amazon.com/code/6752709412171743
AWSDevTools-OneTimeSetupでgitに機能を追加
ローカルにリポジトリを作成
AWSDevTools-RepositorySetupを使い、リポジトリを初期化
AWSの情報を設定
git aws.configコマンド
AccessID、エンドポイント、対象のBeanstalk Appなど
http://docs.amazonwebservices.com/elasticbeanstalk/latest/dg/create_deplo
y_PHP.html
Gitでデプロイ
ローカルリポジトリにソースをコミット
次のコマンドでデプロイ
git aws.push
自動生成されたgitリポジトリにソースが入る
コミット後、リポジトリの中身が丸ごとzipになりS3へ格納
バージョン付けされる
Hostmanagerがzipをデプロイ
Apacheのhtdocs以下を削除->展開
DEMO
Deploy a Different Version
を選択
AWS ManagementConsole
Versionラベルを入力
WARファイルを選択
Eventログで確認
ステージ毎に環境を分けることが可能 本番用、テスト用、開発用
URLスワップ機能とバージョン機能を利用する
デプロイ
Environment Version
WAR/ZIP URL Environment Configuration
Environment
URL Environment Configuration
Environment
URL Environment Configuration
URLを入れ替えること
で、テスト済みの環境をそのまま公開できる
デプロイする
アプリは自由に
選択出来る
WAR/ZIP
WAR/ZIP
WAR/ZIP
WAR/ZIP
JavaでGitデプロイ
一応出来ます
ただしgitリポジトリにwarを展開した形で配置する必要あり
WEB-INF/classesにクラスファイルを並べる必要あり
各種設定
各種設定
オートスケール設定
最小/最大サーバ数
配置AZ
スケール時のトリガー
Environment毎に設定が可能
ロードバランサ
HTTP/HTTPSポート
ヘルスチェック設定
セッションStickey
サーバ設定
インスタンスタイプ
セキュリティグループ
キーペア
監視間隔
AMI
各種設定(つづき)
サーブレットコンテナ設定(Java)
ヒープサイズ
(最小/最大/permgen)
Tomcat起動引数
リモートデバッグ有無
環境変数
HTTPサーバ設定(PHP)
ドキュメントルート位置
メモリ
URL Fopen
Zlib圧縮
Display Erroes
Max Exection Time
各種設定(つづき)
ログ設定
S3へのバックアップ(毎時)
イベント通知
トピック設定
宛先設定
設定方法
Eclipse,Consoleいずれでも設定可能
DEMO
他サービスとの連携
他サービスとの連携
AWSの他のサービスとの連携は可能
Relational Database Service(RDBサービス)
• Oracle,MySQL
Simple DB(キーバリューストア)
ElastiCache(memcached)
Simple Email Service(メール送信)
CloudFront(コンテンツ配信)
Simple Queue Service(キューイング)
・・・
他サービスとの連携
DBのエンドポイントやSimpleDBのドメインなどの引き渡し
Userdataが使えないため、現状では環境変数で設定
さらに密に連携する
AMIのIDを設定できるため、BeanstalkのAMIを元に作り込む
常に使うアプリケーションはインストールしておく
Tomcat、PHPのライブラリ配置も必要であれば行う
OS起動時にChef/puppetを起動するようにスクリプトを仕込む
その他Tips
その他Tips
SSHでログイン可能 障害時の詳細調査
アプリケーションのインストール
デフォルト構成で使用
パラメータ調整
他サービスとの連携
テンプレートカスタマイズ
SSH接続
手間
柔軟性
その他Tips
1つのTomcat上の複数WAR管理は不可 手動でのデプロイは可能だが、管理対象外
セッションクラスタリングはデフォルトOFF
サーバのスケールアップ InstanceTypeを変更すると、新しいインスタンスタイプのサーバを起動後、ELB設定を切り替えて古いサーバをシャットダウンしてくれる
SSLも利用可能 API経由でSSL証明書を登録後、EnvironmentのELB設定を実施
料金
Elastic Beanstalk自体の利用は\0
Environment 構築に伴って利用したAWSサービスに対して課金
利用サービス 単位 コスト計算 コスト
Amazon EC2
t1.micro instance
1 $0.02/hr * 24 hours * 30 days $14.40
Elastic Load Balancer 1 $0.025/hr * 24 hours * 30 days $18.00
ELB Data Processing 15GB $0.008/GB * 15GB $0.12
Elastic Block Store volume 8GB $0.10/GB * 8GB $0.80
S3 Storage for WAR File 1GB $0.14/1GB + $0.01 PUT,GET $0.15
Bandwidth In and Out 15GB Inbound is free, 15 GB out *
$0.12
$1.80
月額 $35.27
制約事項
cloud-initが使用不可
CloudFromationとの密接な連携はこれから・・
AMI作り込みか、カスタムスクリプトで
Amazon VPC(Virtual Private Cloud)は未対応
現在米国東部(US-EAST)でのみ利用可能
しばし、しばしお待ちを・・
まとめ
まとめ
Beanstalkで、容易にJava/PHP実行環境の構築が可能
ステージ毎の環境構築が可能
Eclipse/Gitを使用して、実装・設定・デプロイがシームレスに
AWSの他サービスとも連携
必要に応じて、パラメータ設定・カスタムAMIの利用が可能
Elastic Beanstalkで
大きな実(アプリケーション)を
育てよう!
Recommended