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

4,949 views

Published on

0 Comments
9 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
4,949
On SlideShare
0
From Embeds
0
Number of Embeds
103
Actions
Shares
0
Downloads
16
Comments
0
Likes
9
Embeds 0
No embeds

No notes for slide

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

  1. 1. サーバ構築・デプロイが簡単に! AWS ElasticBeanstalk 株式会社データクラフト 大内 寛和
  2. 2. 自己紹介 大内 寛和 株式会社データクラフト ・ソフトウェアエンジニア ・写真素材販売サイトの開発・保守 ・社内インフラ担当 ・受託開発(AWSを利用)
  3. 3. 最近、よく耳にするキーワード ・DevOps ・Infrastructure as Code ・Blue-Green Deployment ・Immutable Infrastructure
  4. 4. http://www.slideshare.net/AmazonWebServicesJapan/aws-aws-elastic-beanstalk より抜粋
  5. 5. よく使うサーバ構成 EC2 RDS Elastic Load Balancer EC2
  6. 6. 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はサポートしていない・・・
  7. 7. http://www.slideshare.net/AmazonWebServicesJapan/aws-aws-elastic-beanstalk より抜粋
  8. 8. http://www.slideshare.net/AmazonWebServicesJapan/aws-aws-elastic-beanstalk より抜粋
  9. 9. デプロイをカスタマイズ ・DBサーバ起動 ・Webサーバ起動 ・ロードバランサ設定 EC2 ・セキュリティグループ設定 RDS Elastic Load Balancer ・コードデプロイ EC2 ・DBマイグレーション ・Apache停止 ・nginx起動 ・自動テスト
  10. 10. 全てコードで! AWS管理コンソールを使わずに アプリケーションをデプロイ
  11. 11. 準備 (winユーザ) ・AWS Elastic Beanstalk Full Access 権を持つIAMユーザを 作成し、セキュリティクレデンシャルをダウンロード ・下記を作業PCにインストール - git - ruby - AWS Elastic Beanstalk Command Line Tool → zip解凍後、ebコマンドのパスを環境変数に設定
  12. 12. 準備 (winユーザ) ・AWSDevTools-OneTimeSetup.batを実行 ・ソースコードのディレクトリに移動して、git init を実行 ・AWSDevTools-RepositorySetup.batをソースコードの ディレクトリにコピー ・AWSDevTools-RepositorySetup.bat を実行する。 → システムごとに実行すること。
  13. 13. 利用するコマンド ・eb init → アプリケーションのサーバ構成を設定ファイルに出力 ・eb start → 設定ファイルに基づき環境構築、システム起動 ・eb stop → 環境削除(EC2インスタンス、RDSインスタンスの破棄) ・eb delete → アプリケーション削除 ・git aws.push → 環境にソースコードをデプロイ
  14. 14. デプロイのカスタマイズ例
  15. 15. ソースコードの構成 / .elasticbeanstalk/ コンフィグ:サーバ構成 .ebextensions/ コンフィグ:デプロイ css/ image/ js/ Webアプリケーション app/ index.php AWSDevTools-RepositorySetup.bat
  16. 16. .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ファイルのパス]
  17. 17. .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=/
  18. 18. .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
  19. 19. .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ユーザ名]
  20. 20. .ebextensions/ カスタマイズの内容 ・nginx、php-fpmをインストール ・nginx、php-fpmの設定ファイルを出力 ・ElasticBeanstalkの環境変数をPHPから取得できるよう、 OSの環境変数、fastcgiのパラメータに設定 ・デプロイ後、apacheの停止、nginx、php-fpmを起動
  21. 21. .ebextensions/ ・nginx、php-fpmのインストール、設定ファイル出力 packages: yum: nginx: [] php54-fpm: [] files: "/etc/nginx/nginx.conf" : mode: "000644" owner: root group: root content: | [nginxの設定内容を記述]
  22. 22. .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"
  23. 23. .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の内容を選別して出力 */ ?>
  24. 24. .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: EBの設定変更時に、環境変数を再読み込み command: "cp -f /opt/elasticbeanstalk/hooks/appdeploy/pre/99_set_php_nginx_env.sh /opt/elasticbeanstalk/hooks/configdeploy/pre/"
  25. 25. .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による単体テスト)を行う]
  26. 26. .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
  27. 27. .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/"
  28. 28. まとめ ・ElasticBeanstalkを使えば、サーバ構築、デプロイが非常に 簡単な作業となる。 → 一度、設定ファイルを作成してしまえば、類似の環境を 簡単に作成できる ・コンフィグレーションにより、お好みの環境を用意することができ る。 → 設定が細かくなる場合は、ChefやCloudFormation、 OpsWorksを利用したほうがよい → 今回の事例は、OpsWorksのほうがよいかもしれない・・・
  29. 29. 参考 ・ [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/

×