サイトアイコン puti se blog

AWS Beanstalkとは、一体どんなことが出来るの?

アプリケーションのデプロイ環境として、AWSから提供されるBeanstalkですが、
インフラ技術者から見たら、一体どんなことが出来るのでしょうか?

結論、簡単なシステム構成なら、簡単に構築でき、簡単にアプリケーションもデプロイ管理出来る仕組み

インフラ構築者目線で見た時に、Beanstalkを一番初めに気が付くのは

「簡単にインフラ構築が出来る」

という点です。
ただし、システム構成はAWSのテンプレートAMIを利用した簡単な良くあるシステム構成である前提ですけど。

Beanstalkのインフラ構築ではどんな設定が出来るの?

と言ったことがBeanstalk構築時に設定できます。
VPCもデフォルトVPC以外にも配置が出来ます。

EC2はどれだけカスタマイズ出来る?アンチウィルスソフトやログ収集

インスタンスのAMIは選択肢は無く、AWSから提供されたテンプレートAMIのみです(プラットフォーム)。
しかし、アプリケーションのデプロイ操作である

でコマンドで実施できるものなら、インストールから設定変更まで何でもカスタマイズ可能です。

アプリケーションコードやアップローとデプロイ(デプロイZip)ではどのようなフォーマットのzipをアップロードすれば良いか?

ここがBeanstalkを理解する上で最も大変で調べが必要な部分ですね。
まず、デプロイZipの中身はデプロイされると基本的にすべて各アプリケーションのドキュメントルートにコピーされます。

例えば、プラットフォームとしてphpを選択した場合は、
EC2上の「/var/www/html/」がapacheでのドキュメントルートになっているため、デプロイZipは展開されすべて
「/var/www/html/」 にコピーされます。

重要!カスタマイズの鍵は「.ebextensions」フォルダ内

カスタマイズで重要なのは「.ebextensions」フォルダ内です。
こちらのファイルは、yamlもしくはjsonで記載をするのですが、こちらでどんなことが出来るかというと
例えば、

から

等、何でも出来てしまいます。しかし、インフラ構築を自動化しておくという作業がポイントです。

設定ファイル (.ebextensions) による高度な環境のカスタマイズ - AWS Elastic Beanstalk

Apacheのドキュメントルートに対し
「.ebextensions」 のコマンド出力が実施できなかった!?

「.ebextensions」でApacheの設定ファイル(/etc/httpd/conf.d/test.conf)を追加することは 出来ましたが、
「.ebextensions」 で、コマンド実行した出力を「/var/www/html/」に出力させることが出来ませんでした。

その理由は、AWS内でデプロイ実施の自動作業と順番に関係するようです。
ドキュメントルートにコマンド出力しても自動作業内で削除されてしまっていたようです。

デプロイの自動作業と順番。コマンド発行順

これは正確な情報と、試した結果の経験則が混ざっているのですが、今までアップロードされたバージョンのデプロイZipはすべて管理されており、

といった順番で実行されているようです。
さらに、デプロイZipをコピー・配置する作業前後で以下のディレクトリにシェルスクリプトを配置することでコマンドが実行できます。(hookスクリプト)

上記、パスに「.ebextensions」でシェルスクリプトを配置しておいてあげれば実施されます。

なかなか何でもカスタマイズ出来る気がしてきましたね!
ただし、ここまでカスタマイズするとBeanstalkは簡単にインフラを構築できる仕組みとは言えなくなってきますので注意が必要です。

プラットフォームフック - AWS Elastic Beanstalk
Elastic Beanstalk メモ - Qiita

参考: /opt/elasticbeanstalk/hooks/ 配下のファイル

/opt/elasticbeanstalk/hooks/configdeploy/enact/99_reload_app_server.sh
/opt/elasticbeanstalk/hooks/configdeploy/enact/.gitignore
/opt/elasticbeanstalk/hooks/configdeploy/pre/10_setup_envvars.sh
/opt/elasticbeanstalk/hooks/configdeploy/pre/.gitignore
/opt/elasticbeanstalk/hooks/configdeploy/pre/20_configure_php.sh
/opt/elasticbeanstalk/hooks/configdeploy/post/.gitignore
/opt/elasticbeanstalk/hooks/appdeploy/enact/99_reload_app_server.sh
/opt/elasticbeanstalk/hooks/appdeploy/enact/01_flip.sh
/opt/elasticbeanstalk/hooks/appdeploy/enact/.gitignore
/opt/elasticbeanstalk/hooks/appdeploy/pre/01_unzip.sh
/opt/elasticbeanstalk/hooks/appdeploy/pre/02_setup_envvars.sh /opt/elasticbeanstalk/hooks/appdeploy/pre/12_update_permissions.sh
/opt/elasticbeanstalk/hooks/appdeploy/pre/05_configure_php.sh
/opt/elasticbeanstalk/hooks/appdeploy/pre/.gitignore /opt/elasticbeanstalk/hooks/appdeploy/pre/10_composer_install.sh
/opt/elasticbeanstalk/hooks/appdeploy/post/01_monitor_httpd_pid.sh
/opt/elasticbeanstalk/hooks/appdeploy/post/.gitignore
/opt/elasticbeanstalk/hooks/postinit/.gitignore
/opt/elasticbeanstalk/hooks/preinit/02_web_user.sh
/opt/elasticbeanstalk/hooks/preinit/04_configure_php.sh
/opt/elasticbeanstalk/hooks/preinit/22_pear.sh
/opt/elasticbeanstalk/hooks/preinit/30_permissions.sh
/opt/elasticbeanstalk/hooks/preinit/01_setup_envvars.sh
/opt/elasticbeanstalk/hooks/preinit/05_composer.sh
/opt/elasticbeanstalk/hooks/preinit/.gitignore
/opt/elasticbeanstalk/hooks/preinit/11_logging.sh
/opt/elasticbeanstalk/hooks/preinit/03_packages.sh
/opt/elasticbeanstalk/hooks/preinit/10_layout.sh
/opt/elasticbeanstalk/hooks/preinit/23_apache.sh
/opt/elasticbeanstalk/hooks/.gitignore
/opt/elasticbeanstalk/hooks/restartappserver/enact/01_restart.sh /opt/elasticbeanstalk/hooks/restartappserver/enact/.gitignore /opt/elasticbeanstalk/hooks/restartappserver/pre/10_configure_php.sh
/opt/elasticbeanstalk/hooks/restartappserver/pre/.gitignore /opt/elasticbeanstalk/hooks/restartappserver/post/.gitignore

モバイルバージョンを終了