PHP on Cloud

Preview:

Citation preview

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