Top Banner
株株株株株株株株株株株 株株 株株 サササササ ササササササササAWS ElasticBeanstalk
29

サーバ構築・デプロイが簡単に!Elastic beanstalk

Jun 10, 2015

Download

Documents

Hirokazu Ouchi
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: サーバ構築・デプロイが簡単に!Elastic beanstalk

株式会社データクラフト大内 寛和

サーバ構築・デプロイが簡単に!

AWS ElasticBeanstalk

Page 2: サーバ構築・デプロイが簡単に!Elastic beanstalk

大内 寛和 

株式会社データクラフト

・ソフトウェアエンジニア

・写真素材販売サイトの開発・保守

・社内インフラ担当

・受託開発( AWS を利用)

自己紹介

Page 3: サーバ構築・デプロイが簡単に!Elastic beanstalk

・ DevOps

・ Infrastructure as Code

・ Blue-Green Deployment

・ Immutable Infrastructure

最近、よく耳にするキーワード

Page 4: サーバ構築・デプロイが簡単に!Elastic beanstalk

http://www.slideshare.net/AmazonWebServicesJapan/aws-aws-elastic-beanstalk より抜粋

Page 5: サーバ構築・デプロイが簡単に!Elastic beanstalk

よく使うサーバ構成

Elastic LoadBalancer

RDS

EC2

EC2

Page 6: サーバ構築・デプロイが簡単に!Elastic beanstalk

EB サポートするスタック

・ Apache Tomcat for Java

・ Apache HTTP Server for PHP

・ Apache HTTP Server for Python

・ Passenger for Ruby アプリケーション

・ Microsoft IIS 7.5 for .NET

nginx はサポートしていない・・・

Page 7: サーバ構築・デプロイが簡単に!Elastic beanstalk

http://www.slideshare.net/AmazonWebServicesJapan/aws-aws-elastic-beanstalk より抜粋

Page 8: サーバ構築・デプロイが簡単に!Elastic beanstalk

http://www.slideshare.net/AmazonWebServicesJapan/aws-aws-elastic-beanstalk より抜粋

Page 9: サーバ構築・デプロイが簡単に!Elastic beanstalk

デプロイをカスタマイズ

Elastic LoadBalancer

RDS

EC2

EC2

・ DB サーバ起動

・ Web サーバ起動

・ロードバランサ設定

・セキュリティグループ設定

・コードデプロイ

・ DB マイグレーション

・ Apache 停止

・ nginx 起動

・自動テスト

Page 10: サーバ構築・デプロイが簡単に!Elastic beanstalk

全てコードで!

AWS 管理コンソールを使わずにアプリケーションをデプロイ

Page 11: サーバ構築・デプロイが簡単に!Elastic beanstalk

準備 (win ユーザ)

・ AWS Elastic Beanstalk Full Access 権を持つ IAM ユーザを

作成し、セキュリティクレデンシャルをダウンロード

・下記を作業 PC にインストール

- git

- ruby

- AWS Elastic Beanstalk Command Line Tool

→ zip 解凍後、 eb コマンドのパスを環境変数に設定

Page 12: サーバ構築・デプロイが簡単に!Elastic beanstalk

準備 (win ユーザ)

・ AWSDevTools-OneTimeSetup.bat を実行

・ソースコードのディレクトリに移動して、 git init を実行

・ AWSDevTools-RepositorySetup.bat をソースコードの

ディレクトリにコピー

・ AWSDevTools-RepositorySetup.bat を実行する。

→ システムごとに実行すること。

Page 13: サーバ構築・デプロイが簡単に!Elastic beanstalk

利用するコマンド

・ eb init

→ アプリケーションのサーバ構成を設定ファイルに出力

・ eb start

→ 設定ファイルに基づき環境構築、システム起動

・ eb stop

→ 環境削除( EC2 インスタンス、 RDS インスタンスの破棄)

・ eb delete

→ アプリケーション削除

・ git aws.push

→ 環境にソースコードをデプロイ

Page 14: サーバ構築・デプロイが簡単に!Elastic beanstalk

デプロイのカスタマイズ例

Page 15: サーバ構築・デプロイが簡単に!Elastic beanstalk

ソースコードの構成

/

.elasticbeanstalk/

.ebextensions/

css/

image/

js/

app/

index.php

AWSDevTools-RepositorySetup.bat

Web アプリケーション

コンフィグ:デプロイ

コンフィグ:サーバ構成

Page 16: サーバ構築・デプロイが簡単に!Elastic beanstalk

.elasticbeanstalk/

・ config

[global]

AwsAccessKeyId=[ セキュリティクレデンシャルのアクセスキー ]

