php on cloud
TRANSCRIPT
PHP on クラウド!- AWS Elastic Beanstalk の真価 -
2012 年 05 月 12 日PHP カンファレス関西 2012
「好きやねん PHP! 」
自己紹介
名前:片山暁雄 ( @c9katayama ) 大阪府池田市出身
所属:アマゾンデータサービスジャパン株式会社
職種:ソリューションアーキテクト
プログラム言語:
Java
ホテルモントレ大阪にて
なぜ Java 派の私がお伺いしたのか
Python と Perl が得意です
Ruby が得意です
PHP より Ust です
AWS エバンジェリスト 2 号
AWS エバンジェリスト 1 号
@understeer
銅鑼と忍者に気をつけろ!
アジェンダ
AWS ご紹介
AWS SDK for PHP
AWS Elastic Beanstalk
ハッシュタグ #jawsug
現在 全国 17 支部各地でお世話になっています
宮崎
東京
札幌
仙台
名古屋クラウド女子会大阪
金沢京都
山口佐賀福岡
鹿児島沖縄
熊本浜松
静岡
JAWS-UG(AWS UserGroup Japan)
AWSは世界中のインフラを利用可能
カリフォルニアダブリン
シンガポール
東京
オレゴン
AWS を利用開始すれば、世界 7(+1) カ所のリージョン(地域)
17 のアベイラビリティゾーン(データセンター群)30 のエッジロケーションを即座に利用可能
バージニア
サンパウロ
リージョン
エッジローケーション
GovCloud
AWS のサービス群
EC2S3 EBS CloudFront
Route53
AMISQSSnapShot
ELB
VPC
CloudWatch
RDS AutoScaling
DynamoDB
SWF
SES
虎テレ(阪神タイガース公式コンテンツ)
AWS SDK for PHP
AWS SDK for PHP とは?
AWSの各種サービスをPHPで操作するSDK EC2の起動 ディスクのマウント / 拡張 ディスクバックアップ S3へのアップロード ....
PHP を使って、システム運用の自動化も!
EC2
S3
EBS
ELB
AutoScaling
Amazon DynamoDB とは?
・フルマネージドな NoSQL データベース
・超高速・予測可能な一貫したパフォーマンス
・シームレスなスケーラビリティ、そして低コスト
運用管理必要なし
低レイテンシ、 SSD
プロビジョンスループットOriginal
無限に使えるストレージ
DynamoDB Session Handler
DynamoDB を使った、 HTTP のセッション共有SDK にクラスが同梱
EC2DynamoDB
EC2
EC2
ELB 超早い消えない管理不要
require_once 'AWSSDKforPHP/sdk.class.php';
$dynamodb = new AmazonDynamoDB();
// DynamoDB Session Handler 登録$handler = $dynamodb->register_session_handler(array( 'table_name' => 'my-sessions-table'));
session_start();$_SESSION['username'] = 'jeremy';$_SESSION['role'] = 'admin';session_write_close();
AWS Elastic Beanstalk
AWS のサービス群
EC2S3 EBS CloudFront
Route53
AMISQSSnapShot
ELB
VPC
CloudWatch
RDS AutoScaling
DynamoDB
SWF
SES
AWS Elastic Beanstalk とは
Beanstalk = 豆の木 「アプリケーションが実る幹」のイメージ
Web アプリケーションの実行環境を構築・管理 AWS の各種サービスをまとめて管理してくれる
使用可能な言語: PHP 5.3 、 Java ( OpenJDK6 ) , .Net
コンテナとして Apache(PHP) Tomcat IIS をサポート
AWS Elastic Beanstalk とは
利用出来る API の制約・処理時間の制約はない ライブラリやフレームワークの制約もない PHP: ZIP or Git デプロイ
ロードバランサー・オートスケーリング ロードバランサーとオートスケーリングが標準装備 詳細な条件設定が可能
実行環境の設定 仮想サーバスペック、 Apache 設定など 40 項目以
上の設定が可能
AWS Elastic Beanstalk とは
Web アプリケーションのバージョン管理 アプリの世代管理が可能 アプリのロールバック・ロールフォワードが容易
複数環境の構築が可能 本番・テストなど目的別に構築可能
開発・管理ツールを提供 AWS Management Console コマンドラインツール Eclipse プラグイン
開発・管理ツール
AWS Management Console
AWS Toolkit for Eclipse
しくみ
アプリケーション管理の論理構成
Application
Environment Version
ZIPURL Environment Configuration
Configuration Template
Environment
URL Environment Configuration
ZIP
ZIP
ZIP
ZIP
Environment
URL Environment Configuration
用語説明Application トップレベルの論理単位 Application の中に、 Environment や Version が入る デプロイするアプリケーション( PHP アプリ)と混同しやす
いので注意
Environment ConfigurationTemplate を元に構成される PHP ファイルをデプロイする環境 環境毎に URL が付与される
• URL は、 XXX.elasticbeanstalk.com 各環境毎に EC2 、 ELB などが立ち上がる ログも環境毎に取得できる( 1 時間おきに S3 へ送信可能)
用語説明
Version Web アプリケーションのバージョ
ン管理 アプリケーションファイルの履歴
管理が可能 S3 上でファイルを保持 Version で管理した ZIP ファイル
を、各 Environment と紐付け
Environment
テクニカルアーキテクチャ
ManagementConsole
S3
CloudWatch
ElasticLoadBalanceing
EC2
HM
EC2
HM
AutoScaling
Security Group
eclipse
SNS
URL
この環境が自動で構成される
HostManager
HostManager
各 EC 2インスタンス上で動作 Ruby で実装 /opt/elasticbeanstalk/srv/hostmanager/lib/
OS 起動と同時に起動 動作に必要なパラメータは userdata を通じて入手
プロセス起動と監視 Apache 、 Thin(HostManager 用 Web サーバ) の起動 「 Bluepill 」というアプリでプロセスを監視 プロセスが落ちると、プロセスを再起動
HostManager
HostManager
Web アプリケーションの生存確認 ELB からの通信を受け取り、 Web サーバ内部で
Web アプリの生存を確認して返答
ELBHostManager
/_hostmanager/healthcheck
指定 URLを確認
HostManager
ZIP 入れ替え、アプリサーバ再起動、設定反映などの処理 各処理の指示が入った HTTP通信を受け取り、指定の処
理を実行 通信は AES-256 で暗号化 PHP->htdocs に zip展開
HostManager
/_hostmanager/tasks
暗号化データを POST
処理を実行
開発・デプロイ
GitGit をインストール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_deploy_PHP.html
Git でデプロイ
ローカルリポジトリにソースをコミット次のコマンドでデプロイ git aws.push
自動生成された git リポジトリにソースが入るコミット後、リポジトリの中身が丸ごと zip になり S3 へ格納 バージョン付けされる
Hostmanager が zip をデプロイ Apache の htdocs 以下を削除 ->展開
DEMO
Event ログで確認
デプロイ
ステージ毎に環境を分けることが可能 本番用、テスト用、開発用
URL スワップ機能とバージョン機能を利用する
Environment Version
ZIPURL Environment Configuration
Environment
URL Environment Configuration
Environment
URL Environment Configuration
URL を入れ替えることで、テスト済みの環境をそのまま公開できる
デプロイするアプリは自由に
選択出来る
ZIP
ZIP
ZIP
ZIP
各種設定
各種設定
オートスケール設定 最小 /最大サーバ数 配置 AZ スケール時のトリガー
Environment 毎に設定が可能
ロードバランサ HTTP/HTTPS ポート ヘルスチェック設定 セッション Stickey
サーバ設定 インスタンスタイプ セキュリティグルー
プ キーペア 監視間隔 AMI
各種設定(つづき)
HTTP サーバ設定 (PHP) ドキュメントルート位置 メモリ URL Fopen Zlib圧縮 Display Erroes Max Exection Time
ログ設定 S3 へのバックアップ
イベント通知 トピック設定 宛先設定
設定方法
Eclipse,Console いずれでも設定可能
DEMO
他サービスとの連携 /Tips
他サービスとの連携
AWSの他のサービスとの連携は可能 Relational Database Service(RDB サービス )
• Oracle,MySQL Dynamo DB (キーバリューストア) ElastiCache ( memcached) Simple Email Service( メール送信 ) CloudFront (コンテンツ配信) Simple Queue Service( キューイング ) ・・・
他サービスとの連携
DB の接続情報などのパラメータ 設定ファイルか環境変数で設定
さらに使い込むカスタマイズしたマシンイメージの作成が可能 デフォルトで提供されるイメージを元に元に作り込む 常に使うアプリケーションはインストールしておく PHP のライブラリ配置も必要であれば行う OS 起動時に Chef/puppet で初期化など
SSH でログイン可能 障害時の詳細調査 アプリケーションのインストール
デフォルト構成で使用
パラメータ調整他サービスとの連携
イメージカスタマイズSSH 接続
手間
柔軟性
料金
Elastic Beanstalk 自体の利用は \0Environment 構築に伴って利用した 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
まとめ
まとめAWS SDK for PHP でクラウドを API で操れる!
Elastic Beanstalk で、容易に PHP 実行環境の構築が可能 ロードバランサ、スケーリング、通知、アプリバージョン管理が
即利用可能 必要に応じて、パラメータ設定・ SSH ログイン、カスタム AMI
の利用が可能
Git を使用して、実装・設定・デプロイがシームレスに
AWS の他サービスとも連携
PHP開発のお供にAWSを!
47