29
株株株株株株株株株株株 株株 株株 サササササ ササササササササAWS ElasticBeanstalk

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

Embed Size (px)

Citation preview

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/