AwsSecretAccessKey=[ セキュリティクレデンシャルのシークレットキー ]

Region=ap-northeast-1

ServiceEndpoint=https://elasticbeanstalk.ap-northeast-1.amazonaws.com

DevToolsEndpoint=git.elasticbeanstalk.ap-northeast-1.amazonaws.com

ApplicationName=[ アプリケーション名 ]

EnvironmentName=[ 環境名 ]

EnvironmentTier=WebServer::Standard::1.0

EnvironmentType=[SingleInstance or ELB-bound Environment ]

SolutionStack=64bit Amazon Linux 2013.09 running PHP 5.4

RdsEnabled=[Yes or No]

RdsSourceSnapshotName=[ リストアするスナップショット名 ]

RdsDeletionPolicy=[Delete or Snapshot]

InstanceProfileName=[IAM Role]

OptionSettingFile=[optionsettings ファイルのパス ]

Page 17: サーバ構築・デプロイが簡単に!Elastic beanstalk

.elasticbeanstalk/

・ optionsettings

[aws:autoscaling:asg]

Custom Availability Zones=

MaxSize=1

MinSize=1

[aws:autoscaling:launchconfiguration]

EC2KeyName=[key name]

InstanceType=[instance type: t1.micro 等 ]

[aws:autoscaling:updatepolicy:rollingupdate]

RollingUpdateEnabled=false

[aws:ec2:vpc]

DBSubnets=[DBSubnets 2 つ指定する ]

Subnets=[EC2 Subnet]

VPCId=[vpc id]

[aws:elasticbeanstalk:application]

Application Healthcheck URL=/

Page 18: サーバ構築・デプロイが簡単に!Elastic beanstalk

.elasticbeanstalk/

・ optionsettings

[aws:elasticbeanstalk:application:environment]

PARAM1=[ 環境変数に設定したい文字列 ]

PARAM2=

PARAM3=

PARAM4=

PARAM5=

[aws:elasticbeanstalk:container:php:phpini]

allow_url_fopen=On

composer_options=

display_errors=Off

document_root=

max_execution_time=60

memory_limit=256M

zlib.output_compression=Off

[aws:elasticbeanstalk:hostmanager]

LogPublicationControl=false

独自の変数名は追加できないので注意

Page 19: サーバ構築・デプロイが簡単に!Elastic beanstalk

.elasticbeanstalk/

・ optionsettings

[aws:elasticbeanstalk:monitoring]

Automatically Terminate Unhealthy Instances=[ ヘルスチェックエラーでインスタンスを破棄する場合 :true]

[aws:elasticbeanstalk:sns:topics]

Notification Endpoint=[ 通知先のメールアドレス等 ]

Notification Protocol=[email, http 等 ]

[aws:rds:dbinstance]

DBDeletionPolicy=Snapshot

DBEngine=mysql

DBInstanceClass=[RDS instance tpye: t1.micro 等 ]

DBSnapshotIdentifier=

DBUser=[DB ユーザ名 ]

Page 20: サーバ構築・デプロイが簡単に!Elastic beanstalk

.ebextensions/

カスタマイズの内容

・ nginx 、 php-fpm をインストール

・ nginx 、 php-fpm の設定ファイルを出力

・ ElasticBeanstalk の環境変数を PHP から取得できるよう、

OS の環境変数、 fastcgi のパラメータに設定

・デプロイ後、 apache の停止、 nginx 、 php-fpm を起動

Page 21: サーバ構築・デプロイが簡単に!Elastic beanstalk

.ebextensions/

・ nginx 、 php-fpm のインストール、設定ファイル出力

packages:

yum:

nginx: []

php54-fpm: []

files:

"/etc/nginx/nginx.conf" :

mode: "000644"

owner: root

group: root

content: |

[nginx の設定内容を記述 ]

Page 22: サーバ構築・デプロイが簡単に!Elastic beanstalk

.ebextensions/

・ nginx 、 php-fpm のインストール、設定ファイル出力

"/etc/nginx/conf.d/webapp.conf" :

mode: "000644"

owner: root

group: root

content: |

[web サイトの設定内容を記述 ]

"/etc/php-fpm.d/www.conf" :

mode: "000644"

owner: root

group: root

content: |

[php-fpm の設定内容を記述 ]

commands:

00-nginx-permission:

command: "chown -R webapp:webapp /var/lib/nginx"

01-nginx-permission:

command: "chown -R webapp:webapp /var/log/nginx"

Page 23: サーバ構築・デプロイが簡単に!Elastic beanstalk

.ebextensions/

・環境変数を設定するスクリプトファイル

files:

"/opt/elasticbeanstalk/support/set_php_nginx_env.php" :

mode: "000644"

owner: root

group: root

content: |

<?php

// /opt/elasticbeanstalk/support/php_apache_env.php を参考に nginx 用にカスタマイズする

$json = json_decode(file_get_contents('/opt/elasticbeanstalk/deploy/configuration/containerconfiguration'), true);

/*

/opt/elasticbeanstalk/support/envvars.d/appenv に $json の内容を選別して出力

/etc/php.d/environment.ini に $json の内容を選別して出力

/etc/nginx/fastcgi_aws_env に $json の内容を選別して出力

*/

?>

Page 24: サーバ構築・デプロイが簡単に!Elastic beanstalk

.ebextensions/

・環境変数を設定

"/opt/elasticbeanstalk/hooks/appdeploy/pre/99_set_php_nginx_env.sh" :

mode: "000744"

owner: root

group: root

content: |

#!/usr/bin/env bash

. /opt/elasticbeanstalk/support/envvars

php /opt/elasticbeanstalk/support/set_php_nginx_env.php

commands:

01-cp:

command: "cp -f /opt/elasticbeanstalk/hooks/appdeploy/pre/99_set_php_nginx_env.sh

/opt/elasticbeanstalk/hooks/configdeploy/pre/"

アプリケーションのデプロイ前に実行

EB の設定変更時に、環境変数を再読み込み

Page 25: サーバ構築・デプロイが簡単に!Elastic beanstalk

.ebextensions/

・デプロイ後の処理( DB マイグレーション、自動テスト)

files:

"/opt/elasticbeanstalk/hooks/appdeploy/enact/97_migrate.sh" :

mode: "000744"

owner: root

group: root

content: |

[DB マイグレーションを行う ]

"/opt/elasticbeanstalk/hooks/appdeploy/enact/98_test.sh" :

mode: "000744"

owner: root

group: root

content: |

[ 自動テスト (PHPUnit による単体テスト)を行う ]

Page 26: サーバ構築・デプロイが簡単に!Elastic beanstalk

.ebextensions/

・デプロイ後の処理( apache 停止→ php-fpm 、 nginx 起動)

"/opt/elasticbeanstalk/hooks/appdeploy/enact/99_reload_app_server.sh" :

mode: "000744"

owner: root

group: root

content: |

#!/usr/bin/env bash

. /opt/elasticbeanstalk/support/envvars

/etc/init.d/httpd stop

/etc/init.d/nginx stop

/etc/init.d/php-fpm stop

/etc/init.d/php-fpm start

/etc/init.d/nginx start

Page 27: サーバ構築・デプロイが簡単に!Elastic beanstalk

.ebextensions/

・ EB の設定変更時に、 DB マイグレーション、自動テスト、

AP サーバの再起動を行う

commands:

01-cp:

command: "cp -f /opt/elasticbeanstalk/hooks/appdeploy/enact/97_migrate.sh

/opt/elasticbeanstalk/hooks/configdeploy/enact/"

02-cp:

command: "cp -f /opt/elasticbeanstalk/hooks/appdeploy/enact/98_test.sh

/opt/elasticbeanstalk/hooks/configdeploy/enact/"

03-cp:

command: "cp -f /opt/elasticbeanstalk/hooks/appdeploy/enact/99_reload_app_server.sh

/opt/elasticbeanstalk/hooks/configdeploy/enact/"

Page 28: サーバ構築・デプロイが簡単に!Elastic beanstalk

まとめ

・ ElasticBeanstalk を使えば、サーバ構築、デプロイが非常に

簡単な作業となる。

→ 一度、設定ファイルを作成してしまえば、類似の環境を

簡単に作成できる

・コンフィグレーションにより、お好みの環境を用意することができ

る。

→ 設定が細かくなる場合は、 Chef や CloudFormation 、

OpsWorks を利用したほうがよい

→ 今回の事例は、 OpsWorks のほうがよいかもしれない・・・

Page 29: サーバ構築・デプロイが簡単に!Elastic beanstalk

参考

・ [AWS マイスターシリーズ ] AWS Elastic Beanstalk

http://www.slideshare.net/AmazonWebServicesJapan/aws-aws-elastic-beanstalk

・華麗なる Elastic Beanstalk での環境構築

http://www.slideshare.net/dateofrock/net-cobol20130222

・ 2 秒で設定! AWS Elastic Beanstalk によるオートスケール

アウトなサーバー構築

http://dx.24-7.co.jp/beanstalk/

・ AWS の Elastic Beanstalk で「 php5.4 」「 nginx 」環境を作る

http://lab.sonicmoov.com/development/elastic-beanstalk/